From ce50f181f1a9cf4267d8586261caeb14d4d9bc6d Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 19 Mar 2026 16:46:06 -0700 Subject: [PATCH] Add an interface for initialization of `var`s without an explicit initializer (#6934) When a `var` is not explicitly given an initializer, initialize it in one of two ways: * If its type implements the new interface `Core.Default`, call `Core.Default.Op` to initialize it. * Otherwise, if its type implements `UnformedInit`, leave it in an unformed state. For now, this is always an uninitialized state, but that will change in the future. * If neither of those apply, the `var` declaration is ill-formed. This is a step towards implementing leads decision #6739 and proposals #257 and #5913. Assisted-by: Gemini 3.1 Pro via Antigravity --------- Co-authored-by: Geoff Romer --- core/prelude.carbon | 1 + core/prelude/default.carbon | 54 + core/prelude/types/char.carbon | 3 + core/prelude/types/cpp/int.carbon | 6 + core/prelude/types/cpp/nullptr.carbon | 11 +- core/prelude/types/float.carbon | 3 + core/prelude/types/int.carbon | 3 + core/prelude/types/maybe_unformed.carbon | 3 + core/prelude/types/optional.carbon | 23 +- core/prelude/types/string.carbon | 3 + core/prelude/types/uint.carbon | 3 + examples/advent2024/day10_common.carbon | 2 + examples/advent2024/day10_part1.carbon | 2 + examples/advent2024/day10_part2.carbon | 2 + examples/advent2024/day11_part2.carbon | 2 + examples/advent2024/day12_common.carbon | 4 + examples/advent2024/day13_common.carbon | 2 + examples/advent2024/day14_common.carbon | 2 + examples/advent2024/day15_common.carbon | 2 + examples/advent2024/day4_common.carbon | 2 + examples/advent2024/day5_common.carbon | 4 + examples/advent2024/day6_common.carbon | 2 + examples/advent2024/day7_common.carbon | 2 + examples/advent2024/day8_common.carbon | 2 + examples/advent2024/day9_common.carbon | 2 + examples/interop/cpp/socket.carbon | 5 +- examples/sieve.carbon | 2 + toolchain/check/core_identifier.def | 1 + toolchain/check/eval.cpp | 1 + toolchain/check/handle_let_and_var.cpp | 85 +- toolchain/check/testdata/alias/import.carbon | 149 +- toolchain/check/testdata/array/basics.carbon | 30 + .../check/testdata/as/maybe_unformed.carbon | 3 + .../testdata/basics/dump_sem_ir_ranges.carbon | 10 +- .../basics/duplicate_name_same_line.carbon | 28 +- .../basics/raw_sem_ir/one_file.carbon | 4257 +++++++++-------- .../testdata/builtins/float/make_type.carbon | 5 + .../builtins/maybe_unformed/make_type.carbon | 44 +- .../testdata/class/abstract/abstract.carbon | 1 + .../abstract/fail_abstract_in_struct.carbon | 30 + .../abstract/fail_abstract_in_tuple.carbon | 5 + .../check/testdata/class/destroy_calls.carbon | 76 +- .../testdata/class/field/field_access.carbon | 21 + .../class/field/field_access_in_value.carbon | 21 + .../check/testdata/class/generic/call.carbon | 56 + .../testdata/class/generic/stringify.carbon | 41 + toolchain/check/testdata/class/import.carbon | 21 +- .../testdata/class/import_member_cycle.carbon | 26 +- .../testdata/class/import_struct_cycle.carbon | 35 +- .../check/testdata/class/method/method.carbon | 23 +- .../class/method/static_method.carbon | 21 + toolchain/check/testdata/class/nested.carbon | 67 +- .../check/testdata/class/nested_name.carbon | 23 +- .../testdata/class/self/raw_self_type.carbon | 23 +- .../testdata/class/self/self_type.carbon | 24 +- .../check/testdata/eval/aggregates.carbon | 110 +- toolchain/check/testdata/eval/call.carbon | 2 +- .../testdata/function/builtin/call.carbon | 26 + .../testdata/function/builtin/method.carbon | 26 + .../check/testdata/function/call/ref.carbon | 19 + .../definition/fail_local_decl.carbon | 117 +- .../function/generic/resolve_used.carbon | 57 +- .../function/generic/type_param.carbon | 37 +- .../testdata/generic/call_basic_depth.carbon | 4 +- .../testdata/generic/complete_type.carbon | 234 +- .../generic/extend_type_completion.carbon | 34 +- toolchain/check/testdata/global/basics.carbon | 31 +- .../testdata/interface/as_type_of_type.carbon | 55 +- .../interface/fail_member_lookup.carbon | 1 + .../testdata/interface/generic_method.carbon | 32 +- .../check/testdata/interface/import.carbon | 31 +- .../testdata/interop/cpp/builtins.carbon | 18 +- .../interop/cpp/function/class.carbon | 36 +- .../interop/cpp/function/decayed_param.carbon | 82 +- .../interop/cpp/function/reference.carbon | 98 +- .../interop/cpp/function/struct.carbon | 36 +- .../interop/cpp/function/union.carbon | 36 +- .../check/testdata/interop/cpp/import.carbon | 1 + .../cpp/template/argument_count.carbon | 84 +- .../cpp/template/non_type_param.carbon | 35 +- .../template/template_template_param.carbon | 36 +- .../interop/cpp/template/type_param.carbon | 80 +- .../check/testdata/let/generic_import.carbon | 1 + .../named_constraint/invalid_members.carbon | 8 +- .../merging_with_indirections.carbon | 23 +- .../fail_and_or_partial_constant.carbon | 4 + .../fail_assignment_to_non_assignable.carbon | 20 + .../fail_conflict_no_namespaces.carbon | 25 + .../packages/fail_import_type_error.carbon | 9 + .../testdata/packages/missing_prelude.carbon | 12 + .../check/testdata/patterns/tuple.carbon | 5 +- .../testdata/pointer/fail_deref_type.carbon | 7 + .../testdata/primitives/type_literals.carbon | 150 + .../struct/fail_nested_incomplete.carbon | 1 + .../testdata/struct/fail_value_as_type.carbon | 6 + .../check/testdata/tuple/tuple_pattern.carbon | 32 +- toolchain/check/testdata/var/decl.carbon | 70 - .../check/testdata/var/decl_with_init.carbon | 74 - .../check/testdata/var/export_name.carbon | 54 +- .../var/fail_lookup_outside_scope.carbon | 74 +- .../check/testdata/var/fail_modifiers.carbon | 82 +- .../var/fail_namespace_conflict.carbon | 49 +- .../check/testdata/var/global_decl.carbon | 30 +- .../testdata/var/global_decl_import.carbon | 66 +- .../check/testdata/var/initialization.carbon | 146 + .../compile/optimize/optimize_debug.carbon | 8 +- .../compile/optimize/optimize_default.carbon | 8 +- .../compile/optimize/optimize_none.carbon | 20 +- .../compile/optimize/optimize_size.carbon | 20 +- .../compile/optimize/optimize_speed.carbon | 8 +- toolchain/lower/handle_call.cpp | 6 + toolchain/lower/testdata/array/iterate.carbon | 70 +- toolchain/lower/testdata/for/bindings.carbon | 36 +- .../lower/testdata/for/break_continue.carbon | 70 +- toolchain/lower/testdata/for/for.carbon | 70 +- .../function/generic/call_basic.carbon | 8 + .../function/generic/call_basic_depth.carbon | 1 + .../function/generic/call_dedup_ptr.carbon | 3 + .../function/generic/call_deref_ptr.carbon | 2 + .../call_different_associated_const.carbon | 2 + .../generic/call_different_specific.carbon | 216 +- .../generic/call_recursive_basic.carbon | 10 +- .../generic/call_recursive_diamond.carbon | 6 +- .../generic/call_recursive_mutual.carbon | 6 +- .../generic/call_recursive_reorder.carbon | 110 +- .../call_recursive_reorder_more.carbon | 17 +- .../generic/call_recursive_sccs_deep.carbon | 6 +- .../generic/call_specific_in_class.carbon | 3 + .../function/generic/reverse_canonical.carbon | 9 + .../function/generic/self_canonical.carbon | 12 +- toolchain/lower/testdata/global/decl.carbon | 15 + .../lower/testdata/impl/import_facet.carbon | 15 +- .../lower/testdata/interop/cpp/nullptr.carbon | 10 +- .../testdata/interop/cpp/parameters.carbon | 11 + .../lower/testdata/interop/cpp/pointer.carbon | 29 +- .../testdata/interop/cpp/reference.carbon | 2 + .../lower/testdata/interop/cpp/void.carbon | 74 +- .../lower/testdata/operators/increment.carbon | 20 +- .../testdata/primitives/int_types.carbon | 74 +- .../lower/testdata/primitives/optional.carbon | 102 +- .../lower/testdata/var/uninitialized.carbon | 72 + toolchain/sem_ir/builtin_function_kind.cpp | 3 + toolchain/sem_ir/builtin_function_kind.def | 3 + .../testdata/min_prelude/parts/as.carbon | 2 + .../testdata/min_prelude/parts/default.carbon | 15 + .../min_prelude/parts/optional.carbon | 2 + 146 files changed, 5226 insertions(+), 3535 deletions(-) create mode 100644 core/prelude/default.carbon delete mode 100644 toolchain/check/testdata/var/decl.carbon delete mode 100644 toolchain/check/testdata/var/decl_with_init.carbon create mode 100644 toolchain/check/testdata/var/initialization.carbon create mode 100644 toolchain/lower/testdata/var/uninitialized.carbon create mode 100644 toolchain/testing/testdata/min_prelude/parts/default.carbon diff --git a/core/prelude.carbon b/core/prelude.carbon index dfe0ad409d0c..925dc8bd87a4 100644 --- a/core/prelude.carbon +++ b/core/prelude.carbon @@ -7,6 +7,7 @@ package Core library "prelude"; export import library "prelude/copy"; +export import library "prelude/default"; export import library "prelude/destroy"; export import library "prelude/iterate"; export import library "prelude/operators"; diff --git a/core/prelude/default.carbon b/core/prelude/default.carbon new file mode 100644 index 000000000000..d66995764787 --- /dev/null +++ b/core/prelude/default.carbon @@ -0,0 +1,54 @@ +// 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 + +package Core library "prelude/default"; + +import library "prelude/types/bool"; +import library "prelude/types/int_literal"; + +// Provides the default value of an object. If implemented for a type `T`, this +// is used to initialize declarations without an explicit initializer, such as +// `var x: T;`, and leaves them in a fully-formed state. +interface Default { fn Op() -> Self; } + +// Indicates that a type permits unformed initialization, which leaves the +// object in a state where calling the destructor is valid but optional, and no +// other operations on the object except for reinitialization are permitted. +interface UnformedInit { + // TODO: This should probably be: + // let StructT:! type; + // fn Op() -> StructT; + // and should be able to initialize a subset of the fields. For now we always + // leave the object uninitialized when it is in an unformed state. + // See https://github.com/carbon-language/carbon-lang/pull/5913 +} + +// Implementations for some builtin types. These need to be here to satisfy the +// orphan rule because these builtin types have no associated library of their +// own. +impl bool as UnformedInit {} +impl forall [T:! type] T* as UnformedInit {} +impl forall [T:! UnformedInit, N:! IntLiteral()] array(T, N) as UnformedInit {} +// TODO: Generalize these to apply to tuples and structs containing only +// `UnformedInit` types. +impl () as UnformedInit {} +impl {} as UnformedInit {} + +// Provides a default, possibly unformed, value of an object. This should not be +// implemented directly. Instead, implement `Default` to provide a fully-formed +// state or (eventually) `UnformedInit` to provide an unformed state. +interface DefaultOrUnformed { + // TODO: This should return `MaybeUnformed(Self)` once that is supported. + fn Op() -> Self; +} + +final impl forall [T:! Default] T as DefaultOrUnformed { + fn Op() -> Self { + return T.Op(); + } +} + +impl forall [T:! UnformedInit] T as DefaultOrUnformed { + fn Op() -> Self = "make_uninitialized"; +} diff --git a/core/prelude/types/char.carbon b/core/prelude/types/char.carbon index 74f3ac81e13d..32a90f26fb80 100644 --- a/core/prelude/types/char.carbon +++ b/core/prelude/types/char.carbon @@ -5,6 +5,7 @@ package Core library "prelude/types/char"; import library "prelude/copy"; +import library "prelude/default"; import library "prelude/destroy"; import library "prelude/operators"; import library "prelude/types/uint"; @@ -17,6 +18,8 @@ class Char { adapt u8; } +impl Char as UnformedInit {} + impl Char as Copy { fn Op[self: Self]() -> Self = "primitive_copy"; } diff --git a/core/prelude/types/cpp/int.carbon b/core/prelude/types/cpp/int.carbon index febf0b384887..b11c73a957fd 100644 --- a/core/prelude/types/cpp/int.carbon +++ b/core/prelude/types/cpp/int.carbon @@ -5,6 +5,7 @@ package Core library "prelude/types/cpp/int"; import library "prelude/copy"; +import library "prelude/default"; import library "prelude/operators"; import library "prelude/types/int"; import library "prelude/types/int_literal"; @@ -28,6 +29,11 @@ class CppCompat.ULongLong64 { adapt u64; } +impl CppCompat.Long32 as UnformedInit {} +impl CppCompat.ULong32 as UnformedInit {} +impl CppCompat.LongLong64 as UnformedInit {} +impl CppCompat.ULongLong64 as UnformedInit {} + // Copy impl CppCompat.Long32 as Copy { diff --git a/core/prelude/types/cpp/nullptr.carbon b/core/prelude/types/cpp/nullptr.carbon index 3535443b0997..e4542ce02c5b 100644 --- a/core/prelude/types/cpp/nullptr.carbon +++ b/core/prelude/types/cpp/nullptr.carbon @@ -5,6 +5,7 @@ package Core library "prelude/types/cpp/nullptr"; import library "prelude/copy"; +import library "prelude/default"; import library "prelude/destroy"; import library "prelude/operators/as"; import library "prelude/types/cpp/void"; @@ -29,9 +30,13 @@ class CppCompat.NullptrT { // TODO: Give this type a custom empty value representation. adapt MaybeUnformed(VoidBase*); + // TODO: This should be just + // fn Make() -> Self = "make_uninitialized"; + // but we don't yet delay processing builtin function definitions until the + // end of the enclosing class. fn Make() -> Self { - returned var s: Self; - return var; + fn MakeImpl() -> Self = "make_uninitialized"; + return MakeImpl(); } impl as Copy { @@ -48,3 +53,5 @@ class CppCompat.NullptrT { } } } + +impl CppCompat.NullptrT as UnformedInit {} diff --git a/core/prelude/types/float.carbon b/core/prelude/types/float.carbon index 75316b8963ba..96bf640a7236 100644 --- a/core/prelude/types/float.carbon +++ b/core/prelude/types/float.carbon @@ -5,6 +5,7 @@ package Core library "prelude/types/float"; import library "prelude/copy"; +import library "prelude/default"; import library "prelude/destroy"; import library "prelude/operators"; import library "prelude/types/float_literal"; @@ -16,6 +17,8 @@ class Float(N:! IntLiteral()) { adapt MakeFloat(N); } +impl forall [N:! IntLiteral()] Float(N) as UnformedInit {} + // Copy. impl forall [N:! IntLiteral()] Float(N) as Copy { diff --git a/core/prelude/types/int.carbon b/core/prelude/types/int.carbon index 97d047d4dbe6..075ec91fae42 100644 --- a/core/prelude/types/int.carbon +++ b/core/prelude/types/int.carbon @@ -5,6 +5,7 @@ package Core library "prelude/types/int"; import library "prelude/copy"; +import library "prelude/default"; import library "prelude/destroy"; import library "prelude/operators"; import library "prelude/types/int_literal"; @@ -15,6 +16,8 @@ class Int(N:! IntLiteral()) { adapt MakeInt(N); } +impl forall [N:! IntLiteral()] Int(N) as UnformedInit {} + // Copy. impl forall [N:! IntLiteral()] Int(N) as Copy { diff --git a/core/prelude/types/maybe_unformed.carbon b/core/prelude/types/maybe_unformed.carbon index 5148077a2b76..b7de2f9da2a9 100644 --- a/core/prelude/types/maybe_unformed.carbon +++ b/core/prelude/types/maybe_unformed.carbon @@ -4,6 +4,7 @@ package Core library "prelude/types/maybe_unformed"; +import library "prelude/default"; import library "prelude/destroy"; private fn MakeMaybeUnformed(t: type) -> type = "maybe_unformed.make_type"; @@ -12,3 +13,5 @@ private fn MakeMaybeUnformed(t: type) -> type = "maybe_unformed.make_type"; class MaybeUnformed(T:! Destroy) { adapt MakeMaybeUnformed(T); } + +impl forall [T:! Destroy] MaybeUnformed(T) as UnformedInit {} diff --git a/core/prelude/types/optional.carbon b/core/prelude/types/optional.carbon index a9e4b7a26db4..7ebb2e82bcd5 100644 --- a/core/prelude/types/optional.carbon +++ b/core/prelude/types/optional.carbon @@ -5,6 +5,7 @@ package Core library "prelude/types/optional"; import library "prelude/copy"; +import library "prelude/default"; import library "prelude/destroy"; import library "prelude/operators/as"; import library "prelude/operators/bitwise"; @@ -40,6 +41,8 @@ class Optional(T:! OptionalStorage) { adapt T.Type; } +impl forall [T:! OptionalStorage & UnformedInit] Optional(T) as UnformedInit {} + // Support for converting a `T` to an `Optional(U)` if `T` converts to `U`. // Once we have match_first, this can be rewritten more simply as: // @@ -105,17 +108,23 @@ private class DefaultOptionalStorage(T:! Copy & Destroy) { var has_value: bool; } +private fn MakeUninitializedOptionalStorage(T:! Copy & Destroy) + -> DefaultOptionalStorage(T) = "make_uninitialized"; + impl forall [T:! Copy & Destroy] T as OptionalStorage where .Type = DefaultOptionalStorage(T) { fn None() -> DefaultOptionalStorage(T) { - returned var me: DefaultOptionalStorage(T); + returned var me: DefaultOptionalStorage(T) = + MakeUninitializedOptionalStorage(T); me.has_value = false; return var; } fn Some[self: Self]() -> DefaultOptionalStorage(T) { - returned var me: DefaultOptionalStorage(T); - // TODO: Should be: - // me.value = self as MaybeUnformed(T); + // TODO: This whole function should be just + // return {.value = self, .has_value = true}; + // but that requires that `T` implements `ImplicitAs(MaybeUnformed(T))`. + returned var me: DefaultOptionalStorage(T) = + MakeUninitializedOptionalStorage(T); me.value unsafe as T = self; me.has_value = true; return var; @@ -130,13 +139,17 @@ impl forall [T:! Copy & Destroy] T as OptionalStorage private fn PointerIsNull[T:! type](value: MaybeUnformed(T*)) -> bool = "pointer.is_null"; +private fn MakeUninitializedOptionalPointer(T:! type) + -> MaybeUnformed(T*) = "make_uninitialized"; + // For pointers, we use a null pointer value as the "None" value. This allows // `Optional(T*)` to be ABI-compatible with a C++ nullable pointer. final impl forall [T:! type] T* as OptionalStorage where .Type = MaybeUnformed(T*) { fn None() -> MaybeUnformed(T*) = "pointer.make_null"; fn Some[self: Self]() -> MaybeUnformed(T*) { - returned var result: MaybeUnformed(T*); + returned var result: MaybeUnformed(T*) = + MakeUninitializedOptionalPointer(T); result unsafe as T* = self; return var; } diff --git a/core/prelude/types/string.carbon b/core/prelude/types/string.carbon index f86b87ac9137..1aec86a46314 100644 --- a/core/prelude/types/string.carbon +++ b/core/prelude/types/string.carbon @@ -5,6 +5,7 @@ package Core library "prelude/types/string"; import library "prelude/copy"; +import library "prelude/default"; import library "prelude/destroy"; import library "prelude/types/char"; import library "prelude/types/uint"; @@ -24,6 +25,8 @@ class String { private var size: u64; } +impl String as UnformedInit {} + impl forall [T:! ImplicitAs(i64)] String as IndexWith(T) where .ElementType = Char { fn At[self: Self](subscript: T) -> Char = "string.at"; } diff --git a/core/prelude/types/uint.carbon b/core/prelude/types/uint.carbon index 971b618b52cd..0d636cb85d00 100644 --- a/core/prelude/types/uint.carbon +++ b/core/prelude/types/uint.carbon @@ -5,6 +5,7 @@ package Core library "prelude/types/uint"; import library "prelude/copy"; +import library "prelude/default"; import library "prelude/destroy"; import library "prelude/operators"; import library "prelude/types/int"; @@ -16,6 +17,8 @@ class UInt(N:! IntLiteral()) { adapt MakeUInt(N); } +impl forall [N:! IntLiteral()] UInt(N) as UnformedInit {} + // Copy. impl forall [N:! IntLiteral()] UInt(N) as Copy { diff --git a/examples/advent2024/day10_common.carbon b/examples/advent2024/day10_common.carbon index c468a594e15e..ceeeea68f9d2 100644 --- a/examples/advent2024/day10_common.carbon +++ b/examples/advent2024/day10_common.carbon @@ -11,6 +11,8 @@ import Core library "range"; import library "io_utils"; class Terrain { + impl as Core.UnformedInit {} + fn Read() -> Terrain { returned var me: Terrain; for (y: i32 in Core.Range(43)) { diff --git a/examples/advent2024/day10_part1.carbon b/examples/advent2024/day10_part1.carbon index fb964b3a5014..415ffcb1f8c2 100644 --- a/examples/advent2024/day10_part1.carbon +++ b/examples/advent2024/day10_part1.carbon @@ -24,6 +24,8 @@ fn PopCount(n: u256) -> i32 { } class Reachable { + impl as Core.UnformedInit {} + fn Make(terrain: Terrain) -> Reachable { returned var me: Reachable; var next: u256 = 1; diff --git a/examples/advent2024/day10_part2.carbon b/examples/advent2024/day10_part2.carbon index aa46180a7a26..7be36ffc047e 100644 --- a/examples/advent2024/day10_part2.carbon +++ b/examples/advent2024/day10_part2.carbon @@ -11,6 +11,8 @@ import library "day10_common"; import library "io_utils"; class PathsToTop { + impl as Core.UnformedInit {} + fn Make(terrain: Terrain) -> PathsToTop { returned var me: PathsToTop; for (y: i32 in Core.Range(43)) { diff --git a/examples/advent2024/day11_part2.carbon b/examples/advent2024/day11_part2.carbon index 07dc85a01d89..f8a87dc3b825 100644 --- a/examples/advent2024/day11_part2.carbon +++ b/examples/advent2024/day11_part2.carbon @@ -11,6 +11,8 @@ import library "day11_common"; import library "io_utils"; class Digits { + impl as Core.UnformedInit {} + fn Make() -> Digits { returned var me: Digits; for (digit: i32 in Core.Range(10)) { diff --git a/examples/advent2024/day12_common.carbon b/examples/advent2024/day12_common.carbon index 1ca883acd822..21e139e49f9d 100644 --- a/examples/advent2024/day12_common.carbon +++ b/examples/advent2024/day12_common.carbon @@ -11,6 +11,8 @@ import Core library "range"; import library "io_utils"; class Map { + impl as Core.UnformedInit {} + fn Read() -> Map { returned var me: Self; for (y: i32 in Core.Range(140)) { @@ -32,6 +34,8 @@ class Map { } class DisjointSetForest { + impl as Core.UnformedInit {} + fn Make() -> DisjointSetForest { returned var me: Self; for (i: i32 in Core.Range(140 * 140)) { diff --git a/examples/advent2024/day13_common.carbon b/examples/advent2024/day13_common.carbon index 09243998f66d..97e4a4a83fa5 100644 --- a/examples/advent2024/day13_common.carbon +++ b/examples/advent2024/day13_common.carbon @@ -23,6 +23,8 @@ fn Euclid(a: i64, b: i64) -> {.m: i64, .n: i64, .gcd: i64} { } class Machine { + impl as Core.UnformedInit {} + fn Read() -> Machine { returned var me: Machine; // "Button A: X+" diff --git a/examples/advent2024/day14_common.carbon b/examples/advent2024/day14_common.carbon index 8bafb8e60359..b7d2f6164ddb 100644 --- a/examples/advent2024/day14_common.carbon +++ b/examples/advent2024/day14_common.carbon @@ -23,6 +23,8 @@ fn Mod(a: i32, d: i32) -> i32 { } class Robot { + impl as Core.UnformedInit {} + fn Read() -> Robot { returned var me: Robot; SkipString("p="); diff --git a/examples/advent2024/day15_common.carbon b/examples/advent2024/day15_common.carbon index f630340dd9d7..8f22adf376de 100644 --- a/examples/advent2024/day15_common.carbon +++ b/examples/advent2024/day15_common.carbon @@ -45,6 +45,8 @@ let Empty: Square = ('.' as char) as Square; let Robot: Square = ('@' as char) as Square; class Grid { + impl as Core.UnformedInit {} + fn Read() -> Grid { returned var me: Grid; var y: i32 = 0; diff --git a/examples/advent2024/day4_common.carbon b/examples/advent2024/day4_common.carbon index a84060f2f1c8..22ec0b27f70d 100644 --- a/examples/advent2024/day4_common.carbon +++ b/examples/advent2024/day4_common.carbon @@ -9,6 +9,8 @@ library "day4_common"; import library "io_utils"; class Wordsearch { + impl as Core.UnformedInit {} + fn Read() -> Wordsearch { returned var s: Wordsearch; // TODO: Use for loops once they're implemented. diff --git a/examples/advent2024/day5_common.carbon b/examples/advent2024/day5_common.carbon index 0ce6e1d5ec20..b53c40d76793 100644 --- a/examples/advent2024/day5_common.carbon +++ b/examples/advent2024/day5_common.carbon @@ -16,6 +16,8 @@ fn PageMask(page: i32) -> Core.UInt(100) { } class Rules { + impl as Core.UnformedInit {} + fn Read() -> Rules { returned var rules: Rules; for (i: i32 in Core.Range(100)) { @@ -39,6 +41,8 @@ class Rules { }; class PageList { + impl as Core.UnformedInit {} + fn Empty() -> PageList { returned var me: PageList; me.num_pages = 0; diff --git a/examples/advent2024/day6_common.carbon b/examples/advent2024/day6_common.carbon index df802868729d..846203b8ddb2 100644 --- a/examples/advent2024/day6_common.carbon +++ b/examples/advent2024/day6_common.carbon @@ -15,6 +15,8 @@ fn Visited() -> i8 { return 1; } fn Wall() -> i8 { return 2; } class Maze { + impl as Core.UnformedInit {} + fn Read() -> Maze { returned var me: Maze; diff --git a/examples/advent2024/day7_common.carbon b/examples/advent2024/day7_common.carbon index abe787ac723e..63954151018f 100644 --- a/examples/advent2024/day7_common.carbon +++ b/examples/advent2024/day7_common.carbon @@ -23,6 +23,8 @@ fn Concat(a_val: i64, b_val: i64) -> i64 { } class Equation { + impl as Core.UnformedInit {} + fn Read() -> Equation { returned var me: Equation; me.num_operands = 0; diff --git a/examples/advent2024/day8_common.carbon b/examples/advent2024/day8_common.carbon index c05d7796a686..ce996d507597 100644 --- a/examples/advent2024/day8_common.carbon +++ b/examples/advent2024/day8_common.carbon @@ -11,6 +11,8 @@ import Core library "range"; import library "io_utils"; class Grid { + impl as Core.UnformedInit {} + fn Read() -> Grid { returned var me: Grid; for (y: i32 in Core.Range(50)) { diff --git a/examples/advent2024/day9_common.carbon b/examples/advent2024/day9_common.carbon index 6de51aa02228..4f2e85c5449f 100644 --- a/examples/advent2024/day9_common.carbon +++ b/examples/advent2024/day9_common.carbon @@ -11,6 +11,8 @@ import Core library "range"; import library "io_utils"; class SectorList { + impl as Core.UnformedInit {} + fn Read() -> SectorList { returned var me: SectorList; me.size = 0; diff --git a/examples/interop/cpp/socket.carbon b/examples/interop/cpp/socket.carbon index 9bf267cd2dd6..b51068dce69c 100644 --- a/examples/interop/cpp/socket.carbon +++ b/examples/interop/cpp/socket.carbon @@ -40,8 +40,9 @@ fn Run() -> i32 { return 1; } - // TODO: Should be able to zero-initialize this with `= ()` or `= {}`. - var address: Cpp.sockaddr_in6; + // TODO: This initialization should zero-initialize the struct. + // TODO: We should be able to use simply `= ()` or `= {}` to get the same effect. + var address: Cpp.sockaddr_in6 = Cpp.sockaddr_in6.sockaddr_in6(); Cpp.memset(&address, 0, Cpp.SOCKADDR_IN_SIZE); // TODO: Should this be valid without a cast? `AF_INET6` is defined to an // integer literal in glibc at least, but we import it as an `i32`. diff --git a/examples/sieve.carbon b/examples/sieve.carbon index 6e53b043bfd2..5266fb35b2f2 100644 --- a/examples/sieve.carbon +++ b/examples/sieve.carbon @@ -8,6 +8,8 @@ import Core library "range"; // Compute and return the number of primes less than 1000. class Sieve { + impl as Core.UnformedInit {} + fn Make() -> Sieve { returned var s: Sieve; for (n: i32 in Core.Range(1000)) { diff --git a/toolchain/check/core_identifier.def b/toolchain/check/core_identifier.def index 8ddb8893a165..91e8273d8158 100644 --- a/toolchain/check/core_identifier.def +++ b/toolchain/check/core_identifier.def @@ -35,6 +35,7 @@ CARBON_CORE_IDENTIFIER(Copy) CARBON_CORE_IDENTIFIER(CppCompat) CARBON_CORE_IDENTIFIER(CppUnsafeDeref) CARBON_CORE_IDENTIFIER(Dec) +CARBON_CORE_IDENTIFIER(DefaultOrUnformed) CARBON_CORE_IDENTIFIER(Destroy) CARBON_CORE_IDENTIFIER(DivAssignWith) CARBON_CORE_IDENTIFIER(DivWith) diff --git a/toolchain/check/eval.cpp b/toolchain/check/eval.cpp index ccf668695f7c..bdfa1feb9b8e 100644 --- a/toolchain/check/eval.cpp +++ b/toolchain/check/eval.cpp @@ -1837,6 +1837,7 @@ static auto MakeConstantForBuiltinCall(EvalContext& eval_context, SemIR::IntValue{.type_id = call.type_id, .int_id = int_id}, phase); } + case SemIR::BuiltinFunctionKind::MakeUninitialized: case SemIR::BuiltinFunctionKind::PrintChar: case SemIR::BuiltinFunctionKind::PrintInt: case SemIR::BuiltinFunctionKind::ReadChar: diff --git a/toolchain/check/handle_let_and_var.cpp b/toolchain/check/handle_let_and_var.cpp index 7784a5e15aef..3a6422576e14 100644 --- a/toolchain/check/handle_let_and_var.cpp +++ b/toolchain/check/handle_let_and_var.cpp @@ -4,14 +4,18 @@ #include +#include "toolchain/check/call.h" #include "toolchain/check/context.h" #include "toolchain/check/convert.h" +#include "toolchain/check/core_identifier.h" #include "toolchain/check/decl_introducer_state.h" #include "toolchain/check/handle.h" #include "toolchain/check/inst.h" #include "toolchain/check/interface.h" #include "toolchain/check/keyword_modifier_set.h" +#include "toolchain/check/member_access.h" #include "toolchain/check/modifiers.h" +#include "toolchain/check/name_lookup.h" #include "toolchain/check/pattern.h" #include "toolchain/check/pattern_match.h" #include "toolchain/diagnostics/emitter.h" @@ -144,16 +148,28 @@ static auto EndFullPattern(Context& context) -> void { AddPatternVarStorage(context, pattern_block_id, returned); } -static auto HandleInitializer(Context& context, Parse::NodeId node_id) -> bool { - EndFullPattern(context); +static auto StartPatternInitializer(Context& context) -> bool { if (context.scope_stack().PeekIndex() == ScopeIndex::Package) { context.global_init().Resume(); } - context.node_stack().Push(node_id); context.full_pattern_stack().StartPatternInitializer(); return true; } +static auto EndPatternInitializer(Context& context) -> void { + if (context.scope_stack().PeekIndex() == ScopeIndex::Package) { + context.global_init().Suspend(); + } + context.full_pattern_stack().EndPatternInitializer(); +} + +static auto HandleInitializer(Context& context, Parse::NodeId node_id) -> bool { + EndFullPattern(context); + context.node_stack().Push(node_id); + StartPatternInitializer(context); + return true; +} + auto HandleParseNode(Context& context, Parse::LetInitializerId node_id) -> bool { return HandleInitializer(context, node_id); @@ -178,6 +194,35 @@ auto HandleParseNode(Context& context, Parse::FieldInitializerId node_id) return true; } +// Make a default initialization expression for a `var` declaration. +static auto MakeDefaultInit(Context& context, SemIR::LocId loc_id, + SemIR::InstId pattern_id) -> SemIR::InstId { + loc_id = context.insts().GetLocIdForDesugaring(loc_id); + + // Extract the matched type from the pattern. + // + // TODO: Diagnose if the pattern doesn't have a type, for example `var 123;` + // or `var a: auto;`. + auto pattern_type_id = context.insts().Get(pattern_id).type_id(); + auto type_inst_id = context.types().GetTypeInstId( + SemIR::ExtractScrutineeType(context.sem_ir(), pattern_type_id)); + if (type_inst_id == SemIR::ErrorInst::InstId) { + return SemIR::ErrorInst::InstId; + } + + // Form `Type as Core.DefaultOrUnformed`. + auto interface_id = + LookupNameInCore(context, loc_id, CoreIdentifier::DefaultOrUnformed); + auto interface_type = ExprAsType(context, loc_id, interface_id); + auto facet_id = ConvertToValueOfType(context, loc_id, type_inst_id, + interface_type.type_id); + + // Form a call to `facet.Op()`. + auto op_name_id = context.core_identifiers().AddNameId(CoreIdentifier::Op); + auto op_id = PerformMemberAccess(context, loc_id, facet_id, op_name_id); + return PerformCall(context, loc_id, op_id, {}); +} + namespace { // State from HandleDecl, returned for type-specific handling. struct DeclInfo { @@ -196,21 +241,19 @@ struct DeclInfo { template -static auto HandleDecl(Context& context) -> DeclInfo { +static auto HandleDecl(Context& context, Parse::NodeId node_id) -> DeclInfo { DeclInfo decl_info = DeclInfo(); // Handle the optional initializer. if (context.node_stack().PeekNextIs(InitializerNodeKind)) { decl_info.init_id = context.node_stack().PopExpr(); context.node_stack().PopAndDiscardSoloNodeId(); - if (context.scope_stack().PeekIndex() == ScopeIndex::Package) { - context.global_init().Suspend(); - } - context.full_pattern_stack().EndPatternInitializer(); + EndPatternInitializer(context); } else { // For an associated constant declaration, handle the completed declaration // now. We will have done this at the `=` if there was an initializer. - if (IntroducerNodeKind == Parse::NodeKind::AssociatedConstantIntroducer) { + if constexpr (IntroducerNodeKind == + Parse::NodeKind::AssociatedConstantIntroducer) { auto interface_decl = context.scope_stack() .GetCurrentScopeAs(); @@ -218,6 +261,15 @@ static auto HandleDecl(Context& context) -> DeclInfo { } EndFullPattern(context); + + // A variable declaration without an explicit initializer is initialized by + // calling `(T as Core.DefaultOrUnformed).Op()`. + if constexpr (IntroducerNodeKind == Parse::NodeKind::VariableIntroducer) { + StartPatternInitializer(context); + decl_info.init_id = + MakeDefaultInit(context, node_id, context.node_stack().PeekPattern()); + EndPatternInitializer(context); + } } context.full_pattern_stack().PopFullPattern(); @@ -242,7 +294,7 @@ static auto HandleDecl(Context& context) -> DeclInfo { auto HandleParseNode(Context& context, Parse::LetDeclId node_id) -> bool { auto decl_info = HandleDecl(context); + Parse::NodeKind::LetInitializer>(context, node_id); LimitModifiersOnDecl( context, decl_info.introducer, @@ -268,10 +320,10 @@ auto HandleParseNode(Context& context, Parse::LetDeclId node_id) -> bool { auto HandleParseNode(Context& context, Parse::AssociatedConstantDeclId node_id) -> bool { - auto decl_info = - HandleDecl(context); + auto decl_info = HandleDecl( + context, node_id); LimitModifiersOnDecl( context, decl_info.introducer, @@ -319,11 +371,10 @@ auto HandleParseNode(Context& context, Parse::AssociatedConstantDeclId node_id) return true; } -auto HandleParseNode(Context& context, Parse::VariableDeclId /*node_id*/) - -> bool { +auto HandleParseNode(Context& context, Parse::VariableDeclId node_id) -> bool { auto decl_info = HandleDecl(context); + Parse::NodeKind::VariableInitializer>(context, node_id); LimitModifiersOnDecl( context, decl_info.introducer, diff --git a/toolchain/check/testdata/alias/import.carbon b/toolchain/check/testdata/alias/import.carbon index f294731ea1f8..756c530f4ded 100644 --- a/toolchain/check/testdata/alias/import.carbon +++ b/toolchain/check/testdata/alias/import.carbon @@ -2,7 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon +// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/convert.carbon // EXTRA-ARGS: --dump-sem-ir-ranges=if-present // // AUTOUPDATE @@ -70,23 +70,45 @@ var c: () = a_alias_alias; // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %pattern_type.506: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.910: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%ptr) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.7ef: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%ptr) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.b07: %T.as.DefaultOrUnformed.impl.Op.type.7ef = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %ptr, (%DefaultOrUnformed.impl_witness.910) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.b07, @T.as.DefaultOrUnformed.impl.Op(%ptr) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: package: = namespace [concrete] { +// CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: .C = %C.decl // CHECK:STDOUT: .c_alias = %c_alias // CHECK:STDOUT: .a = %a // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %c_alias: type = alias_binding c_alias, %C.decl [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.506 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.506 = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %ptr = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %ptr [concrete = constants.%ptr] { @@ -97,29 +119,58 @@ var c: () = a_alias_alias; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%ptr, (constants.%DefaultOrUnformed.impl_witness.910) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc8_10.1: %DefaultOrUnformed.type = converted constants.%ptr, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc8_10.1 [concrete = constants.%ptr] +// CHECK:STDOUT: %.loc8_10.2: type = converted %.loc8_10.1, %as_type [concrete = constants.%ptr] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.b07, @T.as.DefaultOrUnformed.impl.Op(constants.%ptr) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %ptr = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%a.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- class2.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %pattern_type.506: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.20b: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%ptr) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.7ef: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%ptr) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.b07: %T.as.DefaultOrUnformed.impl.Op.type.7ef = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %ptr, (%DefaultOrUnformed.impl_witness.20b) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.b07, @T.as.DefaultOrUnformed.impl.Op(%ptr) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Main.C = import_ref Main//class1, C, unloaded // CHECK:STDOUT: %Main.c_alias: type = import_ref Main//class1, c_alias, loaded [concrete = constants.%C] // CHECK:STDOUT: %Main.a = import_ref Main//class1, a, unloaded -// CHECK:STDOUT: %Main.import_ref.8f2: = import_ref Main//class1, loc4_10, loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Core.ece: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: %Main.import_ref.8f2: = import_ref Main//class1, loc4_10, loaded [concrete = constants.%complete_type.357] // CHECK:STDOUT: %Main.import_ref.743 = import_ref Main//class1, inst{{[0-9A-F]+}} [no loc], unloaded +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Main.import_ref.dee: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Main//class1, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Main.import_ref.dee), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -127,15 +178,17 @@ var c: () = a_alias_alias; // CHECK:STDOUT: .C = imports.%Main.C // CHECK:STDOUT: .c_alias = imports.%Main.c_alias // CHECK:STDOUT: .a = imports.%Main.a +// CHECK:STDOUT: .Core = imports.%Core.ece // CHECK:STDOUT: .c_alias_alias = %c_alias_alias // CHECK:STDOUT: .b = %b // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %c_alias.ref.loc6: type = name_ref c_alias, imports.%Main.c_alias [concrete = constants.%C] // CHECK:STDOUT: %c_alias_alias: type = alias_binding c_alias_alias, imports.%Main.c_alias [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.506 = ref_binding_pattern b [concrete] +// CHECK:STDOUT: %b.var_patt: %pattern_type.506 = var_pattern %b.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %ptr = var %b.var_patt [concrete] // CHECK:STDOUT: %.loc8: type = splice_block %ptr [concrete = constants.%ptr] { @@ -152,33 +205,64 @@ var c: () = a_alias_alias; // CHECK:STDOUT: .Self = imports.%Main.import_ref.743 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%ptr, (constants.%DefaultOrUnformed.impl_witness.20b) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc8_16.1: %DefaultOrUnformed.type = converted constants.%ptr, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc8_16.1 [concrete = constants.%ptr] +// CHECK:STDOUT: %.loc8_16.2: type = converted %.loc8_16.1, %as_type [concrete = constants.%ptr] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.b07, @T.as.DefaultOrUnformed.impl.Op(constants.%ptr) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %ptr = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%b.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- class3.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %pattern_type.506: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.910: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%ptr) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.7ef: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%ptr) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.b07: %T.as.DefaultOrUnformed.impl.Op.type.7ef = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %ptr, (%DefaultOrUnformed.impl_witness.910) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.b07, @T.as.DefaultOrUnformed.impl.Op(%ptr) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Main.c_alias_alias: type = import_ref Main//class2, c_alias_alias, loaded [concrete = constants.%C] // CHECK:STDOUT: %Main.b = import_ref Main//class2, b, unloaded -// CHECK:STDOUT: %Main.import_ref.8db: = import_ref Main//class2, inst{{[0-9A-F]+}} [indirect], loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: %Main.import_ref.8db: = import_ref Main//class2, inst{{[0-9A-F]+}} [indirect], loaded [concrete = constants.%complete_type.357] // CHECK:STDOUT: %Main.import_ref.a60 = import_ref Main//class2, inst{{[0-9A-F]+}} [indirect], unloaded +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: package: = namespace [concrete] { // CHECK:STDOUT: .c_alias_alias = imports.%Main.c_alias_alias // CHECK:STDOUT: .b = imports.%Main.b +// CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: .c = %c // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.506 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.506 = var_pattern %c.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %ptr = var %c.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { @@ -195,6 +279,18 @@ var c: () = a_alias_alias; // CHECK:STDOUT: .Self = imports.%Main.import_ref.a60 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%ptr, (constants.%DefaultOrUnformed.impl_witness.910) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc6_22.1: %DefaultOrUnformed.type = converted constants.%ptr, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc6_22.1 [concrete = constants.%ptr] +// CHECK:STDOUT: %.loc6_22.2: type = converted %.loc6_22.1, %as_type [concrete = constants.%ptr] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.b07, @T.as.DefaultOrUnformed.impl.Op(constants.%ptr) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %ptr = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%c.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- var1.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -203,11 +299,20 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: package: = namespace [concrete] { +// CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: .a = %a // CHECK:STDOUT: .a_alias = %a_alias // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] // CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] @@ -242,6 +347,10 @@ var c: () = a_alias_alias; // CHECK:STDOUT: imports { // CHECK:STDOUT: %Main.a = import_ref Main//var1, a, unloaded // CHECK:STDOUT: %Main.a_alias: ref %empty_tuple.type = import_ref Main//var1, a_alias, loaded [concrete = %a.var] +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } // CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] // CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] @@ -251,9 +360,11 @@ var c: () = a_alias_alias; // CHECK:STDOUT: package: = namespace [concrete] { // CHECK:STDOUT: .a = imports.%Main.a // CHECK:STDOUT: .a_alias = imports.%Main.a_alias +// CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: .a_alias_alias = %a_alias_alias // CHECK:STDOUT: .b = %b // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %a_alias.ref: ref %empty_tuple.type = name_ref a_alias, imports.%Main.a_alias [concrete = imports.%a.var] // CHECK:STDOUT: %a_alias_alias: ref %empty_tuple.type = alias_binding a_alias_alias, imports.%Main.a_alias [concrete = imports.%a.var] @@ -289,6 +400,10 @@ var c: () = a_alias_alias; // CHECK:STDOUT: imports { // CHECK:STDOUT: %Main.a_alias_alias: ref %empty_tuple.type = import_ref Main//var2, a_alias_alias, loaded [concrete = %a.var] // CHECK:STDOUT: %Main.b = import_ref Main//var2, b, unloaded +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } // CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] // CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var %a.var_patt [concrete] @@ -298,8 +413,10 @@ var c: () = a_alias_alias; // CHECK:STDOUT: package: = namespace [concrete] { // CHECK:STDOUT: .a_alias_alias = imports.%Main.a_alias_alias // CHECK:STDOUT: .b = imports.%Main.b +// CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: .c = %c // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] diff --git a/toolchain/check/testdata/array/basics.carbon b/toolchain/check/testdata/array/basics.carbon index d065c9a75215..50a76dad52c0 100644 --- a/toolchain/check/testdata/array/basics.carbon +++ b/toolchain/check/testdata/array/basics.carbon @@ -140,6 +140,7 @@ var a: array(1, 1); // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: // CHECK:STDOUT: %a.ref: ref %tuple.type = name_ref a, file.%a [concrete = file.%a.var] // CHECK:STDOUT: %tuple.elem0: ref %empty_tuple.type = tuple_access %a.ref, element0 [concrete = constants.%tuple.elem0] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] @@ -230,15 +231,28 @@ var a: array(1, 1); // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3, %empty_tuple.type [concrete] // CHECK:STDOUT: %pattern_type.035: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.924: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%array_type) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.86d: %DefaultOrUnformed.type = facet_value %array_type, (%DefaultOrUnformed.impl_witness.924) [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%empty_tuple, %empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: %pattern_type.8c1: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.032: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%tuple.type) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.1ea: %DefaultOrUnformed.type = facet_value %tuple.type, (%DefaultOrUnformed.impl_witness.032) [concrete] // CHECK:STDOUT: %Destroy.Op.type.bae255.1: type = fn_type @Destroy.Op.loc8 [concrete] // CHECK:STDOUT: %Destroy.Op.651ba6.1: %Destroy.Op.type.bae255.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.bae255.2: type = fn_type @Destroy.Op.loc7 [concrete] // CHECK:STDOUT: %Destroy.Op.651ba6.2: %Destroy.Op.type.bae255.2 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -246,6 +260,14 @@ var a: array(1, 1); // CHECK:STDOUT: %a.var_patt: %pattern_type.035 = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var %a.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc7: %DefaultOrUnformed.type = facet_value constants.%array_type, (constants.%DefaultOrUnformed.impl_witness.924) [concrete = constants.%DefaultOrUnformed.facet.86d] +// CHECK:STDOUT: %.loc7_29.1: %DefaultOrUnformed.type = converted constants.%array_type, %DefaultOrUnformed.facet.loc7 [concrete = constants.%DefaultOrUnformed.facet.86d] +// CHECK:STDOUT: %as_type.loc7: type = facet_access_type %.loc7_29.1 [concrete = constants.%array_type] +// CHECK:STDOUT: %.loc7_29.2: type = converted %.loc7_29.1, %as_type.loc7 [concrete = constants.%array_type] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc7_3: ref %array_type = splice_block %a.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc7: init %array_type to %.loc7_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.1() +// CHECK:STDOUT: assign %a.var, %T.as.DefaultOrUnformed.impl.Op.call.loc7 // CHECK:STDOUT: %.loc7_28: type = splice_block %array_type [concrete = constants.%array_type] { // CHECK:STDOUT: %.loc7_24.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3] @@ -258,6 +280,14 @@ var a: array(1, 1); // CHECK:STDOUT: %b.var_patt: %pattern_type.8c1 = var_pattern %b.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %tuple.type = var %b.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%tuple.type, (constants.%DefaultOrUnformed.impl_witness.032) [concrete = constants.%DefaultOrUnformed.facet.1ea] +// CHECK:STDOUT: %.loc8_29.1: %DefaultOrUnformed.type = converted constants.%tuple.type, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.1ea] +// CHECK:STDOUT: %as_type.loc8: type = facet_access_type %.loc8_29.1 [concrete = constants.%tuple.type] +// CHECK:STDOUT: %.loc8_29.2: type = converted %.loc8_29.1, %as_type.loc8 [concrete = constants.%tuple.type] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc8_3: ref %tuple.type = splice_block %b.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc8: init %tuple.type to %.loc8_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.2() +// CHECK:STDOUT: assign %b.var, %T.as.DefaultOrUnformed.impl.Op.call.loc8 // CHECK:STDOUT: %.loc8_28.1: type = splice_block %.loc8_28.6 [concrete = constants.%tuple.type] { // CHECK:STDOUT: %.loc8_19: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc8_23: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] diff --git a/toolchain/check/testdata/as/maybe_unformed.carbon b/toolchain/check/testdata/as/maybe_unformed.carbon index 4b57aa2a5753..2f5fe3033d97 100644 --- a/toolchain/check/testdata/as/maybe_unformed.carbon +++ b/toolchain/check/testdata/as/maybe_unformed.carbon @@ -137,6 +137,7 @@ fn Use() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %ptr.2a9: type = ptr_type %X [concrete] // CHECK:STDOUT: %MaybeUnformed.type: type = generic_class_type @MaybeUnformed [concrete] // CHECK:STDOUT: %MaybeUnformed.generic: %MaybeUnformed.type = struct_value () [concrete] @@ -149,10 +150,12 @@ fn Use() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .MaybeUnformed = %Core.MaybeUnformed // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] // CHECK:STDOUT: %Core.MaybeUnformed: %MaybeUnformed.type = import_ref Core//prelude/parts/maybe_unformed, MaybeUnformed, loaded [concrete = constants.%MaybeUnformed.generic] // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon b/toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon index ac04b2ca18e8..a5a69c81ee0e 100644 --- a/toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon +++ b/toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon @@ -20,11 +20,11 @@ library "[[@TEST_NAME]]"; fn A() { - var unused a: (); + var unused a: () = (); } fn B() -> () { - var b: (); + var b: () = (); //@dump-sem-ir-begin b = A(); //@dump-sem-ir-end @@ -33,7 +33,7 @@ fn B() -> () { //@dump-sem-ir-begin fn C() -> () { - var c: (); + var c: () = (); c = B(); return c; } @@ -144,6 +144,10 @@ library "[[@TEST_NAME]]"; // CHECK:STDOUT: %c.var_patt: %pattern_type.cb1 = var_pattern %c.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %empty_tuple.type = var %c.var_patt +// CHECK:STDOUT: %.loc18_16.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc18_16.2: init %empty_tuple.type = tuple_init () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc18_3: init %empty_tuple.type = converted %.loc18_16.1, %.loc18_16.2 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: assign %c.var, %.loc18_3 // CHECK:STDOUT: %.loc18_11.1: type = splice_block %.loc18_11.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc18_11.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc18_11.3: type = converted %.loc18_11.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] diff --git a/toolchain/check/testdata/basics/duplicate_name_same_line.carbon b/toolchain/check/testdata/basics/duplicate_name_same_line.carbon index 9e7ab9b5025f..cd3b38889fc6 100644 --- a/toolchain/check/testdata/basics/duplicate_name_same_line.carbon +++ b/toolchain/check/testdata/basics/duplicate_name_same_line.carbon @@ -15,7 +15,7 @@ fn A() { // This declares `n` in two different scopes, it's just showing the IR // behavior of having both on the same line. //@dump-sem-ir-begin - var unused n: (); } else { var unused n: (); + var unused n: () = (); } else { var unused n: () = (); //@dump-sem-ir-end } } @@ -40,6 +40,10 @@ fn A() { // CHECK:STDOUT: %n.var_patt.loc18_5: %pattern_type.cb1 = var_pattern %n.patt.loc18_16 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %n.var.loc18_5: ref %empty_tuple.type = var %n.var_patt.loc18_5 +// CHECK:STDOUT: %.loc18_25.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc18_25.2: init %empty_tuple.type = tuple_init () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc18_5: init %empty_tuple.type = converted %.loc18_25.1, %.loc18_25.2 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: assign %n.var.loc18_5, %.loc18_5 // CHECK:STDOUT: %.loc18_20.1: type = splice_block %.loc18_20.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc18_20.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] // CHECK:STDOUT: %.loc18_20.3: type = converted %.loc18_20.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -49,20 +53,24 @@ fn A() { // CHECK:STDOUT: // CHECK:STDOUT: !if.else: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt.loc18_43: %pattern_type.cb1 = ref_binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt.loc18_32: %pattern_type.cb1 = var_pattern %n.patt.loc18_43 [concrete] +// CHECK:STDOUT: %n.patt.loc18_48: %pattern_type.cb1 = ref_binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt.loc18_37: %pattern_type.cb1 = var_pattern %n.patt.loc18_48 [concrete] // CHECK:STDOUT: } -// CHECK:STDOUT: %n.var.loc18_32: ref %empty_tuple.type = var %n.var_patt.loc18_32 -// CHECK:STDOUT: %.loc18_47.1: type = splice_block %.loc18_47.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc18_47.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc18_47.3: type = converted %.loc18_47.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: %n.var.loc18_37: ref %empty_tuple.type = var %n.var_patt.loc18_37 +// CHECK:STDOUT: %.loc18_57.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc18_57.2: init %empty_tuple.type = tuple_init () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc18_37: init %empty_tuple.type = converted %.loc18_57.1, %.loc18_57.2 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: assign %n.var.loc18_37, %.loc18_37 +// CHECK:STDOUT: %.loc18_52.1: type = splice_block %.loc18_52.3 [concrete = constants.%empty_tuple.type] { +// CHECK:STDOUT: %.loc18_52.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc18_52.3: type = converted %.loc18_52.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %n.loc18_43: ref %empty_tuple.type = ref_binding n, %n.var.loc18_32 +// CHECK:STDOUT: %n.loc18_48: ref %empty_tuple.type = ref_binding n, %n.var.loc18_37 // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !if.done: -// CHECK:STDOUT: %Destroy.Op.bound.loc18_32: = bound_method %n.var.loc18_32, constants.%Destroy.Op -// CHECK:STDOUT: %Destroy.Op.call.loc18_32: init %empty_tuple.type = call %Destroy.Op.bound.loc18_32(%n.var.loc18_32) +// CHECK:STDOUT: %Destroy.Op.bound.loc18_37: = bound_method %n.var.loc18_37, constants.%Destroy.Op +// CHECK:STDOUT: %Destroy.Op.call.loc18_37: init %empty_tuple.type = call %Destroy.Op.bound.loc18_37(%n.var.loc18_37) // CHECK:STDOUT: %Destroy.Op.bound.loc18_5: = bound_method %n.var.loc18_5, constants.%Destroy.Op // CHECK:STDOUT: %Destroy.Op.call.loc18_5: init %empty_tuple.type = call %Destroy.Op.bound.loc18_5(%n.var.loc18_5) // CHECK:STDOUT: diff --git a/toolchain/check/testdata/basics/raw_sem_ir/one_file.carbon b/toolchain/check/testdata/basics/raw_sem_ir/one_file.carbon index cae7c9110d3d..e3a1671358c3 100644 --- a/toolchain/check/testdata/basics/raw_sem_ir/one_file.carbon +++ b/toolchain/check/testdata/basics/raw_sem_ir/one_file.carbon @@ -31,386 +31,387 @@ fn Foo[T:! type](p: T*) -> (T*, ()) { // CHECK:STDOUT: import_irs: // CHECK:STDOUT: 'import_ir(ApiForImpl)': {decl_id: inst, is_export: false} // CHECK:STDOUT: 'import_ir(Cpp)': {decl_id: inst, is_export: false} -// CHECK:STDOUT: import_ir58000002: {decl_id: inst58000010, is_export: false} -// CHECK:STDOUT: import_ir58000003: {decl_id: inst58000010, is_export: false} -// CHECK:STDOUT: import_ir58000004: {decl_id: inst58000010, is_export: false} -// CHECK:STDOUT: import_ir58000005: {decl_id: inst58000010, is_export: false} -// CHECK:STDOUT: import_ir58000006: {decl_id: inst58000010, is_export: false} +// CHECK:STDOUT: import_ir78000002: {decl_id: inst78000010, is_export: false} +// CHECK:STDOUT: import_ir78000003: {decl_id: inst78000010, is_export: false} +// CHECK:STDOUT: import_ir78000004: {decl_id: inst78000010, is_export: false} +// CHECK:STDOUT: import_ir78000005: {decl_id: inst78000010, is_export: false} +// CHECK:STDOUT: import_ir78000006: {decl_id: inst78000010, is_export: false} +// CHECK:STDOUT: import_ir78000007: {decl_id: inst78000010, is_export: false} // CHECK:STDOUT: import_ir_insts: -// CHECK:STDOUT: import_ir_inst0: {ir_id: import_ir58000004, inst_id: inst70000010} -// CHECK:STDOUT: import_ir_inst1: {ir_id: import_ir58000004, inst_id: inst70000010} -// CHECK:STDOUT: import_ir_inst2: {ir_id: import_ir58000004, inst_id: inst70000015} -// CHECK:STDOUT: import_ir_inst3: {ir_id: import_ir58000004, inst_id: inst70000035} -// CHECK:STDOUT: import_ir_inst4: {ir_id: import_ir58000004, inst_id: inst7000002D} -// CHECK:STDOUT: import_ir_inst5: {ir_id: import_ir58000004, inst_id: inst70000012} -// CHECK:STDOUT: import_ir_inst6: {ir_id: import_ir58000004, inst_id: inst7000002D} -// CHECK:STDOUT: import_ir_inst7: {ir_id: import_ir58000004, inst_id: inst70000027} -// CHECK:STDOUT: import_ir_inst8: {ir_id: import_ir58000004, inst_id: inst70000028} -// CHECK:STDOUT: import_ir_inst9: {ir_id: import_ir58000004, inst_id: inst7000001E} -// CHECK:STDOUT: import_ir_instA: {ir_id: import_ir58000004, inst_id: inst70000020} -// CHECK:STDOUT: import_ir_instB: {ir_id: import_ir58000004, inst_id: inst70000023} -// CHECK:STDOUT: import_ir_instC: {ir_id: import_ir58000004, inst_id: inst70000024} -// CHECK:STDOUT: import_ir_instD: {ir_id: import_ir58000004, inst_id: inst70000012} -// CHECK:STDOUT: import_ir_instE: {ir_id: import_ir58000004, inst_id: inst70000017} -// CHECK:STDOUT: import_ir_instF: {ir_id: import_ir58000004, inst_id: inst7000001A} -// CHECK:STDOUT: import_ir_inst10: {ir_id: import_ir58000004, inst_id: inst7000001F} -// CHECK:STDOUT: import_ir_inst11: {ir_id: import_ir58000004, inst_id: inst70000026} -// CHECK:STDOUT: import_ir_inst12: {ir_id: import_ir58000004, inst_id: inst70000031} -// CHECK:STDOUT: import_ir_inst13: {ir_id: import_ir58000004, inst_id: inst70000032} -// CHECK:STDOUT: import_ir_inst14: {ir_id: import_ir58000004, inst_id: inst70000033} -// CHECK:STDOUT: import_ir_inst15: {ir_id: import_ir58000004, inst_id: inst70000012} -// CHECK:STDOUT: import_ir_inst16: {ir_id: import_ir58000004, inst_id: inst7000002D} -// CHECK:STDOUT: import_ir_inst17: {ir_id: import_ir58000004, inst_id: inst70000072} -// CHECK:STDOUT: import_ir_inst18: {ir_id: import_ir58000004, inst_id: inst70000070} -// CHECK:STDOUT: import_ir_inst19: {ir_id: import_ir58000004, inst_id: inst70000089} -// CHECK:STDOUT: import_ir_inst1A: {ir_id: import_ir58000004, inst_id: inst70000071} -// CHECK:STDOUT: import_ir_inst1B: {ir_id: import_ir58000004, inst_id: inst70000089} -// CHECK:STDOUT: import_ir_inst1C: {ir_id: import_ir58000004, inst_id: inst70000084} -// CHECK:STDOUT: import_ir_inst1D: {ir_id: import_ir58000004, inst_id: inst70000085} -// CHECK:STDOUT: import_ir_inst1E: {ir_id: import_ir58000004, inst_id: inst7000007D} -// CHECK:STDOUT: import_ir_inst1F: {ir_id: import_ir58000004, inst_id: inst7000007F} -// CHECK:STDOUT: import_ir_inst20: {ir_id: import_ir58000004, inst_id: inst70000080} -// CHECK:STDOUT: import_ir_inst21: {ir_id: import_ir58000004, inst_id: inst70000081} -// CHECK:STDOUT: import_ir_inst22: {ir_id: import_ir58000004, inst_id: inst70000062} -// CHECK:STDOUT: import_ir_inst23: {ir_id: import_ir58000004, inst_id: inst70000078} -// CHECK:STDOUT: import_ir_inst24: {ir_id: import_ir58000004, inst_id: inst70000079} -// CHECK:STDOUT: import_ir_inst25: {ir_id: import_ir58000004, inst_id: inst7000007A} -// CHECK:STDOUT: import_ir_inst26: {ir_id: import_ir58000004, inst_id: inst7000007E} -// CHECK:STDOUT: import_ir_inst27: {ir_id: import_ir58000004, inst_id: inst70000083} -// CHECK:STDOUT: import_ir_inst28: {ir_id: import_ir58000004, inst_id: inst70000093} -// CHECK:STDOUT: import_ir_inst29: {ir_id: import_ir58000004, inst_id: inst7000009A} -// CHECK:STDOUT: import_ir_inst2A: {ir_id: import_ir58000004, inst_id: inst700000A1} -// CHECK:STDOUT: import_ir_inst2B: {ir_id: import_ir58000004, inst_id: inst700000A7} -// CHECK:STDOUT: import_ir_inst2C: {ir_id: import_ir58000004, inst_id: inst700000A8} -// CHECK:STDOUT: import_ir_inst2D: {ir_id: import_ir58000004, inst_id: inst700000A9} -// CHECK:STDOUT: import_ir_inst2E: {ir_id: import_ir58000004, inst_id: inst700000AF} -// CHECK:STDOUT: import_ir_inst2F: {ir_id: import_ir58000004, inst_id: inst70000065} -// CHECK:STDOUT: import_ir_inst30: {ir_id: import_ir58000004, inst_id: inst7000006B} -// CHECK:STDOUT: import_ir_inst31: {ir_id: import_ir58000004, inst_id: inst7000006E} -// CHECK:STDOUT: import_ir_inst32: {ir_id: import_ir58000004, inst_id: inst70000062} -// CHECK:STDOUT: import_ir_inst33: {ir_id: import_ir58000004, inst_id: inst70000064} -// CHECK:STDOUT: import_ir_inst34: {ir_id: import_ir58000004, inst_id: inst70000069} -// CHECK:STDOUT: import_ir_inst35: {ir_id: import_ir58000004, inst_id: inst7000006D} -// CHECK:STDOUT: import_ir_inst36: {ir_id: import_ir58000004, inst_id: inst70000074} -// CHECK:STDOUT: import_ir_inst37: {ir_id: import_ir58000004, inst_id: inst7000008C} -// CHECK:STDOUT: import_ir_inst38: {ir_id: import_ir58000004, inst_id: inst7000008D} -// CHECK:STDOUT: import_ir_inst39: {ir_id: import_ir58000004, inst_id: inst700000C2} -// CHECK:STDOUT: import_ir_inst3A: {ir_id: import_ir58000004, inst_id: inst700000C0} -// CHECK:STDOUT: import_ir_inst3B: {ir_id: import_ir58000004, inst_id: inst700000BE} -// CHECK:STDOUT: import_ir_inst3C: {ir_id: import_ir58000004, inst_id: inst700000BF} -// CHECK:STDOUT: import_ir_inst3D: {ir_id: import_ir58000004, inst_id: inst700000DE} -// CHECK:STDOUT: import_ir_inst3E: {ir_id: import_ir58000004, inst_id: inst700000DC} -// CHECK:STDOUT: import_ir_inst3F: {ir_id: import_ir58000004, inst_id: inst700000DA} -// CHECK:STDOUT: import_ir_inst40: {ir_id: import_ir58000004, inst_id: inst700000DB} -// CHECK:STDOUT: import_ir_inst41: {ir_id: import_ir58000004, inst_id: inst700000FA} -// CHECK:STDOUT: import_ir_inst42: {ir_id: import_ir58000004, inst_id: inst700000F8} -// CHECK:STDOUT: import_ir_inst43: {ir_id: import_ir58000004, inst_id: inst700000F6} -// CHECK:STDOUT: import_ir_inst44: {ir_id: import_ir58000004, inst_id: inst700000F7} -// CHECK:STDOUT: import_ir_inst45: {ir_id: import_ir58000004, inst_id: inst70000116} -// CHECK:STDOUT: import_ir_inst46: {ir_id: import_ir58000004, inst_id: inst70000114} -// CHECK:STDOUT: import_ir_inst47: {ir_id: import_ir58000004, inst_id: inst70000112} -// CHECK:STDOUT: import_ir_inst48: {ir_id: import_ir58000004, inst_id: inst70000113} -// CHECK:STDOUT: import_ir_inst49: {ir_id: import_ir58000004, inst_id: inst70000139} -// CHECK:STDOUT: import_ir_inst4A: {ir_id: import_ir58000004, inst_id: inst70000137} -// CHECK:STDOUT: import_ir_inst4B: {ir_id: import_ir58000004, inst_id: inst7000014D} -// CHECK:STDOUT: import_ir_inst4C: {ir_id: import_ir58000004, inst_id: inst70000138} -// CHECK:STDOUT: import_ir_inst4D: {ir_id: import_ir58000004, inst_id: inst70000130} -// CHECK:STDOUT: import_ir_inst4E: {ir_id: import_ir58000004, inst_id: inst70000132} -// CHECK:STDOUT: import_ir_inst4F: {ir_id: import_ir58000004, inst_id: inst70000135} -// CHECK:STDOUT: import_ir_inst50: {ir_id: import_ir58000004, inst_id: inst7000012D} -// CHECK:STDOUT: import_ir_inst51: {ir_id: import_ir58000004, inst_id: inst7000012F} -// CHECK:STDOUT: import_ir_inst52: {ir_id: import_ir58000004, inst_id: inst70000134} -// CHECK:STDOUT: import_ir_inst53: {ir_id: import_ir58000004, inst_id: inst7000013B} -// CHECK:STDOUT: import_ir_inst54: {ir_id: import_ir58000004, inst_id: inst7000014D} -// CHECK:STDOUT: import_ir_inst55: {ir_id: import_ir58000004, inst_id: inst70000148} -// CHECK:STDOUT: import_ir_inst56: {ir_id: import_ir58000004, inst_id: inst70000149} -// CHECK:STDOUT: import_ir_inst57: {ir_id: import_ir58000004, inst_id: inst70000141} -// CHECK:STDOUT: import_ir_inst58: {ir_id: import_ir58000004, inst_id: inst70000143} -// CHECK:STDOUT: import_ir_inst59: {ir_id: import_ir58000004, inst_id: inst70000144} -// CHECK:STDOUT: import_ir_inst5A: {ir_id: import_ir58000004, inst_id: inst70000145} -// CHECK:STDOUT: import_ir_inst5B: {ir_id: import_ir58000004, inst_id: inst7000012D} -// CHECK:STDOUT: import_ir_inst5C: {ir_id: import_ir58000004, inst_id: inst7000013D} -// CHECK:STDOUT: import_ir_inst5D: {ir_id: import_ir58000004, inst_id: inst7000013E} -// CHECK:STDOUT: import_ir_inst5E: {ir_id: import_ir58000004, inst_id: inst70000142} -// CHECK:STDOUT: import_ir_inst5F: {ir_id: import_ir58000004, inst_id: inst70000147} -// CHECK:STDOUT: import_ir_inst60: {ir_id: import_ir58000004, inst_id: inst70000150} -// CHECK:STDOUT: import_ir_inst61: {ir_id: import_ir58000004, inst_id: inst70000151} -// CHECK:STDOUT: import_ir_inst62: {ir_id: import_ir58000004, inst_id: inst70000154} -// CHECK:STDOUT: import_ir_inst63: {ir_id: import_ir58000004, inst_id: inst7000015C} -// CHECK:STDOUT: import_ir_inst64: {ir_id: import_ir58000004, inst_id: inst7000015A} -// CHECK:STDOUT: import_ir_inst65: {ir_id: import_ir58000004, inst_id: inst70000158} -// CHECK:STDOUT: import_ir_inst66: {ir_id: import_ir58000004, inst_id: inst70000159} -// CHECK:STDOUT: import_ir_inst67: {ir_id: import_ir58000004, inst_id: inst70000175} -// CHECK:STDOUT: import_ir_inst68: {ir_id: import_ir58000004, inst_id: inst70000173} -// CHECK:STDOUT: import_ir_inst69: {ir_id: import_ir58000004, inst_id: inst70000171} -// CHECK:STDOUT: import_ir_inst6A: {ir_id: import_ir58000004, inst_id: inst70000172} -// CHECK:STDOUT: import_ir_inst6B: {ir_id: import_ir58000004, inst_id: inst700001AB} -// CHECK:STDOUT: import_ir_inst6C: {ir_id: import_ir58000004, inst_id: inst700001A9} -// CHECK:STDOUT: import_ir_inst6D: {ir_id: import_ir58000004, inst_id: inst700001C6} -// CHECK:STDOUT: import_ir_inst6E: {ir_id: import_ir58000004, inst_id: inst700001AA} -// CHECK:STDOUT: import_ir_inst6F: {ir_id: import_ir58000004, inst_id: inst700001C6} -// CHECK:STDOUT: import_ir_inst70: {ir_id: import_ir58000004, inst_id: inst700001C1} -// CHECK:STDOUT: import_ir_inst71: {ir_id: import_ir58000004, inst_id: inst700001C2} -// CHECK:STDOUT: import_ir_inst72: {ir_id: import_ir58000004, inst_id: inst700001BA} -// CHECK:STDOUT: import_ir_inst73: {ir_id: import_ir58000004, inst_id: inst700001BC} -// CHECK:STDOUT: import_ir_inst74: {ir_id: import_ir58000004, inst_id: inst700001BD} -// CHECK:STDOUT: import_ir_inst75: {ir_id: import_ir58000004, inst_id: inst700001BE} -// CHECK:STDOUT: import_ir_inst76: {ir_id: import_ir58000004, inst_id: inst7000018C} -// CHECK:STDOUT: import_ir_inst77: {ir_id: import_ir58000004, inst_id: inst70000191} -// CHECK:STDOUT: import_ir_inst78: {ir_id: import_ir58000004, inst_id: inst700001B3} -// CHECK:STDOUT: import_ir_inst79: {ir_id: import_ir58000004, inst_id: inst700001B4} -// CHECK:STDOUT: import_ir_inst7A: {ir_id: import_ir58000004, inst_id: inst700001B5} -// CHECK:STDOUT: import_ir_inst7B: {ir_id: import_ir58000004, inst_id: inst700001B6} -// CHECK:STDOUT: import_ir_inst7C: {ir_id: import_ir58000004, inst_id: inst700001B7} -// CHECK:STDOUT: import_ir_inst7D: {ir_id: import_ir58000004, inst_id: inst700001BB} -// CHECK:STDOUT: import_ir_inst7E: {ir_id: import_ir58000004, inst_id: inst700001C0} -// CHECK:STDOUT: import_ir_inst7F: {ir_id: import_ir58000004, inst_id: inst700001D1} -// CHECK:STDOUT: import_ir_inst80: {ir_id: import_ir58000004, inst_id: inst700001D7} -// CHECK:STDOUT: import_ir_inst81: {ir_id: import_ir58000004, inst_id: inst700001DA} -// CHECK:STDOUT: import_ir_inst82: {ir_id: import_ir58000004, inst_id: inst700001DC} -// CHECK:STDOUT: import_ir_inst83: {ir_id: import_ir58000004, inst_id: inst700001DD} -// CHECK:STDOUT: import_ir_inst84: {ir_id: import_ir58000004, inst_id: inst700001DE} -// CHECK:STDOUT: import_ir_inst85: {ir_id: import_ir58000004, inst_id: inst700001E1} -// CHECK:STDOUT: import_ir_inst86: {ir_id: import_ir58000004, inst_id: inst700001EB} -// CHECK:STDOUT: import_ir_inst87: {ir_id: import_ir58000004, inst_id: inst700001F1} -// CHECK:STDOUT: import_ir_inst88: {ir_id: import_ir58000004, inst_id: inst700001F5} -// CHECK:STDOUT: import_ir_inst89: {ir_id: import_ir58000004, inst_id: inst700001F6} -// CHECK:STDOUT: import_ir_inst8A: {ir_id: import_ir58000004, inst_id: inst700001F7} -// CHECK:STDOUT: import_ir_inst8B: {ir_id: import_ir58000004, inst_id: inst700001FD} -// CHECK:STDOUT: import_ir_inst8C: {ir_id: import_ir58000004, inst_id: inst70000194} -// CHECK:STDOUT: import_ir_inst8D: {ir_id: import_ir58000004, inst_id: inst7000018E} -// CHECK:STDOUT: import_ir_inst8E: {ir_id: import_ir58000004, inst_id: inst700001A4} -// CHECK:STDOUT: import_ir_inst8F: {ir_id: import_ir58000004, inst_id: inst700001A6} -// CHECK:STDOUT: import_ir_inst90: {ir_id: import_ir58000004, inst_id: inst7000018C} -// CHECK:STDOUT: import_ir_inst91: {ir_id: import_ir58000004, inst_id: inst70000191} -// CHECK:STDOUT: import_ir_inst92: {ir_id: import_ir58000004, inst_id: inst7000018D} -// CHECK:STDOUT: import_ir_inst93: {ir_id: import_ir58000004, inst_id: inst70000193} -// CHECK:STDOUT: import_ir_inst94: {ir_id: import_ir58000004, inst_id: inst7000019A} -// CHECK:STDOUT: import_ir_inst95: {ir_id: import_ir58000004, inst_id: inst7000019D} -// CHECK:STDOUT: import_ir_inst96: {ir_id: import_ir58000004, inst_id: inst700001A1} -// CHECK:STDOUT: import_ir_inst97: {ir_id: import_ir58000004, inst_id: inst700001A5} -// CHECK:STDOUT: import_ir_inst98: {ir_id: import_ir58000004, inst_id: inst700001AD} -// CHECK:STDOUT: import_ir_inst99: {ir_id: import_ir58000004, inst_id: inst700001C9} -// CHECK:STDOUT: import_ir_inst9A: {ir_id: import_ir58000004, inst_id: inst700001CA} -// CHECK:STDOUT: import_ir_inst9B: {ir_id: import_ir58000004, inst_id: inst70000237} -// CHECK:STDOUT: import_ir_inst9C: {ir_id: import_ir58000004, inst_id: inst70000235} -// CHECK:STDOUT: import_ir_inst9D: {ir_id: import_ir58000004, inst_id: inst70000256} -// CHECK:STDOUT: import_ir_inst9E: {ir_id: import_ir58000004, inst_id: inst70000236} -// CHECK:STDOUT: import_ir_inst9F: {ir_id: import_ir58000004, inst_id: inst70000256} -// CHECK:STDOUT: import_ir_instA0: {ir_id: import_ir58000004, inst_id: inst70000251} -// CHECK:STDOUT: import_ir_instA1: {ir_id: import_ir58000004, inst_id: inst70000252} -// CHECK:STDOUT: import_ir_instA2: {ir_id: import_ir58000004, inst_id: inst7000024A} -// CHECK:STDOUT: import_ir_instA3: {ir_id: import_ir58000004, inst_id: inst7000024C} -// CHECK:STDOUT: import_ir_instA4: {ir_id: import_ir58000004, inst_id: inst7000024D} -// CHECK:STDOUT: import_ir_instA5: {ir_id: import_ir58000004, inst_id: inst7000024E} -// CHECK:STDOUT: import_ir_instA6: {ir_id: import_ir58000004, inst_id: inst7000020E} -// CHECK:STDOUT: import_ir_instA7: {ir_id: import_ir58000004, inst_id: inst70000213} -// CHECK:STDOUT: import_ir_instA8: {ir_id: import_ir58000004, inst_id: inst70000218} -// CHECK:STDOUT: import_ir_instA9: {ir_id: import_ir58000004, inst_id: inst70000241} -// CHECK:STDOUT: import_ir_instAA: {ir_id: import_ir58000004, inst_id: inst70000242} -// CHECK:STDOUT: import_ir_instAB: {ir_id: import_ir58000004, inst_id: inst70000243} -// CHECK:STDOUT: import_ir_instAC: {ir_id: import_ir58000004, inst_id: inst70000244} -// CHECK:STDOUT: import_ir_instAD: {ir_id: import_ir58000004, inst_id: inst70000245} -// CHECK:STDOUT: import_ir_instAE: {ir_id: import_ir58000004, inst_id: inst70000246} -// CHECK:STDOUT: import_ir_instAF: {ir_id: import_ir58000004, inst_id: inst70000247} -// CHECK:STDOUT: import_ir_instB0: {ir_id: import_ir58000004, inst_id: inst7000024B} -// CHECK:STDOUT: import_ir_instB1: {ir_id: import_ir58000004, inst_id: inst70000250} -// CHECK:STDOUT: import_ir_instB2: {ir_id: import_ir58000004, inst_id: inst70000261} -// CHECK:STDOUT: import_ir_instB3: {ir_id: import_ir58000004, inst_id: inst70000266} -// CHECK:STDOUT: import_ir_instB4: {ir_id: import_ir58000004, inst_id: inst70000269} -// CHECK:STDOUT: import_ir_instB5: {ir_id: import_ir58000004, inst_id: inst7000026B} -// CHECK:STDOUT: import_ir_instB6: {ir_id: import_ir58000004, inst_id: inst7000026C} -// CHECK:STDOUT: import_ir_instB7: {ir_id: import_ir58000004, inst_id: inst7000026D} -// CHECK:STDOUT: import_ir_instB8: {ir_id: import_ir58000004, inst_id: inst70000270} -// CHECK:STDOUT: import_ir_instB9: {ir_id: import_ir58000004, inst_id: inst70000278} -// CHECK:STDOUT: import_ir_instBA: {ir_id: import_ir58000004, inst_id: inst7000027B} -// CHECK:STDOUT: import_ir_instBB: {ir_id: import_ir58000004, inst_id: inst7000027D} -// CHECK:STDOUT: import_ir_instBC: {ir_id: import_ir58000004, inst_id: inst7000027E} -// CHECK:STDOUT: import_ir_instBD: {ir_id: import_ir58000004, inst_id: inst7000027F} -// CHECK:STDOUT: import_ir_instBE: {ir_id: import_ir58000004, inst_id: inst70000282} -// CHECK:STDOUT: import_ir_instBF: {ir_id: import_ir58000004, inst_id: inst7000028C} -// CHECK:STDOUT: import_ir_instC0: {ir_id: import_ir58000004, inst_id: inst70000292} -// CHECK:STDOUT: import_ir_instC1: {ir_id: import_ir58000004, inst_id: inst70000296} -// CHECK:STDOUT: import_ir_instC2: {ir_id: import_ir58000004, inst_id: inst70000297} -// CHECK:STDOUT: import_ir_instC3: {ir_id: import_ir58000004, inst_id: inst70000298} -// CHECK:STDOUT: import_ir_instC4: {ir_id: import_ir58000004, inst_id: inst7000029E} -// CHECK:STDOUT: import_ir_instC5: {ir_id: import_ir58000004, inst_id: inst7000021B} -// CHECK:STDOUT: import_ir_instC6: {ir_id: import_ir58000004, inst_id: inst70000215} -// CHECK:STDOUT: import_ir_instC7: {ir_id: import_ir58000004, inst_id: inst70000210} -// CHECK:STDOUT: import_ir_instC8: {ir_id: import_ir58000004, inst_id: inst7000022F} -// CHECK:STDOUT: import_ir_instC9: {ir_id: import_ir58000004, inst_id: inst70000231} -// CHECK:STDOUT: import_ir_instCA: {ir_id: import_ir58000004, inst_id: inst7000020E} -// CHECK:STDOUT: import_ir_instCB: {ir_id: import_ir58000004, inst_id: inst70000213} -// CHECK:STDOUT: import_ir_instCC: {ir_id: import_ir58000004, inst_id: inst70000218} -// CHECK:STDOUT: import_ir_instCD: {ir_id: import_ir58000004, inst_id: inst7000020F} -// CHECK:STDOUT: import_ir_instCE: {ir_id: import_ir58000004, inst_id: inst70000214} -// CHECK:STDOUT: import_ir_instCF: {ir_id: import_ir58000004, inst_id: inst7000021A} -// CHECK:STDOUT: import_ir_instD0: {ir_id: import_ir58000004, inst_id: inst70000222} -// CHECK:STDOUT: import_ir_instD1: {ir_id: import_ir58000004, inst_id: inst70000225} -// CHECK:STDOUT: import_ir_instD2: {ir_id: import_ir58000004, inst_id: inst70000228} -// CHECK:STDOUT: import_ir_instD3: {ir_id: import_ir58000004, inst_id: inst7000022C} -// CHECK:STDOUT: import_ir_instD4: {ir_id: import_ir58000004, inst_id: inst70000230} -// CHECK:STDOUT: import_ir_instD5: {ir_id: import_ir58000004, inst_id: inst70000239} -// CHECK:STDOUT: import_ir_instD6: {ir_id: import_ir58000004, inst_id: inst70000259} -// CHECK:STDOUT: import_ir_instD7: {ir_id: import_ir58000004, inst_id: inst7000025A} +// CHECK:STDOUT: import_ir_inst0: {ir_id: import_ir78000004, inst_id: inst70000010} +// CHECK:STDOUT: import_ir_inst1: {ir_id: import_ir78000004, inst_id: inst70000010} +// CHECK:STDOUT: import_ir_inst2: {ir_id: import_ir78000004, inst_id: inst70000015} +// CHECK:STDOUT: import_ir_inst3: {ir_id: import_ir78000004, inst_id: inst70000035} +// CHECK:STDOUT: import_ir_inst4: {ir_id: import_ir78000004, inst_id: inst7000002D} +// CHECK:STDOUT: import_ir_inst5: {ir_id: import_ir78000004, inst_id: inst70000012} +// CHECK:STDOUT: import_ir_inst6: {ir_id: import_ir78000004, inst_id: inst7000002D} +// CHECK:STDOUT: import_ir_inst7: {ir_id: import_ir78000004, inst_id: inst70000027} +// CHECK:STDOUT: import_ir_inst8: {ir_id: import_ir78000004, inst_id: inst70000028} +// CHECK:STDOUT: import_ir_inst9: {ir_id: import_ir78000004, inst_id: inst7000001E} +// CHECK:STDOUT: import_ir_instA: {ir_id: import_ir78000004, inst_id: inst70000020} +// CHECK:STDOUT: import_ir_instB: {ir_id: import_ir78000004, inst_id: inst70000023} +// CHECK:STDOUT: import_ir_instC: {ir_id: import_ir78000004, inst_id: inst70000024} +// CHECK:STDOUT: import_ir_instD: {ir_id: import_ir78000004, inst_id: inst70000012} +// CHECK:STDOUT: import_ir_instE: {ir_id: import_ir78000004, inst_id: inst70000017} +// CHECK:STDOUT: import_ir_instF: {ir_id: import_ir78000004, inst_id: inst7000001A} +// CHECK:STDOUT: import_ir_inst10: {ir_id: import_ir78000004, inst_id: inst7000001F} +// CHECK:STDOUT: import_ir_inst11: {ir_id: import_ir78000004, inst_id: inst70000026} +// CHECK:STDOUT: import_ir_inst12: {ir_id: import_ir78000004, inst_id: inst70000031} +// CHECK:STDOUT: import_ir_inst13: {ir_id: import_ir78000004, inst_id: inst70000032} +// CHECK:STDOUT: import_ir_inst14: {ir_id: import_ir78000004, inst_id: inst70000033} +// CHECK:STDOUT: import_ir_inst15: {ir_id: import_ir78000004, inst_id: inst70000012} +// CHECK:STDOUT: import_ir_inst16: {ir_id: import_ir78000004, inst_id: inst7000002D} +// CHECK:STDOUT: import_ir_inst17: {ir_id: import_ir78000004, inst_id: inst70000072} +// CHECK:STDOUT: import_ir_inst18: {ir_id: import_ir78000004, inst_id: inst70000070} +// CHECK:STDOUT: import_ir_inst19: {ir_id: import_ir78000004, inst_id: inst70000089} +// CHECK:STDOUT: import_ir_inst1A: {ir_id: import_ir78000004, inst_id: inst70000071} +// CHECK:STDOUT: import_ir_inst1B: {ir_id: import_ir78000004, inst_id: inst70000089} +// CHECK:STDOUT: import_ir_inst1C: {ir_id: import_ir78000004, inst_id: inst70000084} +// CHECK:STDOUT: import_ir_inst1D: {ir_id: import_ir78000004, inst_id: inst70000085} +// CHECK:STDOUT: import_ir_inst1E: {ir_id: import_ir78000004, inst_id: inst7000007D} +// CHECK:STDOUT: import_ir_inst1F: {ir_id: import_ir78000004, inst_id: inst7000007F} +// CHECK:STDOUT: import_ir_inst20: {ir_id: import_ir78000004, inst_id: inst70000080} +// CHECK:STDOUT: import_ir_inst21: {ir_id: import_ir78000004, inst_id: inst70000081} +// CHECK:STDOUT: import_ir_inst22: {ir_id: import_ir78000004, inst_id: inst70000062} +// CHECK:STDOUT: import_ir_inst23: {ir_id: import_ir78000004, inst_id: inst70000078} +// CHECK:STDOUT: import_ir_inst24: {ir_id: import_ir78000004, inst_id: inst70000079} +// CHECK:STDOUT: import_ir_inst25: {ir_id: import_ir78000004, inst_id: inst7000007A} +// CHECK:STDOUT: import_ir_inst26: {ir_id: import_ir78000004, inst_id: inst7000007E} +// CHECK:STDOUT: import_ir_inst27: {ir_id: import_ir78000004, inst_id: inst70000083} +// CHECK:STDOUT: import_ir_inst28: {ir_id: import_ir78000004, inst_id: inst70000093} +// CHECK:STDOUT: import_ir_inst29: {ir_id: import_ir78000004, inst_id: inst7000009A} +// CHECK:STDOUT: import_ir_inst2A: {ir_id: import_ir78000004, inst_id: inst700000A1} +// CHECK:STDOUT: import_ir_inst2B: {ir_id: import_ir78000004, inst_id: inst700000A7} +// CHECK:STDOUT: import_ir_inst2C: {ir_id: import_ir78000004, inst_id: inst700000A8} +// CHECK:STDOUT: import_ir_inst2D: {ir_id: import_ir78000004, inst_id: inst700000A9} +// CHECK:STDOUT: import_ir_inst2E: {ir_id: import_ir78000004, inst_id: inst700000AF} +// CHECK:STDOUT: import_ir_inst2F: {ir_id: import_ir78000004, inst_id: inst70000065} +// CHECK:STDOUT: import_ir_inst30: {ir_id: import_ir78000004, inst_id: inst7000006B} +// CHECK:STDOUT: import_ir_inst31: {ir_id: import_ir78000004, inst_id: inst7000006E} +// CHECK:STDOUT: import_ir_inst32: {ir_id: import_ir78000004, inst_id: inst70000062} +// CHECK:STDOUT: import_ir_inst33: {ir_id: import_ir78000004, inst_id: inst70000064} +// CHECK:STDOUT: import_ir_inst34: {ir_id: import_ir78000004, inst_id: inst70000069} +// CHECK:STDOUT: import_ir_inst35: {ir_id: import_ir78000004, inst_id: inst7000006D} +// CHECK:STDOUT: import_ir_inst36: {ir_id: import_ir78000004, inst_id: inst70000074} +// CHECK:STDOUT: import_ir_inst37: {ir_id: import_ir78000004, inst_id: inst7000008C} +// CHECK:STDOUT: import_ir_inst38: {ir_id: import_ir78000004, inst_id: inst7000008D} +// CHECK:STDOUT: import_ir_inst39: {ir_id: import_ir78000004, inst_id: inst700000C2} +// CHECK:STDOUT: import_ir_inst3A: {ir_id: import_ir78000004, inst_id: inst700000C0} +// CHECK:STDOUT: import_ir_inst3B: {ir_id: import_ir78000004, inst_id: inst700000BE} +// CHECK:STDOUT: import_ir_inst3C: {ir_id: import_ir78000004, inst_id: inst700000BF} +// CHECK:STDOUT: import_ir_inst3D: {ir_id: import_ir78000004, inst_id: inst700000DE} +// CHECK:STDOUT: import_ir_inst3E: {ir_id: import_ir78000004, inst_id: inst700000DC} +// CHECK:STDOUT: import_ir_inst3F: {ir_id: import_ir78000004, inst_id: inst700000DA} +// CHECK:STDOUT: import_ir_inst40: {ir_id: import_ir78000004, inst_id: inst700000DB} +// CHECK:STDOUT: import_ir_inst41: {ir_id: import_ir78000004, inst_id: inst700000FA} +// CHECK:STDOUT: import_ir_inst42: {ir_id: import_ir78000004, inst_id: inst700000F8} +// CHECK:STDOUT: import_ir_inst43: {ir_id: import_ir78000004, inst_id: inst700000F6} +// CHECK:STDOUT: import_ir_inst44: {ir_id: import_ir78000004, inst_id: inst700000F7} +// CHECK:STDOUT: import_ir_inst45: {ir_id: import_ir78000004, inst_id: inst70000116} +// CHECK:STDOUT: import_ir_inst46: {ir_id: import_ir78000004, inst_id: inst70000114} +// CHECK:STDOUT: import_ir_inst47: {ir_id: import_ir78000004, inst_id: inst70000112} +// CHECK:STDOUT: import_ir_inst48: {ir_id: import_ir78000004, inst_id: inst70000113} +// CHECK:STDOUT: import_ir_inst49: {ir_id: import_ir78000004, inst_id: inst70000139} +// CHECK:STDOUT: import_ir_inst4A: {ir_id: import_ir78000004, inst_id: inst70000137} +// CHECK:STDOUT: import_ir_inst4B: {ir_id: import_ir78000004, inst_id: inst7000014D} +// CHECK:STDOUT: import_ir_inst4C: {ir_id: import_ir78000004, inst_id: inst70000138} +// CHECK:STDOUT: import_ir_inst4D: {ir_id: import_ir78000004, inst_id: inst70000130} +// CHECK:STDOUT: import_ir_inst4E: {ir_id: import_ir78000004, inst_id: inst70000132} +// CHECK:STDOUT: import_ir_inst4F: {ir_id: import_ir78000004, inst_id: inst70000135} +// CHECK:STDOUT: import_ir_inst50: {ir_id: import_ir78000004, inst_id: inst7000012D} +// CHECK:STDOUT: import_ir_inst51: {ir_id: import_ir78000004, inst_id: inst7000012F} +// CHECK:STDOUT: import_ir_inst52: {ir_id: import_ir78000004, inst_id: inst70000134} +// CHECK:STDOUT: import_ir_inst53: {ir_id: import_ir78000004, inst_id: inst7000013B} +// CHECK:STDOUT: import_ir_inst54: {ir_id: import_ir78000004, inst_id: inst7000014D} +// CHECK:STDOUT: import_ir_inst55: {ir_id: import_ir78000004, inst_id: inst70000148} +// CHECK:STDOUT: import_ir_inst56: {ir_id: import_ir78000004, inst_id: inst70000149} +// CHECK:STDOUT: import_ir_inst57: {ir_id: import_ir78000004, inst_id: inst70000141} +// CHECK:STDOUT: import_ir_inst58: {ir_id: import_ir78000004, inst_id: inst70000143} +// CHECK:STDOUT: import_ir_inst59: {ir_id: import_ir78000004, inst_id: inst70000144} +// CHECK:STDOUT: import_ir_inst5A: {ir_id: import_ir78000004, inst_id: inst70000145} +// CHECK:STDOUT: import_ir_inst5B: {ir_id: import_ir78000004, inst_id: inst7000012D} +// CHECK:STDOUT: import_ir_inst5C: {ir_id: import_ir78000004, inst_id: inst7000013D} +// CHECK:STDOUT: import_ir_inst5D: {ir_id: import_ir78000004, inst_id: inst7000013E} +// CHECK:STDOUT: import_ir_inst5E: {ir_id: import_ir78000004, inst_id: inst70000142} +// CHECK:STDOUT: import_ir_inst5F: {ir_id: import_ir78000004, inst_id: inst70000147} +// CHECK:STDOUT: import_ir_inst60: {ir_id: import_ir78000004, inst_id: inst70000150} +// CHECK:STDOUT: import_ir_inst61: {ir_id: import_ir78000004, inst_id: inst70000151} +// CHECK:STDOUT: import_ir_inst62: {ir_id: import_ir78000004, inst_id: inst70000154} +// CHECK:STDOUT: import_ir_inst63: {ir_id: import_ir78000004, inst_id: inst7000015C} +// CHECK:STDOUT: import_ir_inst64: {ir_id: import_ir78000004, inst_id: inst7000015A} +// CHECK:STDOUT: import_ir_inst65: {ir_id: import_ir78000004, inst_id: inst70000158} +// CHECK:STDOUT: import_ir_inst66: {ir_id: import_ir78000004, inst_id: inst70000159} +// CHECK:STDOUT: import_ir_inst67: {ir_id: import_ir78000004, inst_id: inst70000175} +// CHECK:STDOUT: import_ir_inst68: {ir_id: import_ir78000004, inst_id: inst70000173} +// CHECK:STDOUT: import_ir_inst69: {ir_id: import_ir78000004, inst_id: inst70000171} +// CHECK:STDOUT: import_ir_inst6A: {ir_id: import_ir78000004, inst_id: inst70000172} +// CHECK:STDOUT: import_ir_inst6B: {ir_id: import_ir78000004, inst_id: inst700001AB} +// CHECK:STDOUT: import_ir_inst6C: {ir_id: import_ir78000004, inst_id: inst700001A9} +// CHECK:STDOUT: import_ir_inst6D: {ir_id: import_ir78000004, inst_id: inst700001C6} +// CHECK:STDOUT: import_ir_inst6E: {ir_id: import_ir78000004, inst_id: inst700001AA} +// CHECK:STDOUT: import_ir_inst6F: {ir_id: import_ir78000004, inst_id: inst700001C6} +// CHECK:STDOUT: import_ir_inst70: {ir_id: import_ir78000004, inst_id: inst700001C1} +// CHECK:STDOUT: import_ir_inst71: {ir_id: import_ir78000004, inst_id: inst700001C2} +// CHECK:STDOUT: import_ir_inst72: {ir_id: import_ir78000004, inst_id: inst700001BA} +// CHECK:STDOUT: import_ir_inst73: {ir_id: import_ir78000004, inst_id: inst700001BC} +// CHECK:STDOUT: import_ir_inst74: {ir_id: import_ir78000004, inst_id: inst700001BD} +// CHECK:STDOUT: import_ir_inst75: {ir_id: import_ir78000004, inst_id: inst700001BE} +// CHECK:STDOUT: import_ir_inst76: {ir_id: import_ir78000004, inst_id: inst7000018C} +// CHECK:STDOUT: import_ir_inst77: {ir_id: import_ir78000004, inst_id: inst70000191} +// CHECK:STDOUT: import_ir_inst78: {ir_id: import_ir78000004, inst_id: inst700001B3} +// CHECK:STDOUT: import_ir_inst79: {ir_id: import_ir78000004, inst_id: inst700001B4} +// CHECK:STDOUT: import_ir_inst7A: {ir_id: import_ir78000004, inst_id: inst700001B5} +// CHECK:STDOUT: import_ir_inst7B: {ir_id: import_ir78000004, inst_id: inst700001B6} +// CHECK:STDOUT: import_ir_inst7C: {ir_id: import_ir78000004, inst_id: inst700001B7} +// CHECK:STDOUT: import_ir_inst7D: {ir_id: import_ir78000004, inst_id: inst700001BB} +// CHECK:STDOUT: import_ir_inst7E: {ir_id: import_ir78000004, inst_id: inst700001C0} +// CHECK:STDOUT: import_ir_inst7F: {ir_id: import_ir78000004, inst_id: inst700001D1} +// CHECK:STDOUT: import_ir_inst80: {ir_id: import_ir78000004, inst_id: inst700001D7} +// CHECK:STDOUT: import_ir_inst81: {ir_id: import_ir78000004, inst_id: inst700001DA} +// CHECK:STDOUT: import_ir_inst82: {ir_id: import_ir78000004, inst_id: inst700001DC} +// CHECK:STDOUT: import_ir_inst83: {ir_id: import_ir78000004, inst_id: inst700001DD} +// CHECK:STDOUT: import_ir_inst84: {ir_id: import_ir78000004, inst_id: inst700001DE} +// CHECK:STDOUT: import_ir_inst85: {ir_id: import_ir78000004, inst_id: inst700001E1} +// CHECK:STDOUT: import_ir_inst86: {ir_id: import_ir78000004, inst_id: inst700001EB} +// CHECK:STDOUT: import_ir_inst87: {ir_id: import_ir78000004, inst_id: inst700001F1} +// CHECK:STDOUT: import_ir_inst88: {ir_id: import_ir78000004, inst_id: inst700001F5} +// CHECK:STDOUT: import_ir_inst89: {ir_id: import_ir78000004, inst_id: inst700001F6} +// CHECK:STDOUT: import_ir_inst8A: {ir_id: import_ir78000004, inst_id: inst700001F7} +// CHECK:STDOUT: import_ir_inst8B: {ir_id: import_ir78000004, inst_id: inst700001FD} +// CHECK:STDOUT: import_ir_inst8C: {ir_id: import_ir78000004, inst_id: inst70000194} +// CHECK:STDOUT: import_ir_inst8D: {ir_id: import_ir78000004, inst_id: inst7000018E} +// CHECK:STDOUT: import_ir_inst8E: {ir_id: import_ir78000004, inst_id: inst700001A4} +// CHECK:STDOUT: import_ir_inst8F: {ir_id: import_ir78000004, inst_id: inst700001A6} +// CHECK:STDOUT: import_ir_inst90: {ir_id: import_ir78000004, inst_id: inst7000018C} +// CHECK:STDOUT: import_ir_inst91: {ir_id: import_ir78000004, inst_id: inst70000191} +// CHECK:STDOUT: import_ir_inst92: {ir_id: import_ir78000004, inst_id: inst7000018D} +// CHECK:STDOUT: import_ir_inst93: {ir_id: import_ir78000004, inst_id: inst70000193} +// CHECK:STDOUT: import_ir_inst94: {ir_id: import_ir78000004, inst_id: inst7000019A} +// CHECK:STDOUT: import_ir_inst95: {ir_id: import_ir78000004, inst_id: inst7000019D} +// CHECK:STDOUT: import_ir_inst96: {ir_id: import_ir78000004, inst_id: inst700001A1} +// CHECK:STDOUT: import_ir_inst97: {ir_id: import_ir78000004, inst_id: inst700001A5} +// CHECK:STDOUT: import_ir_inst98: {ir_id: import_ir78000004, inst_id: inst700001AD} +// CHECK:STDOUT: import_ir_inst99: {ir_id: import_ir78000004, inst_id: inst700001C9} +// CHECK:STDOUT: import_ir_inst9A: {ir_id: import_ir78000004, inst_id: inst700001CA} +// CHECK:STDOUT: import_ir_inst9B: {ir_id: import_ir78000004, inst_id: inst70000237} +// CHECK:STDOUT: import_ir_inst9C: {ir_id: import_ir78000004, inst_id: inst70000235} +// CHECK:STDOUT: import_ir_inst9D: {ir_id: import_ir78000004, inst_id: inst70000256} +// CHECK:STDOUT: import_ir_inst9E: {ir_id: import_ir78000004, inst_id: inst70000236} +// CHECK:STDOUT: import_ir_inst9F: {ir_id: import_ir78000004, inst_id: inst70000256} +// CHECK:STDOUT: import_ir_instA0: {ir_id: import_ir78000004, inst_id: inst70000251} +// CHECK:STDOUT: import_ir_instA1: {ir_id: import_ir78000004, inst_id: inst70000252} +// CHECK:STDOUT: import_ir_instA2: {ir_id: import_ir78000004, inst_id: inst7000024A} +// CHECK:STDOUT: import_ir_instA3: {ir_id: import_ir78000004, inst_id: inst7000024C} +// CHECK:STDOUT: import_ir_instA4: {ir_id: import_ir78000004, inst_id: inst7000024D} +// CHECK:STDOUT: import_ir_instA5: {ir_id: import_ir78000004, inst_id: inst7000024E} +// CHECK:STDOUT: import_ir_instA6: {ir_id: import_ir78000004, inst_id: inst7000020E} +// CHECK:STDOUT: import_ir_instA7: {ir_id: import_ir78000004, inst_id: inst70000213} +// CHECK:STDOUT: import_ir_instA8: {ir_id: import_ir78000004, inst_id: inst70000218} +// CHECK:STDOUT: import_ir_instA9: {ir_id: import_ir78000004, inst_id: inst70000241} +// CHECK:STDOUT: import_ir_instAA: {ir_id: import_ir78000004, inst_id: inst70000242} +// CHECK:STDOUT: import_ir_instAB: {ir_id: import_ir78000004, inst_id: inst70000243} +// CHECK:STDOUT: import_ir_instAC: {ir_id: import_ir78000004, inst_id: inst70000244} +// CHECK:STDOUT: import_ir_instAD: {ir_id: import_ir78000004, inst_id: inst70000245} +// CHECK:STDOUT: import_ir_instAE: {ir_id: import_ir78000004, inst_id: inst70000246} +// CHECK:STDOUT: import_ir_instAF: {ir_id: import_ir78000004, inst_id: inst70000247} +// CHECK:STDOUT: import_ir_instB0: {ir_id: import_ir78000004, inst_id: inst7000024B} +// CHECK:STDOUT: import_ir_instB1: {ir_id: import_ir78000004, inst_id: inst70000250} +// CHECK:STDOUT: import_ir_instB2: {ir_id: import_ir78000004, inst_id: inst70000261} +// CHECK:STDOUT: import_ir_instB3: {ir_id: import_ir78000004, inst_id: inst70000266} +// CHECK:STDOUT: import_ir_instB4: {ir_id: import_ir78000004, inst_id: inst70000269} +// CHECK:STDOUT: import_ir_instB5: {ir_id: import_ir78000004, inst_id: inst7000026B} +// CHECK:STDOUT: import_ir_instB6: {ir_id: import_ir78000004, inst_id: inst7000026C} +// CHECK:STDOUT: import_ir_instB7: {ir_id: import_ir78000004, inst_id: inst7000026D} +// CHECK:STDOUT: import_ir_instB8: {ir_id: import_ir78000004, inst_id: inst70000270} +// CHECK:STDOUT: import_ir_instB9: {ir_id: import_ir78000004, inst_id: inst70000278} +// CHECK:STDOUT: import_ir_instBA: {ir_id: import_ir78000004, inst_id: inst7000027B} +// CHECK:STDOUT: import_ir_instBB: {ir_id: import_ir78000004, inst_id: inst7000027D} +// CHECK:STDOUT: import_ir_instBC: {ir_id: import_ir78000004, inst_id: inst7000027E} +// CHECK:STDOUT: import_ir_instBD: {ir_id: import_ir78000004, inst_id: inst7000027F} +// CHECK:STDOUT: import_ir_instBE: {ir_id: import_ir78000004, inst_id: inst70000282} +// CHECK:STDOUT: import_ir_instBF: {ir_id: import_ir78000004, inst_id: inst7000028C} +// CHECK:STDOUT: import_ir_instC0: {ir_id: import_ir78000004, inst_id: inst70000292} +// CHECK:STDOUT: import_ir_instC1: {ir_id: import_ir78000004, inst_id: inst70000296} +// CHECK:STDOUT: import_ir_instC2: {ir_id: import_ir78000004, inst_id: inst70000297} +// CHECK:STDOUT: import_ir_instC3: {ir_id: import_ir78000004, inst_id: inst70000298} +// CHECK:STDOUT: import_ir_instC4: {ir_id: import_ir78000004, inst_id: inst7000029E} +// CHECK:STDOUT: import_ir_instC5: {ir_id: import_ir78000004, inst_id: inst7000021B} +// CHECK:STDOUT: import_ir_instC6: {ir_id: import_ir78000004, inst_id: inst70000215} +// CHECK:STDOUT: import_ir_instC7: {ir_id: import_ir78000004, inst_id: inst70000210} +// CHECK:STDOUT: import_ir_instC8: {ir_id: import_ir78000004, inst_id: inst7000022F} +// CHECK:STDOUT: import_ir_instC9: {ir_id: import_ir78000004, inst_id: inst70000231} +// CHECK:STDOUT: import_ir_instCA: {ir_id: import_ir78000004, inst_id: inst7000020E} +// CHECK:STDOUT: import_ir_instCB: {ir_id: import_ir78000004, inst_id: inst70000213} +// CHECK:STDOUT: import_ir_instCC: {ir_id: import_ir78000004, inst_id: inst70000218} +// CHECK:STDOUT: import_ir_instCD: {ir_id: import_ir78000004, inst_id: inst7000020F} +// CHECK:STDOUT: import_ir_instCE: {ir_id: import_ir78000004, inst_id: inst70000214} +// CHECK:STDOUT: import_ir_instCF: {ir_id: import_ir78000004, inst_id: inst7000021A} +// CHECK:STDOUT: import_ir_instD0: {ir_id: import_ir78000004, inst_id: inst70000222} +// CHECK:STDOUT: import_ir_instD1: {ir_id: import_ir78000004, inst_id: inst70000225} +// CHECK:STDOUT: import_ir_instD2: {ir_id: import_ir78000004, inst_id: inst70000228} +// CHECK:STDOUT: import_ir_instD3: {ir_id: import_ir78000004, inst_id: inst7000022C} +// CHECK:STDOUT: import_ir_instD4: {ir_id: import_ir78000004, inst_id: inst70000230} +// CHECK:STDOUT: import_ir_instD5: {ir_id: import_ir78000004, inst_id: inst70000239} +// CHECK:STDOUT: import_ir_instD6: {ir_id: import_ir78000004, inst_id: inst70000259} +// CHECK:STDOUT: import_ir_instD7: {ir_id: import_ir78000004, inst_id: inst7000025A} // CHECK:STDOUT: clang_decls: {} // CHECK:STDOUT: name_scopes: -// CHECK:STDOUT: name_scope0: {inst: instF, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name(Core): inst58000011, name0: inst5800003E}} -// CHECK:STDOUT: name_scope58000001: {inst: inst58000011, parent_scope: name_scope0, has_error: false, extended_scopes: [], names: {name3: inst5800004E}} -// CHECK:STDOUT: name_scope58000002: {inst: inst5800004F, parent_scope: name_scope58000001, has_error: false, extended_scopes: [], names: {name(SelfType): inst5800006A}} -// CHECK:STDOUT: name_scope58000003: {inst: inst58000051, parent_scope: name_scope58000002, has_error: false, extended_scopes: [], names: {name4: inst58000053}} -// CHECK:STDOUT: name_scope58000004: {inst: inst58000070, parent_scope: name_scope58000001, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope58000005: {inst: inst580000A5, parent_scope: name_scope58000001, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope58000006: {inst: inst580000A9, parent_scope: name_scope58000001, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope58000007: {inst: inst580000AD, parent_scope: name_scope58000001, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope58000008: {inst: inst580000B1, parent_scope: name_scope58000001, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope58000009: {inst: inst580000B5, parent_scope: name_scope58000001, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope5800000A: {inst: inst580000D3, parent_scope: name_scope58000001, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope5800000B: {inst: inst580000D7, parent_scope: name_scope58000001, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope5800000C: {inst: inst580000DB, parent_scope: name_scope58000001, has_error: false, extended_scopes: [], names: {}} -// CHECK:STDOUT: name_scope5800000D: {inst: inst5800011F, parent_scope: name_scope58000001, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope0: {inst: instF, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name(Core): inst78000011, name0: inst7800003E}} +// CHECK:STDOUT: name_scope78000001: {inst: inst78000011, parent_scope: name_scope0, has_error: false, extended_scopes: [], names: {name3: inst7800004E}} +// CHECK:STDOUT: name_scope78000002: {inst: inst7800004F, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {name(SelfType): inst7800006A}} +// CHECK:STDOUT: name_scope78000003: {inst: inst78000051, parent_scope: name_scope78000002, has_error: false, extended_scopes: [], names: {name4: inst78000053}} +// CHECK:STDOUT: name_scope78000004: {inst: inst78000070, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope78000005: {inst: inst780000A5, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope78000006: {inst: inst780000A9, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope78000007: {inst: inst780000AD, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope78000008: {inst: inst780000B1, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope78000009: {inst: inst780000B5, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope7800000A: {inst: inst780000D3, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope7800000B: {inst: inst780000D7, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope7800000C: {inst: inst780000DB, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {}} +// CHECK:STDOUT: name_scope7800000D: {inst: inst7800011F, parent_scope: name_scope78000001, has_error: false, extended_scopes: [], names: {}} // CHECK:STDOUT: entity_names: -// CHECK:STDOUT: entity_name58000000: {name: name(PeriodSelf), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000001: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000002: {name: name2, parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000003: {name: name3, parent_scope: name_scope58000001, index: -1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000004: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000005: {name: name4, parent_scope: name_scope58000003, index: -1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000006: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000007: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000008: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000009: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800000A: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800000B: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800000C: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800000D: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800000E: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800000F: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000010: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000011: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000012: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000013: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000014: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000015: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000016: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000017: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000018: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000019: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800001A: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800001B: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800001C: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800001D: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800001E: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800001F: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000020: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000021: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000022: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000023: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000024: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000025: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000026: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000027: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000028: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000029: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800002A: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800002B: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800002C: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800002D: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800002E: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800002F: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000030: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000031: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000032: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000033: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000034: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000035: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000036: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000037: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000038: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name58000039: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800003A: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800003B: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800003C: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800003D: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800003E: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} -// CHECK:STDOUT: entity_name5800003F: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000000: {name: name(PeriodSelf), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000001: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000002: {name: name2, parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000003: {name: name3, parent_scope: name_scope78000001, index: -1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000004: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000005: {name: name4, parent_scope: name_scope78000003, index: -1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000006: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000007: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000008: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000009: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800000A: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800000B: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800000C: {name: name(SelfType), parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800000D: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800000E: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800000F: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000010: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000011: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000012: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000013: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000014: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000015: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000016: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000017: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000018: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000019: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800001A: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800001B: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800001C: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800001D: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800001E: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800001F: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000020: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000021: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000022: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000023: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000024: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000025: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000026: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000027: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000028: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000029: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800002A: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800002B: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800002C: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800002D: {name: name(SelfValue), parent_scope: name_scope, index: -1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800002E: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800002F: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000030: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000031: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000032: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000033: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000034: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000035: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000036: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000037: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000038: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name78000039: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800003A: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800003B: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800003C: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800003D: {name: name6, parent_scope: name_scope, index: 2, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800003E: {name: name5, parent_scope: name_scope, index: 1, is_template: 0, is_unused: 0, form: constant} +// CHECK:STDOUT: entity_name7800003F: {name: name1, parent_scope: name_scope, index: 0, is_template: 0, is_unused: 0, form: constant} // CHECK:STDOUT: cpp_global_vars: {} // CHECK:STDOUT: functions: -// CHECK:STDOUT: function58000000: {name: name0, parent_scope: name_scope0, call_param_patterns_id: inst_block58000011, call_params_id: inst_block58000012, return_type_inst_id: inst58000030, return_form_inst_id: inst58000032, return_patterns_id: inst_block58000010, body: [inst_block58000019]} -// CHECK:STDOUT: function58000001: {name: name4, parent_scope: name_scope58000003, call_param_patterns_id: inst_block5800001F, return_type_inst_id: inst58000060, return_form_inst_id: inst58000061, return_patterns_id: inst_block58000021} -// CHECK:STDOUT: function58000002: {name: name4, parent_scope: name_scope58000004, call_param_patterns_id: inst_block5800002B, return_type_inst_id: inst58000080, return_form_inst_id: inst58000081, return_patterns_id: inst_block5800002D} -// CHECK:STDOUT: function58000003: {name: name4, parent_scope: name_scope58000009, call_param_patterns_id: inst_block58000042, return_type_inst_id: inst580000C8, return_form_inst_id: inst580000C9, return_patterns_id: inst_block58000044} -// CHECK:STDOUT: function58000004: {name: name4, parent_scope: name_scope5800000C, call_param_patterns_id: inst_block58000050, return_type_inst_id: inst580000ED, return_form_inst_id: inst580000EE, return_patterns_id: inst_block58000052} -// CHECK:STDOUT: function58000005: {name: name4, parent_scope: name_scope5800000D, call_param_patterns_id: inst_block5800006D, return_type_inst_id: inst58000131, return_form_inst_id: inst58000132, return_patterns_id: inst_block5800006F} +// CHECK:STDOUT: function78000000: {name: name0, parent_scope: name_scope0, call_param_patterns_id: inst_block78000011, call_params_id: inst_block78000012, return_type_inst_id: inst78000030, return_form_inst_id: inst78000032, return_patterns_id: inst_block78000010, body: [inst_block78000019]} +// CHECK:STDOUT: function78000001: {name: name4, parent_scope: name_scope78000003, call_param_patterns_id: inst_block7800001F, return_type_inst_id: inst78000060, return_form_inst_id: inst78000061, return_patterns_id: inst_block78000021} +// CHECK:STDOUT: function78000002: {name: name4, parent_scope: name_scope78000004, call_param_patterns_id: inst_block7800002B, return_type_inst_id: inst78000080, return_form_inst_id: inst78000081, return_patterns_id: inst_block7800002D} +// CHECK:STDOUT: function78000003: {name: name4, parent_scope: name_scope78000009, call_param_patterns_id: inst_block78000042, return_type_inst_id: inst780000C8, return_form_inst_id: inst780000C9, return_patterns_id: inst_block78000044} +// CHECK:STDOUT: function78000004: {name: name4, parent_scope: name_scope7800000C, call_param_patterns_id: inst_block78000050, return_type_inst_id: inst780000ED, return_form_inst_id: inst780000EE, return_patterns_id: inst_block78000052} +// CHECK:STDOUT: function78000005: {name: name4, parent_scope: name_scope7800000D, call_param_patterns_id: inst_block7800006D, return_type_inst_id: inst78000131, return_form_inst_id: inst78000132, return_patterns_id: inst_block7800006F} // CHECK:STDOUT: classes: {} // CHECK:STDOUT: interfaces: -// CHECK:STDOUT: interface58000000: {name: name3, parent_scope: name_scope58000001, require_impls_block_id: require_block_empty} +// CHECK:STDOUT: interface78000000: {name: name3, parent_scope: name_scope78000001, require_impls_block_id: require_block_empty} // CHECK:STDOUT: associated_constants: {} // CHECK:STDOUT: impls: -// CHECK:STDOUT: impl58000000: {self: inst5800009B, constraint: inst5800009C, witness: inst5800006F} -// CHECK:STDOUT: impl58000001: {self: inst580000A6, constraint: inst580000A7, witness: inst580000A4} -// CHECK:STDOUT: impl58000002: {self: inst580000AA, constraint: inst580000AB, witness: inst580000A8} -// CHECK:STDOUT: impl58000003: {self: inst580000AE, constraint: inst580000AF, witness: inst580000AC} -// CHECK:STDOUT: impl58000004: {self: inst580000B2, constraint: inst580000B3, witness: inst580000B0} -// CHECK:STDOUT: impl58000005: {self: inst580000BA, constraint: inst580000BB, witness: inst580000B4} -// CHECK:STDOUT: impl58000006: {self: inst580000D4, constraint: inst580000D5, witness: inst580000D2} -// CHECK:STDOUT: impl58000007: {self: inst580000D8, constraint: inst580000D9, witness: inst580000D6} -// CHECK:STDOUT: impl58000008: {self: inst58000111, constraint: inst58000112, witness: inst580000DA} -// CHECK:STDOUT: impl58000009: {self: inst5800015F, constraint: inst58000160, witness: inst5800011E} +// CHECK:STDOUT: impl78000000: {self: inst7800009B, constraint: inst7800009C, witness: inst7800006F} +// CHECK:STDOUT: impl78000001: {self: inst780000A6, constraint: inst780000A7, witness: inst780000A4} +// CHECK:STDOUT: impl78000002: {self: inst780000AA, constraint: inst780000AB, witness: inst780000A8} +// CHECK:STDOUT: impl78000003: {self: inst780000AE, constraint: inst780000AF, witness: inst780000AC} +// CHECK:STDOUT: impl78000004: {self: inst780000B2, constraint: inst780000B3, witness: inst780000B0} +// CHECK:STDOUT: impl78000005: {self: inst780000BA, constraint: inst780000BB, witness: inst780000B4} +// CHECK:STDOUT: impl78000006: {self: inst780000D4, constraint: inst780000D5, witness: inst780000D2} +// CHECK:STDOUT: impl78000007: {self: inst780000D8, constraint: inst780000D9, witness: inst780000D6} +// CHECK:STDOUT: impl78000008: {self: inst78000111, constraint: inst78000112, witness: inst780000DA} +// CHECK:STDOUT: impl78000009: {self: inst7800015F, constraint: inst78000160, witness: inst7800011E} // CHECK:STDOUT: generics: -// CHECK:STDOUT: generic58000000: {decl: inst5800003E, bindings: inst_block58000015, self_specific_id: specific58000000, decl_block_id: inst_block58000017, definition_block_id: inst_block58000091} -// CHECK:STDOUT: generic58000001: {decl: inst58000051, bindings: inst_block5800001C, self_specific_id: specific58000001, decl_block_id: inst_block_empty, definition_block_id: inst_block58000026} -// CHECK:STDOUT: generic58000002: {decl: inst58000056, bindings: inst_block58000022, self_specific_id: specific58000002, decl_block_id: inst_block58000023, definition_block_id: inst_block} -// CHECK:STDOUT: generic58000003: {decl: inst58000070, bindings: inst_block58000037, self_specific_id: specific58000004, decl_block_id: inst_block58000039, definition_block_id: inst_block5800003B} -// CHECK:STDOUT: generic58000004: {decl: inst58000077, bindings: inst_block5800002E, self_specific_id: specific58000007, decl_block_id: inst_block5800002F, definition_block_id: inst_block58000034} -// CHECK:STDOUT: generic58000005: {decl: inst580000B5, bindings: inst_block5800003F, self_specific_id: specific5800000B, decl_block_id: inst_block58000041, definition_block_id: inst_block58000049} -// CHECK:STDOUT: generic58000006: {decl: inst580000C0, bindings: inst_block58000045, self_specific_id: specific5800000D, decl_block_id: inst_block58000046, definition_block_id: inst_block_empty} -// CHECK:STDOUT: generic58000007: {decl: inst580000DB, bindings: inst_block58000060, self_specific_id: specific5800000E, decl_block_id: inst_block58000064, definition_block_id: inst_block58000066} -// CHECK:STDOUT: generic58000008: {decl: inst580000E2, bindings: inst_block58000053, self_specific_id: specific58000011, decl_block_id: inst_block58000055, definition_block_id: inst_block5800005D} -// CHECK:STDOUT: generic58000009: {decl: inst5800011F, bindings: inst_block5800007F, self_specific_id: specific58000017, decl_block_id: inst_block58000083, definition_block_id: inst_block58000085} -// CHECK:STDOUT: generic5800000A: {decl: inst58000126, bindings: inst_block58000070, self_specific_id: specific5800001A, decl_block_id: inst_block58000072, definition_block_id: inst_block5800007C} +// CHECK:STDOUT: generic78000000: {decl: inst7800003E, bindings: inst_block78000015, self_specific_id: specific78000000, decl_block_id: inst_block78000017, definition_block_id: inst_block78000091} +// CHECK:STDOUT: generic78000001: {decl: inst78000051, bindings: inst_block7800001C, self_specific_id: specific78000001, decl_block_id: inst_block_empty, definition_block_id: inst_block78000026} +// CHECK:STDOUT: generic78000002: {decl: inst78000056, bindings: inst_block78000022, self_specific_id: specific78000002, decl_block_id: inst_block78000023, definition_block_id: inst_block} +// CHECK:STDOUT: generic78000003: {decl: inst78000070, bindings: inst_block78000037, self_specific_id: specific78000004, decl_block_id: inst_block78000039, definition_block_id: inst_block7800003B} +// CHECK:STDOUT: generic78000004: {decl: inst78000077, bindings: inst_block7800002E, self_specific_id: specific78000007, decl_block_id: inst_block7800002F, definition_block_id: inst_block78000034} +// CHECK:STDOUT: generic78000005: {decl: inst780000B5, bindings: inst_block7800003F, self_specific_id: specific7800000B, decl_block_id: inst_block78000041, definition_block_id: inst_block78000049} +// CHECK:STDOUT: generic78000006: {decl: inst780000C0, bindings: inst_block78000045, self_specific_id: specific7800000D, decl_block_id: inst_block78000046, definition_block_id: inst_block_empty} +// CHECK:STDOUT: generic78000007: {decl: inst780000DB, bindings: inst_block78000060, self_specific_id: specific7800000E, decl_block_id: inst_block78000064, definition_block_id: inst_block78000066} +// CHECK:STDOUT: generic78000008: {decl: inst780000E2, bindings: inst_block78000053, self_specific_id: specific78000011, decl_block_id: inst_block78000055, definition_block_id: inst_block7800005D} +// CHECK:STDOUT: generic78000009: {decl: inst7800011F, bindings: inst_block7800007F, self_specific_id: specific78000017, decl_block_id: inst_block78000083, definition_block_id: inst_block78000085} +// CHECK:STDOUT: generic7800000A: {decl: inst78000126, bindings: inst_block78000070, self_specific_id: specific7800001A, decl_block_id: inst_block78000072, definition_block_id: inst_block7800007C} // CHECK:STDOUT: specifics: -// CHECK:STDOUT: specific58000000: {generic: generic58000000, args: inst_block58000016, decl_block_id: inst_block58000018, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000001: {generic: generic58000001, args: inst_block5800001D, decl_block_id: inst_block_empty, definition_block_id: inst_block5800001E} -// CHECK:STDOUT: specific58000002: {generic: generic58000002, args: inst_block5800001D, decl_block_id: inst_block58000024, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000003: {generic: generic58000001, args: inst_block58000025, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000004: {generic: generic58000003, args: inst_block58000028, decl_block_id: inst_block58000029, definition_block_id: inst_block5800002A} -// CHECK:STDOUT: specific58000005: {generic: generic58000001, args: inst_block58000028, decl_block_id: inst_block_empty, definition_block_id: inst_block58000030} -// CHECK:STDOUT: specific58000006: {generic: generic58000002, args: inst_block58000028, decl_block_id: inst_block58000031, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000007: {generic: generic58000004, args: inst_block58000028, decl_block_id: inst_block58000035, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000008: {generic: generic58000001, args: inst_block58000032, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000009: {generic: generic58000002, args: inst_block58000032, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific5800000A: {generic: generic58000003, args: inst_block58000038, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific5800000B: {generic: generic58000005, args: inst_block58000016, decl_block_id: inst_block5800003D, definition_block_id: inst_block58000086} -// CHECK:STDOUT: specific5800000C: {generic: generic58000005, args: inst_block58000040, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific5800000D: {generic: generic58000006, args: inst_block58000016, decl_block_id: inst_block58000047, definition_block_id: inst_block} -// CHECK:STDOUT: specific5800000E: {generic: generic58000007, args: inst_block5800004C, decl_block_id: inst_block5800004E, definition_block_id: inst_block5800004F} -// CHECK:STDOUT: specific5800000F: {generic: generic58000001, args: inst_block58000056, decl_block_id: inst_block_empty, definition_block_id: inst_block58000057} -// CHECK:STDOUT: specific58000010: {generic: generic58000002, args: inst_block58000056, decl_block_id: inst_block58000058, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000011: {generic: generic58000008, args: inst_block5800004C, decl_block_id: inst_block5800005E, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000012: {generic: generic58000001, args: inst_block58000059, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000013: {generic: generic58000002, args: inst_block58000059, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000014: {generic: generic58000001, args: inst_block5800005B, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000015: {generic: generic58000002, args: inst_block5800005B, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000016: {generic: generic58000007, args: inst_block58000061, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000017: {generic: generic58000009, args: inst_block58000069, decl_block_id: inst_block5800006B, definition_block_id: inst_block5800006C} -// CHECK:STDOUT: specific58000018: {generic: generic58000001, args: inst_block58000073, decl_block_id: inst_block_empty, definition_block_id: inst_block58000074} -// CHECK:STDOUT: specific58000019: {generic: generic58000002, args: inst_block58000073, decl_block_id: inst_block58000075, definition_block_id: inst_block} -// CHECK:STDOUT: specific5800001A: {generic: generic5800000A, args: inst_block58000069, decl_block_id: inst_block5800007D, definition_block_id: inst_block} -// CHECK:STDOUT: specific5800001B: {generic: generic58000001, args: inst_block58000076, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific5800001C: {generic: generic58000002, args: inst_block58000076, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific5800001D: {generic: generic58000001, args: inst_block58000078, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific5800001E: {generic: generic58000002, args: inst_block58000078, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific5800001F: {generic: generic58000001, args: inst_block5800007A, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000020: {generic: generic58000002, args: inst_block5800007A, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000021: {generic: generic58000009, args: inst_block58000080, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000022: {generic: generic58000005, args: inst_block58000087, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000023: {generic: generic58000001, args: inst_block58000089, decl_block_id: inst_block_empty, definition_block_id: inst_block5800008A} -// CHECK:STDOUT: specific58000024: {generic: generic58000001, args: inst_block5800008C, decl_block_id: inst_block, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000025: {generic: generic58000002, args: inst_block58000089, decl_block_id: inst_block5800008D, definition_block_id: inst_block} -// CHECK:STDOUT: specific58000026: {generic: generic58000002, args: inst_block5800008C, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000000: {generic: generic78000000, args: inst_block78000016, decl_block_id: inst_block78000018, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000001: {generic: generic78000001, args: inst_block7800001D, decl_block_id: inst_block_empty, definition_block_id: inst_block7800001E} +// CHECK:STDOUT: specific78000002: {generic: generic78000002, args: inst_block7800001D, decl_block_id: inst_block78000024, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000003: {generic: generic78000001, args: inst_block78000025, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000004: {generic: generic78000003, args: inst_block78000028, decl_block_id: inst_block78000029, definition_block_id: inst_block7800002A} +// CHECK:STDOUT: specific78000005: {generic: generic78000001, args: inst_block78000028, decl_block_id: inst_block_empty, definition_block_id: inst_block78000030} +// CHECK:STDOUT: specific78000006: {generic: generic78000002, args: inst_block78000028, decl_block_id: inst_block78000031, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000007: {generic: generic78000004, args: inst_block78000028, decl_block_id: inst_block78000035, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000008: {generic: generic78000001, args: inst_block78000032, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000009: {generic: generic78000002, args: inst_block78000032, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific7800000A: {generic: generic78000003, args: inst_block78000038, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific7800000B: {generic: generic78000005, args: inst_block78000016, decl_block_id: inst_block7800003D, definition_block_id: inst_block78000086} +// CHECK:STDOUT: specific7800000C: {generic: generic78000005, args: inst_block78000040, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific7800000D: {generic: generic78000006, args: inst_block78000016, decl_block_id: inst_block78000047, definition_block_id: inst_block} +// CHECK:STDOUT: specific7800000E: {generic: generic78000007, args: inst_block7800004C, decl_block_id: inst_block7800004E, definition_block_id: inst_block7800004F} +// CHECK:STDOUT: specific7800000F: {generic: generic78000001, args: inst_block78000056, decl_block_id: inst_block_empty, definition_block_id: inst_block78000057} +// CHECK:STDOUT: specific78000010: {generic: generic78000002, args: inst_block78000056, decl_block_id: inst_block78000058, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000011: {generic: generic78000008, args: inst_block7800004C, decl_block_id: inst_block7800005E, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000012: {generic: generic78000001, args: inst_block78000059, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000013: {generic: generic78000002, args: inst_block78000059, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000014: {generic: generic78000001, args: inst_block7800005B, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000015: {generic: generic78000002, args: inst_block7800005B, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000016: {generic: generic78000007, args: inst_block78000061, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000017: {generic: generic78000009, args: inst_block78000069, decl_block_id: inst_block7800006B, definition_block_id: inst_block7800006C} +// CHECK:STDOUT: specific78000018: {generic: generic78000001, args: inst_block78000073, decl_block_id: inst_block_empty, definition_block_id: inst_block78000074} +// CHECK:STDOUT: specific78000019: {generic: generic78000002, args: inst_block78000073, decl_block_id: inst_block78000075, definition_block_id: inst_block} +// CHECK:STDOUT: specific7800001A: {generic: generic7800000A, args: inst_block78000069, decl_block_id: inst_block7800007D, definition_block_id: inst_block} +// CHECK:STDOUT: specific7800001B: {generic: generic78000001, args: inst_block78000076, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific7800001C: {generic: generic78000002, args: inst_block78000076, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific7800001D: {generic: generic78000001, args: inst_block78000078, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific7800001E: {generic: generic78000002, args: inst_block78000078, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific7800001F: {generic: generic78000001, args: inst_block7800007A, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000020: {generic: generic78000002, args: inst_block7800007A, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000021: {generic: generic78000009, args: inst_block78000080, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000022: {generic: generic78000005, args: inst_block78000087, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000023: {generic: generic78000001, args: inst_block78000089, decl_block_id: inst_block_empty, definition_block_id: inst_block7800008A} +// CHECK:STDOUT: specific78000024: {generic: generic78000001, args: inst_block7800008C, decl_block_id: inst_block, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000025: {generic: generic78000002, args: inst_block78000089, decl_block_id: inst_block7800008D, definition_block_id: inst_block} +// CHECK:STDOUT: specific78000026: {generic: generic78000002, args: inst_block7800008C, decl_block_id: inst_block, definition_block_id: inst_block} // CHECK:STDOUT: specific_interfaces: -// CHECK:STDOUT: specific_interface58000000: {interface_id: interface58000000, specific_id: specific} +// CHECK:STDOUT: specific_interface78000000: {interface_id: interface78000000, specific_id: specific} // CHECK:STDOUT: struct_type_fields: // CHECK:STDOUT: struct_type_fields_empty: {} // CHECK:STDOUT: types: @@ -422,1791 +423,1791 @@ fn Foo[T:! type](p: T*) -> (T*, ()) { // CHECK:STDOUT: value_repr: {kind: copy, type: type(Error)} // CHECK:STDOUT: 'type(inst(NamespaceType))': // CHECK:STDOUT: value_repr: {kind: copy, type: type(inst(NamespaceType))} -// CHECK:STDOUT: 'type(inst58000026)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst58000026)} -// CHECK:STDOUT: 'type(inst5800002D)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst5800002D)} -// CHECK:STDOUT: 'type(inst58000029)': -// CHECK:STDOUT: value_repr: {kind: pointer, type: type(inst5800002D)} -// CHECK:STDOUT: 'type(inst5800003F)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst58000026)} -// CHECK:STDOUT: 'type(symbolic_constant58000003)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant58000003)} +// CHECK:STDOUT: 'type(inst78000026)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst78000026)} +// CHECK:STDOUT: 'type(inst7800002D)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst7800002D)} +// CHECK:STDOUT: 'type(inst78000029)': +// CHECK:STDOUT: value_repr: {kind: pointer, type: type(inst7800002D)} +// CHECK:STDOUT: 'type(inst7800003F)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst78000026)} +// CHECK:STDOUT: 'type(symbolic_constant78000003)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant78000003)} // CHECK:STDOUT: 'type(inst(WitnessType))': // CHECK:STDOUT: value_repr: {kind: copy, type: type(inst(WitnessType))} -// CHECK:STDOUT: 'type(symbolic_constant58000011)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant58000011)} -// CHECK:STDOUT: 'type(symbolic_constant58000009)': -// CHECK:STDOUT: value_repr: {kind: pointer, type: type(symbolic_constant58000011)} -// CHECK:STDOUT: 'type(symbolic_constant58000004)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant58000004)} -// CHECK:STDOUT: 'type(symbolic_constant5800000A)': -// CHECK:STDOUT: value_repr: {kind: pointer, type: type(symbolic_constant58000011)} +// CHECK:STDOUT: 'type(symbolic_constant78000011)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant78000011)} +// CHECK:STDOUT: 'type(symbolic_constant78000009)': +// CHECK:STDOUT: value_repr: {kind: pointer, type: type(symbolic_constant78000011)} +// CHECK:STDOUT: 'type(symbolic_constant78000004)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant78000004)} +// CHECK:STDOUT: 'type(symbolic_constant7800000A)': +// CHECK:STDOUT: value_repr: {kind: pointer, type: type(symbolic_constant78000011)} // CHECK:STDOUT: 'type(inst(InstType))': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst58000026)} -// CHECK:STDOUT: 'type(inst58000050)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst58000050)} +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst78000026)} +// CHECK:STDOUT: 'type(inst78000050)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst78000050)} // CHECK:STDOUT: 'type(inst(SpecificFunctionType))': // CHECK:STDOUT: value_repr: {kind: copy, type: type(inst(SpecificFunctionType))} // CHECK:STDOUT: 'type(inst(RequireSpecificDefinitionType))': // CHECK:STDOUT: value_repr: {kind: copy, type: type(inst(RequireSpecificDefinitionType))} -// CHECK:STDOUT: 'type(symbolic_constant58000146)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst58000026)} -// CHECK:STDOUT: 'type(symbolic_constant5800014A)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst58000026)} +// CHECK:STDOUT: 'type(symbolic_constant78000146)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst78000026)} +// CHECK:STDOUT: 'type(symbolic_constant7800014A)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst78000026)} // CHECK:STDOUT: 'type(inst(BoundMethodType))': // CHECK:STDOUT: value_repr: {kind: copy, type: type(inst(BoundMethodType))} // CHECK:STDOUT: facet_types: -// CHECK:STDOUT: facet_type58000000: {} -// CHECK:STDOUT: facet_type58000001: {extends interface: interface58000000} +// CHECK:STDOUT: facet_type78000000: {} +// CHECK:STDOUT: facet_type78000001: {extends interface: interface78000000} // CHECK:STDOUT: insts: // CHECK:STDOUT: instF: {kind: Namespace, arg0: name_scope0, arg1: inst, type: type(inst(NamespaceType))} -// CHECK:STDOUT: inst58000010: {kind: ImportDecl, arg0: name(Core)} -// CHECK:STDOUT: inst58000011: {kind: Namespace, arg0: name_scope58000001, arg1: inst58000010, type: type(inst(NamespaceType))} -// CHECK:STDOUT: inst58000012: {kind: FacetType, arg0: facet_type58000000, type: type(TypeType)} -// CHECK:STDOUT: inst58000013: {kind: SymbolicBinding, arg0: entity_name58000000, arg1: inst, type: type(inst58000012)} -// CHECK:STDOUT: inst58000014: {kind: SymbolicBinding, arg0: entity_name58000000, arg1: inst, type: type(inst58000012)} -// CHECK:STDOUT: inst58000015: {kind: TypeLiteral, arg0: inst(TypeType), type: type(TypeType)} -// CHECK:STDOUT: inst58000016: {kind: PatternType, arg0: inst(TypeType), type: type(TypeType)} -// CHECK:STDOUT: inst58000017: {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst, type: type(TypeType)} -// CHECK:STDOUT: inst58000018: {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst, type: type(TypeType)} -// CHECK:STDOUT: inst58000019: {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst, type: type(TypeType)} -// CHECK:STDOUT: inst5800001A: {kind: SymbolicBindingPattern, arg0: entity_name58000001, type: type(inst58000016)} -// CHECK:STDOUT: inst5800001B: {kind: NameRef, arg0: name1, arg1: inst58000017, type: type(TypeType)} -// CHECK:STDOUT: inst5800001C: {kind: PointerType, arg0: inst5800001B, type: type(TypeType)} -// CHECK:STDOUT: inst5800001D: {kind: PointerType, arg0: inst58000018, type: type(TypeType)} -// CHECK:STDOUT: inst5800001E: {kind: PointerType, arg0: inst58000019, type: type(TypeType)} -// CHECK:STDOUT: inst5800001F: {kind: PatternType, arg0: inst5800001D, type: type(TypeType)} -// CHECK:STDOUT: inst58000020: {kind: ValueBinding, arg0: entity_name58000002, arg1: inst5800003A, type: type(symbolic_constant58000004)} -// CHECK:STDOUT: inst58000021: {kind: ValueBindingPattern, arg0: entity_name58000002, type: type(symbolic_constant58000006)} -// CHECK:STDOUT: inst58000022: {kind: PatternType, arg0: inst5800001E, type: type(TypeType)} -// CHECK:STDOUT: inst58000023: {kind: ValueParamPattern, arg0: inst58000021, type: type(symbolic_constant58000006)} -// CHECK:STDOUT: inst58000024: {kind: NameRef, arg0: name1, arg1: inst58000017, type: type(TypeType)} -// CHECK:STDOUT: inst58000025: {kind: PointerType, arg0: inst58000024, type: type(TypeType)} -// CHECK:STDOUT: inst58000026: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} -// CHECK:STDOUT: inst58000027: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst58000026)} -// CHECK:STDOUT: inst58000028: {kind: TupleValue, arg0: inst_block_empty, type: type(inst58000026)} -// CHECK:STDOUT: inst58000029: {kind: TupleType, arg0: inst_block5800000A, type: type(TypeType)} -// CHECK:STDOUT: inst5800002A: {kind: TupleLiteral, arg0: inst_block58000009, type: type(inst58000029)} -// CHECK:STDOUT: inst5800002B: {kind: TupleValue, arg0: inst_block5800000B, type: type(inst58000029)} -// CHECK:STDOUT: inst5800002C: {kind: TupleValue, arg0: inst_block5800000C, type: type(inst58000029)} -// CHECK:STDOUT: inst5800002D: {kind: PointerType, arg0: inst58000029, type: type(TypeType)} -// CHECK:STDOUT: inst5800002E: {kind: Converted, arg0: inst58000028, arg1: inst58000026, type: type(TypeType)} -// CHECK:STDOUT: inst5800002F: {kind: TupleType, arg0: inst_block5800000E, type: type(TypeType)} -// CHECK:STDOUT: inst58000030: {kind: Converted, arg0: inst5800002A, arg1: inst5800002F, type: type(TypeType)} -// CHECK:STDOUT: inst58000031: {kind: TupleType, arg0: inst_block5800000F, type: type(TypeType)} -// CHECK:STDOUT: inst58000032: {kind: InitForm, arg0: inst58000030, type: type(inst(FormType))} -// CHECK:STDOUT: inst58000033: {kind: InitForm, arg0: inst5800002F, type: type(inst(FormType))} -// CHECK:STDOUT: inst58000034: {kind: InitForm, arg0: inst58000031, type: type(inst(FormType))} -// CHECK:STDOUT: inst58000035: {kind: PatternType, arg0: inst5800002F, type: type(TypeType)} -// CHECK:STDOUT: inst58000036: {kind: ReturnSlotPattern, arg0: inst58000030, type: type(symbolic_constant5800000E)} -// CHECK:STDOUT: inst58000037: {kind: PatternType, arg0: inst58000031, type: type(TypeType)} -// CHECK:STDOUT: inst58000038: {kind: OutParamPattern, arg0: inst58000036, type: type(symbolic_constant5800000E)} -// CHECK:STDOUT: inst58000039: {kind: SpliceBlock, arg0: inst_block58000005, arg1: inst58000015, type: type(TypeType)} -// CHECK:STDOUT: inst5800003A: {kind: ValueParam, arg0: call_param0, arg1: name2, type: type(symbolic_constant58000004)} -// CHECK:STDOUT: inst5800003B: {kind: SpliceBlock, arg0: inst_block58000007, arg1: inst5800001C, type: type(TypeType)} -// CHECK:STDOUT: inst5800003C: {kind: OutParam, arg0: call_param1, arg1: name(ReturnSlot), type: type(symbolic_constant5800000A)} -// CHECK:STDOUT: inst5800003D: {kind: ReturnSlot, arg0: inst5800002F, arg1: inst5800003C, type: type(symbolic_constant5800000A)} -// CHECK:STDOUT: inst5800003E: {kind: FunctionDecl, arg0: function58000000, arg1: inst_block58000014, type: type(inst5800003F)} -// CHECK:STDOUT: inst5800003F: {kind: FunctionType, arg0: function58000000, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst58000040: {kind: StructValue, arg0: inst_block_empty, type: type(inst5800003F)} -// CHECK:STDOUT: inst58000041: {kind: RequireCompleteType, arg0: inst5800001D, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000042: {kind: RequireCompleteType, arg0: inst5800001D, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000043: {kind: RequireCompleteType, arg0: inst5800001E, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000044: {kind: PointerType, arg0: inst5800002F, type: type(TypeType)} -// CHECK:STDOUT: inst58000045: {kind: RequireCompleteType, arg0: inst5800002F, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000046: {kind: RequireCompleteType, arg0: inst5800002F, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000047: {kind: RequireCompleteType, arg0: inst58000031, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000048: {kind: NameRef, arg0: name2, arg1: inst58000020, type: type(symbolic_constant58000004)} -// CHECK:STDOUT: inst58000049: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst58000026)} -// CHECK:STDOUT: inst5800004A: {kind: TupleLiteral, arg0: inst_block5800001A, type: type(symbolic_constant5800000A)} -// CHECK:STDOUT: inst5800004B: {kind: RequireCompleteType, arg0: inst5800002F, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5800004C: {kind: TupleAccess, arg0: inst5800003C, arg1: element0, type: type(symbolic_constant58000004)} -// CHECK:STDOUT: inst5800004D: {kind: RequireCompleteType, arg0: inst5800001D, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5800004E: {kind: ImportRefLoaded, arg0: import_ir_inst0, arg1: entity_name58000003, type: type(TypeType)} -// CHECK:STDOUT: inst5800004F: {kind: InterfaceDecl, arg0: interface58000000, arg1: inst_block_empty, type: type(TypeType)} -// CHECK:STDOUT: inst58000050: {kind: FacetType, arg0: facet_type58000001, type: type(TypeType)} -// CHECK:STDOUT: inst58000051: {kind: InterfaceWithSelfDecl, arg0: interface58000000} -// CHECK:STDOUT: inst58000052: {kind: SymbolicBinding, arg0: entity_name58000004, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000053: {kind: ImportRefLoaded, arg0: import_ir_inst3, arg1: entity_name, type: type(inst5800006B)} -// CHECK:STDOUT: inst58000054: {kind: ImportRefUnloaded, arg0: import_ir_inst4, arg1: entity_name58000005} -// CHECK:STDOUT: inst58000055: {kind: ImportRefLoaded, arg0: import_ir_inst5, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst58000056: {kind: FunctionDecl, arg0: function58000001, arg1: inst_block_empty, type: type(symbolic_constant58000015)} -// CHECK:STDOUT: inst58000057: {kind: FunctionType, arg0: function58000001, arg1: specific58000001, type: type(TypeType)} -// CHECK:STDOUT: inst58000058: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant58000015)} -// CHECK:STDOUT: inst58000059: {kind: SymbolicBindingType, arg0: entity_name58000004, arg1: inst58000052, type: type(TypeType)} -// CHECK:STDOUT: inst5800005A: {kind: PatternType, arg0: inst58000059, type: type(TypeType)} -// CHECK:STDOUT: inst5800005B: {kind: ReturnSlotPattern, arg0: inst, type: type(symbolic_constant5800001B)} -// CHECK:STDOUT: inst5800005C: {kind: OutParamPattern, arg0: inst5800005B, type: type(symbolic_constant5800001B)} -// CHECK:STDOUT: inst5800005D: {kind: ValueBindingPattern, arg0: entity_name58000008, type: type(symbolic_constant5800001B)} -// CHECK:STDOUT: inst5800005E: {kind: ValueParamPattern, arg0: inst5800005D, type: type(symbolic_constant5800001B)} -// CHECK:STDOUT: inst5800005F: {kind: InitForm, arg0: inst58000059, type: type(inst(FormType))} -// CHECK:STDOUT: inst58000060: {kind: ImportRefLoaded, arg0: import_ir_instB, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst58000061: {kind: ImportRefLoaded, arg0: import_ir_instC, arg1: entity_name, type: type(inst(FormType))} -// CHECK:STDOUT: inst58000062: {kind: ImportRefLoaded, arg0: import_ir_instD, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst58000063: {kind: SymbolicBinding, arg0: entity_name58000004, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000064: {kind: SymbolicBindingType, arg0: entity_name58000004, arg1: inst58000063, type: type(TypeType)} -// CHECK:STDOUT: inst58000065: {kind: PatternType, arg0: inst58000064, type: type(TypeType)} -// CHECK:STDOUT: inst58000066: {kind: InitForm, arg0: inst58000064, type: type(inst(FormType))} -// CHECK:STDOUT: inst58000067: {kind: SymbolicBinding, arg0: entity_name58000004, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000068: {kind: FunctionType, arg0: function58000001, arg1: specific58000003, type: type(TypeType)} -// CHECK:STDOUT: inst58000069: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant58000029)} -// CHECK:STDOUT: inst5800006A: {kind: ImportRefUnloaded, arg0: import_ir_inst15, arg1: entity_name} -// CHECK:STDOUT: inst5800006B: {kind: AssociatedEntityType, arg0: interface58000000, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst5800006C: {kind: ImportRefLoaded, arg0: import_ir_inst16, arg1: entity_name, type: type(symbolic_constant58000019)} -// CHECK:STDOUT: inst5800006D: {kind: AssociatedEntity, arg0: element0, arg1: inst5800006C, type: type(inst5800006B)} -// CHECK:STDOUT: inst5800006E: {kind: LookupImplWitness, arg0: inst5800001D, arg1: specific_interface58000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5800006F: {kind: ImportRefUnloaded, arg0: import_ir_inst17, arg1: entity_name} -// CHECK:STDOUT: inst58000070: {kind: ImplDecl, arg0: impl58000000, arg1: inst_block_empty} -// CHECK:STDOUT: inst58000071: {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000072: {kind: SymbolicBindingType, arg0: entity_name58000001, arg1: inst58000071, type: type(TypeType)} -// CHECK:STDOUT: inst58000073: {kind: ConstType, arg0: inst58000072, type: type(TypeType)} -// CHECK:STDOUT: inst58000074: {kind: ImportRefUnloaded, arg0: import_ir_inst19, arg1: entity_name} -// CHECK:STDOUT: inst58000075: {kind: ImplWitnessTable, arg0: inst_block58000027, arg1: impl58000000} -// CHECK:STDOUT: inst58000076: {kind: ImplWitness, arg0: inst58000075, arg1: specific58000004, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000077: {kind: FunctionDecl, arg0: function58000002, arg1: inst_block_empty, type: type(symbolic_constant58000031)} -// CHECK:STDOUT: inst58000078: {kind: FunctionType, arg0: function58000002, arg1: specific58000004, type: type(TypeType)} -// CHECK:STDOUT: inst58000079: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant58000031)} -// CHECK:STDOUT: inst5800007A: {kind: PatternType, arg0: inst58000073, type: type(TypeType)} -// CHECK:STDOUT: inst5800007B: {kind: ReturnSlotPattern, arg0: inst, type: type(symbolic_constant58000036)} -// CHECK:STDOUT: inst5800007C: {kind: OutParamPattern, arg0: inst5800007B, type: type(symbolic_constant58000036)} -// CHECK:STDOUT: inst5800007D: {kind: ValueBindingPattern, arg0: entity_name5800000F, type: type(symbolic_constant58000036)} -// CHECK:STDOUT: inst5800007E: {kind: ValueParamPattern, arg0: inst5800007D, type: type(symbolic_constant58000036)} -// CHECK:STDOUT: inst5800007F: {kind: InitForm, arg0: inst58000073, type: type(inst(FormType))} -// CHECK:STDOUT: inst58000080: {kind: ImportRefLoaded, arg0: import_ir_inst20, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst58000081: {kind: ImportRefLoaded, arg0: import_ir_inst21, arg1: entity_name, type: type(inst(FormType))} -// CHECK:STDOUT: inst58000082: {kind: ImportRefLoaded, arg0: import_ir_inst22, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst58000083: {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000084: {kind: SymbolicBindingType, arg0: entity_name58000001, arg1: inst58000083, type: type(TypeType)} -// CHECK:STDOUT: inst58000085: {kind: ConstType, arg0: inst58000084, type: type(TypeType)} -// CHECK:STDOUT: inst58000086: {kind: PatternType, arg0: inst58000085, type: type(TypeType)} -// CHECK:STDOUT: inst58000087: {kind: InitForm, arg0: inst58000085, type: type(inst(FormType))} -// CHECK:STDOUT: inst58000088: {kind: LookupImplWitness, arg0: inst58000071, arg1: specific_interface58000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000089: {kind: FunctionType, arg0: function58000001, arg1: specific58000005, type: type(TypeType)} -// CHECK:STDOUT: inst5800008A: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant58000045)} -// CHECK:STDOUT: inst5800008B: {kind: FunctionTypeWithSelfType, arg0: inst58000089, arg1: inst58000071, type: type(TypeType)} -// CHECK:STDOUT: inst5800008C: {kind: ImplWitnessAccess, arg0: inst58000088, arg1: element0, type: type(symbolic_constant58000047)} -// CHECK:STDOUT: inst5800008D: {kind: SpecificImplFunction, arg0: inst5800008C, arg1: specific58000006, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst5800008E: {kind: InitForm, arg0: inst58000072, type: type(inst(FormType))} -// CHECK:STDOUT: inst5800008F: {kind: PatternType, arg0: inst58000072, type: type(TypeType)} -// CHECK:STDOUT: inst58000090: {kind: RequireCompleteType, arg0: inst58000072, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000091: {kind: RequireCompleteType, arg0: inst58000073, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000092: {kind: RequireCompleteType, arg0: inst58000085, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000093: {kind: RequireCompleteType, arg0: inst58000084, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000094: {kind: LookupImplWitness, arg0: inst58000083, arg1: specific_interface58000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000095: {kind: FunctionType, arg0: function58000001, arg1: specific58000008, type: type(TypeType)} -// CHECK:STDOUT: inst58000096: {kind: FunctionTypeWithSelfType, arg0: inst58000095, arg1: inst58000083, type: type(TypeType)} -// CHECK:STDOUT: inst58000097: {kind: ImplWitnessAccess, arg0: inst58000094, arg1: element0, type: type(symbolic_constant58000059)} -// CHECK:STDOUT: inst58000098: {kind: SpecificImplFunction, arg0: inst58000097, arg1: specific58000009, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst58000099: {kind: PatternType, arg0: inst58000050, type: type(TypeType)} -// CHECK:STDOUT: inst5800009A: {kind: SymbolicBindingPattern, arg0: entity_name58000015, type: type(inst58000099)} -// CHECK:STDOUT: inst5800009B: {kind: ImportRefLoaded, arg0: import_ir_inst30, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst5800009C: {kind: ImportRefLoaded, arg0: import_ir_inst31, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst5800009D: {kind: ImportRefLoaded, arg0: import_ir_inst32, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst5800009E: {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst5800009F: {kind: SymbolicBindingType, arg0: entity_name58000001, arg1: inst5800009E, type: type(TypeType)} -// CHECK:STDOUT: inst580000A0: {kind: ConstType, arg0: inst5800009F, type: type(TypeType)} -// CHECK:STDOUT: inst580000A1: {kind: ImplWitness, arg0: inst58000075, arg1: specific5800000A, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst580000A2: {kind: FunctionType, arg0: function58000002, arg1: specific5800000A, type: type(TypeType)} -// CHECK:STDOUT: inst580000A3: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant58000064)} -// CHECK:STDOUT: inst580000A4: {kind: ImportRefUnloaded, arg0: import_ir_inst39, arg1: entity_name} -// CHECK:STDOUT: inst580000A5: {kind: ImplDecl, arg0: impl58000001, arg1: inst_block_empty} -// CHECK:STDOUT: inst580000A6: {kind: ImportRefLoaded, arg0: import_ir_inst3B, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000A7: {kind: ImportRefLoaded, arg0: import_ir_inst3C, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000A8: {kind: ImportRefUnloaded, arg0: import_ir_inst3D, arg1: entity_name} -// CHECK:STDOUT: inst580000A9: {kind: ImplDecl, arg0: impl58000002, arg1: inst_block_empty} -// CHECK:STDOUT: inst580000AA: {kind: ImportRefLoaded, arg0: import_ir_inst3F, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000AB: {kind: ImportRefLoaded, arg0: import_ir_inst40, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000AC: {kind: ImportRefUnloaded, arg0: import_ir_inst41, arg1: entity_name} -// CHECK:STDOUT: inst580000AD: {kind: ImplDecl, arg0: impl58000003, arg1: inst_block_empty} -// CHECK:STDOUT: inst580000AE: {kind: ImportRefLoaded, arg0: import_ir_inst43, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000AF: {kind: ImportRefLoaded, arg0: import_ir_inst44, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000B0: {kind: ImportRefUnloaded, arg0: import_ir_inst45, arg1: entity_name} -// CHECK:STDOUT: inst580000B1: {kind: ImplDecl, arg0: impl58000004, arg1: inst_block_empty} -// CHECK:STDOUT: inst580000B2: {kind: ImportRefLoaded, arg0: import_ir_inst47, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000B3: {kind: ImportRefLoaded, arg0: import_ir_inst48, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000B4: {kind: ImportRefLoaded, arg0: import_ir_inst49, arg1: entity_name, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst580000B5: {kind: ImplDecl, arg0: impl58000005, arg1: inst_block_empty} -// CHECK:STDOUT: inst580000B6: {kind: ImportRefUnloaded, arg0: import_ir_inst4B, arg1: entity_name} -// CHECK:STDOUT: inst580000B7: {kind: ImplWitnessTable, arg0: inst_block5800003C, arg1: impl58000005} -// CHECK:STDOUT: inst580000B8: {kind: ImplWitness, arg0: inst580000B7, arg1: specific5800000B, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst580000B9: {kind: SymbolicBindingPattern, arg0: entity_name58000019, type: type(inst58000016)} -// CHECK:STDOUT: inst580000BA: {kind: ImportRefLoaded, arg0: import_ir_inst4E, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000BB: {kind: ImportRefLoaded, arg0: import_ir_inst4F, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000BC: {kind: ImportRefLoaded, arg0: import_ir_inst50, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000BD: {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst, type: type(TypeType)} -// CHECK:STDOUT: inst580000BE: {kind: PointerType, arg0: inst580000BD, type: type(TypeType)} -// CHECK:STDOUT: inst580000BF: {kind: ImplWitness, arg0: inst580000B7, arg1: specific5800000C, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst580000C0: {kind: FunctionDecl, arg0: function58000003, arg1: inst_block_empty, type: type(symbolic_constant58000070)} -// CHECK:STDOUT: inst580000C1: {kind: FunctionType, arg0: function58000003, arg1: specific5800000B, type: type(TypeType)} -// CHECK:STDOUT: inst580000C2: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant58000070)} -// CHECK:STDOUT: inst580000C3: {kind: ReturnSlotPattern, arg0: inst, type: type(symbolic_constant58000074)} -// CHECK:STDOUT: inst580000C4: {kind: OutParamPattern, arg0: inst580000C3, type: type(symbolic_constant58000074)} -// CHECK:STDOUT: inst580000C5: {kind: ValueBindingPattern, arg0: entity_name5800001A, type: type(symbolic_constant58000074)} -// CHECK:STDOUT: inst580000C6: {kind: ValueParamPattern, arg0: inst580000C5, type: type(symbolic_constant58000074)} -// CHECK:STDOUT: inst580000C7: {kind: InitForm, arg0: inst5800001D, type: type(inst(FormType))} -// CHECK:STDOUT: inst580000C8: {kind: ImportRefLoaded, arg0: import_ir_inst59, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000C9: {kind: ImportRefLoaded, arg0: import_ir_inst5A, arg1: entity_name, type: type(inst(FormType))} -// CHECK:STDOUT: inst580000CA: {kind: ImportRefLoaded, arg0: import_ir_inst5B, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000CB: {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst, type: type(TypeType)} -// CHECK:STDOUT: inst580000CC: {kind: PointerType, arg0: inst580000CB, type: type(TypeType)} -// CHECK:STDOUT: inst580000CD: {kind: PatternType, arg0: inst580000CC, type: type(TypeType)} -// CHECK:STDOUT: inst580000CE: {kind: InitForm, arg0: inst580000CC, type: type(inst(FormType))} -// CHECK:STDOUT: inst580000CF: {kind: FunctionType, arg0: function58000003, arg1: specific5800000C, type: type(TypeType)} -// CHECK:STDOUT: inst580000D0: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant58000080)} -// CHECK:STDOUT: inst580000D1: {kind: RequireCompleteType, arg0: inst580000BE, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst580000D2: {kind: ImportRefUnloaded, arg0: import_ir_inst63, arg1: entity_name} -// CHECK:STDOUT: inst580000D3: {kind: ImplDecl, arg0: impl58000006, arg1: inst_block_empty} -// CHECK:STDOUT: inst580000D4: {kind: ImportRefLoaded, arg0: import_ir_inst65, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000D5: {kind: ImportRefLoaded, arg0: import_ir_inst66, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000D6: {kind: ImportRefUnloaded, arg0: import_ir_inst67, arg1: entity_name} -// CHECK:STDOUT: inst580000D7: {kind: ImplDecl, arg0: impl58000007, arg1: inst_block_empty} -// CHECK:STDOUT: inst580000D8: {kind: ImportRefLoaded, arg0: import_ir_inst69, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000D9: {kind: ImportRefLoaded, arg0: import_ir_inst6A, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000DA: {kind: ImportRefUnloaded, arg0: import_ir_inst6B, arg1: entity_name} -// CHECK:STDOUT: inst580000DB: {kind: ImplDecl, arg0: impl58000008, arg1: inst_block_empty} -// CHECK:STDOUT: inst580000DC: {kind: SymbolicBinding, arg0: entity_name5800001C, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst580000DD: {kind: SymbolicBindingType, arg0: entity_name5800001C, arg1: inst580000DC, type: type(TypeType)} -// CHECK:STDOUT: inst580000DE: {kind: TupleType, arg0: inst_block5800004A, type: type(TypeType)} -// CHECK:STDOUT: inst580000DF: {kind: ImportRefUnloaded, arg0: import_ir_inst6D, arg1: entity_name} -// CHECK:STDOUT: inst580000E0: {kind: ImplWitnessTable, arg0: inst_block5800004B, arg1: impl58000008} -// CHECK:STDOUT: inst580000E1: {kind: ImplWitness, arg0: inst580000E0, arg1: specific5800000E, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst580000E2: {kind: FunctionDecl, arg0: function58000004, arg1: inst_block_empty, type: type(symbolic_constant58000089)} -// CHECK:STDOUT: inst580000E3: {kind: FunctionType, arg0: function58000004, arg1: specific5800000E, type: type(TypeType)} -// CHECK:STDOUT: inst580000E4: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant58000089)} -// CHECK:STDOUT: inst580000E5: {kind: TupleType, arg0: inst_block5800004D, type: type(TypeType)} -// CHECK:STDOUT: inst580000E6: {kind: TupleValue, arg0: inst_block5800004C, type: type(inst580000E5)} -// CHECK:STDOUT: inst580000E7: {kind: PatternType, arg0: inst580000DE, type: type(TypeType)} -// CHECK:STDOUT: inst580000E8: {kind: ReturnSlotPattern, arg0: inst, type: type(symbolic_constant5800008F)} -// CHECK:STDOUT: inst580000E9: {kind: OutParamPattern, arg0: inst580000E8, type: type(symbolic_constant5800008F)} -// CHECK:STDOUT: inst580000EA: {kind: ValueBindingPattern, arg0: entity_name5800001E, type: type(symbolic_constant5800008F)} -// CHECK:STDOUT: inst580000EB: {kind: ValueParamPattern, arg0: inst580000EA, type: type(symbolic_constant5800008F)} -// CHECK:STDOUT: inst580000EC: {kind: InitForm, arg0: inst580000DE, type: type(inst(FormType))} -// CHECK:STDOUT: inst580000ED: {kind: ImportRefLoaded, arg0: import_ir_inst74, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst580000EE: {kind: ImportRefLoaded, arg0: import_ir_inst75, arg1: entity_name, type: type(inst(FormType))} -// CHECK:STDOUT: inst580000EF: {kind: ImportRefLoaded, arg0: import_ir_inst76, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst580000F0: {kind: ImportRefLoaded, arg0: import_ir_inst77, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst580000F1: {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst580000F2: {kind: SymbolicBindingType, arg0: entity_name58000001, arg1: inst580000F1, type: type(TypeType)} -// CHECK:STDOUT: inst580000F3: {kind: SymbolicBinding, arg0: entity_name5800001C, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst580000F4: {kind: SymbolicBindingType, arg0: entity_name5800001C, arg1: inst580000F3, type: type(TypeType)} -// CHECK:STDOUT: inst580000F5: {kind: TupleType, arg0: inst_block58000054, type: type(TypeType)} -// CHECK:STDOUT: inst580000F6: {kind: PatternType, arg0: inst580000F5, type: type(TypeType)} -// CHECK:STDOUT: inst580000F7: {kind: InitForm, arg0: inst580000F5, type: type(inst(FormType))} -// CHECK:STDOUT: inst580000F8: {kind: LookupImplWitness, arg0: inst580000DC, arg1: specific_interface58000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst580000F9: {kind: FunctionType, arg0: function58000001, arg1: specific5800000F, type: type(TypeType)} -// CHECK:STDOUT: inst580000FA: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant580000A3)} -// CHECK:STDOUT: inst580000FB: {kind: FunctionTypeWithSelfType, arg0: inst580000F9, arg1: inst580000DC, type: type(TypeType)} -// CHECK:STDOUT: inst580000FC: {kind: ImplWitnessAccess, arg0: inst580000F8, arg1: element0, type: type(symbolic_constant580000A5)} -// CHECK:STDOUT: inst580000FD: {kind: SpecificImplFunction, arg0: inst580000FC, arg1: specific58000010, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst580000FE: {kind: InitForm, arg0: inst580000DD, type: type(inst(FormType))} -// CHECK:STDOUT: inst580000FF: {kind: PatternType, arg0: inst580000DD, type: type(TypeType)} -// CHECK:STDOUT: inst58000100: {kind: RequireCompleteType, arg0: inst580000DD, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000101: {kind: RequireCompleteType, arg0: inst580000DE, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000102: {kind: RequireCompleteType, arg0: inst580000F5, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000103: {kind: RequireCompleteType, arg0: inst580000F2, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000104: {kind: LookupImplWitness, arg0: inst580000F1, arg1: specific_interface58000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000105: {kind: FunctionType, arg0: function58000001, arg1: specific58000012, type: type(TypeType)} -// CHECK:STDOUT: inst58000106: {kind: FunctionTypeWithSelfType, arg0: inst58000105, arg1: inst580000F1, type: type(TypeType)} -// CHECK:STDOUT: inst58000107: {kind: ImplWitnessAccess, arg0: inst58000104, arg1: element0, type: type(symbolic_constant580000BD)} -// CHECK:STDOUT: inst58000108: {kind: SpecificImplFunction, arg0: inst58000107, arg1: specific58000013, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst58000109: {kind: RequireCompleteType, arg0: inst580000F4, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5800010A: {kind: LookupImplWitness, arg0: inst580000F3, arg1: specific_interface58000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5800010B: {kind: FunctionType, arg0: function58000001, arg1: specific58000014, type: type(TypeType)} -// CHECK:STDOUT: inst5800010C: {kind: FunctionTypeWithSelfType, arg0: inst5800010B, arg1: inst580000F3, type: type(TypeType)} -// CHECK:STDOUT: inst5800010D: {kind: ImplWitnessAccess, arg0: inst5800010A, arg1: element0, type: type(symbolic_constant580000C3)} -// CHECK:STDOUT: inst5800010E: {kind: SpecificImplFunction, arg0: inst5800010D, arg1: specific58000015, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst5800010F: {kind: SymbolicBindingPattern, arg0: entity_name58000029, type: type(inst58000099)} -// CHECK:STDOUT: inst58000110: {kind: SymbolicBindingPattern, arg0: entity_name5800002A, type: type(inst58000099)} -// CHECK:STDOUT: inst58000111: {kind: ImportRefLoaded, arg0: import_ir_inst8E, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst58000112: {kind: ImportRefLoaded, arg0: import_ir_inst8F, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst58000113: {kind: ImportRefLoaded, arg0: import_ir_inst90, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst58000114: {kind: ImportRefLoaded, arg0: import_ir_inst91, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst58000115: {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000116: {kind: SymbolicBinding, arg0: entity_name5800001C, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000117: {kind: TupleValue, arg0: inst_block58000061, type: type(inst580000E5)} -// CHECK:STDOUT: inst58000118: {kind: SymbolicBindingType, arg0: entity_name58000001, arg1: inst58000115, type: type(TypeType)} -// CHECK:STDOUT: inst58000119: {kind: SymbolicBindingType, arg0: entity_name5800001C, arg1: inst58000116, type: type(TypeType)} -// CHECK:STDOUT: inst5800011A: {kind: TupleType, arg0: inst_block58000062, type: type(TypeType)} -// CHECK:STDOUT: inst5800011B: {kind: ImplWitness, arg0: inst580000E0, arg1: specific58000016, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5800011C: {kind: FunctionType, arg0: function58000004, arg1: specific58000016, type: type(TypeType)} -// CHECK:STDOUT: inst5800011D: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant580000D4)} -// CHECK:STDOUT: inst5800011E: {kind: ImportRefUnloaded, arg0: import_ir_inst9B, arg1: entity_name} -// CHECK:STDOUT: inst5800011F: {kind: ImplDecl, arg0: impl58000009, arg1: inst_block_empty} -// CHECK:STDOUT: inst58000120: {kind: SymbolicBinding, arg0: entity_name5800002B, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000121: {kind: SymbolicBindingType, arg0: entity_name5800002B, arg1: inst58000120, type: type(TypeType)} -// CHECK:STDOUT: inst58000122: {kind: TupleType, arg0: inst_block58000067, type: type(TypeType)} -// CHECK:STDOUT: inst58000123: {kind: ImportRefUnloaded, arg0: import_ir_inst9D, arg1: entity_name} -// CHECK:STDOUT: inst58000124: {kind: ImplWitnessTable, arg0: inst_block58000068, arg1: impl58000009} -// CHECK:STDOUT: inst58000125: {kind: ImplWitness, arg0: inst58000124, arg1: specific58000017, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000126: {kind: FunctionDecl, arg0: function58000005, arg1: inst_block_empty, type: type(symbolic_constant580000DC)} -// CHECK:STDOUT: inst58000127: {kind: FunctionType, arg0: function58000005, arg1: specific58000017, type: type(TypeType)} -// CHECK:STDOUT: inst58000128: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant580000DC)} -// CHECK:STDOUT: inst58000129: {kind: TupleType, arg0: inst_block5800006A, type: type(TypeType)} -// CHECK:STDOUT: inst5800012A: {kind: TupleValue, arg0: inst_block58000069, type: type(inst58000129)} -// CHECK:STDOUT: inst5800012B: {kind: PatternType, arg0: inst58000122, type: type(TypeType)} -// CHECK:STDOUT: inst5800012C: {kind: ReturnSlotPattern, arg0: inst, type: type(symbolic_constant580000E2)} -// CHECK:STDOUT: inst5800012D: {kind: OutParamPattern, arg0: inst5800012C, type: type(symbolic_constant580000E2)} -// CHECK:STDOUT: inst5800012E: {kind: ValueBindingPattern, arg0: entity_name5800002D, type: type(symbolic_constant580000E2)} -// CHECK:STDOUT: inst5800012F: {kind: ValueParamPattern, arg0: inst5800012E, type: type(symbolic_constant580000E2)} -// CHECK:STDOUT: inst58000130: {kind: InitForm, arg0: inst58000122, type: type(inst(FormType))} -// CHECK:STDOUT: inst58000131: {kind: ImportRefLoaded, arg0: import_ir_instA4, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst58000132: {kind: ImportRefLoaded, arg0: import_ir_instA5, arg1: entity_name, type: type(inst(FormType))} -// CHECK:STDOUT: inst58000133: {kind: ImportRefLoaded, arg0: import_ir_instA6, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst58000134: {kind: ImportRefLoaded, arg0: import_ir_instA7, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst58000135: {kind: ImportRefLoaded, arg0: import_ir_instA8, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst58000136: {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000137: {kind: SymbolicBindingType, arg0: entity_name58000001, arg1: inst58000136, type: type(TypeType)} -// CHECK:STDOUT: inst58000138: {kind: SymbolicBinding, arg0: entity_name5800001C, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000139: {kind: SymbolicBindingType, arg0: entity_name5800001C, arg1: inst58000138, type: type(TypeType)} -// CHECK:STDOUT: inst5800013A: {kind: SymbolicBinding, arg0: entity_name5800002B, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst5800013B: {kind: SymbolicBindingType, arg0: entity_name5800002B, arg1: inst5800013A, type: type(TypeType)} -// CHECK:STDOUT: inst5800013C: {kind: TupleType, arg0: inst_block58000071, type: type(TypeType)} -// CHECK:STDOUT: inst5800013D: {kind: PatternType, arg0: inst5800013C, type: type(TypeType)} -// CHECK:STDOUT: inst5800013E: {kind: InitForm, arg0: inst5800013C, type: type(inst(FormType))} -// CHECK:STDOUT: inst5800013F: {kind: LookupImplWitness, arg0: inst58000120, arg1: specific_interface58000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000140: {kind: FunctionType, arg0: function58000001, arg1: specific58000018, type: type(TypeType)} -// CHECK:STDOUT: inst58000141: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant580000FB)} -// CHECK:STDOUT: inst58000142: {kind: FunctionTypeWithSelfType, arg0: inst58000140, arg1: inst58000120, type: type(TypeType)} -// CHECK:STDOUT: inst58000143: {kind: ImplWitnessAccess, arg0: inst5800013F, arg1: element0, type: type(symbolic_constant580000FD)} -// CHECK:STDOUT: inst58000144: {kind: SpecificImplFunction, arg0: inst58000143, arg1: specific58000019, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst58000145: {kind: InitForm, arg0: inst58000121, type: type(inst(FormType))} -// CHECK:STDOUT: inst58000146: {kind: PatternType, arg0: inst58000121, type: type(TypeType)} -// CHECK:STDOUT: inst58000147: {kind: RequireCompleteType, arg0: inst58000121, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000148: {kind: RequireCompleteType, arg0: inst58000122, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000149: {kind: RequireCompleteType, arg0: inst5800013C, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5800014A: {kind: RequireCompleteType, arg0: inst58000137, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5800014B: {kind: LookupImplWitness, arg0: inst58000136, arg1: specific_interface58000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5800014C: {kind: FunctionType, arg0: function58000001, arg1: specific5800001B, type: type(TypeType)} -// CHECK:STDOUT: inst5800014D: {kind: FunctionTypeWithSelfType, arg0: inst5800014C, arg1: inst58000136, type: type(TypeType)} -// CHECK:STDOUT: inst5800014E: {kind: ImplWitnessAccess, arg0: inst5800014B, arg1: element0, type: type(symbolic_constant5800011B)} -// CHECK:STDOUT: inst5800014F: {kind: SpecificImplFunction, arg0: inst5800014E, arg1: specific5800001C, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst58000150: {kind: RequireCompleteType, arg0: inst58000139, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000151: {kind: LookupImplWitness, arg0: inst58000138, arg1: specific_interface58000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000152: {kind: FunctionType, arg0: function58000001, arg1: specific5800001D, type: type(TypeType)} -// CHECK:STDOUT: inst58000153: {kind: FunctionTypeWithSelfType, arg0: inst58000152, arg1: inst58000138, type: type(TypeType)} -// CHECK:STDOUT: inst58000154: {kind: ImplWitnessAccess, arg0: inst58000151, arg1: element0, type: type(symbolic_constant58000121)} -// CHECK:STDOUT: inst58000155: {kind: SpecificImplFunction, arg0: inst58000154, arg1: specific5800001E, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst58000156: {kind: RequireCompleteType, arg0: inst5800013B, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000157: {kind: LookupImplWitness, arg0: inst5800013A, arg1: specific_interface58000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000158: {kind: FunctionType, arg0: function58000001, arg1: specific5800001F, type: type(TypeType)} -// CHECK:STDOUT: inst58000159: {kind: FunctionTypeWithSelfType, arg0: inst58000158, arg1: inst5800013A, type: type(TypeType)} -// CHECK:STDOUT: inst5800015A: {kind: ImplWitnessAccess, arg0: inst58000157, arg1: element0, type: type(symbolic_constant58000127)} -// CHECK:STDOUT: inst5800015B: {kind: SpecificImplFunction, arg0: inst5800015A, arg1: specific58000020, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst5800015C: {kind: SymbolicBindingPattern, arg0: entity_name5800003D, type: type(inst58000099)} -// CHECK:STDOUT: inst5800015D: {kind: SymbolicBindingPattern, arg0: entity_name5800003E, type: type(inst58000099)} -// CHECK:STDOUT: inst5800015E: {kind: SymbolicBindingPattern, arg0: entity_name5800003F, type: type(inst58000099)} -// CHECK:STDOUT: inst5800015F: {kind: ImportRefLoaded, arg0: import_ir_instC8, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst58000160: {kind: ImportRefLoaded, arg0: import_ir_instC9, arg1: entity_name, type: type(TypeType)} -// CHECK:STDOUT: inst58000161: {kind: ImportRefLoaded, arg0: import_ir_instCA, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst58000162: {kind: ImportRefLoaded, arg0: import_ir_instCB, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst58000163: {kind: ImportRefLoaded, arg0: import_ir_instCC, arg1: entity_name, type: type(inst58000050)} -// CHECK:STDOUT: inst58000164: {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000165: {kind: SymbolicBinding, arg0: entity_name5800001C, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000166: {kind: SymbolicBinding, arg0: entity_name5800002B, arg1: inst, type: type(inst58000050)} -// CHECK:STDOUT: inst58000167: {kind: TupleValue, arg0: inst_block58000080, type: type(inst58000129)} -// CHECK:STDOUT: inst58000168: {kind: SymbolicBindingType, arg0: entity_name58000001, arg1: inst58000164, type: type(TypeType)} -// CHECK:STDOUT: inst58000169: {kind: SymbolicBindingType, arg0: entity_name5800001C, arg1: inst58000165, type: type(TypeType)} -// CHECK:STDOUT: inst5800016A: {kind: SymbolicBindingType, arg0: entity_name5800002B, arg1: inst58000166, type: type(TypeType)} -// CHECK:STDOUT: inst5800016B: {kind: TupleType, arg0: inst_block58000081, type: type(TypeType)} -// CHECK:STDOUT: inst5800016C: {kind: ImplWitness, arg0: inst58000124, arg1: specific58000021, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst5800016D: {kind: FunctionType, arg0: function58000005, arg1: specific58000021, type: type(TypeType)} -// CHECK:STDOUT: inst5800016E: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant5800013C)} -// CHECK:STDOUT: inst5800016F: {kind: RequireSpecificDefinition, arg0: specific5800000B, type: type(inst(RequireSpecificDefinitionType))} -// CHECK:STDOUT: inst58000170: {kind: RequireSpecificDefinition, arg0: specific5800000B, type: type(inst(RequireSpecificDefinitionType))} -// CHECK:STDOUT: inst58000171: {kind: RequireSpecificDefinition, arg0: specific58000022, type: type(inst(RequireSpecificDefinitionType))} -// CHECK:STDOUT: inst58000172: {kind: LookupImplWitness, arg0: inst5800001D, arg1: specific_interface58000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000173: {kind: LookupImplWitness, arg0: inst5800001E, arg1: specific_interface58000000, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst58000174: {kind: FacetValue, arg0: inst5800001D, arg1: inst_block58000088, type: type(inst58000050)} -// CHECK:STDOUT: inst58000175: {kind: FunctionType, arg0: function58000001, arg1: specific58000023, type: type(TypeType)} -// CHECK:STDOUT: inst58000176: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant58000144)} -// CHECK:STDOUT: inst58000177: {kind: FunctionTypeWithSelfType, arg0: inst58000175, arg1: inst58000174, type: type(TypeType)} -// CHECK:STDOUT: inst58000178: {kind: ImplWitnessAccess, arg0: inst58000172, arg1: element0, type: type(symbolic_constant5800014A)} -// CHECK:STDOUT: inst58000179: {kind: ImplWitnessAccess, arg0: inst58000172, arg1: element0, type: type(symbolic_constant58000146)} -// CHECK:STDOUT: inst5800017A: {kind: FacetValue, arg0: inst5800001E, arg1: inst_block5800008B, type: type(inst58000050)} -// CHECK:STDOUT: inst5800017B: {kind: FunctionType, arg0: function58000001, arg1: specific58000024, type: type(TypeType)} -// CHECK:STDOUT: inst5800017C: {kind: FunctionTypeWithSelfType, arg0: inst5800017B, arg1: inst5800017A, type: type(TypeType)} -// CHECK:STDOUT: inst5800017D: {kind: ImplWitnessAccess, arg0: inst58000173, arg1: element0, type: type(symbolic_constant5800014A)} -// CHECK:STDOUT: inst5800017E: {kind: BoundMethod, arg0: inst58000048, arg1: inst58000178, type: type(inst(BoundMethodType))} -// CHECK:STDOUT: inst5800017F: {kind: SpecificImplFunction, arg0: inst58000178, arg1: specific58000025, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst58000180: {kind: SpecificImplFunction, arg0: inst58000179, arg1: specific58000025, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst58000181: {kind: SpecificImplFunction, arg0: inst5800017D, arg1: specific58000026, type: type(inst(SpecificFunctionType))} -// CHECK:STDOUT: inst58000182: {kind: BoundMethod, arg0: inst58000048, arg1: inst5800017F, type: type(inst(BoundMethodType))} -// CHECK:STDOUT: inst58000183: {kind: Call, arg0: inst58000182, arg1: inst_block5800008F, type: type(symbolic_constant58000004)} -// CHECK:STDOUT: inst58000184: {kind: InPlaceInit, arg0: inst58000183, arg1: inst5800004C, type: type(symbolic_constant58000004)} -// CHECK:STDOUT: inst58000185: {kind: TupleAccess, arg0: inst5800003C, arg1: element1, type: type(inst58000026)} -// CHECK:STDOUT: inst58000186: {kind: TupleInit, arg0: inst_block_empty, arg1: inst, type: type(inst58000026)} -// CHECK:STDOUT: inst58000187: {kind: Converted, arg0: inst58000049, arg1: inst58000186, type: type(inst58000026)} -// CHECK:STDOUT: inst58000188: {kind: TupleInit, arg0: inst_block58000090, arg1: inst5800003C, type: type(symbolic_constant5800000A)} -// CHECK:STDOUT: inst58000189: {kind: Converted, arg0: inst5800004A, arg1: inst58000188, type: type(symbolic_constant5800000A)} -// CHECK:STDOUT: inst5800018A: {kind: ReturnExpr, arg0: inst58000189, arg1: inst5800003C} +// CHECK:STDOUT: inst78000010: {kind: ImportDecl, arg0: name(Core)} +// CHECK:STDOUT: inst78000011: {kind: Namespace, arg0: name_scope78000001, arg1: inst78000010, type: type(inst(NamespaceType))} +// CHECK:STDOUT: inst78000012: {kind: FacetType, arg0: facet_type78000000, type: type(TypeType)} +// CHECK:STDOUT: inst78000013: {kind: SymbolicBinding, arg0: entity_name78000000, arg1: inst, type: type(inst78000012)} +// CHECK:STDOUT: inst78000014: {kind: SymbolicBinding, arg0: entity_name78000000, arg1: inst, type: type(inst78000012)} +// CHECK:STDOUT: inst78000015: {kind: TypeLiteral, arg0: inst(TypeType), type: type(TypeType)} +// CHECK:STDOUT: inst78000016: {kind: PatternType, arg0: inst(TypeType), type: type(TypeType)} +// CHECK:STDOUT: inst78000017: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} +// CHECK:STDOUT: inst78000018: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} +// CHECK:STDOUT: inst78000019: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} +// CHECK:STDOUT: inst7800001A: {kind: SymbolicBindingPattern, arg0: entity_name78000001, type: type(inst78000016)} +// CHECK:STDOUT: inst7800001B: {kind: NameRef, arg0: name1, arg1: inst78000017, type: type(TypeType)} +// CHECK:STDOUT: inst7800001C: {kind: PointerType, arg0: inst7800001B, type: type(TypeType)} +// CHECK:STDOUT: inst7800001D: {kind: PointerType, arg0: inst78000018, type: type(TypeType)} +// CHECK:STDOUT: inst7800001E: {kind: PointerType, arg0: inst78000019, type: type(TypeType)} +// CHECK:STDOUT: inst7800001F: {kind: PatternType, arg0: inst7800001D, type: type(TypeType)} +// CHECK:STDOUT: inst78000020: {kind: ValueBinding, arg0: entity_name78000002, arg1: inst7800003A, type: type(symbolic_constant78000004)} +// CHECK:STDOUT: inst78000021: {kind: ValueBindingPattern, arg0: entity_name78000002, type: type(symbolic_constant78000006)} +// CHECK:STDOUT: inst78000022: {kind: PatternType, arg0: inst7800001E, type: type(TypeType)} +// CHECK:STDOUT: inst78000023: {kind: ValueParamPattern, arg0: inst78000021, type: type(symbolic_constant78000006)} +// CHECK:STDOUT: inst78000024: {kind: NameRef, arg0: name1, arg1: inst78000017, type: type(TypeType)} +// CHECK:STDOUT: inst78000025: {kind: PointerType, arg0: inst78000024, type: type(TypeType)} +// CHECK:STDOUT: inst78000026: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} +// CHECK:STDOUT: inst78000027: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst78000026)} +// CHECK:STDOUT: inst78000028: {kind: TupleValue, arg0: inst_block_empty, type: type(inst78000026)} +// CHECK:STDOUT: inst78000029: {kind: TupleType, arg0: inst_block7800000A, type: type(TypeType)} +// CHECK:STDOUT: inst7800002A: {kind: TupleLiteral, arg0: inst_block78000009, type: type(inst78000029)} +// CHECK:STDOUT: inst7800002B: {kind: TupleValue, arg0: inst_block7800000B, type: type(inst78000029)} +// CHECK:STDOUT: inst7800002C: {kind: TupleValue, arg0: inst_block7800000C, type: type(inst78000029)} +// CHECK:STDOUT: inst7800002D: {kind: PointerType, arg0: inst78000029, type: type(TypeType)} +// CHECK:STDOUT: inst7800002E: {kind: Converted, arg0: inst78000028, arg1: inst78000026, type: type(TypeType)} +// CHECK:STDOUT: inst7800002F: {kind: TupleType, arg0: inst_block7800000E, type: type(TypeType)} +// CHECK:STDOUT: inst78000030: {kind: Converted, arg0: inst7800002A, arg1: inst7800002F, type: type(TypeType)} +// CHECK:STDOUT: inst78000031: {kind: TupleType, arg0: inst_block7800000F, type: type(TypeType)} +// CHECK:STDOUT: inst78000032: {kind: InitForm, arg0: inst78000030, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000033: {kind: InitForm, arg0: inst7800002F, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000034: {kind: InitForm, arg0: inst78000031, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000035: {kind: PatternType, arg0: inst7800002F, type: type(TypeType)} +// CHECK:STDOUT: inst78000036: {kind: ReturnSlotPattern, arg0: inst78000030, type: type(symbolic_constant7800000E)} +// CHECK:STDOUT: inst78000037: {kind: PatternType, arg0: inst78000031, type: type(TypeType)} +// CHECK:STDOUT: inst78000038: {kind: OutParamPattern, arg0: inst78000036, type: type(symbolic_constant7800000E)} +// CHECK:STDOUT: inst78000039: {kind: SpliceBlock, arg0: inst_block78000005, arg1: inst78000015, type: type(TypeType)} +// CHECK:STDOUT: inst7800003A: {kind: ValueParam, arg0: call_param0, arg1: name2, type: type(symbolic_constant78000004)} +// CHECK:STDOUT: inst7800003B: {kind: SpliceBlock, arg0: inst_block78000007, arg1: inst7800001C, type: type(TypeType)} +// CHECK:STDOUT: inst7800003C: {kind: OutParam, arg0: call_param1, arg1: name(ReturnSlot), type: type(symbolic_constant7800000A)} +// CHECK:STDOUT: inst7800003D: {kind: ReturnSlot, arg0: inst7800002F, arg1: inst7800003C, type: type(symbolic_constant7800000A)} +// CHECK:STDOUT: inst7800003E: {kind: FunctionDecl, arg0: function78000000, arg1: inst_block78000014, type: type(inst7800003F)} +// CHECK:STDOUT: inst7800003F: {kind: FunctionType, arg0: function78000000, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst78000040: {kind: StructValue, arg0: inst_block_empty, type: type(inst7800003F)} +// CHECK:STDOUT: inst78000041: {kind: RequireCompleteType, arg0: inst7800001D, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000042: {kind: RequireCompleteType, arg0: inst7800001D, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000043: {kind: RequireCompleteType, arg0: inst7800001E, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000044: {kind: PointerType, arg0: inst7800002F, type: type(TypeType)} +// CHECK:STDOUT: inst78000045: {kind: RequireCompleteType, arg0: inst7800002F, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000046: {kind: RequireCompleteType, arg0: inst7800002F, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000047: {kind: RequireCompleteType, arg0: inst78000031, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000048: {kind: NameRef, arg0: name2, arg1: inst78000020, type: type(symbolic_constant78000004)} +// CHECK:STDOUT: inst78000049: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst78000026)} +// CHECK:STDOUT: inst7800004A: {kind: TupleLiteral, arg0: inst_block7800001A, type: type(symbolic_constant7800000A)} +// CHECK:STDOUT: inst7800004B: {kind: RequireCompleteType, arg0: inst7800002F, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800004C: {kind: TupleAccess, arg0: inst7800003C, arg1: element0, type: type(symbolic_constant78000004)} +// CHECK:STDOUT: inst7800004D: {kind: RequireCompleteType, arg0: inst7800001D, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800004E: {kind: ImportRefLoaded, arg0: import_ir_inst0, arg1: entity_name78000003, type: type(TypeType)} +// CHECK:STDOUT: inst7800004F: {kind: InterfaceDecl, arg0: interface78000000, arg1: inst_block_empty, type: type(TypeType)} +// CHECK:STDOUT: inst78000050: {kind: FacetType, arg0: facet_type78000001, type: type(TypeType)} +// CHECK:STDOUT: inst78000051: {kind: InterfaceWithSelfDecl, arg0: interface78000000} +// CHECK:STDOUT: inst78000052: {kind: SymbolicBinding, arg0: entity_name78000004, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000053: {kind: ImportRefLoaded, arg0: import_ir_inst3, arg1: entity_name, type: type(inst7800006B)} +// CHECK:STDOUT: inst78000054: {kind: ImportRefUnloaded, arg0: import_ir_inst4, arg1: entity_name78000005} +// CHECK:STDOUT: inst78000055: {kind: ImportRefLoaded, arg0: import_ir_inst5, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst78000056: {kind: FunctionDecl, arg0: function78000001, arg1: inst_block_empty, type: type(symbolic_constant78000015)} +// CHECK:STDOUT: inst78000057: {kind: FunctionType, arg0: function78000001, arg1: specific78000001, type: type(TypeType)} +// CHECK:STDOUT: inst78000058: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000015)} +// CHECK:STDOUT: inst78000059: {kind: SymbolicBindingType, arg0: entity_name78000004, arg1: inst78000052, type: type(TypeType)} +// CHECK:STDOUT: inst7800005A: {kind: PatternType, arg0: inst78000059, type: type(TypeType)} +// CHECK:STDOUT: inst7800005B: {kind: ReturnSlotPattern, arg0: inst, type: type(symbolic_constant7800001B)} +// CHECK:STDOUT: inst7800005C: {kind: OutParamPattern, arg0: inst7800005B, type: type(symbolic_constant7800001B)} +// CHECK:STDOUT: inst7800005D: {kind: ValueBindingPattern, arg0: entity_name78000008, type: type(symbolic_constant7800001B)} +// CHECK:STDOUT: inst7800005E: {kind: ValueParamPattern, arg0: inst7800005D, type: type(symbolic_constant7800001B)} +// CHECK:STDOUT: inst7800005F: {kind: InitForm, arg0: inst78000059, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000060: {kind: ImportRefLoaded, arg0: import_ir_instB, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000061: {kind: ImportRefLoaded, arg0: import_ir_instC, arg1: entity_name, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000062: {kind: ImportRefLoaded, arg0: import_ir_instD, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst78000063: {kind: SymbolicBinding, arg0: entity_name78000004, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000064: {kind: SymbolicBindingType, arg0: entity_name78000004, arg1: inst78000063, type: type(TypeType)} +// CHECK:STDOUT: inst78000065: {kind: PatternType, arg0: inst78000064, type: type(TypeType)} +// CHECK:STDOUT: inst78000066: {kind: InitForm, arg0: inst78000064, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000067: {kind: SymbolicBinding, arg0: entity_name78000004, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000068: {kind: FunctionType, arg0: function78000001, arg1: specific78000003, type: type(TypeType)} +// CHECK:STDOUT: inst78000069: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000029)} +// CHECK:STDOUT: inst7800006A: {kind: ImportRefUnloaded, arg0: import_ir_inst15, arg1: entity_name} +// CHECK:STDOUT: inst7800006B: {kind: AssociatedEntityType, arg0: interface78000000, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst7800006C: {kind: ImportRefLoaded, arg0: import_ir_inst16, arg1: entity_name, type: type(symbolic_constant78000019)} +// CHECK:STDOUT: inst7800006D: {kind: AssociatedEntity, arg0: element0, arg1: inst7800006C, type: type(inst7800006B)} +// CHECK:STDOUT: inst7800006E: {kind: LookupImplWitness, arg0: inst7800001D, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800006F: {kind: ImportRefUnloaded, arg0: import_ir_inst17, arg1: entity_name} +// CHECK:STDOUT: inst78000070: {kind: ImplDecl, arg0: impl78000000, arg1: inst_block_empty} +// CHECK:STDOUT: inst78000071: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000072: {kind: SymbolicBindingType, arg0: entity_name78000001, arg1: inst78000071, type: type(TypeType)} +// CHECK:STDOUT: inst78000073: {kind: ConstType, arg0: inst78000072, type: type(TypeType)} +// CHECK:STDOUT: inst78000074: {kind: ImportRefUnloaded, arg0: import_ir_inst19, arg1: entity_name} +// CHECK:STDOUT: inst78000075: {kind: ImplWitnessTable, arg0: inst_block78000027, arg1: impl78000000} +// CHECK:STDOUT: inst78000076: {kind: ImplWitness, arg0: inst78000075, arg1: specific78000004, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000077: {kind: FunctionDecl, arg0: function78000002, arg1: inst_block_empty, type: type(symbolic_constant78000031)} +// CHECK:STDOUT: inst78000078: {kind: FunctionType, arg0: function78000002, arg1: specific78000004, type: type(TypeType)} +// CHECK:STDOUT: inst78000079: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000031)} +// CHECK:STDOUT: inst7800007A: {kind: PatternType, arg0: inst78000073, type: type(TypeType)} +// CHECK:STDOUT: inst7800007B: {kind: ReturnSlotPattern, arg0: inst, type: type(symbolic_constant78000036)} +// CHECK:STDOUT: inst7800007C: {kind: OutParamPattern, arg0: inst7800007B, type: type(symbolic_constant78000036)} +// CHECK:STDOUT: inst7800007D: {kind: ValueBindingPattern, arg0: entity_name7800000F, type: type(symbolic_constant78000036)} +// CHECK:STDOUT: inst7800007E: {kind: ValueParamPattern, arg0: inst7800007D, type: type(symbolic_constant78000036)} +// CHECK:STDOUT: inst7800007F: {kind: InitForm, arg0: inst78000073, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000080: {kind: ImportRefLoaded, arg0: import_ir_inst20, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000081: {kind: ImportRefLoaded, arg0: import_ir_inst21, arg1: entity_name, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000082: {kind: ImportRefLoaded, arg0: import_ir_inst22, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst78000083: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000084: {kind: SymbolicBindingType, arg0: entity_name78000001, arg1: inst78000083, type: type(TypeType)} +// CHECK:STDOUT: inst78000085: {kind: ConstType, arg0: inst78000084, type: type(TypeType)} +// CHECK:STDOUT: inst78000086: {kind: PatternType, arg0: inst78000085, type: type(TypeType)} +// CHECK:STDOUT: inst78000087: {kind: InitForm, arg0: inst78000085, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000088: {kind: LookupImplWitness, arg0: inst78000071, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000089: {kind: FunctionType, arg0: function78000001, arg1: specific78000005, type: type(TypeType)} +// CHECK:STDOUT: inst7800008A: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000045)} +// CHECK:STDOUT: inst7800008B: {kind: FunctionTypeWithSelfType, arg0: inst78000089, arg1: inst78000071, type: type(TypeType)} +// CHECK:STDOUT: inst7800008C: {kind: ImplWitnessAccess, arg0: inst78000088, arg1: element0, type: type(symbolic_constant78000047)} +// CHECK:STDOUT: inst7800008D: {kind: SpecificImplFunction, arg0: inst7800008C, arg1: specific78000006, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst7800008E: {kind: InitForm, arg0: inst78000072, type: type(inst(FormType))} +// CHECK:STDOUT: inst7800008F: {kind: PatternType, arg0: inst78000072, type: type(TypeType)} +// CHECK:STDOUT: inst78000090: {kind: RequireCompleteType, arg0: inst78000072, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000091: {kind: RequireCompleteType, arg0: inst78000073, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000092: {kind: RequireCompleteType, arg0: inst78000085, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000093: {kind: RequireCompleteType, arg0: inst78000084, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000094: {kind: LookupImplWitness, arg0: inst78000083, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000095: {kind: FunctionType, arg0: function78000001, arg1: specific78000008, type: type(TypeType)} +// CHECK:STDOUT: inst78000096: {kind: FunctionTypeWithSelfType, arg0: inst78000095, arg1: inst78000083, type: type(TypeType)} +// CHECK:STDOUT: inst78000097: {kind: ImplWitnessAccess, arg0: inst78000094, arg1: element0, type: type(symbolic_constant78000059)} +// CHECK:STDOUT: inst78000098: {kind: SpecificImplFunction, arg0: inst78000097, arg1: specific78000009, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst78000099: {kind: PatternType, arg0: inst78000050, type: type(TypeType)} +// CHECK:STDOUT: inst7800009A: {kind: SymbolicBindingPattern, arg0: entity_name78000015, type: type(inst78000099)} +// CHECK:STDOUT: inst7800009B: {kind: ImportRefLoaded, arg0: import_ir_inst30, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst7800009C: {kind: ImportRefLoaded, arg0: import_ir_inst31, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst7800009D: {kind: ImportRefLoaded, arg0: import_ir_inst32, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst7800009E: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst7800009F: {kind: SymbolicBindingType, arg0: entity_name78000001, arg1: inst7800009E, type: type(TypeType)} +// CHECK:STDOUT: inst780000A0: {kind: ConstType, arg0: inst7800009F, type: type(TypeType)} +// CHECK:STDOUT: inst780000A1: {kind: ImplWitness, arg0: inst78000075, arg1: specific7800000A, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000A2: {kind: FunctionType, arg0: function78000002, arg1: specific7800000A, type: type(TypeType)} +// CHECK:STDOUT: inst780000A3: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000064)} +// CHECK:STDOUT: inst780000A4: {kind: ImportRefUnloaded, arg0: import_ir_inst39, arg1: entity_name} +// CHECK:STDOUT: inst780000A5: {kind: ImplDecl, arg0: impl78000001, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000A6: {kind: ImportRefLoaded, arg0: import_ir_inst3B, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000A7: {kind: ImportRefLoaded, arg0: import_ir_inst3C, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000A8: {kind: ImportRefUnloaded, arg0: import_ir_inst3D, arg1: entity_name} +// CHECK:STDOUT: inst780000A9: {kind: ImplDecl, arg0: impl78000002, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000AA: {kind: ImportRefLoaded, arg0: import_ir_inst3F, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000AB: {kind: ImportRefLoaded, arg0: import_ir_inst40, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000AC: {kind: ImportRefUnloaded, arg0: import_ir_inst41, arg1: entity_name} +// CHECK:STDOUT: inst780000AD: {kind: ImplDecl, arg0: impl78000003, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000AE: {kind: ImportRefLoaded, arg0: import_ir_inst43, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000AF: {kind: ImportRefLoaded, arg0: import_ir_inst44, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000B0: {kind: ImportRefUnloaded, arg0: import_ir_inst45, arg1: entity_name} +// CHECK:STDOUT: inst780000B1: {kind: ImplDecl, arg0: impl78000004, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000B2: {kind: ImportRefLoaded, arg0: import_ir_inst47, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000B3: {kind: ImportRefLoaded, arg0: import_ir_inst48, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000B4: {kind: ImportRefLoaded, arg0: import_ir_inst49, arg1: entity_name, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000B5: {kind: ImplDecl, arg0: impl78000005, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000B6: {kind: ImportRefUnloaded, arg0: import_ir_inst4B, arg1: entity_name} +// CHECK:STDOUT: inst780000B7: {kind: ImplWitnessTable, arg0: inst_block7800003C, arg1: impl78000005} +// CHECK:STDOUT: inst780000B8: {kind: ImplWitness, arg0: inst780000B7, arg1: specific7800000B, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000B9: {kind: SymbolicBindingPattern, arg0: entity_name78000019, type: type(inst78000016)} +// CHECK:STDOUT: inst780000BA: {kind: ImportRefLoaded, arg0: import_ir_inst4E, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000BB: {kind: ImportRefLoaded, arg0: import_ir_inst4F, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000BC: {kind: ImportRefLoaded, arg0: import_ir_inst50, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000BD: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} +// CHECK:STDOUT: inst780000BE: {kind: PointerType, arg0: inst780000BD, type: type(TypeType)} +// CHECK:STDOUT: inst780000BF: {kind: ImplWitness, arg0: inst780000B7, arg1: specific7800000C, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000C0: {kind: FunctionDecl, arg0: function78000003, arg1: inst_block_empty, type: type(symbolic_constant78000070)} +// CHECK:STDOUT: inst780000C1: {kind: FunctionType, arg0: function78000003, arg1: specific7800000B, type: type(TypeType)} +// CHECK:STDOUT: inst780000C2: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000070)} +// CHECK:STDOUT: inst780000C3: {kind: ReturnSlotPattern, arg0: inst, type: type(symbolic_constant78000074)} +// CHECK:STDOUT: inst780000C4: {kind: OutParamPattern, arg0: inst780000C3, type: type(symbolic_constant78000074)} +// CHECK:STDOUT: inst780000C5: {kind: ValueBindingPattern, arg0: entity_name7800001A, type: type(symbolic_constant78000074)} +// CHECK:STDOUT: inst780000C6: {kind: ValueParamPattern, arg0: inst780000C5, type: type(symbolic_constant78000074)} +// CHECK:STDOUT: inst780000C7: {kind: InitForm, arg0: inst7800001D, type: type(inst(FormType))} +// CHECK:STDOUT: inst780000C8: {kind: ImportRefLoaded, arg0: import_ir_inst59, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000C9: {kind: ImportRefLoaded, arg0: import_ir_inst5A, arg1: entity_name, type: type(inst(FormType))} +// CHECK:STDOUT: inst780000CA: {kind: ImportRefLoaded, arg0: import_ir_inst5B, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000CB: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(TypeType)} +// CHECK:STDOUT: inst780000CC: {kind: PointerType, arg0: inst780000CB, type: type(TypeType)} +// CHECK:STDOUT: inst780000CD: {kind: PatternType, arg0: inst780000CC, type: type(TypeType)} +// CHECK:STDOUT: inst780000CE: {kind: InitForm, arg0: inst780000CC, type: type(inst(FormType))} +// CHECK:STDOUT: inst780000CF: {kind: FunctionType, arg0: function78000003, arg1: specific7800000C, type: type(TypeType)} +// CHECK:STDOUT: inst780000D0: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000080)} +// CHECK:STDOUT: inst780000D1: {kind: RequireCompleteType, arg0: inst780000BE, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000D2: {kind: ImportRefUnloaded, arg0: import_ir_inst63, arg1: entity_name} +// CHECK:STDOUT: inst780000D3: {kind: ImplDecl, arg0: impl78000006, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000D4: {kind: ImportRefLoaded, arg0: import_ir_inst65, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000D5: {kind: ImportRefLoaded, arg0: import_ir_inst66, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000D6: {kind: ImportRefUnloaded, arg0: import_ir_inst67, arg1: entity_name} +// CHECK:STDOUT: inst780000D7: {kind: ImplDecl, arg0: impl78000007, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000D8: {kind: ImportRefLoaded, arg0: import_ir_inst69, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000D9: {kind: ImportRefLoaded, arg0: import_ir_inst6A, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000DA: {kind: ImportRefUnloaded, arg0: import_ir_inst6B, arg1: entity_name} +// CHECK:STDOUT: inst780000DB: {kind: ImplDecl, arg0: impl78000008, arg1: inst_block_empty} +// CHECK:STDOUT: inst780000DC: {kind: SymbolicBinding, arg0: entity_name7800001C, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst780000DD: {kind: SymbolicBindingType, arg0: entity_name7800001C, arg1: inst780000DC, type: type(TypeType)} +// CHECK:STDOUT: inst780000DE: {kind: TupleType, arg0: inst_block7800004A, type: type(TypeType)} +// CHECK:STDOUT: inst780000DF: {kind: ImportRefUnloaded, arg0: import_ir_inst6D, arg1: entity_name} +// CHECK:STDOUT: inst780000E0: {kind: ImplWitnessTable, arg0: inst_block7800004B, arg1: impl78000008} +// CHECK:STDOUT: inst780000E1: {kind: ImplWitness, arg0: inst780000E0, arg1: specific7800000E, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000E2: {kind: FunctionDecl, arg0: function78000004, arg1: inst_block_empty, type: type(symbolic_constant78000089)} +// CHECK:STDOUT: inst780000E3: {kind: FunctionType, arg0: function78000004, arg1: specific7800000E, type: type(TypeType)} +// CHECK:STDOUT: inst780000E4: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000089)} +// CHECK:STDOUT: inst780000E5: {kind: TupleType, arg0: inst_block7800004D, type: type(TypeType)} +// CHECK:STDOUT: inst780000E6: {kind: TupleValue, arg0: inst_block7800004C, type: type(inst780000E5)} +// CHECK:STDOUT: inst780000E7: {kind: PatternType, arg0: inst780000DE, type: type(TypeType)} +// CHECK:STDOUT: inst780000E8: {kind: ReturnSlotPattern, arg0: inst, type: type(symbolic_constant7800008F)} +// CHECK:STDOUT: inst780000E9: {kind: OutParamPattern, arg0: inst780000E8, type: type(symbolic_constant7800008F)} +// CHECK:STDOUT: inst780000EA: {kind: ValueBindingPattern, arg0: entity_name7800001E, type: type(symbolic_constant7800008F)} +// CHECK:STDOUT: inst780000EB: {kind: ValueParamPattern, arg0: inst780000EA, type: type(symbolic_constant7800008F)} +// CHECK:STDOUT: inst780000EC: {kind: InitForm, arg0: inst780000DE, type: type(inst(FormType))} +// CHECK:STDOUT: inst780000ED: {kind: ImportRefLoaded, arg0: import_ir_inst74, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst780000EE: {kind: ImportRefLoaded, arg0: import_ir_inst75, arg1: entity_name, type: type(inst(FormType))} +// CHECK:STDOUT: inst780000EF: {kind: ImportRefLoaded, arg0: import_ir_inst76, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst780000F0: {kind: ImportRefLoaded, arg0: import_ir_inst77, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst780000F1: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst780000F2: {kind: SymbolicBindingType, arg0: entity_name78000001, arg1: inst780000F1, type: type(TypeType)} +// CHECK:STDOUT: inst780000F3: {kind: SymbolicBinding, arg0: entity_name7800001C, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst780000F4: {kind: SymbolicBindingType, arg0: entity_name7800001C, arg1: inst780000F3, type: type(TypeType)} +// CHECK:STDOUT: inst780000F5: {kind: TupleType, arg0: inst_block78000054, type: type(TypeType)} +// CHECK:STDOUT: inst780000F6: {kind: PatternType, arg0: inst780000F5, type: type(TypeType)} +// CHECK:STDOUT: inst780000F7: {kind: InitForm, arg0: inst780000F5, type: type(inst(FormType))} +// CHECK:STDOUT: inst780000F8: {kind: LookupImplWitness, arg0: inst780000DC, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst780000F9: {kind: FunctionType, arg0: function78000001, arg1: specific7800000F, type: type(TypeType)} +// CHECK:STDOUT: inst780000FA: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780000A3)} +// CHECK:STDOUT: inst780000FB: {kind: FunctionTypeWithSelfType, arg0: inst780000F9, arg1: inst780000DC, type: type(TypeType)} +// CHECK:STDOUT: inst780000FC: {kind: ImplWitnessAccess, arg0: inst780000F8, arg1: element0, type: type(symbolic_constant780000A5)} +// CHECK:STDOUT: inst780000FD: {kind: SpecificImplFunction, arg0: inst780000FC, arg1: specific78000010, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst780000FE: {kind: InitForm, arg0: inst780000DD, type: type(inst(FormType))} +// CHECK:STDOUT: inst780000FF: {kind: PatternType, arg0: inst780000DD, type: type(TypeType)} +// CHECK:STDOUT: inst78000100: {kind: RequireCompleteType, arg0: inst780000DD, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000101: {kind: RequireCompleteType, arg0: inst780000DE, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000102: {kind: RequireCompleteType, arg0: inst780000F5, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000103: {kind: RequireCompleteType, arg0: inst780000F2, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000104: {kind: LookupImplWitness, arg0: inst780000F1, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000105: {kind: FunctionType, arg0: function78000001, arg1: specific78000012, type: type(TypeType)} +// CHECK:STDOUT: inst78000106: {kind: FunctionTypeWithSelfType, arg0: inst78000105, arg1: inst780000F1, type: type(TypeType)} +// CHECK:STDOUT: inst78000107: {kind: ImplWitnessAccess, arg0: inst78000104, arg1: element0, type: type(symbolic_constant780000BD)} +// CHECK:STDOUT: inst78000108: {kind: SpecificImplFunction, arg0: inst78000107, arg1: specific78000013, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst78000109: {kind: RequireCompleteType, arg0: inst780000F4, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800010A: {kind: LookupImplWitness, arg0: inst780000F3, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800010B: {kind: FunctionType, arg0: function78000001, arg1: specific78000014, type: type(TypeType)} +// CHECK:STDOUT: inst7800010C: {kind: FunctionTypeWithSelfType, arg0: inst7800010B, arg1: inst780000F3, type: type(TypeType)} +// CHECK:STDOUT: inst7800010D: {kind: ImplWitnessAccess, arg0: inst7800010A, arg1: element0, type: type(symbolic_constant780000C3)} +// CHECK:STDOUT: inst7800010E: {kind: SpecificImplFunction, arg0: inst7800010D, arg1: specific78000015, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst7800010F: {kind: SymbolicBindingPattern, arg0: entity_name78000029, type: type(inst78000099)} +// CHECK:STDOUT: inst78000110: {kind: SymbolicBindingPattern, arg0: entity_name7800002A, type: type(inst78000099)} +// CHECK:STDOUT: inst78000111: {kind: ImportRefLoaded, arg0: import_ir_inst8E, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000112: {kind: ImportRefLoaded, arg0: import_ir_inst8F, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000113: {kind: ImportRefLoaded, arg0: import_ir_inst90, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst78000114: {kind: ImportRefLoaded, arg0: import_ir_inst91, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst78000115: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000116: {kind: SymbolicBinding, arg0: entity_name7800001C, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000117: {kind: TupleValue, arg0: inst_block78000061, type: type(inst780000E5)} +// CHECK:STDOUT: inst78000118: {kind: SymbolicBindingType, arg0: entity_name78000001, arg1: inst78000115, type: type(TypeType)} +// CHECK:STDOUT: inst78000119: {kind: SymbolicBindingType, arg0: entity_name7800001C, arg1: inst78000116, type: type(TypeType)} +// CHECK:STDOUT: inst7800011A: {kind: TupleType, arg0: inst_block78000062, type: type(TypeType)} +// CHECK:STDOUT: inst7800011B: {kind: ImplWitness, arg0: inst780000E0, arg1: specific78000016, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800011C: {kind: FunctionType, arg0: function78000004, arg1: specific78000016, type: type(TypeType)} +// CHECK:STDOUT: inst7800011D: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780000D4)} +// CHECK:STDOUT: inst7800011E: {kind: ImportRefUnloaded, arg0: import_ir_inst9B, arg1: entity_name} +// CHECK:STDOUT: inst7800011F: {kind: ImplDecl, arg0: impl78000009, arg1: inst_block_empty} +// CHECK:STDOUT: inst78000120: {kind: SymbolicBinding, arg0: entity_name7800002B, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000121: {kind: SymbolicBindingType, arg0: entity_name7800002B, arg1: inst78000120, type: type(TypeType)} +// CHECK:STDOUT: inst78000122: {kind: TupleType, arg0: inst_block78000067, type: type(TypeType)} +// CHECK:STDOUT: inst78000123: {kind: ImportRefUnloaded, arg0: import_ir_inst9D, arg1: entity_name} +// CHECK:STDOUT: inst78000124: {kind: ImplWitnessTable, arg0: inst_block78000068, arg1: impl78000009} +// CHECK:STDOUT: inst78000125: {kind: ImplWitness, arg0: inst78000124, arg1: specific78000017, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000126: {kind: FunctionDecl, arg0: function78000005, arg1: inst_block_empty, type: type(symbolic_constant780000DC)} +// CHECK:STDOUT: inst78000127: {kind: FunctionType, arg0: function78000005, arg1: specific78000017, type: type(TypeType)} +// CHECK:STDOUT: inst78000128: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780000DC)} +// CHECK:STDOUT: inst78000129: {kind: TupleType, arg0: inst_block7800006A, type: type(TypeType)} +// CHECK:STDOUT: inst7800012A: {kind: TupleValue, arg0: inst_block78000069, type: type(inst78000129)} +// CHECK:STDOUT: inst7800012B: {kind: PatternType, arg0: inst78000122, type: type(TypeType)} +// CHECK:STDOUT: inst7800012C: {kind: ReturnSlotPattern, arg0: inst, type: type(symbolic_constant780000E2)} +// CHECK:STDOUT: inst7800012D: {kind: OutParamPattern, arg0: inst7800012C, type: type(symbolic_constant780000E2)} +// CHECK:STDOUT: inst7800012E: {kind: ValueBindingPattern, arg0: entity_name7800002D, type: type(symbolic_constant780000E2)} +// CHECK:STDOUT: inst7800012F: {kind: ValueParamPattern, arg0: inst7800012E, type: type(symbolic_constant780000E2)} +// CHECK:STDOUT: inst78000130: {kind: InitForm, arg0: inst78000122, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000131: {kind: ImportRefLoaded, arg0: import_ir_instA4, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000132: {kind: ImportRefLoaded, arg0: import_ir_instA5, arg1: entity_name, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000133: {kind: ImportRefLoaded, arg0: import_ir_instA6, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst78000134: {kind: ImportRefLoaded, arg0: import_ir_instA7, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst78000135: {kind: ImportRefLoaded, arg0: import_ir_instA8, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst78000136: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000137: {kind: SymbolicBindingType, arg0: entity_name78000001, arg1: inst78000136, type: type(TypeType)} +// CHECK:STDOUT: inst78000138: {kind: SymbolicBinding, arg0: entity_name7800001C, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000139: {kind: SymbolicBindingType, arg0: entity_name7800001C, arg1: inst78000138, type: type(TypeType)} +// CHECK:STDOUT: inst7800013A: {kind: SymbolicBinding, arg0: entity_name7800002B, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst7800013B: {kind: SymbolicBindingType, arg0: entity_name7800002B, arg1: inst7800013A, type: type(TypeType)} +// CHECK:STDOUT: inst7800013C: {kind: TupleType, arg0: inst_block78000071, type: type(TypeType)} +// CHECK:STDOUT: inst7800013D: {kind: PatternType, arg0: inst7800013C, type: type(TypeType)} +// CHECK:STDOUT: inst7800013E: {kind: InitForm, arg0: inst7800013C, type: type(inst(FormType))} +// CHECK:STDOUT: inst7800013F: {kind: LookupImplWitness, arg0: inst78000120, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000140: {kind: FunctionType, arg0: function78000001, arg1: specific78000018, type: type(TypeType)} +// CHECK:STDOUT: inst78000141: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant780000FB)} +// CHECK:STDOUT: inst78000142: {kind: FunctionTypeWithSelfType, arg0: inst78000140, arg1: inst78000120, type: type(TypeType)} +// CHECK:STDOUT: inst78000143: {kind: ImplWitnessAccess, arg0: inst7800013F, arg1: element0, type: type(symbolic_constant780000FD)} +// CHECK:STDOUT: inst78000144: {kind: SpecificImplFunction, arg0: inst78000143, arg1: specific78000019, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst78000145: {kind: InitForm, arg0: inst78000121, type: type(inst(FormType))} +// CHECK:STDOUT: inst78000146: {kind: PatternType, arg0: inst78000121, type: type(TypeType)} +// CHECK:STDOUT: inst78000147: {kind: RequireCompleteType, arg0: inst78000121, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000148: {kind: RequireCompleteType, arg0: inst78000122, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000149: {kind: RequireCompleteType, arg0: inst7800013C, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800014A: {kind: RequireCompleteType, arg0: inst78000137, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800014B: {kind: LookupImplWitness, arg0: inst78000136, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800014C: {kind: FunctionType, arg0: function78000001, arg1: specific7800001B, type: type(TypeType)} +// CHECK:STDOUT: inst7800014D: {kind: FunctionTypeWithSelfType, arg0: inst7800014C, arg1: inst78000136, type: type(TypeType)} +// CHECK:STDOUT: inst7800014E: {kind: ImplWitnessAccess, arg0: inst7800014B, arg1: element0, type: type(symbolic_constant7800011B)} +// CHECK:STDOUT: inst7800014F: {kind: SpecificImplFunction, arg0: inst7800014E, arg1: specific7800001C, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst78000150: {kind: RequireCompleteType, arg0: inst78000139, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000151: {kind: LookupImplWitness, arg0: inst78000138, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000152: {kind: FunctionType, arg0: function78000001, arg1: specific7800001D, type: type(TypeType)} +// CHECK:STDOUT: inst78000153: {kind: FunctionTypeWithSelfType, arg0: inst78000152, arg1: inst78000138, type: type(TypeType)} +// CHECK:STDOUT: inst78000154: {kind: ImplWitnessAccess, arg0: inst78000151, arg1: element0, type: type(symbolic_constant78000121)} +// CHECK:STDOUT: inst78000155: {kind: SpecificImplFunction, arg0: inst78000154, arg1: specific7800001E, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst78000156: {kind: RequireCompleteType, arg0: inst7800013B, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000157: {kind: LookupImplWitness, arg0: inst7800013A, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000158: {kind: FunctionType, arg0: function78000001, arg1: specific7800001F, type: type(TypeType)} +// CHECK:STDOUT: inst78000159: {kind: FunctionTypeWithSelfType, arg0: inst78000158, arg1: inst7800013A, type: type(TypeType)} +// CHECK:STDOUT: inst7800015A: {kind: ImplWitnessAccess, arg0: inst78000157, arg1: element0, type: type(symbolic_constant78000127)} +// CHECK:STDOUT: inst7800015B: {kind: SpecificImplFunction, arg0: inst7800015A, arg1: specific78000020, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst7800015C: {kind: SymbolicBindingPattern, arg0: entity_name7800003D, type: type(inst78000099)} +// CHECK:STDOUT: inst7800015D: {kind: SymbolicBindingPattern, arg0: entity_name7800003E, type: type(inst78000099)} +// CHECK:STDOUT: inst7800015E: {kind: SymbolicBindingPattern, arg0: entity_name7800003F, type: type(inst78000099)} +// CHECK:STDOUT: inst7800015F: {kind: ImportRefLoaded, arg0: import_ir_instC8, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000160: {kind: ImportRefLoaded, arg0: import_ir_instC9, arg1: entity_name, type: type(TypeType)} +// CHECK:STDOUT: inst78000161: {kind: ImportRefLoaded, arg0: import_ir_instCA, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst78000162: {kind: ImportRefLoaded, arg0: import_ir_instCB, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst78000163: {kind: ImportRefLoaded, arg0: import_ir_instCC, arg1: entity_name, type: type(inst78000050)} +// CHECK:STDOUT: inst78000164: {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000165: {kind: SymbolicBinding, arg0: entity_name7800001C, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000166: {kind: SymbolicBinding, arg0: entity_name7800002B, arg1: inst, type: type(inst78000050)} +// CHECK:STDOUT: inst78000167: {kind: TupleValue, arg0: inst_block78000080, type: type(inst78000129)} +// CHECK:STDOUT: inst78000168: {kind: SymbolicBindingType, arg0: entity_name78000001, arg1: inst78000164, type: type(TypeType)} +// CHECK:STDOUT: inst78000169: {kind: SymbolicBindingType, arg0: entity_name7800001C, arg1: inst78000165, type: type(TypeType)} +// CHECK:STDOUT: inst7800016A: {kind: SymbolicBindingType, arg0: entity_name7800002B, arg1: inst78000166, type: type(TypeType)} +// CHECK:STDOUT: inst7800016B: {kind: TupleType, arg0: inst_block78000081, type: type(TypeType)} +// CHECK:STDOUT: inst7800016C: {kind: ImplWitness, arg0: inst78000124, arg1: specific78000021, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst7800016D: {kind: FunctionType, arg0: function78000005, arg1: specific78000021, type: type(TypeType)} +// CHECK:STDOUT: inst7800016E: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant7800013C)} +// CHECK:STDOUT: inst7800016F: {kind: RequireSpecificDefinition, arg0: specific7800000B, type: type(inst(RequireSpecificDefinitionType))} +// CHECK:STDOUT: inst78000170: {kind: RequireSpecificDefinition, arg0: specific7800000B, type: type(inst(RequireSpecificDefinitionType))} +// CHECK:STDOUT: inst78000171: {kind: RequireSpecificDefinition, arg0: specific78000022, type: type(inst(RequireSpecificDefinitionType))} +// CHECK:STDOUT: inst78000172: {kind: LookupImplWitness, arg0: inst7800001D, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000173: {kind: LookupImplWitness, arg0: inst7800001E, arg1: specific_interface78000000, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst78000174: {kind: FacetValue, arg0: inst7800001D, arg1: inst_block78000088, type: type(inst78000050)} +// CHECK:STDOUT: inst78000175: {kind: FunctionType, arg0: function78000001, arg1: specific78000023, type: type(TypeType)} +// CHECK:STDOUT: inst78000176: {kind: StructValue, arg0: inst_block_empty, type: type(symbolic_constant78000144)} +// CHECK:STDOUT: inst78000177: {kind: FunctionTypeWithSelfType, arg0: inst78000175, arg1: inst78000174, type: type(TypeType)} +// CHECK:STDOUT: inst78000178: {kind: ImplWitnessAccess, arg0: inst78000172, arg1: element0, type: type(symbolic_constant7800014A)} +// CHECK:STDOUT: inst78000179: {kind: ImplWitnessAccess, arg0: inst78000172, arg1: element0, type: type(symbolic_constant78000146)} +// CHECK:STDOUT: inst7800017A: {kind: FacetValue, arg0: inst7800001E, arg1: inst_block7800008B, type: type(inst78000050)} +// CHECK:STDOUT: inst7800017B: {kind: FunctionType, arg0: function78000001, arg1: specific78000024, type: type(TypeType)} +// CHECK:STDOUT: inst7800017C: {kind: FunctionTypeWithSelfType, arg0: inst7800017B, arg1: inst7800017A, type: type(TypeType)} +// CHECK:STDOUT: inst7800017D: {kind: ImplWitnessAccess, arg0: inst78000173, arg1: element0, type: type(symbolic_constant7800014A)} +// CHECK:STDOUT: inst7800017E: {kind: BoundMethod, arg0: inst78000048, arg1: inst78000178, type: type(inst(BoundMethodType))} +// CHECK:STDOUT: inst7800017F: {kind: SpecificImplFunction, arg0: inst78000178, arg1: specific78000025, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst78000180: {kind: SpecificImplFunction, arg0: inst78000179, arg1: specific78000025, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst78000181: {kind: SpecificImplFunction, arg0: inst7800017D, arg1: specific78000026, type: type(inst(SpecificFunctionType))} +// CHECK:STDOUT: inst78000182: {kind: BoundMethod, arg0: inst78000048, arg1: inst7800017F, type: type(inst(BoundMethodType))} +// CHECK:STDOUT: inst78000183: {kind: Call, arg0: inst78000182, arg1: inst_block7800008F, type: type(symbolic_constant78000004)} +// CHECK:STDOUT: inst78000184: {kind: InPlaceInit, arg0: inst78000183, arg1: inst7800004C, type: type(symbolic_constant78000004)} +// CHECK:STDOUT: inst78000185: {kind: TupleAccess, arg0: inst7800003C, arg1: element1, type: type(inst78000026)} +// CHECK:STDOUT: inst78000186: {kind: TupleInit, arg0: inst_block_empty, arg1: inst, type: type(inst78000026)} +// CHECK:STDOUT: inst78000187: {kind: Converted, arg0: inst78000049, arg1: inst78000186, type: type(inst78000026)} +// CHECK:STDOUT: inst78000188: {kind: TupleInit, arg0: inst_block78000090, arg1: inst7800003C, type: type(symbolic_constant7800000A)} +// CHECK:STDOUT: inst78000189: {kind: Converted, arg0: inst7800004A, arg1: inst78000188, type: type(symbolic_constant7800000A)} +// CHECK:STDOUT: inst7800018A: {kind: ReturnExpr, arg0: inst78000189, arg1: inst7800003C} // CHECK:STDOUT: constant_values: // CHECK:STDOUT: values: // CHECK:STDOUT: instF: concrete_constant(instF) -// CHECK:STDOUT: inst58000011: concrete_constant(inst58000011) -// CHECK:STDOUT: inst58000012: concrete_constant(inst58000012) -// CHECK:STDOUT: inst58000013: symbolic_constant58000000 -// CHECK:STDOUT: inst58000014: symbolic_constant58000000 -// CHECK:STDOUT: inst58000015: concrete_constant(inst(TypeType)) -// CHECK:STDOUT: inst58000016: concrete_constant(inst58000016) -// CHECK:STDOUT: inst58000017: symbolic_constant58000002 -// CHECK:STDOUT: inst58000018: symbolic_constant58000001 -// CHECK:STDOUT: inst58000019: symbolic_constant58000002 -// CHECK:STDOUT: inst5800001A: concrete_constant(inst5800001A) -// CHECK:STDOUT: inst5800001B: symbolic_constant58000002 -// CHECK:STDOUT: inst5800001C: symbolic_constant58000004 -// CHECK:STDOUT: inst5800001D: symbolic_constant58000003 -// CHECK:STDOUT: inst5800001E: symbolic_constant58000004 -// CHECK:STDOUT: inst5800001F: symbolic_constant58000005 -// CHECK:STDOUT: inst58000021: concrete_constant(inst58000021) -// CHECK:STDOUT: inst58000022: symbolic_constant58000006 -// CHECK:STDOUT: inst58000023: concrete_constant(inst58000023) -// CHECK:STDOUT: inst58000024: symbolic_constant58000002 -// CHECK:STDOUT: inst58000025: symbolic_constant58000004 -// CHECK:STDOUT: inst58000026: concrete_constant(inst58000026) -// CHECK:STDOUT: inst58000027: concrete_constant(inst58000028) -// CHECK:STDOUT: inst58000028: concrete_constant(inst58000028) -// CHECK:STDOUT: inst58000029: concrete_constant(inst58000029) -// CHECK:STDOUT: inst5800002A: symbolic_constant58000008 -// CHECK:STDOUT: inst5800002B: symbolic_constant58000007 -// CHECK:STDOUT: inst5800002C: symbolic_constant58000008 -// CHECK:STDOUT: inst5800002D: concrete_constant(inst5800002D) -// CHECK:STDOUT: inst5800002E: concrete_constant(inst58000026) -// CHECK:STDOUT: inst5800002F: symbolic_constant58000009 -// CHECK:STDOUT: inst58000030: symbolic_constant5800000A -// CHECK:STDOUT: inst58000031: symbolic_constant5800000A -// CHECK:STDOUT: inst58000032: symbolic_constant5800000C -// CHECK:STDOUT: inst58000033: symbolic_constant5800000B -// CHECK:STDOUT: inst58000034: symbolic_constant5800000C -// CHECK:STDOUT: inst58000035: symbolic_constant5800000D -// CHECK:STDOUT: inst58000036: concrete_constant(inst58000036) -// CHECK:STDOUT: inst58000037: symbolic_constant5800000E -// CHECK:STDOUT: inst58000038: concrete_constant(inst58000038) -// CHECK:STDOUT: inst58000039: concrete_constant(inst(TypeType)) -// CHECK:STDOUT: inst5800003B: symbolic_constant58000004 -// CHECK:STDOUT: inst5800003E: concrete_constant(inst58000040) -// CHECK:STDOUT: inst5800003F: concrete_constant(inst5800003F) -// CHECK:STDOUT: inst58000040: concrete_constant(inst58000040) -// CHECK:STDOUT: inst58000041: symbolic_constant58000010 -// CHECK:STDOUT: inst58000042: symbolic_constant5800000F -// CHECK:STDOUT: inst58000043: symbolic_constant58000010 -// CHECK:STDOUT: inst58000044: symbolic_constant58000011 -// CHECK:STDOUT: inst58000045: symbolic_constant58000013 -// CHECK:STDOUT: inst58000046: symbolic_constant58000012 -// CHECK:STDOUT: inst58000047: symbolic_constant58000013 -// CHECK:STDOUT: inst58000049: concrete_constant(inst58000028) -// CHECK:STDOUT: inst5800004B: symbolic_constant58000013 -// CHECK:STDOUT: inst5800004D: symbolic_constant58000010 -// CHECK:STDOUT: inst5800004E: concrete_constant(inst58000050) -// CHECK:STDOUT: inst5800004F: concrete_constant(inst58000050) -// CHECK:STDOUT: inst58000050: concrete_constant(inst58000050) -// CHECK:STDOUT: inst58000051: concrete_constant(inst58000051) -// CHECK:STDOUT: inst58000052: symbolic_constant58000014 -// CHECK:STDOUT: inst58000053: concrete_constant(inst5800006D) -// CHECK:STDOUT: inst58000054: constant -// CHECK:STDOUT: inst58000055: symbolic_constant58000014 -// CHECK:STDOUT: inst58000056: symbolic_constant58000017 -// CHECK:STDOUT: inst58000057: symbolic_constant58000015 -// CHECK:STDOUT: inst58000058: symbolic_constant58000016 -// CHECK:STDOUT: inst58000059: symbolic_constant58000018 -// CHECK:STDOUT: inst5800005A: symbolic_constant5800001A -// CHECK:STDOUT: inst5800005B: concrete_constant(inst5800005B) -// CHECK:STDOUT: inst5800005C: concrete_constant(inst5800005C) -// CHECK:STDOUT: inst5800005D: concrete_constant(inst5800005D) -// CHECK:STDOUT: inst5800005E: concrete_constant(inst5800005E) -// CHECK:STDOUT: inst5800005F: symbolic_constant5800001C -// CHECK:STDOUT: inst58000060: symbolic_constant58000021 -// CHECK:STDOUT: inst58000061: symbolic_constant58000020 -// CHECK:STDOUT: inst58000062: symbolic_constant58000014 -// CHECK:STDOUT: inst58000063: symbolic_constant58000022 -// CHECK:STDOUT: inst58000064: symbolic_constant58000023 -// CHECK:STDOUT: inst58000065: symbolic_constant58000024 -// CHECK:STDOUT: inst58000066: symbolic_constant58000025 -// CHECK:STDOUT: inst58000067: symbolic_constant58000028 -// CHECK:STDOUT: inst58000068: symbolic_constant58000029 -// CHECK:STDOUT: inst58000069: symbolic_constant5800002A -// CHECK:STDOUT: inst5800006A: constant -// CHECK:STDOUT: inst5800006B: concrete_constant(inst5800006B) -// CHECK:STDOUT: inst5800006C: symbolic_constant58000017 -// CHECK:STDOUT: inst5800006D: concrete_constant(inst5800006D) -// CHECK:STDOUT: inst5800006E: symbolic_constant58000142 -// CHECK:STDOUT: inst5800006F: constant -// CHECK:STDOUT: inst58000070: concrete_constant(inst58000070) -// CHECK:STDOUT: inst58000071: symbolic_constant5800002B -// CHECK:STDOUT: inst58000072: symbolic_constant5800002C -// CHECK:STDOUT: inst58000073: symbolic_constant5800002D -// CHECK:STDOUT: inst58000074: constant -// CHECK:STDOUT: inst58000075: concrete_constant(inst58000075) -// CHECK:STDOUT: inst58000076: symbolic_constant5800002F -// CHECK:STDOUT: inst58000077: symbolic_constant58000033 -// CHECK:STDOUT: inst58000078: symbolic_constant58000031 -// CHECK:STDOUT: inst58000079: symbolic_constant58000032 -// CHECK:STDOUT: inst5800007A: symbolic_constant58000035 -// CHECK:STDOUT: inst5800007B: concrete_constant(inst5800007B) -// CHECK:STDOUT: inst5800007C: concrete_constant(inst5800007C) -// CHECK:STDOUT: inst5800007D: concrete_constant(inst5800007D) -// CHECK:STDOUT: inst5800007E: concrete_constant(inst5800007E) -// CHECK:STDOUT: inst5800007F: symbolic_constant58000037 -// CHECK:STDOUT: inst58000080: symbolic_constant5800003E -// CHECK:STDOUT: inst58000081: symbolic_constant5800003D -// CHECK:STDOUT: inst58000082: symbolic_constant5800003C -// CHECK:STDOUT: inst58000083: symbolic_constant5800003F -// CHECK:STDOUT: inst58000084: symbolic_constant58000040 -// CHECK:STDOUT: inst58000085: symbolic_constant58000041 -// CHECK:STDOUT: inst58000086: symbolic_constant58000042 -// CHECK:STDOUT: inst58000087: symbolic_constant58000043 -// CHECK:STDOUT: inst58000088: symbolic_constant58000044 -// CHECK:STDOUT: inst58000089: symbolic_constant58000045 -// CHECK:STDOUT: inst5800008A: symbolic_constant58000046 -// CHECK:STDOUT: inst5800008B: symbolic_constant58000047 -// CHECK:STDOUT: inst5800008C: symbolic_constant58000048 -// CHECK:STDOUT: inst5800008D: symbolic_constant58000049 -// CHECK:STDOUT: inst5800008E: symbolic_constant5800004B -// CHECK:STDOUT: inst5800008F: symbolic_constant5800004C -// CHECK:STDOUT: inst58000090: symbolic_constant58000051 -// CHECK:STDOUT: inst58000091: symbolic_constant58000053 -// CHECK:STDOUT: inst58000092: symbolic_constant58000055 -// CHECK:STDOUT: inst58000093: symbolic_constant58000056 -// CHECK:STDOUT: inst58000094: symbolic_constant58000057 -// CHECK:STDOUT: inst58000095: symbolic_constant58000058 -// CHECK:STDOUT: inst58000096: symbolic_constant58000059 -// CHECK:STDOUT: inst58000097: symbolic_constant5800005A -// CHECK:STDOUT: inst58000098: symbolic_constant5800005B -// CHECK:STDOUT: inst58000099: concrete_constant(inst58000099) -// CHECK:STDOUT: inst5800009A: concrete_constant(inst5800009A) -// CHECK:STDOUT: inst5800009B: symbolic_constant5800002E -// CHECK:STDOUT: inst5800009C: concrete_constant(inst58000050) -// CHECK:STDOUT: inst5800009D: symbolic_constant5800003C -// CHECK:STDOUT: inst5800009E: symbolic_constant5800005F -// CHECK:STDOUT: inst5800009F: symbolic_constant58000060 -// CHECK:STDOUT: inst580000A0: symbolic_constant58000061 -// CHECK:STDOUT: inst580000A1: symbolic_constant58000062 -// CHECK:STDOUT: inst580000A2: symbolic_constant58000064 -// CHECK:STDOUT: inst580000A3: symbolic_constant58000065 -// CHECK:STDOUT: inst580000A4: constant -// CHECK:STDOUT: inst580000A5: concrete_constant(inst580000A5) -// CHECK:STDOUT: inst580000A6: concrete_constant(inst(BoolType)) -// CHECK:STDOUT: inst580000A7: concrete_constant(inst58000050) -// CHECK:STDOUT: inst580000A8: constant -// CHECK:STDOUT: inst580000A9: concrete_constant(inst580000A9) -// CHECK:STDOUT: inst580000AA: concrete_constant(inst(CharLiteralType)) -// CHECK:STDOUT: inst580000AB: concrete_constant(inst58000050) -// CHECK:STDOUT: inst580000AC: constant -// CHECK:STDOUT: inst580000AD: concrete_constant(inst580000AD) -// CHECK:STDOUT: inst580000AE: concrete_constant(inst(FloatLiteralType)) -// CHECK:STDOUT: inst580000AF: concrete_constant(inst58000050) -// CHECK:STDOUT: inst580000B0: constant -// CHECK:STDOUT: inst580000B1: concrete_constant(inst580000B1) -// CHECK:STDOUT: inst580000B2: concrete_constant(inst(IntLiteralType)) -// CHECK:STDOUT: inst580000B3: concrete_constant(inst58000050) -// CHECK:STDOUT: inst580000B4: symbolic_constant5800013E -// CHECK:STDOUT: inst580000B5: concrete_constant(inst580000B5) -// CHECK:STDOUT: inst580000B6: constant -// CHECK:STDOUT: inst580000B7: concrete_constant(inst580000B7) -// CHECK:STDOUT: inst580000B8: symbolic_constant58000067 -// CHECK:STDOUT: inst580000B9: concrete_constant(inst580000B9) -// CHECK:STDOUT: inst580000BA: symbolic_constant58000066 -// CHECK:STDOUT: inst580000BB: concrete_constant(inst58000050) -// CHECK:STDOUT: inst580000BC: symbolic_constant5800006B -// CHECK:STDOUT: inst580000BD: symbolic_constant5800006C -// CHECK:STDOUT: inst580000BE: symbolic_constant5800006D -// CHECK:STDOUT: inst580000BF: symbolic_constant5800006E -// CHECK:STDOUT: inst580000C0: symbolic_constant58000072 -// CHECK:STDOUT: inst580000C1: symbolic_constant58000070 -// CHECK:STDOUT: inst580000C2: symbolic_constant58000071 -// CHECK:STDOUT: inst580000C3: concrete_constant(inst580000C3) -// CHECK:STDOUT: inst580000C4: concrete_constant(inst580000C4) -// CHECK:STDOUT: inst580000C5: concrete_constant(inst580000C5) -// CHECK:STDOUT: inst580000C6: concrete_constant(inst580000C6) -// CHECK:STDOUT: inst580000C7: symbolic_constant58000075 -// CHECK:STDOUT: inst580000C8: symbolic_constant5800007A -// CHECK:STDOUT: inst580000C9: symbolic_constant58000079 -// CHECK:STDOUT: inst580000CA: symbolic_constant5800006B -// CHECK:STDOUT: inst580000CB: symbolic_constant5800007B -// CHECK:STDOUT: inst580000CC: symbolic_constant5800007C -// CHECK:STDOUT: inst580000CD: symbolic_constant5800007D -// CHECK:STDOUT: inst580000CE: symbolic_constant5800007E -// CHECK:STDOUT: inst580000CF: symbolic_constant58000080 -// CHECK:STDOUT: inst580000D0: symbolic_constant58000081 -// CHECK:STDOUT: inst580000D1: symbolic_constant58000082 -// CHECK:STDOUT: inst580000D2: constant -// CHECK:STDOUT: inst580000D3: concrete_constant(inst580000D3) -// CHECK:STDOUT: inst580000D4: concrete_constant(inst(TypeType)) -// CHECK:STDOUT: inst580000D5: concrete_constant(inst58000050) -// CHECK:STDOUT: inst580000D6: constant -// CHECK:STDOUT: inst580000D7: concrete_constant(inst580000D7) -// CHECK:STDOUT: inst580000D8: concrete_constant(inst58000026) -// CHECK:STDOUT: inst580000D9: concrete_constant(inst58000050) -// CHECK:STDOUT: inst580000DA: constant -// CHECK:STDOUT: inst580000DB: concrete_constant(inst580000DB) -// CHECK:STDOUT: inst580000DC: symbolic_constant58000083 -// CHECK:STDOUT: inst580000DD: symbolic_constant58000084 -// CHECK:STDOUT: inst580000DE: symbolic_constant58000085 -// CHECK:STDOUT: inst580000DF: constant -// CHECK:STDOUT: inst580000E0: concrete_constant(inst580000E0) -// CHECK:STDOUT: inst580000E1: symbolic_constant58000087 -// CHECK:STDOUT: inst580000E2: symbolic_constant5800008B -// CHECK:STDOUT: inst580000E3: symbolic_constant58000089 -// CHECK:STDOUT: inst580000E4: symbolic_constant5800008A -// CHECK:STDOUT: inst580000E5: concrete_constant(inst580000E5) -// CHECK:STDOUT: inst580000E6: symbolic_constant5800008D -// CHECK:STDOUT: inst580000E7: symbolic_constant5800008E -// CHECK:STDOUT: inst580000E8: concrete_constant(inst580000E8) -// CHECK:STDOUT: inst580000E9: concrete_constant(inst580000E9) -// CHECK:STDOUT: inst580000EA: concrete_constant(inst580000EA) -// CHECK:STDOUT: inst580000EB: concrete_constant(inst580000EB) -// CHECK:STDOUT: inst580000EC: symbolic_constant58000090 -// CHECK:STDOUT: inst580000ED: symbolic_constant5800009A -// CHECK:STDOUT: inst580000EE: symbolic_constant58000099 -// CHECK:STDOUT: inst580000EF: symbolic_constant58000098 -// CHECK:STDOUT: inst580000F0: symbolic_constant58000097 -// CHECK:STDOUT: inst580000F1: symbolic_constant5800009B -// CHECK:STDOUT: inst580000F2: symbolic_constant5800009C -// CHECK:STDOUT: inst580000F3: symbolic_constant5800009D -// CHECK:STDOUT: inst580000F4: symbolic_constant5800009E -// CHECK:STDOUT: inst580000F5: symbolic_constant5800009F -// CHECK:STDOUT: inst580000F6: symbolic_constant580000A0 -// CHECK:STDOUT: inst580000F7: symbolic_constant580000A1 -// CHECK:STDOUT: inst580000F8: symbolic_constant580000A2 -// CHECK:STDOUT: inst580000F9: symbolic_constant580000A3 -// CHECK:STDOUT: inst580000FA: symbolic_constant580000A4 -// CHECK:STDOUT: inst580000FB: symbolic_constant580000A5 -// CHECK:STDOUT: inst580000FC: symbolic_constant580000A6 -// CHECK:STDOUT: inst580000FD: symbolic_constant580000A7 -// CHECK:STDOUT: inst580000FE: symbolic_constant580000A9 -// CHECK:STDOUT: inst580000FF: symbolic_constant580000AA -// CHECK:STDOUT: inst58000100: symbolic_constant580000AF -// CHECK:STDOUT: inst58000101: symbolic_constant580000B7 -// CHECK:STDOUT: inst58000102: symbolic_constant580000B9 -// CHECK:STDOUT: inst58000103: symbolic_constant580000BA -// CHECK:STDOUT: inst58000104: symbolic_constant580000BB -// CHECK:STDOUT: inst58000105: symbolic_constant580000BC -// CHECK:STDOUT: inst58000106: symbolic_constant580000BD -// CHECK:STDOUT: inst58000107: symbolic_constant580000BE -// CHECK:STDOUT: inst58000108: symbolic_constant580000BF -// CHECK:STDOUT: inst58000109: symbolic_constant580000C0 -// CHECK:STDOUT: inst5800010A: symbolic_constant580000C1 -// CHECK:STDOUT: inst5800010B: symbolic_constant580000C2 -// CHECK:STDOUT: inst5800010C: symbolic_constant580000C3 -// CHECK:STDOUT: inst5800010D: symbolic_constant580000C4 -// CHECK:STDOUT: inst5800010E: symbolic_constant580000C5 -// CHECK:STDOUT: inst5800010F: concrete_constant(inst5800010F) -// CHECK:STDOUT: inst58000110: concrete_constant(inst58000110) -// CHECK:STDOUT: inst58000111: symbolic_constant58000086 -// CHECK:STDOUT: inst58000112: concrete_constant(inst58000050) -// CHECK:STDOUT: inst58000113: symbolic_constant58000098 -// CHECK:STDOUT: inst58000114: symbolic_constant58000097 -// CHECK:STDOUT: inst58000115: symbolic_constant580000CC -// CHECK:STDOUT: inst58000116: symbolic_constant580000CD -// CHECK:STDOUT: inst58000117: symbolic_constant580000CE -// CHECK:STDOUT: inst58000118: symbolic_constant580000CF -// CHECK:STDOUT: inst58000119: symbolic_constant580000D0 -// CHECK:STDOUT: inst5800011A: symbolic_constant580000D1 -// CHECK:STDOUT: inst5800011B: symbolic_constant580000D2 -// CHECK:STDOUT: inst5800011C: symbolic_constant580000D4 -// CHECK:STDOUT: inst5800011D: symbolic_constant580000D5 -// CHECK:STDOUT: inst5800011E: constant -// CHECK:STDOUT: inst5800011F: concrete_constant(inst5800011F) -// CHECK:STDOUT: inst58000120: symbolic_constant580000D6 -// CHECK:STDOUT: inst58000121: symbolic_constant580000D7 -// CHECK:STDOUT: inst58000122: symbolic_constant580000D8 -// CHECK:STDOUT: inst58000123: constant -// CHECK:STDOUT: inst58000124: concrete_constant(inst58000124) -// CHECK:STDOUT: inst58000125: symbolic_constant580000DA -// CHECK:STDOUT: inst58000126: symbolic_constant580000DE -// CHECK:STDOUT: inst58000127: symbolic_constant580000DC -// CHECK:STDOUT: inst58000128: symbolic_constant580000DD -// CHECK:STDOUT: inst58000129: concrete_constant(inst58000129) -// CHECK:STDOUT: inst5800012A: symbolic_constant580000E0 -// CHECK:STDOUT: inst5800012B: symbolic_constant580000E1 -// CHECK:STDOUT: inst5800012C: concrete_constant(inst5800012C) -// CHECK:STDOUT: inst5800012D: concrete_constant(inst5800012D) -// CHECK:STDOUT: inst5800012E: concrete_constant(inst5800012E) -// CHECK:STDOUT: inst5800012F: concrete_constant(inst5800012F) -// CHECK:STDOUT: inst58000130: symbolic_constant580000E3 -// CHECK:STDOUT: inst58000131: symbolic_constant580000F0 -// CHECK:STDOUT: inst58000132: symbolic_constant580000EF -// CHECK:STDOUT: inst58000133: symbolic_constant580000EE -// CHECK:STDOUT: inst58000134: symbolic_constant580000ED -// CHECK:STDOUT: inst58000135: symbolic_constant580000EC -// CHECK:STDOUT: inst58000136: symbolic_constant580000F1 -// CHECK:STDOUT: inst58000137: symbolic_constant580000F2 -// CHECK:STDOUT: inst58000138: symbolic_constant580000F3 -// CHECK:STDOUT: inst58000139: symbolic_constant580000F4 -// CHECK:STDOUT: inst5800013A: symbolic_constant580000F5 -// CHECK:STDOUT: inst5800013B: symbolic_constant580000F6 -// CHECK:STDOUT: inst5800013C: symbolic_constant580000F7 -// CHECK:STDOUT: inst5800013D: symbolic_constant580000F8 -// CHECK:STDOUT: inst5800013E: symbolic_constant580000F9 -// CHECK:STDOUT: inst5800013F: symbolic_constant580000FA -// CHECK:STDOUT: inst58000140: symbolic_constant580000FB -// CHECK:STDOUT: inst58000141: symbolic_constant580000FC -// CHECK:STDOUT: inst58000142: symbolic_constant580000FD -// CHECK:STDOUT: inst58000143: symbolic_constant580000FE -// CHECK:STDOUT: inst58000144: symbolic_constant580000FF -// CHECK:STDOUT: inst58000145: symbolic_constant58000101 -// CHECK:STDOUT: inst58000146: symbolic_constant58000102 -// CHECK:STDOUT: inst58000147: symbolic_constant58000107 -// CHECK:STDOUT: inst58000148: symbolic_constant58000115 -// CHECK:STDOUT: inst58000149: symbolic_constant58000117 -// CHECK:STDOUT: inst5800014A: symbolic_constant58000118 -// CHECK:STDOUT: inst5800014B: symbolic_constant58000119 -// CHECK:STDOUT: inst5800014C: symbolic_constant5800011A -// CHECK:STDOUT: inst5800014D: symbolic_constant5800011B -// CHECK:STDOUT: inst5800014E: symbolic_constant5800011C -// CHECK:STDOUT: inst5800014F: symbolic_constant5800011D -// CHECK:STDOUT: inst58000150: symbolic_constant5800011E -// CHECK:STDOUT: inst58000151: symbolic_constant5800011F -// CHECK:STDOUT: inst58000152: symbolic_constant58000120 -// CHECK:STDOUT: inst58000153: symbolic_constant58000121 -// CHECK:STDOUT: inst58000154: symbolic_constant58000122 -// CHECK:STDOUT: inst58000155: symbolic_constant58000123 -// CHECK:STDOUT: inst58000156: symbolic_constant58000124 -// CHECK:STDOUT: inst58000157: symbolic_constant58000125 -// CHECK:STDOUT: inst58000158: symbolic_constant58000126 -// CHECK:STDOUT: inst58000159: symbolic_constant58000127 -// CHECK:STDOUT: inst5800015A: symbolic_constant58000128 -// CHECK:STDOUT: inst5800015B: symbolic_constant58000129 -// CHECK:STDOUT: inst5800015C: concrete_constant(inst5800015C) -// CHECK:STDOUT: inst5800015D: concrete_constant(inst5800015D) -// CHECK:STDOUT: inst5800015E: concrete_constant(inst5800015E) -// CHECK:STDOUT: inst5800015F: symbolic_constant580000D9 -// CHECK:STDOUT: inst58000160: concrete_constant(inst58000050) -// CHECK:STDOUT: inst58000161: symbolic_constant580000EE -// CHECK:STDOUT: inst58000162: symbolic_constant580000ED -// CHECK:STDOUT: inst58000163: symbolic_constant580000EC -// CHECK:STDOUT: inst58000164: symbolic_constant58000132 -// CHECK:STDOUT: inst58000165: symbolic_constant58000133 -// CHECK:STDOUT: inst58000166: symbolic_constant58000134 -// CHECK:STDOUT: inst58000167: symbolic_constant58000135 -// CHECK:STDOUT: inst58000168: symbolic_constant58000136 -// CHECK:STDOUT: inst58000169: symbolic_constant58000137 -// CHECK:STDOUT: inst5800016A: symbolic_constant58000138 -// CHECK:STDOUT: inst5800016B: symbolic_constant58000139 -// CHECK:STDOUT: inst5800016C: symbolic_constant5800013A -// CHECK:STDOUT: inst5800016D: symbolic_constant5800013C -// CHECK:STDOUT: inst5800016E: symbolic_constant5800013D -// CHECK:STDOUT: inst5800016F: symbolic_constant58000140 -// CHECK:STDOUT: inst58000170: symbolic_constant5800013F -// CHECK:STDOUT: inst58000171: symbolic_constant58000140 -// CHECK:STDOUT: inst58000172: symbolic_constant58000141 -// CHECK:STDOUT: inst58000173: symbolic_constant58000142 -// CHECK:STDOUT: inst58000174: symbolic_constant58000143 -// CHECK:STDOUT: inst58000175: symbolic_constant58000144 -// CHECK:STDOUT: inst58000176: symbolic_constant58000145 -// CHECK:STDOUT: inst58000177: symbolic_constant58000146 -// CHECK:STDOUT: inst58000178: symbolic_constant5800014B -// CHECK:STDOUT: inst58000179: symbolic_constant58000147 -// CHECK:STDOUT: inst5800017A: symbolic_constant58000148 -// CHECK:STDOUT: inst5800017B: symbolic_constant58000149 -// CHECK:STDOUT: inst5800017C: symbolic_constant5800014A -// CHECK:STDOUT: inst5800017D: symbolic_constant5800014B -// CHECK:STDOUT: inst5800017F: symbolic_constant5800014D -// CHECK:STDOUT: inst58000180: symbolic_constant5800014C -// CHECK:STDOUT: inst58000181: symbolic_constant5800014D -// CHECK:STDOUT: inst58000186: concrete_constant(inst58000028) -// CHECK:STDOUT: inst58000187: concrete_constant(inst58000028) +// CHECK:STDOUT: inst78000011: concrete_constant(inst78000011) +// CHECK:STDOUT: inst78000012: concrete_constant(inst78000012) +// CHECK:STDOUT: inst78000013: symbolic_constant78000000 +// CHECK:STDOUT: inst78000014: symbolic_constant78000000 +// CHECK:STDOUT: inst78000015: concrete_constant(inst(TypeType)) +// CHECK:STDOUT: inst78000016: concrete_constant(inst78000016) +// CHECK:STDOUT: inst78000017: symbolic_constant78000002 +// CHECK:STDOUT: inst78000018: symbolic_constant78000001 +// CHECK:STDOUT: inst78000019: symbolic_constant78000002 +// CHECK:STDOUT: inst7800001A: concrete_constant(inst7800001A) +// CHECK:STDOUT: inst7800001B: symbolic_constant78000002 +// CHECK:STDOUT: inst7800001C: symbolic_constant78000004 +// CHECK:STDOUT: inst7800001D: symbolic_constant78000003 +// CHECK:STDOUT: inst7800001E: symbolic_constant78000004 +// CHECK:STDOUT: inst7800001F: symbolic_constant78000005 +// CHECK:STDOUT: inst78000021: concrete_constant(inst78000021) +// CHECK:STDOUT: inst78000022: symbolic_constant78000006 +// CHECK:STDOUT: inst78000023: concrete_constant(inst78000023) +// CHECK:STDOUT: inst78000024: symbolic_constant78000002 +// CHECK:STDOUT: inst78000025: symbolic_constant78000004 +// CHECK:STDOUT: inst78000026: concrete_constant(inst78000026) +// CHECK:STDOUT: inst78000027: concrete_constant(inst78000028) +// CHECK:STDOUT: inst78000028: concrete_constant(inst78000028) +// CHECK:STDOUT: inst78000029: concrete_constant(inst78000029) +// CHECK:STDOUT: inst7800002A: symbolic_constant78000008 +// CHECK:STDOUT: inst7800002B: symbolic_constant78000007 +// CHECK:STDOUT: inst7800002C: symbolic_constant78000008 +// CHECK:STDOUT: inst7800002D: concrete_constant(inst7800002D) +// CHECK:STDOUT: inst7800002E: concrete_constant(inst78000026) +// CHECK:STDOUT: inst7800002F: symbolic_constant78000009 +// CHECK:STDOUT: inst78000030: symbolic_constant7800000A +// CHECK:STDOUT: inst78000031: symbolic_constant7800000A +// CHECK:STDOUT: inst78000032: symbolic_constant7800000C +// CHECK:STDOUT: inst78000033: symbolic_constant7800000B +// CHECK:STDOUT: inst78000034: symbolic_constant7800000C +// CHECK:STDOUT: inst78000035: symbolic_constant7800000D +// CHECK:STDOUT: inst78000036: concrete_constant(inst78000036) +// CHECK:STDOUT: inst78000037: symbolic_constant7800000E +// CHECK:STDOUT: inst78000038: concrete_constant(inst78000038) +// CHECK:STDOUT: inst78000039: concrete_constant(inst(TypeType)) +// CHECK:STDOUT: inst7800003B: symbolic_constant78000004 +// CHECK:STDOUT: inst7800003E: concrete_constant(inst78000040) +// CHECK:STDOUT: inst7800003F: concrete_constant(inst7800003F) +// CHECK:STDOUT: inst78000040: concrete_constant(inst78000040) +// CHECK:STDOUT: inst78000041: symbolic_constant78000010 +// CHECK:STDOUT: inst78000042: symbolic_constant7800000F +// CHECK:STDOUT: inst78000043: symbolic_constant78000010 +// CHECK:STDOUT: inst78000044: symbolic_constant78000011 +// CHECK:STDOUT: inst78000045: symbolic_constant78000013 +// CHECK:STDOUT: inst78000046: symbolic_constant78000012 +// CHECK:STDOUT: inst78000047: symbolic_constant78000013 +// CHECK:STDOUT: inst78000049: concrete_constant(inst78000028) +// CHECK:STDOUT: inst7800004B: symbolic_constant78000013 +// CHECK:STDOUT: inst7800004D: symbolic_constant78000010 +// CHECK:STDOUT: inst7800004E: concrete_constant(inst78000050) +// CHECK:STDOUT: inst7800004F: concrete_constant(inst78000050) +// CHECK:STDOUT: inst78000050: concrete_constant(inst78000050) +// CHECK:STDOUT: inst78000051: concrete_constant(inst78000051) +// CHECK:STDOUT: inst78000052: symbolic_constant78000014 +// CHECK:STDOUT: inst78000053: concrete_constant(inst7800006D) +// CHECK:STDOUT: inst78000054: constant +// CHECK:STDOUT: inst78000055: symbolic_constant78000014 +// CHECK:STDOUT: inst78000056: symbolic_constant78000017 +// CHECK:STDOUT: inst78000057: symbolic_constant78000015 +// CHECK:STDOUT: inst78000058: symbolic_constant78000016 +// CHECK:STDOUT: inst78000059: symbolic_constant78000018 +// CHECK:STDOUT: inst7800005A: symbolic_constant7800001A +// CHECK:STDOUT: inst7800005B: concrete_constant(inst7800005B) +// CHECK:STDOUT: inst7800005C: concrete_constant(inst7800005C) +// CHECK:STDOUT: inst7800005D: concrete_constant(inst7800005D) +// CHECK:STDOUT: inst7800005E: concrete_constant(inst7800005E) +// CHECK:STDOUT: inst7800005F: symbolic_constant7800001C +// CHECK:STDOUT: inst78000060: symbolic_constant78000021 +// CHECK:STDOUT: inst78000061: symbolic_constant78000020 +// CHECK:STDOUT: inst78000062: symbolic_constant78000014 +// CHECK:STDOUT: inst78000063: symbolic_constant78000022 +// CHECK:STDOUT: inst78000064: symbolic_constant78000023 +// CHECK:STDOUT: inst78000065: symbolic_constant78000024 +// CHECK:STDOUT: inst78000066: symbolic_constant78000025 +// CHECK:STDOUT: inst78000067: symbolic_constant78000028 +// CHECK:STDOUT: inst78000068: symbolic_constant78000029 +// CHECK:STDOUT: inst78000069: symbolic_constant7800002A +// CHECK:STDOUT: inst7800006A: constant +// CHECK:STDOUT: inst7800006B: concrete_constant(inst7800006B) +// CHECK:STDOUT: inst7800006C: symbolic_constant78000017 +// CHECK:STDOUT: inst7800006D: concrete_constant(inst7800006D) +// CHECK:STDOUT: inst7800006E: symbolic_constant78000142 +// CHECK:STDOUT: inst7800006F: constant +// CHECK:STDOUT: inst78000070: concrete_constant(inst78000070) +// CHECK:STDOUT: inst78000071: symbolic_constant7800002B +// CHECK:STDOUT: inst78000072: symbolic_constant7800002C +// CHECK:STDOUT: inst78000073: symbolic_constant7800002D +// CHECK:STDOUT: inst78000074: constant +// CHECK:STDOUT: inst78000075: concrete_constant(inst78000075) +// CHECK:STDOUT: inst78000076: symbolic_constant7800002F +// CHECK:STDOUT: inst78000077: symbolic_constant78000033 +// CHECK:STDOUT: inst78000078: symbolic_constant78000031 +// CHECK:STDOUT: inst78000079: symbolic_constant78000032 +// CHECK:STDOUT: inst7800007A: symbolic_constant78000035 +// CHECK:STDOUT: inst7800007B: concrete_constant(inst7800007B) +// CHECK:STDOUT: inst7800007C: concrete_constant(inst7800007C) +// CHECK:STDOUT: inst7800007D: concrete_constant(inst7800007D) +// CHECK:STDOUT: inst7800007E: concrete_constant(inst7800007E) +// CHECK:STDOUT: inst7800007F: symbolic_constant78000037 +// CHECK:STDOUT: inst78000080: symbolic_constant7800003E +// CHECK:STDOUT: inst78000081: symbolic_constant7800003D +// CHECK:STDOUT: inst78000082: symbolic_constant7800003C +// CHECK:STDOUT: inst78000083: symbolic_constant7800003F +// CHECK:STDOUT: inst78000084: symbolic_constant78000040 +// CHECK:STDOUT: inst78000085: symbolic_constant78000041 +// CHECK:STDOUT: inst78000086: symbolic_constant78000042 +// CHECK:STDOUT: inst78000087: symbolic_constant78000043 +// CHECK:STDOUT: inst78000088: symbolic_constant78000044 +// CHECK:STDOUT: inst78000089: symbolic_constant78000045 +// CHECK:STDOUT: inst7800008A: symbolic_constant78000046 +// CHECK:STDOUT: inst7800008B: symbolic_constant78000047 +// CHECK:STDOUT: inst7800008C: symbolic_constant78000048 +// CHECK:STDOUT: inst7800008D: symbolic_constant78000049 +// CHECK:STDOUT: inst7800008E: symbolic_constant7800004B +// CHECK:STDOUT: inst7800008F: symbolic_constant7800004C +// CHECK:STDOUT: inst78000090: symbolic_constant78000051 +// CHECK:STDOUT: inst78000091: symbolic_constant78000053 +// CHECK:STDOUT: inst78000092: symbolic_constant78000055 +// CHECK:STDOUT: inst78000093: symbolic_constant78000056 +// CHECK:STDOUT: inst78000094: symbolic_constant78000057 +// CHECK:STDOUT: inst78000095: symbolic_constant78000058 +// CHECK:STDOUT: inst78000096: symbolic_constant78000059 +// CHECK:STDOUT: inst78000097: symbolic_constant7800005A +// CHECK:STDOUT: inst78000098: symbolic_constant7800005B +// CHECK:STDOUT: inst78000099: concrete_constant(inst78000099) +// CHECK:STDOUT: inst7800009A: concrete_constant(inst7800009A) +// CHECK:STDOUT: inst7800009B: symbolic_constant7800002E +// CHECK:STDOUT: inst7800009C: concrete_constant(inst78000050) +// CHECK:STDOUT: inst7800009D: symbolic_constant7800003C +// CHECK:STDOUT: inst7800009E: symbolic_constant7800005F +// CHECK:STDOUT: inst7800009F: symbolic_constant78000060 +// CHECK:STDOUT: inst780000A0: symbolic_constant78000061 +// CHECK:STDOUT: inst780000A1: symbolic_constant78000062 +// CHECK:STDOUT: inst780000A2: symbolic_constant78000064 +// CHECK:STDOUT: inst780000A3: symbolic_constant78000065 +// CHECK:STDOUT: inst780000A4: constant +// CHECK:STDOUT: inst780000A5: concrete_constant(inst780000A5) +// CHECK:STDOUT: inst780000A6: concrete_constant(inst(BoolType)) +// CHECK:STDOUT: inst780000A7: concrete_constant(inst78000050) +// CHECK:STDOUT: inst780000A8: constant +// CHECK:STDOUT: inst780000A9: concrete_constant(inst780000A9) +// CHECK:STDOUT: inst780000AA: concrete_constant(inst(CharLiteralType)) +// CHECK:STDOUT: inst780000AB: concrete_constant(inst78000050) +// CHECK:STDOUT: inst780000AC: constant +// CHECK:STDOUT: inst780000AD: concrete_constant(inst780000AD) +// CHECK:STDOUT: inst780000AE: concrete_constant(inst(FloatLiteralType)) +// CHECK:STDOUT: inst780000AF: concrete_constant(inst78000050) +// CHECK:STDOUT: inst780000B0: constant +// CHECK:STDOUT: inst780000B1: concrete_constant(inst780000B1) +// CHECK:STDOUT: inst780000B2: concrete_constant(inst(IntLiteralType)) +// CHECK:STDOUT: inst780000B3: concrete_constant(inst78000050) +// CHECK:STDOUT: inst780000B4: symbolic_constant7800013E +// CHECK:STDOUT: inst780000B5: concrete_constant(inst780000B5) +// CHECK:STDOUT: inst780000B6: constant +// CHECK:STDOUT: inst780000B7: concrete_constant(inst780000B7) +// CHECK:STDOUT: inst780000B8: symbolic_constant78000067 +// CHECK:STDOUT: inst780000B9: concrete_constant(inst780000B9) +// CHECK:STDOUT: inst780000BA: symbolic_constant78000066 +// CHECK:STDOUT: inst780000BB: concrete_constant(inst78000050) +// CHECK:STDOUT: inst780000BC: symbolic_constant7800006B +// CHECK:STDOUT: inst780000BD: symbolic_constant7800006C +// CHECK:STDOUT: inst780000BE: symbolic_constant7800006D +// CHECK:STDOUT: inst780000BF: symbolic_constant7800006E +// CHECK:STDOUT: inst780000C0: symbolic_constant78000072 +// CHECK:STDOUT: inst780000C1: symbolic_constant78000070 +// CHECK:STDOUT: inst780000C2: symbolic_constant78000071 +// CHECK:STDOUT: inst780000C3: concrete_constant(inst780000C3) +// CHECK:STDOUT: inst780000C4: concrete_constant(inst780000C4) +// CHECK:STDOUT: inst780000C5: concrete_constant(inst780000C5) +// CHECK:STDOUT: inst780000C6: concrete_constant(inst780000C6) +// CHECK:STDOUT: inst780000C7: symbolic_constant78000075 +// CHECK:STDOUT: inst780000C8: symbolic_constant7800007A +// CHECK:STDOUT: inst780000C9: symbolic_constant78000079 +// CHECK:STDOUT: inst780000CA: symbolic_constant7800006B +// CHECK:STDOUT: inst780000CB: symbolic_constant7800007B +// CHECK:STDOUT: inst780000CC: symbolic_constant7800007C +// CHECK:STDOUT: inst780000CD: symbolic_constant7800007D +// CHECK:STDOUT: inst780000CE: symbolic_constant7800007E +// CHECK:STDOUT: inst780000CF: symbolic_constant78000080 +// CHECK:STDOUT: inst780000D0: symbolic_constant78000081 +// CHECK:STDOUT: inst780000D1: symbolic_constant78000082 +// CHECK:STDOUT: inst780000D2: constant +// CHECK:STDOUT: inst780000D3: concrete_constant(inst780000D3) +// CHECK:STDOUT: inst780000D4: concrete_constant(inst(TypeType)) +// CHECK:STDOUT: inst780000D5: concrete_constant(inst78000050) +// CHECK:STDOUT: inst780000D6: constant +// CHECK:STDOUT: inst780000D7: concrete_constant(inst780000D7) +// CHECK:STDOUT: inst780000D8: concrete_constant(inst78000026) +// CHECK:STDOUT: inst780000D9: concrete_constant(inst78000050) +// CHECK:STDOUT: inst780000DA: constant +// CHECK:STDOUT: inst780000DB: concrete_constant(inst780000DB) +// CHECK:STDOUT: inst780000DC: symbolic_constant78000083 +// CHECK:STDOUT: inst780000DD: symbolic_constant78000084 +// CHECK:STDOUT: inst780000DE: symbolic_constant78000085 +// CHECK:STDOUT: inst780000DF: constant +// CHECK:STDOUT: inst780000E0: concrete_constant(inst780000E0) +// CHECK:STDOUT: inst780000E1: symbolic_constant78000087 +// CHECK:STDOUT: inst780000E2: symbolic_constant7800008B +// CHECK:STDOUT: inst780000E3: symbolic_constant78000089 +// CHECK:STDOUT: inst780000E4: symbolic_constant7800008A +// CHECK:STDOUT: inst780000E5: concrete_constant(inst780000E5) +// CHECK:STDOUT: inst780000E6: symbolic_constant7800008D +// CHECK:STDOUT: inst780000E7: symbolic_constant7800008E +// CHECK:STDOUT: inst780000E8: concrete_constant(inst780000E8) +// CHECK:STDOUT: inst780000E9: concrete_constant(inst780000E9) +// CHECK:STDOUT: inst780000EA: concrete_constant(inst780000EA) +// CHECK:STDOUT: inst780000EB: concrete_constant(inst780000EB) +// CHECK:STDOUT: inst780000EC: symbolic_constant78000090 +// CHECK:STDOUT: inst780000ED: symbolic_constant7800009A +// CHECK:STDOUT: inst780000EE: symbolic_constant78000099 +// CHECK:STDOUT: inst780000EF: symbolic_constant78000098 +// CHECK:STDOUT: inst780000F0: symbolic_constant78000097 +// CHECK:STDOUT: inst780000F1: symbolic_constant7800009B +// CHECK:STDOUT: inst780000F2: symbolic_constant7800009C +// CHECK:STDOUT: inst780000F3: symbolic_constant7800009D +// CHECK:STDOUT: inst780000F4: symbolic_constant7800009E +// CHECK:STDOUT: inst780000F5: symbolic_constant7800009F +// CHECK:STDOUT: inst780000F6: symbolic_constant780000A0 +// CHECK:STDOUT: inst780000F7: symbolic_constant780000A1 +// CHECK:STDOUT: inst780000F8: symbolic_constant780000A2 +// CHECK:STDOUT: inst780000F9: symbolic_constant780000A3 +// CHECK:STDOUT: inst780000FA: symbolic_constant780000A4 +// CHECK:STDOUT: inst780000FB: symbolic_constant780000A5 +// CHECK:STDOUT: inst780000FC: symbolic_constant780000A6 +// CHECK:STDOUT: inst780000FD: symbolic_constant780000A7 +// CHECK:STDOUT: inst780000FE: symbolic_constant780000A9 +// CHECK:STDOUT: inst780000FF: symbolic_constant780000AA +// CHECK:STDOUT: inst78000100: symbolic_constant780000AF +// CHECK:STDOUT: inst78000101: symbolic_constant780000B7 +// CHECK:STDOUT: inst78000102: symbolic_constant780000B9 +// CHECK:STDOUT: inst78000103: symbolic_constant780000BA +// CHECK:STDOUT: inst78000104: symbolic_constant780000BB +// CHECK:STDOUT: inst78000105: symbolic_constant780000BC +// CHECK:STDOUT: inst78000106: symbolic_constant780000BD +// CHECK:STDOUT: inst78000107: symbolic_constant780000BE +// CHECK:STDOUT: inst78000108: symbolic_constant780000BF +// CHECK:STDOUT: inst78000109: symbolic_constant780000C0 +// CHECK:STDOUT: inst7800010A: symbolic_constant780000C1 +// CHECK:STDOUT: inst7800010B: symbolic_constant780000C2 +// CHECK:STDOUT: inst7800010C: symbolic_constant780000C3 +// CHECK:STDOUT: inst7800010D: symbolic_constant780000C4 +// CHECK:STDOUT: inst7800010E: symbolic_constant780000C5 +// CHECK:STDOUT: inst7800010F: concrete_constant(inst7800010F) +// CHECK:STDOUT: inst78000110: concrete_constant(inst78000110) +// CHECK:STDOUT: inst78000111: symbolic_constant78000086 +// CHECK:STDOUT: inst78000112: concrete_constant(inst78000050) +// CHECK:STDOUT: inst78000113: symbolic_constant78000098 +// CHECK:STDOUT: inst78000114: symbolic_constant78000097 +// CHECK:STDOUT: inst78000115: symbolic_constant780000CC +// CHECK:STDOUT: inst78000116: symbolic_constant780000CD +// CHECK:STDOUT: inst78000117: symbolic_constant780000CE +// CHECK:STDOUT: inst78000118: symbolic_constant780000CF +// CHECK:STDOUT: inst78000119: symbolic_constant780000D0 +// CHECK:STDOUT: inst7800011A: symbolic_constant780000D1 +// CHECK:STDOUT: inst7800011B: symbolic_constant780000D2 +// CHECK:STDOUT: inst7800011C: symbolic_constant780000D4 +// CHECK:STDOUT: inst7800011D: symbolic_constant780000D5 +// CHECK:STDOUT: inst7800011E: constant +// CHECK:STDOUT: inst7800011F: concrete_constant(inst7800011F) +// CHECK:STDOUT: inst78000120: symbolic_constant780000D6 +// CHECK:STDOUT: inst78000121: symbolic_constant780000D7 +// CHECK:STDOUT: inst78000122: symbolic_constant780000D8 +// CHECK:STDOUT: inst78000123: constant +// CHECK:STDOUT: inst78000124: concrete_constant(inst78000124) +// CHECK:STDOUT: inst78000125: symbolic_constant780000DA +// CHECK:STDOUT: inst78000126: symbolic_constant780000DE +// CHECK:STDOUT: inst78000127: symbolic_constant780000DC +// CHECK:STDOUT: inst78000128: symbolic_constant780000DD +// CHECK:STDOUT: inst78000129: concrete_constant(inst78000129) +// CHECK:STDOUT: inst7800012A: symbolic_constant780000E0 +// CHECK:STDOUT: inst7800012B: symbolic_constant780000E1 +// CHECK:STDOUT: inst7800012C: concrete_constant(inst7800012C) +// CHECK:STDOUT: inst7800012D: concrete_constant(inst7800012D) +// CHECK:STDOUT: inst7800012E: concrete_constant(inst7800012E) +// CHECK:STDOUT: inst7800012F: concrete_constant(inst7800012F) +// CHECK:STDOUT: inst78000130: symbolic_constant780000E3 +// CHECK:STDOUT: inst78000131: symbolic_constant780000F0 +// CHECK:STDOUT: inst78000132: symbolic_constant780000EF +// CHECK:STDOUT: inst78000133: symbolic_constant780000EE +// CHECK:STDOUT: inst78000134: symbolic_constant780000ED +// CHECK:STDOUT: inst78000135: symbolic_constant780000EC +// CHECK:STDOUT: inst78000136: symbolic_constant780000F1 +// CHECK:STDOUT: inst78000137: symbolic_constant780000F2 +// CHECK:STDOUT: inst78000138: symbolic_constant780000F3 +// CHECK:STDOUT: inst78000139: symbolic_constant780000F4 +// CHECK:STDOUT: inst7800013A: symbolic_constant780000F5 +// CHECK:STDOUT: inst7800013B: symbolic_constant780000F6 +// CHECK:STDOUT: inst7800013C: symbolic_constant780000F7 +// CHECK:STDOUT: inst7800013D: symbolic_constant780000F8 +// CHECK:STDOUT: inst7800013E: symbolic_constant780000F9 +// CHECK:STDOUT: inst7800013F: symbolic_constant780000FA +// CHECK:STDOUT: inst78000140: symbolic_constant780000FB +// CHECK:STDOUT: inst78000141: symbolic_constant780000FC +// CHECK:STDOUT: inst78000142: symbolic_constant780000FD +// CHECK:STDOUT: inst78000143: symbolic_constant780000FE +// CHECK:STDOUT: inst78000144: symbolic_constant780000FF +// CHECK:STDOUT: inst78000145: symbolic_constant78000101 +// CHECK:STDOUT: inst78000146: symbolic_constant78000102 +// CHECK:STDOUT: inst78000147: symbolic_constant78000107 +// CHECK:STDOUT: inst78000148: symbolic_constant78000115 +// CHECK:STDOUT: inst78000149: symbolic_constant78000117 +// CHECK:STDOUT: inst7800014A: symbolic_constant78000118 +// CHECK:STDOUT: inst7800014B: symbolic_constant78000119 +// CHECK:STDOUT: inst7800014C: symbolic_constant7800011A +// CHECK:STDOUT: inst7800014D: symbolic_constant7800011B +// CHECK:STDOUT: inst7800014E: symbolic_constant7800011C +// CHECK:STDOUT: inst7800014F: symbolic_constant7800011D +// CHECK:STDOUT: inst78000150: symbolic_constant7800011E +// CHECK:STDOUT: inst78000151: symbolic_constant7800011F +// CHECK:STDOUT: inst78000152: symbolic_constant78000120 +// CHECK:STDOUT: inst78000153: symbolic_constant78000121 +// CHECK:STDOUT: inst78000154: symbolic_constant78000122 +// CHECK:STDOUT: inst78000155: symbolic_constant78000123 +// CHECK:STDOUT: inst78000156: symbolic_constant78000124 +// CHECK:STDOUT: inst78000157: symbolic_constant78000125 +// CHECK:STDOUT: inst78000158: symbolic_constant78000126 +// CHECK:STDOUT: inst78000159: symbolic_constant78000127 +// CHECK:STDOUT: inst7800015A: symbolic_constant78000128 +// CHECK:STDOUT: inst7800015B: symbolic_constant78000129 +// CHECK:STDOUT: inst7800015C: concrete_constant(inst7800015C) +// CHECK:STDOUT: inst7800015D: concrete_constant(inst7800015D) +// CHECK:STDOUT: inst7800015E: concrete_constant(inst7800015E) +// CHECK:STDOUT: inst7800015F: symbolic_constant780000D9 +// CHECK:STDOUT: inst78000160: concrete_constant(inst78000050) +// CHECK:STDOUT: inst78000161: symbolic_constant780000EE +// CHECK:STDOUT: inst78000162: symbolic_constant780000ED +// CHECK:STDOUT: inst78000163: symbolic_constant780000EC +// CHECK:STDOUT: inst78000164: symbolic_constant78000132 +// CHECK:STDOUT: inst78000165: symbolic_constant78000133 +// CHECK:STDOUT: inst78000166: symbolic_constant78000134 +// CHECK:STDOUT: inst78000167: symbolic_constant78000135 +// CHECK:STDOUT: inst78000168: symbolic_constant78000136 +// CHECK:STDOUT: inst78000169: symbolic_constant78000137 +// CHECK:STDOUT: inst7800016A: symbolic_constant78000138 +// CHECK:STDOUT: inst7800016B: symbolic_constant78000139 +// CHECK:STDOUT: inst7800016C: symbolic_constant7800013A +// CHECK:STDOUT: inst7800016D: symbolic_constant7800013C +// CHECK:STDOUT: inst7800016E: symbolic_constant7800013D +// CHECK:STDOUT: inst7800016F: symbolic_constant78000140 +// CHECK:STDOUT: inst78000170: symbolic_constant7800013F +// CHECK:STDOUT: inst78000171: symbolic_constant78000140 +// CHECK:STDOUT: inst78000172: symbolic_constant78000141 +// CHECK:STDOUT: inst78000173: symbolic_constant78000142 +// CHECK:STDOUT: inst78000174: symbolic_constant78000143 +// CHECK:STDOUT: inst78000175: symbolic_constant78000144 +// CHECK:STDOUT: inst78000176: symbolic_constant78000145 +// CHECK:STDOUT: inst78000177: symbolic_constant78000146 +// CHECK:STDOUT: inst78000178: symbolic_constant7800014B +// CHECK:STDOUT: inst78000179: symbolic_constant78000147 +// CHECK:STDOUT: inst7800017A: symbolic_constant78000148 +// CHECK:STDOUT: inst7800017B: symbolic_constant78000149 +// CHECK:STDOUT: inst7800017C: symbolic_constant7800014A +// CHECK:STDOUT: inst7800017D: symbolic_constant7800014B +// CHECK:STDOUT: inst7800017F: symbolic_constant7800014D +// CHECK:STDOUT: inst78000180: symbolic_constant7800014C +// CHECK:STDOUT: inst78000181: symbolic_constant7800014D +// CHECK:STDOUT: inst78000186: concrete_constant(inst78000028) +// CHECK:STDOUT: inst78000187: concrete_constant(inst78000028) // CHECK:STDOUT: symbolic_constants: -// CHECK:STDOUT: symbolic_constant58000000: {inst: inst58000014, kind: self, attached: null} -// CHECK:STDOUT: symbolic_constant58000001: {inst: inst58000018, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000002: {inst: inst58000018, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant58000003: {inst: inst5800001D, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000004: {inst: inst5800001D, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant58000005: {inst: inst5800001F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000006: {inst: inst5800001F, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant58000007: {inst: inst5800002B, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000008: {inst: inst5800002B, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant58000009: {inst: inst5800002F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800000A: {inst: inst5800002F, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant5800000B: {inst: inst58000033, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800000C: {inst: inst58000033, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant5800000D: {inst: inst58000035, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800000E: {inst: inst58000035, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant5800000F: {inst: inst58000042, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000010: {inst: inst58000042, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant58000011: {inst: inst58000044, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000012: {inst: inst58000046, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000013: {inst: inst58000046, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant58000014: {inst: inst58000052, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000015: {inst: inst58000057, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000016: {inst: inst58000058, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000017: {inst: inst58000058, kind: checked, attached: {generic: generic58000001, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant58000018: {inst: inst58000059, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000019: {inst: inst58000057, kind: checked, attached: {generic: generic58000001, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant5800001A: {inst: inst5800005A, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800001B: {inst: inst5800005A, kind: checked, attached: {generic: generic58000002, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant5800001C: {inst: inst5800005F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800001D: {inst: inst5800005F, kind: checked, attached: {generic: generic58000002, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant5800001E: {inst: inst58000059, kind: checked, attached: {generic: generic58000002, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant5800001F: {inst: inst58000052, kind: checked, attached: {generic: generic58000002, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant58000020: {inst: inst5800005F, kind: checked, attached: {generic: generic58000002, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant58000021: {inst: inst58000059, kind: checked, attached: {generic: generic58000002, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant58000022: {inst: inst58000052, kind: checked, attached: {generic: generic58000002, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant58000023: {inst: inst58000059, kind: checked, attached: {generic: generic58000002, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant58000024: {inst: inst5800005A, kind: checked, attached: {generic: generic58000002, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant58000025: {inst: inst5800005F, kind: checked, attached: {generic: generic58000002, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant58000026: {inst: inst58000058, kind: checked, attached: {generic: generic58000001, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant58000027: {inst: inst58000052, kind: checked, attached: {generic: generic58000001, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant58000028: {inst: inst58000052, kind: checked, attached: {generic: generic58000001, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant58000029: {inst: inst58000057, kind: checked, attached: {generic: generic58000001, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant5800002A: {inst: inst58000058, kind: checked, attached: {generic: generic58000001, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant5800002B: {inst: inst58000071, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800002C: {inst: inst58000072, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800002D: {inst: inst58000073, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800002E: {inst: inst58000073, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant5800002F: {inst: inst58000076, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000030: {inst: inst58000076, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant58000031: {inst: inst58000078, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000032: {inst: inst58000079, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000033: {inst: inst58000079, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant58000034: {inst: inst58000078, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant58000035: {inst: inst5800007A, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000036: {inst: inst5800007A, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant58000037: {inst: inst5800007F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000038: {inst: inst5800007F, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant58000039: {inst: inst58000073, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant5800003A: {inst: inst58000072, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant5800003B: {inst: inst58000071, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant5800003C: {inst: inst58000071, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant5800003D: {inst: inst5800007F, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant5800003E: {inst: inst58000073, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant5800003F: {inst: inst58000071, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant58000040: {inst: inst58000072, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant58000041: {inst: inst58000073, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant58000042: {inst: inst5800007A, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant58000043: {inst: inst5800007F, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant58000044: {inst: inst58000088, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000045: {inst: inst58000089, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000046: {inst: inst5800008A, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000047: {inst: inst5800008B, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000048: {inst: inst5800008C, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000049: {inst: inst5800008D, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800004A: {inst: inst5800008D, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant5800004B: {inst: inst5800008E, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800004C: {inst: inst5800008F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800004D: {inst: inst5800008C, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant5800004E: {inst: inst5800008B, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant5800004F: {inst: inst58000089, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant58000050: {inst: inst58000088, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant58000051: {inst: inst58000090, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000052: {inst: inst58000090, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant58000053: {inst: inst58000091, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000054: {inst: inst58000091, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant58000055: {inst: inst58000091, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant58000056: {inst: inst58000090, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant58000057: {inst: inst58000088, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant58000058: {inst: inst58000089, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant58000059: {inst: inst5800008B, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant5800005A: {inst: inst5800008C, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant5800005B: {inst: inst5800008D, kind: checked, attached: {generic: generic58000004, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant5800005C: {inst: inst58000073, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant5800005D: {inst: inst58000072, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant5800005E: {inst: inst58000071, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant5800005F: {inst: inst58000071, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant58000060: {inst: inst58000072, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant58000061: {inst: inst58000073, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant58000062: {inst: inst58000076, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant58000063: {inst: inst58000079, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant58000064: {inst: inst58000078, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant58000065: {inst: inst58000079, kind: checked, attached: {generic: generic58000003, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant58000066: {inst: inst5800001D, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant58000067: {inst: inst580000B8, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000068: {inst: inst580000B8, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant58000069: {inst: inst5800001D, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant5800006A: {inst: inst58000018, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant5800006B: {inst: inst58000018, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant5800006C: {inst: inst58000018, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant5800006D: {inst: inst5800001D, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant5800006E: {inst: inst580000B8, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant5800006F: {inst: inst58000042, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant58000070: {inst: inst580000C1, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000071: {inst: inst580000C2, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000072: {inst: inst580000C2, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant58000073: {inst: inst580000C1, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant58000074: {inst: inst5800001F, kind: checked, attached: {generic: generic58000006, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant58000075: {inst: inst580000C7, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000076: {inst: inst580000C7, kind: checked, attached: {generic: generic58000006, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant58000077: {inst: inst5800001D, kind: checked, attached: {generic: generic58000006, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant58000078: {inst: inst58000018, kind: checked, attached: {generic: generic58000006, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant58000079: {inst: inst580000C7, kind: checked, attached: {generic: generic58000006, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant5800007A: {inst: inst5800001D, kind: checked, attached: {generic: generic58000006, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant5800007B: {inst: inst58000018, kind: checked, attached: {generic: generic58000006, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant5800007C: {inst: inst5800001D, kind: checked, attached: {generic: generic58000006, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant5800007D: {inst: inst5800001F, kind: checked, attached: {generic: generic58000006, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant5800007E: {inst: inst580000C7, kind: checked, attached: {generic: generic58000006, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant5800007F: {inst: inst580000C2, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant58000080: {inst: inst580000C1, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant58000081: {inst: inst580000C2, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant58000082: {inst: inst58000042, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant58000083: {inst: inst580000DC, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000084: {inst: inst580000DD, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000085: {inst: inst580000DE, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000086: {inst: inst580000DE, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant58000087: {inst: inst580000E1, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000088: {inst: inst580000E1, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant58000089: {inst: inst580000E3, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800008A: {inst: inst580000E4, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800008B: {inst: inst580000E4, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant5800008C: {inst: inst580000E3, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant5800008D: {inst: inst580000E6, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800008E: {inst: inst580000E7, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800008F: {inst: inst580000E7, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant58000090: {inst: inst580000EC, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000091: {inst: inst580000EC, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant58000092: {inst: inst580000DE, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant58000093: {inst: inst580000DD, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant58000094: {inst: inst580000DC, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant58000095: {inst: inst58000072, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant58000096: {inst: inst58000071, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant58000097: {inst: inst580000DC, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant58000098: {inst: inst58000071, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant58000099: {inst: inst580000EC, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant5800009A: {inst: inst580000DE, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant5800009B: {inst: inst58000071, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant5800009C: {inst: inst58000072, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant5800009D: {inst: inst580000DC, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant5800009E: {inst: inst580000DD, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant5800009F: {inst: inst580000DE, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant580000A0: {inst: inst580000E7, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant580000A1: {inst: inst580000EC, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant580000A2: {inst: inst580000F8, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000A3: {inst: inst580000F9, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000A4: {inst: inst580000FA, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000A5: {inst: inst580000FB, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000A6: {inst: inst580000FC, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000A7: {inst: inst580000FD, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000A8: {inst: inst580000FD, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def12}} -// CHECK:STDOUT: symbolic_constant580000A9: {inst: inst580000FE, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000AA: {inst: inst580000FF, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000AB: {inst: inst580000FC, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def11}} -// CHECK:STDOUT: symbolic_constant580000AC: {inst: inst580000FB, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def10}} -// CHECK:STDOUT: symbolic_constant580000AD: {inst: inst580000F9, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def9}} -// CHECK:STDOUT: symbolic_constant580000AE: {inst: inst580000F8, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def8}} -// CHECK:STDOUT: symbolic_constant580000AF: {inst: inst58000100, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000B0: {inst: inst58000100, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def7}} -// CHECK:STDOUT: symbolic_constant580000B1: {inst: inst5800008D, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant580000B2: {inst: inst5800008C, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant580000B3: {inst: inst5800008B, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant580000B4: {inst: inst58000089, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant580000B5: {inst: inst58000088, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant580000B6: {inst: inst58000090, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant580000B7: {inst: inst58000101, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000B8: {inst: inst58000101, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant580000B9: {inst: inst58000101, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant580000BA: {inst: inst58000090, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant580000BB: {inst: inst58000088, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant580000BC: {inst: inst58000089, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant580000BD: {inst: inst5800008B, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant580000BE: {inst: inst5800008C, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant580000BF: {inst: inst5800008D, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant580000C0: {inst: inst58000100, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def7}} -// CHECK:STDOUT: symbolic_constant580000C1: {inst: inst580000F8, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def8}} -// CHECK:STDOUT: symbolic_constant580000C2: {inst: inst580000F9, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def9}} -// CHECK:STDOUT: symbolic_constant580000C3: {inst: inst580000FB, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def10}} -// CHECK:STDOUT: symbolic_constant580000C4: {inst: inst580000FC, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def11}} -// CHECK:STDOUT: symbolic_constant580000C5: {inst: inst580000FD, kind: checked, attached: {generic: generic58000008, index: generic_inst_in_def12}} -// CHECK:STDOUT: symbolic_constant580000C6: {inst: inst580000DE, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant580000C7: {inst: inst580000DD, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant580000C8: {inst: inst58000072, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant580000C9: {inst: inst580000E6, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant580000CA: {inst: inst580000DC, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant580000CB: {inst: inst58000071, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant580000CC: {inst: inst58000071, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant580000CD: {inst: inst580000DC, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant580000CE: {inst: inst580000E6, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant580000CF: {inst: inst58000072, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant580000D0: {inst: inst580000DD, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant580000D1: {inst: inst580000DE, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant580000D2: {inst: inst580000E1, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant580000D3: {inst: inst580000E4, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant580000D4: {inst: inst580000E3, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant580000D5: {inst: inst580000E4, kind: checked, attached: {generic: generic58000007, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant580000D6: {inst: inst58000120, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000D7: {inst: inst58000121, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000D8: {inst: inst58000122, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000D9: {inst: inst58000122, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl7}} -// CHECK:STDOUT: symbolic_constant580000DA: {inst: inst58000125, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000DB: {inst: inst58000125, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl8}} -// CHECK:STDOUT: symbolic_constant580000DC: {inst: inst58000127, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000DD: {inst: inst58000128, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000DE: {inst: inst58000128, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant580000DF: {inst: inst58000127, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant580000E0: {inst: inst5800012A, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000E1: {inst: inst5800012B, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000E2: {inst: inst5800012B, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl7}} -// CHECK:STDOUT: symbolic_constant580000E3: {inst: inst58000130, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000E4: {inst: inst58000130, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl8}} -// CHECK:STDOUT: symbolic_constant580000E5: {inst: inst58000122, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant580000E6: {inst: inst58000121, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant580000E7: {inst: inst58000120, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant580000E8: {inst: inst580000DD, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant580000E9: {inst: inst580000DC, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant580000EA: {inst: inst58000072, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant580000EB: {inst: inst58000071, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant580000EC: {inst: inst58000120, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant580000ED: {inst: inst580000DC, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant580000EE: {inst: inst58000071, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant580000EF: {inst: inst58000130, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl8}} -// CHECK:STDOUT: symbolic_constant580000F0: {inst: inst58000122, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant580000F1: {inst: inst58000071, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant580000F2: {inst: inst58000072, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant580000F3: {inst: inst580000DC, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant580000F4: {inst: inst580000DD, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant580000F5: {inst: inst58000120, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant580000F6: {inst: inst58000121, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant580000F7: {inst: inst58000122, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant580000F8: {inst: inst5800012B, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl7}} -// CHECK:STDOUT: symbolic_constant580000F9: {inst: inst58000130, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_decl8}} -// CHECK:STDOUT: symbolic_constant580000FA: {inst: inst5800013F, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000FB: {inst: inst58000140, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000FC: {inst: inst58000141, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000FD: {inst: inst58000142, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000FE: {inst: inst58000143, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant580000FF: {inst: inst58000144, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000100: {inst: inst58000144, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def18}} -// CHECK:STDOUT: symbolic_constant58000101: {inst: inst58000145, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000102: {inst: inst58000146, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000103: {inst: inst58000143, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def17}} -// CHECK:STDOUT: symbolic_constant58000104: {inst: inst58000142, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def16}} -// CHECK:STDOUT: symbolic_constant58000105: {inst: inst58000140, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def15}} -// CHECK:STDOUT: symbolic_constant58000106: {inst: inst5800013F, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def14}} -// CHECK:STDOUT: symbolic_constant58000107: {inst: inst58000147, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000108: {inst: inst58000147, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def13}} -// CHECK:STDOUT: symbolic_constant58000109: {inst: inst580000FD, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def12}} -// CHECK:STDOUT: symbolic_constant5800010A: {inst: inst580000FC, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def11}} -// CHECK:STDOUT: symbolic_constant5800010B: {inst: inst580000FB, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def10}} -// CHECK:STDOUT: symbolic_constant5800010C: {inst: inst580000F9, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def9}} -// CHECK:STDOUT: symbolic_constant5800010D: {inst: inst580000F8, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def8}} -// CHECK:STDOUT: symbolic_constant5800010E: {inst: inst58000100, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def7}} -// CHECK:STDOUT: symbolic_constant5800010F: {inst: inst5800008D, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant58000110: {inst: inst5800008C, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant58000111: {inst: inst5800008B, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant58000112: {inst: inst58000089, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant58000113: {inst: inst58000088, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant58000114: {inst: inst58000090, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant58000115: {inst: inst58000148, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000116: {inst: inst58000148, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant58000117: {inst: inst58000148, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant58000118: {inst: inst58000090, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant58000119: {inst: inst58000088, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant5800011A: {inst: inst58000089, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant5800011B: {inst: inst5800008B, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant5800011C: {inst: inst5800008C, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant5800011D: {inst: inst5800008D, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant5800011E: {inst: inst58000100, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def7}} -// CHECK:STDOUT: symbolic_constant5800011F: {inst: inst580000F8, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def8}} -// CHECK:STDOUT: symbolic_constant58000120: {inst: inst580000F9, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def9}} -// CHECK:STDOUT: symbolic_constant58000121: {inst: inst580000FB, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def10}} -// CHECK:STDOUT: symbolic_constant58000122: {inst: inst580000FC, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def11}} -// CHECK:STDOUT: symbolic_constant58000123: {inst: inst580000FD, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def12}} -// CHECK:STDOUT: symbolic_constant58000124: {inst: inst58000147, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def13}} -// CHECK:STDOUT: symbolic_constant58000125: {inst: inst5800013F, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def14}} -// CHECK:STDOUT: symbolic_constant58000126: {inst: inst58000140, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def15}} -// CHECK:STDOUT: symbolic_constant58000127: {inst: inst58000142, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def16}} -// CHECK:STDOUT: symbolic_constant58000128: {inst: inst58000143, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def17}} -// CHECK:STDOUT: symbolic_constant58000129: {inst: inst58000144, kind: checked, attached: {generic: generic5800000A, index: generic_inst_in_def18}} -// CHECK:STDOUT: symbolic_constant5800012A: {inst: inst58000122, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl7}} -// CHECK:STDOUT: symbolic_constant5800012B: {inst: inst58000121, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant5800012C: {inst: inst580000DD, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant5800012D: {inst: inst58000072, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant5800012E: {inst: inst5800012A, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant5800012F: {inst: inst58000120, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant58000130: {inst: inst580000DC, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant58000131: {inst: inst58000071, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant58000132: {inst: inst58000071, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl0}} -// CHECK:STDOUT: symbolic_constant58000133: {inst: inst580000DC, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl1}} -// CHECK:STDOUT: symbolic_constant58000134: {inst: inst58000120, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant58000135: {inst: inst5800012A, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl3}} -// CHECK:STDOUT: symbolic_constant58000136: {inst: inst58000072, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl4}} -// CHECK:STDOUT: symbolic_constant58000137: {inst: inst580000DD, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl5}} -// CHECK:STDOUT: symbolic_constant58000138: {inst: inst58000121, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl6}} -// CHECK:STDOUT: symbolic_constant58000139: {inst: inst58000122, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl7}} -// CHECK:STDOUT: symbolic_constant5800013A: {inst: inst58000125, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_decl8}} -// CHECK:STDOUT: symbolic_constant5800013B: {inst: inst58000128, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant5800013C: {inst: inst58000127, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_def0}} -// CHECK:STDOUT: symbolic_constant5800013D: {inst: inst58000128, kind: checked, attached: {generic: generic58000009, index: generic_inst_in_def1}} -// CHECK:STDOUT: symbolic_constant5800013E: {inst: inst580000B8, kind: checked, attached: {generic: generic58000005, index: generic_inst_in_decl2}} -// CHECK:STDOUT: symbolic_constant5800013F: {inst: inst58000170, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000140: {inst: inst58000170, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_def2}} -// CHECK:STDOUT: symbolic_constant58000141: {inst: inst58000172, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000142: {inst: inst58000172, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_def3}} -// CHECK:STDOUT: symbolic_constant58000143: {inst: inst58000174, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000144: {inst: inst58000175, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000145: {inst: inst58000176, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000146: {inst: inst58000177, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000147: {inst: inst58000179, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant58000148: {inst: inst58000174, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_def4}} -// CHECK:STDOUT: symbolic_constant58000149: {inst: inst58000175, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_def5}} -// CHECK:STDOUT: symbolic_constant5800014A: {inst: inst58000177, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_def6}} -// CHECK:STDOUT: symbolic_constant5800014B: {inst: inst58000179, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_def7}} -// CHECK:STDOUT: symbolic_constant5800014C: {inst: inst58000180, kind: checked, attached: null} -// CHECK:STDOUT: symbolic_constant5800014D: {inst: inst58000180, kind: checked, attached: {generic: generic58000000, index: generic_inst_in_def8}} +// CHECK:STDOUT: symbolic_constant78000000: {inst: inst78000014, kind: self, attached: null} +// CHECK:STDOUT: symbolic_constant78000001: {inst: inst78000018, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000002: {inst: inst78000018, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000003: {inst: inst7800001D, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000004: {inst: inst7800001D, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000005: {inst: inst7800001F, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000006: {inst: inst7800001F, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000007: {inst: inst7800002B, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000008: {inst: inst7800002B, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000009: {inst: inst7800002F, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800000A: {inst: inst7800002F, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant7800000B: {inst: inst78000033, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800000C: {inst: inst78000033, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant7800000D: {inst: inst78000035, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800000E: {inst: inst78000035, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant7800000F: {inst: inst78000042, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000010: {inst: inst78000042, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000011: {inst: inst78000044, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000012: {inst: inst78000046, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000013: {inst: inst78000046, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000014: {inst: inst78000052, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000015: {inst: inst78000057, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000016: {inst: inst78000058, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000017: {inst: inst78000058, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000018: {inst: inst78000059, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000019: {inst: inst78000057, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant7800001A: {inst: inst7800005A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800001B: {inst: inst7800005A, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800001C: {inst: inst7800005F, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800001D: {inst: inst7800005F, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant7800001E: {inst: inst78000059, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800001F: {inst: inst78000052, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000020: {inst: inst7800005F, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000021: {inst: inst78000059, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000022: {inst: inst78000052, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000023: {inst: inst78000059, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000024: {inst: inst7800005A, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000025: {inst: inst7800005F, kind: checked, attached: {generic: generic78000002, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000026: {inst: inst78000058, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000027: {inst: inst78000052, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000028: {inst: inst78000052, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000029: {inst: inst78000057, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant7800002A: {inst: inst78000058, kind: checked, attached: {generic: generic78000001, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant7800002B: {inst: inst78000071, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800002C: {inst: inst78000072, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800002D: {inst: inst78000073, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800002E: {inst: inst78000073, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800002F: {inst: inst78000076, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000030: {inst: inst78000076, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000031: {inst: inst78000078, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000032: {inst: inst78000079, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000033: {inst: inst78000079, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000034: {inst: inst78000078, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000035: {inst: inst7800007A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000036: {inst: inst7800007A, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000037: {inst: inst7800007F, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000038: {inst: inst7800007F, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant78000039: {inst: inst78000073, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800003A: {inst: inst78000072, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800003B: {inst: inst78000071, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800003C: {inst: inst78000071, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800003D: {inst: inst7800007F, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant7800003E: {inst: inst78000073, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800003F: {inst: inst78000071, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000040: {inst: inst78000072, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000041: {inst: inst78000073, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000042: {inst: inst7800007A, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000043: {inst: inst7800007F, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant78000044: {inst: inst78000088, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000045: {inst: inst78000089, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000046: {inst: inst7800008A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000047: {inst: inst7800008B, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000048: {inst: inst7800008C, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000049: {inst: inst7800008D, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800004A: {inst: inst7800008D, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant7800004B: {inst: inst7800008E, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800004C: {inst: inst7800008F, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800004D: {inst: inst7800008C, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant7800004E: {inst: inst7800008B, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant7800004F: {inst: inst78000089, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant78000050: {inst: inst78000088, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000051: {inst: inst78000090, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000052: {inst: inst78000090, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000053: {inst: inst78000091, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000054: {inst: inst78000091, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000055: {inst: inst78000091, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000056: {inst: inst78000090, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000057: {inst: inst78000088, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000058: {inst: inst78000089, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant78000059: {inst: inst7800008B, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant7800005A: {inst: inst7800008C, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant7800005B: {inst: inst7800008D, kind: checked, attached: {generic: generic78000004, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant7800005C: {inst: inst78000073, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800005D: {inst: inst78000072, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800005E: {inst: inst78000071, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800005F: {inst: inst78000071, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000060: {inst: inst78000072, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000061: {inst: inst78000073, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000062: {inst: inst78000076, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000063: {inst: inst78000079, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000064: {inst: inst78000078, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000065: {inst: inst78000079, kind: checked, attached: {generic: generic78000003, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000066: {inst: inst7800001D, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000067: {inst: inst780000B8, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000068: {inst: inst780000B8, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000069: {inst: inst7800001D, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800006A: {inst: inst78000018, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800006B: {inst: inst78000018, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800006C: {inst: inst78000018, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800006D: {inst: inst7800001D, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800006E: {inst: inst780000B8, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800006F: {inst: inst78000042, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000070: {inst: inst780000C1, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000071: {inst: inst780000C2, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000072: {inst: inst780000C2, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000073: {inst: inst780000C1, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000074: {inst: inst7800001F, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000075: {inst: inst780000C7, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000076: {inst: inst780000C7, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000077: {inst: inst7800001D, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000078: {inst: inst78000018, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000079: {inst: inst780000C7, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant7800007A: {inst: inst7800001D, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800007B: {inst: inst78000018, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800007C: {inst: inst7800001D, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800007D: {inst: inst7800001F, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800007E: {inst: inst780000C7, kind: checked, attached: {generic: generic78000006, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant7800007F: {inst: inst780000C2, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000080: {inst: inst780000C1, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000081: {inst: inst780000C2, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000082: {inst: inst78000042, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000083: {inst: inst780000DC, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000084: {inst: inst780000DD, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000085: {inst: inst780000DE, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000086: {inst: inst780000DE, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant78000087: {inst: inst780000E1, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000088: {inst: inst780000E1, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant78000089: {inst: inst780000E3, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800008A: {inst: inst780000E4, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800008B: {inst: inst780000E4, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant7800008C: {inst: inst780000E3, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant7800008D: {inst: inst780000E6, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800008E: {inst: inst780000E7, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800008F: {inst: inst780000E7, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant78000090: {inst: inst780000EC, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000091: {inst: inst780000EC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant78000092: {inst: inst780000DE, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant78000093: {inst: inst780000DD, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000094: {inst: inst780000DC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000095: {inst: inst78000072, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000096: {inst: inst78000071, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000097: {inst: inst780000DC, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000098: {inst: inst78000071, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000099: {inst: inst780000EC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant7800009A: {inst: inst780000DE, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant7800009B: {inst: inst78000071, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant7800009C: {inst: inst78000072, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant7800009D: {inst: inst780000DC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800009E: {inst: inst780000DD, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant7800009F: {inst: inst780000DE, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780000A0: {inst: inst780000E7, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant780000A1: {inst: inst780000EC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780000A2: {inst: inst780000F8, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000A3: {inst: inst780000F9, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000A4: {inst: inst780000FA, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000A5: {inst: inst780000FB, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000A6: {inst: inst780000FC, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000A7: {inst: inst780000FD, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000A8: {inst: inst780000FD, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def12}} +// CHECK:STDOUT: symbolic_constant780000A9: {inst: inst780000FE, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000AA: {inst: inst780000FF, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000AB: {inst: inst780000FC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def11}} +// CHECK:STDOUT: symbolic_constant780000AC: {inst: inst780000FB, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def10}} +// CHECK:STDOUT: symbolic_constant780000AD: {inst: inst780000F9, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def9}} +// CHECK:STDOUT: symbolic_constant780000AE: {inst: inst780000F8, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def8}} +// CHECK:STDOUT: symbolic_constant780000AF: {inst: inst78000100, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000B0: {inst: inst78000100, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def7}} +// CHECK:STDOUT: symbolic_constant780000B1: {inst: inst7800008D, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant780000B2: {inst: inst7800008C, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant780000B3: {inst: inst7800008B, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant780000B4: {inst: inst78000089, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant780000B5: {inst: inst78000088, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant780000B6: {inst: inst78000090, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant780000B7: {inst: inst78000101, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000B8: {inst: inst78000101, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant780000B9: {inst: inst78000101, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant780000BA: {inst: inst78000090, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant780000BB: {inst: inst78000088, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant780000BC: {inst: inst78000089, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant780000BD: {inst: inst7800008B, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant780000BE: {inst: inst7800008C, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant780000BF: {inst: inst7800008D, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant780000C0: {inst: inst78000100, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def7}} +// CHECK:STDOUT: symbolic_constant780000C1: {inst: inst780000F8, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def8}} +// CHECK:STDOUT: symbolic_constant780000C2: {inst: inst780000F9, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def9}} +// CHECK:STDOUT: symbolic_constant780000C3: {inst: inst780000FB, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def10}} +// CHECK:STDOUT: symbolic_constant780000C4: {inst: inst780000FC, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def11}} +// CHECK:STDOUT: symbolic_constant780000C5: {inst: inst780000FD, kind: checked, attached: {generic: generic78000008, index: generic_inst_in_def12}} +// CHECK:STDOUT: symbolic_constant780000C6: {inst: inst780000DE, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant780000C7: {inst: inst780000DD, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780000C8: {inst: inst78000072, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780000C9: {inst: inst780000E6, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780000CA: {inst: inst780000DC, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780000CB: {inst: inst78000071, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780000CC: {inst: inst78000071, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780000CD: {inst: inst780000DC, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780000CE: {inst: inst780000E6, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780000CF: {inst: inst78000072, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780000D0: {inst: inst780000DD, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780000D1: {inst: inst780000DE, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant780000D2: {inst: inst780000E1, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780000D3: {inst: inst780000E4, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant780000D4: {inst: inst780000E3, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant780000D5: {inst: inst780000E4, kind: checked, attached: {generic: generic78000007, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant780000D6: {inst: inst78000120, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000D7: {inst: inst78000121, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000D8: {inst: inst78000122, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000D9: {inst: inst78000122, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant780000DA: {inst: inst78000125, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000DB: {inst: inst78000125, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant780000DC: {inst: inst78000127, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000DD: {inst: inst78000128, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000DE: {inst: inst78000128, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant780000DF: {inst: inst78000127, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant780000E0: {inst: inst7800012A, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000E1: {inst: inst7800012B, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000E2: {inst: inst7800012B, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant780000E3: {inst: inst78000130, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000E4: {inst: inst78000130, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant780000E5: {inst: inst78000122, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780000E6: {inst: inst78000121, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant780000E7: {inst: inst78000120, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780000E8: {inst: inst780000DD, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780000E9: {inst: inst780000DC, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780000EA: {inst: inst78000072, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780000EB: {inst: inst78000071, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780000EC: {inst: inst78000120, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780000ED: {inst: inst780000DC, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780000EE: {inst: inst78000071, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780000EF: {inst: inst78000130, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant780000F0: {inst: inst78000122, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780000F1: {inst: inst78000071, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant780000F2: {inst: inst78000072, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant780000F3: {inst: inst780000DC, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant780000F4: {inst: inst780000DD, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant780000F5: {inst: inst78000120, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant780000F6: {inst: inst78000121, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant780000F7: {inst: inst78000122, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant780000F8: {inst: inst7800012B, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant780000F9: {inst: inst78000130, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant780000FA: {inst: inst7800013F, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000FB: {inst: inst78000140, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000FC: {inst: inst78000141, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000FD: {inst: inst78000142, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000FE: {inst: inst78000143, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant780000FF: {inst: inst78000144, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000100: {inst: inst78000144, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def18}} +// CHECK:STDOUT: symbolic_constant78000101: {inst: inst78000145, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000102: {inst: inst78000146, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000103: {inst: inst78000143, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def17}} +// CHECK:STDOUT: symbolic_constant78000104: {inst: inst78000142, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def16}} +// CHECK:STDOUT: symbolic_constant78000105: {inst: inst78000140, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def15}} +// CHECK:STDOUT: symbolic_constant78000106: {inst: inst7800013F, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def14}} +// CHECK:STDOUT: symbolic_constant78000107: {inst: inst78000147, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000108: {inst: inst78000147, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def13}} +// CHECK:STDOUT: symbolic_constant78000109: {inst: inst780000FD, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def12}} +// CHECK:STDOUT: symbolic_constant7800010A: {inst: inst780000FC, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def11}} +// CHECK:STDOUT: symbolic_constant7800010B: {inst: inst780000FB, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def10}} +// CHECK:STDOUT: symbolic_constant7800010C: {inst: inst780000F9, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def9}} +// CHECK:STDOUT: symbolic_constant7800010D: {inst: inst780000F8, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def8}} +// CHECK:STDOUT: symbolic_constant7800010E: {inst: inst78000100, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def7}} +// CHECK:STDOUT: symbolic_constant7800010F: {inst: inst7800008D, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant78000110: {inst: inst7800008C, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant78000111: {inst: inst7800008B, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant78000112: {inst: inst78000089, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant78000113: {inst: inst78000088, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000114: {inst: inst78000090, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000115: {inst: inst78000148, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000116: {inst: inst78000148, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000117: {inst: inst78000148, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant78000118: {inst: inst78000090, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant78000119: {inst: inst78000088, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant7800011A: {inst: inst78000089, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant7800011B: {inst: inst7800008B, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant7800011C: {inst: inst7800008C, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant7800011D: {inst: inst7800008D, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant7800011E: {inst: inst78000100, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def7}} +// CHECK:STDOUT: symbolic_constant7800011F: {inst: inst780000F8, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def8}} +// CHECK:STDOUT: symbolic_constant78000120: {inst: inst780000F9, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def9}} +// CHECK:STDOUT: symbolic_constant78000121: {inst: inst780000FB, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def10}} +// CHECK:STDOUT: symbolic_constant78000122: {inst: inst780000FC, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def11}} +// CHECK:STDOUT: symbolic_constant78000123: {inst: inst780000FD, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def12}} +// CHECK:STDOUT: symbolic_constant78000124: {inst: inst78000147, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def13}} +// CHECK:STDOUT: symbolic_constant78000125: {inst: inst7800013F, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def14}} +// CHECK:STDOUT: symbolic_constant78000126: {inst: inst78000140, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def15}} +// CHECK:STDOUT: symbolic_constant78000127: {inst: inst78000142, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def16}} +// CHECK:STDOUT: symbolic_constant78000128: {inst: inst78000143, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def17}} +// CHECK:STDOUT: symbolic_constant78000129: {inst: inst78000144, kind: checked, attached: {generic: generic7800000A, index: generic_inst_in_def18}} +// CHECK:STDOUT: symbolic_constant7800012A: {inst: inst78000122, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant7800012B: {inst: inst78000121, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant7800012C: {inst: inst780000DD, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant7800012D: {inst: inst78000072, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant7800012E: {inst: inst7800012A, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant7800012F: {inst: inst78000120, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000130: {inst: inst780000DC, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000131: {inst: inst78000071, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000132: {inst: inst78000071, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl0}} +// CHECK:STDOUT: symbolic_constant78000133: {inst: inst780000DC, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl1}} +// CHECK:STDOUT: symbolic_constant78000134: {inst: inst78000120, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant78000135: {inst: inst7800012A, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl3}} +// CHECK:STDOUT: symbolic_constant78000136: {inst: inst78000072, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl4}} +// CHECK:STDOUT: symbolic_constant78000137: {inst: inst780000DD, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl5}} +// CHECK:STDOUT: symbolic_constant78000138: {inst: inst78000121, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl6}} +// CHECK:STDOUT: symbolic_constant78000139: {inst: inst78000122, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl7}} +// CHECK:STDOUT: symbolic_constant7800013A: {inst: inst78000125, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_decl8}} +// CHECK:STDOUT: symbolic_constant7800013B: {inst: inst78000128, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant7800013C: {inst: inst78000127, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def0}} +// CHECK:STDOUT: symbolic_constant7800013D: {inst: inst78000128, kind: checked, attached: {generic: generic78000009, index: generic_inst_in_def1}} +// CHECK:STDOUT: symbolic_constant7800013E: {inst: inst780000B8, kind: checked, attached: {generic: generic78000005, index: generic_inst_in_decl2}} +// CHECK:STDOUT: symbolic_constant7800013F: {inst: inst78000170, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000140: {inst: inst78000170, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def2}} +// CHECK:STDOUT: symbolic_constant78000141: {inst: inst78000172, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000142: {inst: inst78000172, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def3}} +// CHECK:STDOUT: symbolic_constant78000143: {inst: inst78000174, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000144: {inst: inst78000175, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000145: {inst: inst78000176, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000146: {inst: inst78000177, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000147: {inst: inst78000179, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant78000148: {inst: inst78000174, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def4}} +// CHECK:STDOUT: symbolic_constant78000149: {inst: inst78000175, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def5}} +// CHECK:STDOUT: symbolic_constant7800014A: {inst: inst78000177, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def6}} +// CHECK:STDOUT: symbolic_constant7800014B: {inst: inst78000179, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def7}} +// CHECK:STDOUT: symbolic_constant7800014C: {inst: inst78000180, kind: checked, attached: null} +// CHECK:STDOUT: symbolic_constant7800014D: {inst: inst78000180, kind: checked, attached: {generic: generic78000000, index: generic_inst_in_def8}} // CHECK:STDOUT: inst_blocks: // CHECK:STDOUT: inst_block_empty: {} // CHECK:STDOUT: exports: -// CHECK:STDOUT: 0: inst5800003E +// CHECK:STDOUT: 0: inst7800003E // CHECK:STDOUT: generated: {} // CHECK:STDOUT: imports: -// CHECK:STDOUT: 0: inst58000011 -// CHECK:STDOUT: 1: inst5800004E -// CHECK:STDOUT: 2: inst5800004F -// CHECK:STDOUT: 3: inst58000051 -// CHECK:STDOUT: 4: inst58000053 -// CHECK:STDOUT: 5: inst58000054 -// CHECK:STDOUT: 6: inst58000055 -// CHECK:STDOUT: 7: inst58000056 -// CHECK:STDOUT: 8: inst5800005B -// CHECK:STDOUT: 9: inst5800005C -// CHECK:STDOUT: 10: inst5800005D -// CHECK:STDOUT: 11: inst5800005E -// CHECK:STDOUT: 12: inst58000060 -// CHECK:STDOUT: 13: inst58000061 -// CHECK:STDOUT: 14: inst58000062 -// CHECK:STDOUT: 15: inst5800006A -// CHECK:STDOUT: 16: inst5800006C -// CHECK:STDOUT: 17: inst5800006F -// CHECK:STDOUT: 18: inst58000070 -// CHECK:STDOUT: 19: inst58000074 -// CHECK:STDOUT: 20: inst58000075 -// CHECK:STDOUT: 21: inst58000077 -// CHECK:STDOUT: 22: inst5800007B -// CHECK:STDOUT: 23: inst5800007C -// CHECK:STDOUT: 24: inst5800007D -// CHECK:STDOUT: 25: inst5800007E -// CHECK:STDOUT: 26: inst58000080 -// CHECK:STDOUT: 27: inst58000081 -// CHECK:STDOUT: 28: inst58000082 -// CHECK:STDOUT: 29: inst5800009A -// CHECK:STDOUT: 30: inst5800009B -// CHECK:STDOUT: 31: inst5800009C -// CHECK:STDOUT: 32: inst5800009D -// CHECK:STDOUT: 33: inst580000A4 -// CHECK:STDOUT: 34: inst580000A5 -// CHECK:STDOUT: 35: inst580000A6 -// CHECK:STDOUT: 36: inst580000A7 -// CHECK:STDOUT: 37: inst580000A8 -// CHECK:STDOUT: 38: inst580000A9 -// CHECK:STDOUT: 39: inst580000AA -// CHECK:STDOUT: 40: inst580000AB -// CHECK:STDOUT: 41: inst580000AC -// CHECK:STDOUT: 42: inst580000AD -// CHECK:STDOUT: 43: inst580000AE -// CHECK:STDOUT: 44: inst580000AF -// CHECK:STDOUT: 45: inst580000B0 -// CHECK:STDOUT: 46: inst580000B1 -// CHECK:STDOUT: 47: inst580000B2 -// CHECK:STDOUT: 48: inst580000B3 -// CHECK:STDOUT: 49: inst580000B4 -// CHECK:STDOUT: 50: inst580000B5 -// CHECK:STDOUT: 51: inst580000B6 -// CHECK:STDOUT: 52: inst580000B7 -// CHECK:STDOUT: 53: inst580000B9 -// CHECK:STDOUT: 54: inst580000BA -// CHECK:STDOUT: 55: inst580000BB -// CHECK:STDOUT: 56: inst580000BC -// CHECK:STDOUT: 57: inst580000C0 -// CHECK:STDOUT: 58: inst580000C3 -// CHECK:STDOUT: 59: inst580000C4 -// CHECK:STDOUT: 60: inst580000C5 -// CHECK:STDOUT: 61: inst580000C6 -// CHECK:STDOUT: 62: inst580000C8 -// CHECK:STDOUT: 63: inst580000C9 -// CHECK:STDOUT: 64: inst580000CA -// CHECK:STDOUT: 65: inst580000D2 -// CHECK:STDOUT: 66: inst580000D3 -// CHECK:STDOUT: 67: inst580000D4 -// CHECK:STDOUT: 68: inst580000D5 -// CHECK:STDOUT: 69: inst580000D6 -// CHECK:STDOUT: 70: inst580000D7 -// CHECK:STDOUT: 71: inst580000D8 -// CHECK:STDOUT: 72: inst580000D9 -// CHECK:STDOUT: 73: inst580000DA -// CHECK:STDOUT: 74: inst580000DB -// CHECK:STDOUT: 75: inst580000DF -// CHECK:STDOUT: 76: inst580000E0 -// CHECK:STDOUT: 77: inst580000E2 -// CHECK:STDOUT: 78: inst580000E8 -// CHECK:STDOUT: 79: inst580000E9 -// CHECK:STDOUT: 80: inst580000EA -// CHECK:STDOUT: 81: inst580000EB -// CHECK:STDOUT: 82: inst580000ED -// CHECK:STDOUT: 83: inst580000EE -// CHECK:STDOUT: 84: inst580000EF -// CHECK:STDOUT: 85: inst580000F0 -// CHECK:STDOUT: 86: inst5800010F -// CHECK:STDOUT: 87: inst58000110 -// CHECK:STDOUT: 88: inst58000111 -// CHECK:STDOUT: 89: inst58000112 -// CHECK:STDOUT: 90: inst58000113 -// CHECK:STDOUT: 91: inst58000114 -// CHECK:STDOUT: 92: inst5800011E -// CHECK:STDOUT: 93: inst5800011F -// CHECK:STDOUT: 94: inst58000123 -// CHECK:STDOUT: 95: inst58000124 -// CHECK:STDOUT: 96: inst58000126 -// CHECK:STDOUT: 97: inst5800012C -// CHECK:STDOUT: 98: inst5800012D -// CHECK:STDOUT: 99: inst5800012E -// CHECK:STDOUT: 100: inst5800012F -// CHECK:STDOUT: 101: inst58000131 -// CHECK:STDOUT: 102: inst58000132 -// CHECK:STDOUT: 103: inst58000133 -// CHECK:STDOUT: 104: inst58000134 -// CHECK:STDOUT: 105: inst58000135 -// CHECK:STDOUT: 106: inst5800015C -// CHECK:STDOUT: 107: inst5800015D -// CHECK:STDOUT: 108: inst5800015E -// CHECK:STDOUT: 109: inst5800015F -// CHECK:STDOUT: 110: inst58000160 -// CHECK:STDOUT: 111: inst58000161 -// CHECK:STDOUT: 112: inst58000162 -// CHECK:STDOUT: 113: inst58000163 +// CHECK:STDOUT: 0: inst78000011 +// CHECK:STDOUT: 1: inst7800004E +// CHECK:STDOUT: 2: inst7800004F +// CHECK:STDOUT: 3: inst78000051 +// CHECK:STDOUT: 4: inst78000053 +// CHECK:STDOUT: 5: inst78000054 +// CHECK:STDOUT: 6: inst78000055 +// CHECK:STDOUT: 7: inst78000056 +// CHECK:STDOUT: 8: inst7800005B +// CHECK:STDOUT: 9: inst7800005C +// CHECK:STDOUT: 10: inst7800005D +// CHECK:STDOUT: 11: inst7800005E +// CHECK:STDOUT: 12: inst78000060 +// CHECK:STDOUT: 13: inst78000061 +// CHECK:STDOUT: 14: inst78000062 +// CHECK:STDOUT: 15: inst7800006A +// CHECK:STDOUT: 16: inst7800006C +// CHECK:STDOUT: 17: inst7800006F +// CHECK:STDOUT: 18: inst78000070 +// CHECK:STDOUT: 19: inst78000074 +// CHECK:STDOUT: 20: inst78000075 +// CHECK:STDOUT: 21: inst78000077 +// CHECK:STDOUT: 22: inst7800007B +// CHECK:STDOUT: 23: inst7800007C +// CHECK:STDOUT: 24: inst7800007D +// CHECK:STDOUT: 25: inst7800007E +// CHECK:STDOUT: 26: inst78000080 +// CHECK:STDOUT: 27: inst78000081 +// CHECK:STDOUT: 28: inst78000082 +// CHECK:STDOUT: 29: inst7800009A +// CHECK:STDOUT: 30: inst7800009B +// CHECK:STDOUT: 31: inst7800009C +// CHECK:STDOUT: 32: inst7800009D +// CHECK:STDOUT: 33: inst780000A4 +// CHECK:STDOUT: 34: inst780000A5 +// CHECK:STDOUT: 35: inst780000A6 +// CHECK:STDOUT: 36: inst780000A7 +// CHECK:STDOUT: 37: inst780000A8 +// CHECK:STDOUT: 38: inst780000A9 +// CHECK:STDOUT: 39: inst780000AA +// CHECK:STDOUT: 40: inst780000AB +// CHECK:STDOUT: 41: inst780000AC +// CHECK:STDOUT: 42: inst780000AD +// CHECK:STDOUT: 43: inst780000AE +// CHECK:STDOUT: 44: inst780000AF +// CHECK:STDOUT: 45: inst780000B0 +// CHECK:STDOUT: 46: inst780000B1 +// CHECK:STDOUT: 47: inst780000B2 +// CHECK:STDOUT: 48: inst780000B3 +// CHECK:STDOUT: 49: inst780000B4 +// CHECK:STDOUT: 50: inst780000B5 +// CHECK:STDOUT: 51: inst780000B6 +// CHECK:STDOUT: 52: inst780000B7 +// CHECK:STDOUT: 53: inst780000B9 +// CHECK:STDOUT: 54: inst780000BA +// CHECK:STDOUT: 55: inst780000BB +// CHECK:STDOUT: 56: inst780000BC +// CHECK:STDOUT: 57: inst780000C0 +// CHECK:STDOUT: 58: inst780000C3 +// CHECK:STDOUT: 59: inst780000C4 +// CHECK:STDOUT: 60: inst780000C5 +// CHECK:STDOUT: 61: inst780000C6 +// CHECK:STDOUT: 62: inst780000C8 +// CHECK:STDOUT: 63: inst780000C9 +// CHECK:STDOUT: 64: inst780000CA +// CHECK:STDOUT: 65: inst780000D2 +// CHECK:STDOUT: 66: inst780000D3 +// CHECK:STDOUT: 67: inst780000D4 +// CHECK:STDOUT: 68: inst780000D5 +// CHECK:STDOUT: 69: inst780000D6 +// CHECK:STDOUT: 70: inst780000D7 +// CHECK:STDOUT: 71: inst780000D8 +// CHECK:STDOUT: 72: inst780000D9 +// CHECK:STDOUT: 73: inst780000DA +// CHECK:STDOUT: 74: inst780000DB +// CHECK:STDOUT: 75: inst780000DF +// CHECK:STDOUT: 76: inst780000E0 +// CHECK:STDOUT: 77: inst780000E2 +// CHECK:STDOUT: 78: inst780000E8 +// CHECK:STDOUT: 79: inst780000E9 +// CHECK:STDOUT: 80: inst780000EA +// CHECK:STDOUT: 81: inst780000EB +// CHECK:STDOUT: 82: inst780000ED +// CHECK:STDOUT: 83: inst780000EE +// CHECK:STDOUT: 84: inst780000EF +// CHECK:STDOUT: 85: inst780000F0 +// CHECK:STDOUT: 86: inst7800010F +// CHECK:STDOUT: 87: inst78000110 +// CHECK:STDOUT: 88: inst78000111 +// CHECK:STDOUT: 89: inst78000112 +// CHECK:STDOUT: 90: inst78000113 +// CHECK:STDOUT: 91: inst78000114 +// CHECK:STDOUT: 92: inst7800011E +// CHECK:STDOUT: 93: inst7800011F +// CHECK:STDOUT: 94: inst78000123 +// CHECK:STDOUT: 95: inst78000124 +// CHECK:STDOUT: 96: inst78000126 +// CHECK:STDOUT: 97: inst7800012C +// CHECK:STDOUT: 98: inst7800012D +// CHECK:STDOUT: 99: inst7800012E +// CHECK:STDOUT: 100: inst7800012F +// CHECK:STDOUT: 101: inst78000131 +// CHECK:STDOUT: 102: inst78000132 +// CHECK:STDOUT: 103: inst78000133 +// CHECK:STDOUT: 104: inst78000134 +// CHECK:STDOUT: 105: inst78000135 +// CHECK:STDOUT: 106: inst7800015C +// CHECK:STDOUT: 107: inst7800015D +// CHECK:STDOUT: 108: inst7800015E +// CHECK:STDOUT: 109: inst7800015F +// CHECK:STDOUT: 110: inst78000160 +// CHECK:STDOUT: 111: inst78000161 +// CHECK:STDOUT: 112: inst78000162 +// CHECK:STDOUT: 113: inst78000163 // CHECK:STDOUT: global_init: {} -// CHECK:STDOUT: inst_block58000005: -// CHECK:STDOUT: 0: inst58000013 -// CHECK:STDOUT: 1: inst58000015 -// CHECK:STDOUT: inst_block58000006: -// CHECK:STDOUT: 0: inst5800001A -// CHECK:STDOUT: inst_block58000007: -// CHECK:STDOUT: 0: inst5800001B -// CHECK:STDOUT: 1: inst5800001C -// CHECK:STDOUT: inst_block58000008: -// CHECK:STDOUT: 0: inst58000023 -// CHECK:STDOUT: inst_block58000009: -// CHECK:STDOUT: 0: inst58000025 -// CHECK:STDOUT: 1: inst58000027 -// CHECK:STDOUT: inst_block5800000A: +// CHECK:STDOUT: inst_block78000005: +// CHECK:STDOUT: 0: inst78000013 +// CHECK:STDOUT: 1: inst78000015 +// CHECK:STDOUT: inst_block78000006: +// CHECK:STDOUT: 0: inst7800001A +// CHECK:STDOUT: inst_block78000007: +// CHECK:STDOUT: 0: inst7800001B +// CHECK:STDOUT: 1: inst7800001C +// CHECK:STDOUT: inst_block78000008: +// CHECK:STDOUT: 0: inst78000023 +// CHECK:STDOUT: inst_block78000009: +// CHECK:STDOUT: 0: inst78000025 +// CHECK:STDOUT: 1: inst78000027 +// CHECK:STDOUT: inst_block7800000A: // CHECK:STDOUT: 0: inst(TypeType) -// CHECK:STDOUT: 1: inst58000026 -// CHECK:STDOUT: inst_block5800000B: -// CHECK:STDOUT: 0: inst5800001D -// CHECK:STDOUT: 1: inst58000028 -// CHECK:STDOUT: inst_block5800000C: -// CHECK:STDOUT: 0: inst5800001E -// CHECK:STDOUT: 1: inst58000028 -// CHECK:STDOUT: inst_block5800000D: -// CHECK:STDOUT: 0: inst5800001D -// CHECK:STDOUT: 1: inst5800002E -// CHECK:STDOUT: inst_block5800000E: -// CHECK:STDOUT: 0: inst5800001D -// CHECK:STDOUT: 1: inst58000026 -// CHECK:STDOUT: inst_block5800000F: -// CHECK:STDOUT: 0: inst5800001E -// CHECK:STDOUT: 1: inst58000026 -// CHECK:STDOUT: inst_block58000010: -// CHECK:STDOUT: 0: inst58000038 -// CHECK:STDOUT: inst_block58000011: -// CHECK:STDOUT: 0: inst58000023 -// CHECK:STDOUT: 1: inst58000038 -// CHECK:STDOUT: inst_block58000012: -// CHECK:STDOUT: 0: inst5800003A -// CHECK:STDOUT: 1: inst5800003C -// CHECK:STDOUT: inst_block58000013: -// CHECK:STDOUT: 0: inst5800001A -// CHECK:STDOUT: 1: inst58000021 -// CHECK:STDOUT: 2: inst58000023 -// CHECK:STDOUT: 3: inst58000036 -// CHECK:STDOUT: 4: inst58000038 -// CHECK:STDOUT: inst_block58000014: -// CHECK:STDOUT: 0: inst58000024 -// CHECK:STDOUT: 1: inst58000025 -// CHECK:STDOUT: 2: inst58000027 -// CHECK:STDOUT: 3: inst5800002A -// CHECK:STDOUT: 4: inst5800002E -// CHECK:STDOUT: 5: inst58000030 -// CHECK:STDOUT: 6: inst58000032 -// CHECK:STDOUT: 7: inst58000039 -// CHECK:STDOUT: 8: inst58000017 -// CHECK:STDOUT: 9: inst5800003A -// CHECK:STDOUT: 10: inst5800003B -// CHECK:STDOUT: 11: inst58000020 -// CHECK:STDOUT: 12: inst5800003C -// CHECK:STDOUT: 13: inst5800003D -// CHECK:STDOUT: inst_block58000015: -// CHECK:STDOUT: 0: inst58000017 -// CHECK:STDOUT: inst_block58000016: -// CHECK:STDOUT: 0: inst58000018 -// CHECK:STDOUT: inst_block58000017: -// CHECK:STDOUT: 0: inst58000019 -// CHECK:STDOUT: 1: inst5800001E -// CHECK:STDOUT: 2: inst58000022 -// CHECK:STDOUT: 3: inst5800002C -// CHECK:STDOUT: 4: inst58000031 -// CHECK:STDOUT: 5: inst58000034 -// CHECK:STDOUT: 6: inst58000037 -// CHECK:STDOUT: inst_block58000018: -// CHECK:STDOUT: 0: inst58000018 -// CHECK:STDOUT: 1: inst5800001D -// CHECK:STDOUT: 2: inst5800001F -// CHECK:STDOUT: 3: inst5800002B -// CHECK:STDOUT: 4: inst5800002F -// CHECK:STDOUT: 5: inst58000033 -// CHECK:STDOUT: 6: inst58000035 -// CHECK:STDOUT: inst_block58000019: -// CHECK:STDOUT: 0: inst58000048 -// CHECK:STDOUT: 1: inst58000049 -// CHECK:STDOUT: 2: inst5800004A -// CHECK:STDOUT: 3: inst58000178 -// CHECK:STDOUT: 4: inst5800017E -// CHECK:STDOUT: 5: inst5800017F -// CHECK:STDOUT: 6: inst58000182 -// CHECK:STDOUT: 7: inst58000183 -// CHECK:STDOUT: 8: inst5800004C -// CHECK:STDOUT: 9: inst58000184 -// CHECK:STDOUT: 10: inst58000185 -// CHECK:STDOUT: 11: inst58000186 -// CHECK:STDOUT: 12: inst58000187 -// CHECK:STDOUT: 13: inst58000188 -// CHECK:STDOUT: 14: inst58000189 -// CHECK:STDOUT: 15: inst5800018A -// CHECK:STDOUT: inst_block5800001A: -// CHECK:STDOUT: 0: inst58000048 -// CHECK:STDOUT: 1: inst58000049 -// CHECK:STDOUT: inst_block5800001B: -// CHECK:STDOUT: 0: inst58000054 -// CHECK:STDOUT: inst_block5800001C: -// CHECK:STDOUT: 0: inst58000055 -// CHECK:STDOUT: inst_block5800001D: -// CHECK:STDOUT: 0: inst58000052 -// CHECK:STDOUT: inst_block5800001E: -// CHECK:STDOUT: 0: inst58000052 -// CHECK:STDOUT: 1: inst58000057 -// CHECK:STDOUT: 2: inst58000058 -// CHECK:STDOUT: inst_block5800001F: -// CHECK:STDOUT: 0: inst5800005E -// CHECK:STDOUT: 1: inst5800005C -// CHECK:STDOUT: inst_block58000020: -// CHECK:STDOUT: 0: inst5800005E -// CHECK:STDOUT: inst_block58000021: -// CHECK:STDOUT: 0: inst5800005C -// CHECK:STDOUT: inst_block58000022: -// CHECK:STDOUT: 0: inst58000062 -// CHECK:STDOUT: inst_block58000023: -// CHECK:STDOUT: 0: inst58000063 -// CHECK:STDOUT: 1: inst58000064 -// CHECK:STDOUT: 2: inst58000065 -// CHECK:STDOUT: 3: inst58000066 -// CHECK:STDOUT: inst_block58000024: -// CHECK:STDOUT: 0: inst58000052 -// CHECK:STDOUT: 1: inst58000059 -// CHECK:STDOUT: 2: inst5800005A -// CHECK:STDOUT: 3: inst5800005F -// CHECK:STDOUT: inst_block58000025: -// CHECK:STDOUT: 0: inst58000067 -// CHECK:STDOUT: inst_block58000026: -// CHECK:STDOUT: 0: inst58000067 -// CHECK:STDOUT: 1: inst58000068 -// CHECK:STDOUT: 2: inst58000069 -// CHECK:STDOUT: inst_block58000027: -// CHECK:STDOUT: 0: inst58000074 -// CHECK:STDOUT: inst_block58000028: -// CHECK:STDOUT: 0: inst58000071 -// CHECK:STDOUT: inst_block58000029: -// CHECK:STDOUT: 0: inst58000071 -// CHECK:STDOUT: 1: inst58000072 -// CHECK:STDOUT: 2: inst58000073 -// CHECK:STDOUT: 3: inst58000076 -// CHECK:STDOUT: inst_block5800002A: -// CHECK:STDOUT: 0: inst58000078 -// CHECK:STDOUT: 1: inst58000079 -// CHECK:STDOUT: inst_block5800002B: -// CHECK:STDOUT: 0: inst5800007E -// CHECK:STDOUT: 1: inst5800007C -// CHECK:STDOUT: inst_block5800002C: -// CHECK:STDOUT: 0: inst5800007E -// CHECK:STDOUT: inst_block5800002D: -// CHECK:STDOUT: 0: inst5800007C -// CHECK:STDOUT: inst_block5800002E: -// CHECK:STDOUT: 0: inst58000082 -// CHECK:STDOUT: inst_block5800002F: -// CHECK:STDOUT: 0: inst58000083 -// CHECK:STDOUT: 1: inst58000084 -// CHECK:STDOUT: 2: inst58000085 -// CHECK:STDOUT: 3: inst58000086 -// CHECK:STDOUT: 4: inst58000087 -// CHECK:STDOUT: inst_block58000030: -// CHECK:STDOUT: 0: inst58000071 -// CHECK:STDOUT: 1: inst58000089 -// CHECK:STDOUT: 2: inst5800008A -// CHECK:STDOUT: inst_block58000031: -// CHECK:STDOUT: 0: inst58000071 -// CHECK:STDOUT: 1: inst58000072 -// CHECK:STDOUT: 2: inst5800008F -// CHECK:STDOUT: 3: inst5800008E -// CHECK:STDOUT: inst_block58000032: -// CHECK:STDOUT: 0: inst58000083 -// CHECK:STDOUT: inst_block58000033: -// CHECK:STDOUT: 0: inst58000083 -// CHECK:STDOUT: inst_block58000034: -// CHECK:STDOUT: 0: inst58000092 -// CHECK:STDOUT: 1: inst58000093 -// CHECK:STDOUT: 2: inst58000094 -// CHECK:STDOUT: 3: inst58000095 -// CHECK:STDOUT: 4: inst58000096 -// CHECK:STDOUT: 5: inst58000097 -// CHECK:STDOUT: 6: inst58000098 -// CHECK:STDOUT: inst_block58000035: -// CHECK:STDOUT: 0: inst58000071 -// CHECK:STDOUT: 1: inst58000072 -// CHECK:STDOUT: 2: inst58000073 -// CHECK:STDOUT: 3: inst5800007A -// CHECK:STDOUT: 4: inst5800007F -// CHECK:STDOUT: inst_block58000036: -// CHECK:STDOUT: 0: inst5800009A -// CHECK:STDOUT: inst_block58000037: -// CHECK:STDOUT: 0: inst5800009D -// CHECK:STDOUT: inst_block58000038: -// CHECK:STDOUT: 0: inst5800009E -// CHECK:STDOUT: inst_block58000039: -// CHECK:STDOUT: 0: inst5800009E -// CHECK:STDOUT: 1: inst5800009F -// CHECK:STDOUT: 2: inst580000A0 -// CHECK:STDOUT: 3: inst580000A1 -// CHECK:STDOUT: inst_block5800003A: -// CHECK:STDOUT: 0: inst5800009E -// CHECK:STDOUT: inst_block5800003B: -// CHECK:STDOUT: 0: inst580000A2 -// CHECK:STDOUT: 1: inst580000A3 -// CHECK:STDOUT: inst_block5800003C: -// CHECK:STDOUT: 0: inst580000B6 -// CHECK:STDOUT: inst_block5800003D: -// CHECK:STDOUT: 0: inst58000018 -// CHECK:STDOUT: 1: inst5800001D -// CHECK:STDOUT: 2: inst580000B8 -// CHECK:STDOUT: inst_block5800003E: -// CHECK:STDOUT: 0: inst580000B9 -// CHECK:STDOUT: inst_block5800003F: -// CHECK:STDOUT: 0: inst580000BC -// CHECK:STDOUT: inst_block58000040: -// CHECK:STDOUT: 0: inst580000BD -// CHECK:STDOUT: inst_block58000041: -// CHECK:STDOUT: 0: inst580000BD -// CHECK:STDOUT: 1: inst580000BE -// CHECK:STDOUT: 2: inst580000BF -// CHECK:STDOUT: inst_block58000042: -// CHECK:STDOUT: 0: inst580000C6 -// CHECK:STDOUT: 1: inst580000C4 -// CHECK:STDOUT: inst_block58000043: -// CHECK:STDOUT: 0: inst580000C6 -// CHECK:STDOUT: inst_block58000044: -// CHECK:STDOUT: 0: inst580000C4 -// CHECK:STDOUT: inst_block58000045: -// CHECK:STDOUT: 0: inst580000CA -// CHECK:STDOUT: inst_block58000046: -// CHECK:STDOUT: 0: inst580000CB -// CHECK:STDOUT: 1: inst580000CC -// CHECK:STDOUT: 2: inst580000CD -// CHECK:STDOUT: 3: inst580000CE -// CHECK:STDOUT: inst_block58000047: -// CHECK:STDOUT: 0: inst58000018 -// CHECK:STDOUT: 1: inst5800001D -// CHECK:STDOUT: 2: inst5800001F -// CHECK:STDOUT: 3: inst580000C7 -// CHECK:STDOUT: inst_block58000048: -// CHECK:STDOUT: 0: inst580000BD -// CHECK:STDOUT: inst_block58000049: -// CHECK:STDOUT: 0: inst580000CF -// CHECK:STDOUT: 1: inst580000D0 -// CHECK:STDOUT: 2: inst580000D1 -// CHECK:STDOUT: inst_block5800004A: -// CHECK:STDOUT: 0: inst58000072 -// CHECK:STDOUT: 1: inst580000DD -// CHECK:STDOUT: inst_block5800004B: -// CHECK:STDOUT: 0: inst580000DF -// CHECK:STDOUT: inst_block5800004C: -// CHECK:STDOUT: 0: inst58000071 -// CHECK:STDOUT: 1: inst580000DC -// CHECK:STDOUT: inst_block5800004D: -// CHECK:STDOUT: 0: inst58000050 -// CHECK:STDOUT: 1: inst58000050 -// CHECK:STDOUT: inst_block5800004E: -// CHECK:STDOUT: 0: inst58000071 -// CHECK:STDOUT: 1: inst580000DC -// CHECK:STDOUT: 2: inst580000E6 -// CHECK:STDOUT: 3: inst58000072 -// CHECK:STDOUT: 4: inst580000DD -// CHECK:STDOUT: 5: inst580000DE -// CHECK:STDOUT: 6: inst580000E1 -// CHECK:STDOUT: inst_block5800004F: -// CHECK:STDOUT: 0: inst580000E3 -// CHECK:STDOUT: 1: inst580000E4 -// CHECK:STDOUT: inst_block58000050: -// CHECK:STDOUT: 0: inst580000EB -// CHECK:STDOUT: 1: inst580000E9 -// CHECK:STDOUT: inst_block58000051: -// CHECK:STDOUT: 0: inst580000EB -// CHECK:STDOUT: inst_block58000052: -// CHECK:STDOUT: 0: inst580000E9 -// CHECK:STDOUT: inst_block58000053: -// CHECK:STDOUT: 0: inst580000EF -// CHECK:STDOUT: 1: inst580000F0 -// CHECK:STDOUT: inst_block58000054: -// CHECK:STDOUT: 0: inst580000F2 -// CHECK:STDOUT: 1: inst580000F4 -// CHECK:STDOUT: inst_block58000055: -// CHECK:STDOUT: 0: inst580000F1 -// CHECK:STDOUT: 1: inst580000F2 -// CHECK:STDOUT: 2: inst580000F3 -// CHECK:STDOUT: 3: inst580000F4 -// CHECK:STDOUT: 4: inst580000F5 -// CHECK:STDOUT: 5: inst580000F6 -// CHECK:STDOUT: 6: inst580000F7 -// CHECK:STDOUT: inst_block58000056: -// CHECK:STDOUT: 0: inst580000DC -// CHECK:STDOUT: inst_block58000057: -// CHECK:STDOUT: 0: inst580000DC -// CHECK:STDOUT: 1: inst580000F9 -// CHECK:STDOUT: 2: inst580000FA -// CHECK:STDOUT: inst_block58000058: -// CHECK:STDOUT: 0: inst580000DC -// CHECK:STDOUT: 1: inst580000DD -// CHECK:STDOUT: 2: inst580000FF -// CHECK:STDOUT: 3: inst580000FE -// CHECK:STDOUT: inst_block58000059: -// CHECK:STDOUT: 0: inst580000F1 -// CHECK:STDOUT: inst_block5800005A: -// CHECK:STDOUT: 0: inst580000F1 -// CHECK:STDOUT: inst_block5800005B: -// CHECK:STDOUT: 0: inst580000F3 -// CHECK:STDOUT: inst_block5800005C: -// CHECK:STDOUT: 0: inst580000F3 -// CHECK:STDOUT: inst_block5800005D: -// CHECK:STDOUT: 0: inst58000102 -// CHECK:STDOUT: 1: inst58000103 -// CHECK:STDOUT: 2: inst58000104 -// CHECK:STDOUT: 3: inst58000105 -// CHECK:STDOUT: 4: inst58000106 -// CHECK:STDOUT: 5: inst58000107 -// CHECK:STDOUT: 6: inst58000108 -// CHECK:STDOUT: 7: inst58000109 -// CHECK:STDOUT: 8: inst5800010A -// CHECK:STDOUT: 9: inst5800010B -// CHECK:STDOUT: 10: inst5800010C -// CHECK:STDOUT: 11: inst5800010D -// CHECK:STDOUT: 12: inst5800010E -// CHECK:STDOUT: inst_block5800005E: -// CHECK:STDOUT: 0: inst58000071 -// CHECK:STDOUT: 1: inst58000072 -// CHECK:STDOUT: 2: inst580000DC -// CHECK:STDOUT: 3: inst580000DD -// CHECK:STDOUT: 4: inst580000DE -// CHECK:STDOUT: 5: inst580000E7 -// CHECK:STDOUT: 6: inst580000EC -// CHECK:STDOUT: inst_block5800005F: -// CHECK:STDOUT: 0: inst58000110 -// CHECK:STDOUT: 1: inst5800010F -// CHECK:STDOUT: inst_block58000060: -// CHECK:STDOUT: 0: inst58000113 -// CHECK:STDOUT: 1: inst58000114 -// CHECK:STDOUT: inst_block58000061: -// CHECK:STDOUT: 0: inst58000115 -// CHECK:STDOUT: 1: inst58000116 -// CHECK:STDOUT: inst_block58000062: -// CHECK:STDOUT: 0: inst58000118 -// CHECK:STDOUT: 1: inst58000119 -// CHECK:STDOUT: inst_block58000063: -// CHECK:STDOUT: 0: inst58000115 -// CHECK:STDOUT: 1: inst58000116 -// CHECK:STDOUT: inst_block58000064: -// CHECK:STDOUT: 0: inst58000115 -// CHECK:STDOUT: 1: inst58000116 -// CHECK:STDOUT: 2: inst58000117 -// CHECK:STDOUT: 3: inst58000118 -// CHECK:STDOUT: 4: inst58000119 -// CHECK:STDOUT: 5: inst5800011A -// CHECK:STDOUT: 6: inst5800011B -// CHECK:STDOUT: inst_block58000065: -// CHECK:STDOUT: 0: inst58000115 -// CHECK:STDOUT: 1: inst58000116 -// CHECK:STDOUT: inst_block58000066: -// CHECK:STDOUT: 0: inst5800011C -// CHECK:STDOUT: 1: inst5800011D -// CHECK:STDOUT: inst_block58000067: -// CHECK:STDOUT: 0: inst58000072 -// CHECK:STDOUT: 1: inst580000DD -// CHECK:STDOUT: 2: inst58000121 -// CHECK:STDOUT: inst_block58000068: -// CHECK:STDOUT: 0: inst58000123 -// CHECK:STDOUT: inst_block58000069: -// CHECK:STDOUT: 0: inst58000071 -// CHECK:STDOUT: 1: inst580000DC -// CHECK:STDOUT: 2: inst58000120 -// CHECK:STDOUT: inst_block5800006A: -// CHECK:STDOUT: 0: inst58000050 -// CHECK:STDOUT: 1: inst58000050 -// CHECK:STDOUT: 2: inst58000050 -// CHECK:STDOUT: inst_block5800006B: -// CHECK:STDOUT: 0: inst58000071 -// CHECK:STDOUT: 1: inst580000DC -// CHECK:STDOUT: 2: inst58000120 -// CHECK:STDOUT: 3: inst5800012A -// CHECK:STDOUT: 4: inst58000072 -// CHECK:STDOUT: 5: inst580000DD -// CHECK:STDOUT: 6: inst58000121 -// CHECK:STDOUT: 7: inst58000122 -// CHECK:STDOUT: 8: inst58000125 -// CHECK:STDOUT: inst_block5800006C: -// CHECK:STDOUT: 0: inst58000127 -// CHECK:STDOUT: 1: inst58000128 -// CHECK:STDOUT: inst_block5800006D: -// CHECK:STDOUT: 0: inst5800012F -// CHECK:STDOUT: 1: inst5800012D -// CHECK:STDOUT: inst_block5800006E: -// CHECK:STDOUT: 0: inst5800012F -// CHECK:STDOUT: inst_block5800006F: -// CHECK:STDOUT: 0: inst5800012D -// CHECK:STDOUT: inst_block58000070: -// CHECK:STDOUT: 0: inst58000133 -// CHECK:STDOUT: 1: inst58000134 -// CHECK:STDOUT: 2: inst58000135 -// CHECK:STDOUT: inst_block58000071: -// CHECK:STDOUT: 0: inst58000137 -// CHECK:STDOUT: 1: inst58000139 -// CHECK:STDOUT: 2: inst5800013B -// CHECK:STDOUT: inst_block58000072: -// CHECK:STDOUT: 0: inst58000136 -// CHECK:STDOUT: 1: inst58000137 -// CHECK:STDOUT: 2: inst58000138 -// CHECK:STDOUT: 3: inst58000139 -// CHECK:STDOUT: 4: inst5800013A -// CHECK:STDOUT: 5: inst5800013B -// CHECK:STDOUT: 6: inst5800013C -// CHECK:STDOUT: 7: inst5800013D -// CHECK:STDOUT: 8: inst5800013E -// CHECK:STDOUT: inst_block58000073: -// CHECK:STDOUT: 0: inst58000120 -// CHECK:STDOUT: inst_block58000074: -// CHECK:STDOUT: 0: inst58000120 -// CHECK:STDOUT: 1: inst58000140 -// CHECK:STDOUT: 2: inst58000141 -// CHECK:STDOUT: inst_block58000075: -// CHECK:STDOUT: 0: inst58000120 -// CHECK:STDOUT: 1: inst58000121 -// CHECK:STDOUT: 2: inst58000146 -// CHECK:STDOUT: 3: inst58000145 -// CHECK:STDOUT: inst_block58000076: -// CHECK:STDOUT: 0: inst58000136 -// CHECK:STDOUT: inst_block58000077: -// CHECK:STDOUT: 0: inst58000136 -// CHECK:STDOUT: inst_block58000078: -// CHECK:STDOUT: 0: inst58000138 -// CHECK:STDOUT: inst_block58000079: -// CHECK:STDOUT: 0: inst58000138 -// CHECK:STDOUT: inst_block5800007A: -// CHECK:STDOUT: 0: inst5800013A -// CHECK:STDOUT: inst_block5800007B: -// CHECK:STDOUT: 0: inst5800013A -// CHECK:STDOUT: inst_block5800007C: -// CHECK:STDOUT: 0: inst58000149 -// CHECK:STDOUT: 1: inst5800014A -// CHECK:STDOUT: 2: inst5800014B -// CHECK:STDOUT: 3: inst5800014C -// CHECK:STDOUT: 4: inst5800014D -// CHECK:STDOUT: 5: inst5800014E -// CHECK:STDOUT: 6: inst5800014F -// CHECK:STDOUT: 7: inst58000150 -// CHECK:STDOUT: 8: inst58000151 -// CHECK:STDOUT: 9: inst58000152 -// CHECK:STDOUT: 10: inst58000153 -// CHECK:STDOUT: 11: inst58000154 -// CHECK:STDOUT: 12: inst58000155 -// CHECK:STDOUT: 13: inst58000156 -// CHECK:STDOUT: 14: inst58000157 -// CHECK:STDOUT: 15: inst58000158 -// CHECK:STDOUT: 16: inst58000159 -// CHECK:STDOUT: 17: inst5800015A -// CHECK:STDOUT: 18: inst5800015B -// CHECK:STDOUT: inst_block5800007D: -// CHECK:STDOUT: 0: inst58000071 -// CHECK:STDOUT: 1: inst58000072 -// CHECK:STDOUT: 2: inst580000DC -// CHECK:STDOUT: 3: inst580000DD -// CHECK:STDOUT: 4: inst58000120 -// CHECK:STDOUT: 5: inst58000121 -// CHECK:STDOUT: 6: inst58000122 -// CHECK:STDOUT: 7: inst5800012B -// CHECK:STDOUT: 8: inst58000130 -// CHECK:STDOUT: inst_block5800007E: -// CHECK:STDOUT: 0: inst5800015E -// CHECK:STDOUT: 1: inst5800015D -// CHECK:STDOUT: 2: inst5800015C -// CHECK:STDOUT: inst_block5800007F: -// CHECK:STDOUT: 0: inst58000161 -// CHECK:STDOUT: 1: inst58000162 -// CHECK:STDOUT: 2: inst58000163 -// CHECK:STDOUT: inst_block58000080: -// CHECK:STDOUT: 0: inst58000164 -// CHECK:STDOUT: 1: inst58000165 -// CHECK:STDOUT: 2: inst58000166 -// CHECK:STDOUT: inst_block58000081: -// CHECK:STDOUT: 0: inst58000168 -// CHECK:STDOUT: 1: inst58000169 -// CHECK:STDOUT: 2: inst5800016A -// CHECK:STDOUT: inst_block58000082: -// CHECK:STDOUT: 0: inst58000164 -// CHECK:STDOUT: 1: inst58000165 -// CHECK:STDOUT: 2: inst58000166 -// CHECK:STDOUT: inst_block58000083: -// CHECK:STDOUT: 0: inst58000164 -// CHECK:STDOUT: 1: inst58000165 -// CHECK:STDOUT: 2: inst58000166 -// CHECK:STDOUT: 3: inst58000167 -// CHECK:STDOUT: 4: inst58000168 -// CHECK:STDOUT: 5: inst58000169 -// CHECK:STDOUT: 6: inst5800016A -// CHECK:STDOUT: 7: inst5800016B -// CHECK:STDOUT: 8: inst5800016C -// CHECK:STDOUT: inst_block58000084: -// CHECK:STDOUT: 0: inst58000164 -// CHECK:STDOUT: 1: inst58000165 -// CHECK:STDOUT: 2: inst58000166 -// CHECK:STDOUT: inst_block58000085: -// CHECK:STDOUT: 0: inst5800016D -// CHECK:STDOUT: 1: inst5800016E -// CHECK:STDOUT: inst_block58000086: -// CHECK:STDOUT: 0: inst580000C1 -// CHECK:STDOUT: 1: inst580000C2 -// CHECK:STDOUT: 2: inst58000042 -// CHECK:STDOUT: inst_block58000087: -// CHECK:STDOUT: 0: inst58000019 -// CHECK:STDOUT: inst_block58000088: -// CHECK:STDOUT: 0: inst58000172 -// CHECK:STDOUT: inst_block58000089: -// CHECK:STDOUT: 0: inst58000174 -// CHECK:STDOUT: inst_block5800008A: -// CHECK:STDOUT: 0: inst58000174 -// CHECK:STDOUT: 1: inst58000175 -// CHECK:STDOUT: 2: inst58000176 -// CHECK:STDOUT: inst_block5800008B: -// CHECK:STDOUT: 0: inst58000173 -// CHECK:STDOUT: inst_block5800008C: -// CHECK:STDOUT: 0: inst5800017A -// CHECK:STDOUT: inst_block5800008D: -// CHECK:STDOUT: 0: inst58000174 -// CHECK:STDOUT: 1: inst5800001D -// CHECK:STDOUT: 2: inst5800001F -// CHECK:STDOUT: 3: inst580000C7 -// CHECK:STDOUT: inst_block5800008E: -// CHECK:STDOUT: 0: inst5800017A -// CHECK:STDOUT: inst_block5800008F: -// CHECK:STDOUT: 0: inst58000048 -// CHECK:STDOUT: inst_block58000090: -// CHECK:STDOUT: 0: inst58000184 -// CHECK:STDOUT: 1: inst58000187 -// CHECK:STDOUT: inst_block58000091: -// CHECK:STDOUT: 0: inst58000043 -// CHECK:STDOUT: 1: inst58000047 -// CHECK:STDOUT: 2: inst58000171 -// CHECK:STDOUT: 3: inst58000173 -// CHECK:STDOUT: 4: inst5800017A -// CHECK:STDOUT: 5: inst5800017B -// CHECK:STDOUT: 6: inst5800017C -// CHECK:STDOUT: 7: inst5800017D -// CHECK:STDOUT: 8: inst58000181 -// CHECK:STDOUT: inst_block58000092: +// CHECK:STDOUT: 1: inst78000026 +// CHECK:STDOUT: inst_block7800000B: +// CHECK:STDOUT: 0: inst7800001D +// CHECK:STDOUT: 1: inst78000028 +// CHECK:STDOUT: inst_block7800000C: +// CHECK:STDOUT: 0: inst7800001E +// CHECK:STDOUT: 1: inst78000028 +// CHECK:STDOUT: inst_block7800000D: +// CHECK:STDOUT: 0: inst7800001D +// CHECK:STDOUT: 1: inst7800002E +// CHECK:STDOUT: inst_block7800000E: +// CHECK:STDOUT: 0: inst7800001D +// CHECK:STDOUT: 1: inst78000026 +// CHECK:STDOUT: inst_block7800000F: +// CHECK:STDOUT: 0: inst7800001E +// CHECK:STDOUT: 1: inst78000026 +// CHECK:STDOUT: inst_block78000010: +// CHECK:STDOUT: 0: inst78000038 +// CHECK:STDOUT: inst_block78000011: +// CHECK:STDOUT: 0: inst78000023 +// CHECK:STDOUT: 1: inst78000038 +// CHECK:STDOUT: inst_block78000012: +// CHECK:STDOUT: 0: inst7800003A +// CHECK:STDOUT: 1: inst7800003C +// CHECK:STDOUT: inst_block78000013: +// CHECK:STDOUT: 0: inst7800001A +// CHECK:STDOUT: 1: inst78000021 +// CHECK:STDOUT: 2: inst78000023 +// CHECK:STDOUT: 3: inst78000036 +// CHECK:STDOUT: 4: inst78000038 +// CHECK:STDOUT: inst_block78000014: +// CHECK:STDOUT: 0: inst78000024 +// CHECK:STDOUT: 1: inst78000025 +// CHECK:STDOUT: 2: inst78000027 +// CHECK:STDOUT: 3: inst7800002A +// CHECK:STDOUT: 4: inst7800002E +// CHECK:STDOUT: 5: inst78000030 +// CHECK:STDOUT: 6: inst78000032 +// CHECK:STDOUT: 7: inst78000039 +// CHECK:STDOUT: 8: inst78000017 +// CHECK:STDOUT: 9: inst7800003A +// CHECK:STDOUT: 10: inst7800003B +// CHECK:STDOUT: 11: inst78000020 +// CHECK:STDOUT: 12: inst7800003C +// CHECK:STDOUT: 13: inst7800003D +// CHECK:STDOUT: inst_block78000015: +// CHECK:STDOUT: 0: inst78000017 +// CHECK:STDOUT: inst_block78000016: +// CHECK:STDOUT: 0: inst78000018 +// CHECK:STDOUT: inst_block78000017: +// CHECK:STDOUT: 0: inst78000019 +// CHECK:STDOUT: 1: inst7800001E +// CHECK:STDOUT: 2: inst78000022 +// CHECK:STDOUT: 3: inst7800002C +// CHECK:STDOUT: 4: inst78000031 +// CHECK:STDOUT: 5: inst78000034 +// CHECK:STDOUT: 6: inst78000037 +// CHECK:STDOUT: inst_block78000018: +// CHECK:STDOUT: 0: inst78000018 +// CHECK:STDOUT: 1: inst7800001D +// CHECK:STDOUT: 2: inst7800001F +// CHECK:STDOUT: 3: inst7800002B +// CHECK:STDOUT: 4: inst7800002F +// CHECK:STDOUT: 5: inst78000033 +// CHECK:STDOUT: 6: inst78000035 +// CHECK:STDOUT: inst_block78000019: +// CHECK:STDOUT: 0: inst78000048 +// CHECK:STDOUT: 1: inst78000049 +// CHECK:STDOUT: 2: inst7800004A +// CHECK:STDOUT: 3: inst78000178 +// CHECK:STDOUT: 4: inst7800017E +// CHECK:STDOUT: 5: inst7800017F +// CHECK:STDOUT: 6: inst78000182 +// CHECK:STDOUT: 7: inst78000183 +// CHECK:STDOUT: 8: inst7800004C +// CHECK:STDOUT: 9: inst78000184 +// CHECK:STDOUT: 10: inst78000185 +// CHECK:STDOUT: 11: inst78000186 +// CHECK:STDOUT: 12: inst78000187 +// CHECK:STDOUT: 13: inst78000188 +// CHECK:STDOUT: 14: inst78000189 +// CHECK:STDOUT: 15: inst7800018A +// CHECK:STDOUT: inst_block7800001A: +// CHECK:STDOUT: 0: inst78000048 +// CHECK:STDOUT: 1: inst78000049 +// CHECK:STDOUT: inst_block7800001B: +// CHECK:STDOUT: 0: inst78000054 +// CHECK:STDOUT: inst_block7800001C: +// CHECK:STDOUT: 0: inst78000055 +// CHECK:STDOUT: inst_block7800001D: +// CHECK:STDOUT: 0: inst78000052 +// CHECK:STDOUT: inst_block7800001E: +// CHECK:STDOUT: 0: inst78000052 +// CHECK:STDOUT: 1: inst78000057 +// CHECK:STDOUT: 2: inst78000058 +// CHECK:STDOUT: inst_block7800001F: +// CHECK:STDOUT: 0: inst7800005E +// CHECK:STDOUT: 1: inst7800005C +// CHECK:STDOUT: inst_block78000020: +// CHECK:STDOUT: 0: inst7800005E +// CHECK:STDOUT: inst_block78000021: +// CHECK:STDOUT: 0: inst7800005C +// CHECK:STDOUT: inst_block78000022: +// CHECK:STDOUT: 0: inst78000062 +// CHECK:STDOUT: inst_block78000023: +// CHECK:STDOUT: 0: inst78000063 +// CHECK:STDOUT: 1: inst78000064 +// CHECK:STDOUT: 2: inst78000065 +// CHECK:STDOUT: 3: inst78000066 +// CHECK:STDOUT: inst_block78000024: +// CHECK:STDOUT: 0: inst78000052 +// CHECK:STDOUT: 1: inst78000059 +// CHECK:STDOUT: 2: inst7800005A +// CHECK:STDOUT: 3: inst7800005F +// CHECK:STDOUT: inst_block78000025: +// CHECK:STDOUT: 0: inst78000067 +// CHECK:STDOUT: inst_block78000026: +// CHECK:STDOUT: 0: inst78000067 +// CHECK:STDOUT: 1: inst78000068 +// CHECK:STDOUT: 2: inst78000069 +// CHECK:STDOUT: inst_block78000027: +// CHECK:STDOUT: 0: inst78000074 +// CHECK:STDOUT: inst_block78000028: +// CHECK:STDOUT: 0: inst78000071 +// CHECK:STDOUT: inst_block78000029: +// CHECK:STDOUT: 0: inst78000071 +// CHECK:STDOUT: 1: inst78000072 +// CHECK:STDOUT: 2: inst78000073 +// CHECK:STDOUT: 3: inst78000076 +// CHECK:STDOUT: inst_block7800002A: +// CHECK:STDOUT: 0: inst78000078 +// CHECK:STDOUT: 1: inst78000079 +// CHECK:STDOUT: inst_block7800002B: +// CHECK:STDOUT: 0: inst7800007E +// CHECK:STDOUT: 1: inst7800007C +// CHECK:STDOUT: inst_block7800002C: +// CHECK:STDOUT: 0: inst7800007E +// CHECK:STDOUT: inst_block7800002D: +// CHECK:STDOUT: 0: inst7800007C +// CHECK:STDOUT: inst_block7800002E: +// CHECK:STDOUT: 0: inst78000082 +// CHECK:STDOUT: inst_block7800002F: +// CHECK:STDOUT: 0: inst78000083 +// CHECK:STDOUT: 1: inst78000084 +// CHECK:STDOUT: 2: inst78000085 +// CHECK:STDOUT: 3: inst78000086 +// CHECK:STDOUT: 4: inst78000087 +// CHECK:STDOUT: inst_block78000030: +// CHECK:STDOUT: 0: inst78000071 +// CHECK:STDOUT: 1: inst78000089 +// CHECK:STDOUT: 2: inst7800008A +// CHECK:STDOUT: inst_block78000031: +// CHECK:STDOUT: 0: inst78000071 +// CHECK:STDOUT: 1: inst78000072 +// CHECK:STDOUT: 2: inst7800008F +// CHECK:STDOUT: 3: inst7800008E +// CHECK:STDOUT: inst_block78000032: +// CHECK:STDOUT: 0: inst78000083 +// CHECK:STDOUT: inst_block78000033: +// CHECK:STDOUT: 0: inst78000083 +// CHECK:STDOUT: inst_block78000034: +// CHECK:STDOUT: 0: inst78000092 +// CHECK:STDOUT: 1: inst78000093 +// CHECK:STDOUT: 2: inst78000094 +// CHECK:STDOUT: 3: inst78000095 +// CHECK:STDOUT: 4: inst78000096 +// CHECK:STDOUT: 5: inst78000097 +// CHECK:STDOUT: 6: inst78000098 +// CHECK:STDOUT: inst_block78000035: +// CHECK:STDOUT: 0: inst78000071 +// CHECK:STDOUT: 1: inst78000072 +// CHECK:STDOUT: 2: inst78000073 +// CHECK:STDOUT: 3: inst7800007A +// CHECK:STDOUT: 4: inst7800007F +// CHECK:STDOUT: inst_block78000036: +// CHECK:STDOUT: 0: inst7800009A +// CHECK:STDOUT: inst_block78000037: +// CHECK:STDOUT: 0: inst7800009D +// CHECK:STDOUT: inst_block78000038: +// CHECK:STDOUT: 0: inst7800009E +// CHECK:STDOUT: inst_block78000039: +// CHECK:STDOUT: 0: inst7800009E +// CHECK:STDOUT: 1: inst7800009F +// CHECK:STDOUT: 2: inst780000A0 +// CHECK:STDOUT: 3: inst780000A1 +// CHECK:STDOUT: inst_block7800003A: +// CHECK:STDOUT: 0: inst7800009E +// CHECK:STDOUT: inst_block7800003B: +// CHECK:STDOUT: 0: inst780000A2 +// CHECK:STDOUT: 1: inst780000A3 +// CHECK:STDOUT: inst_block7800003C: +// CHECK:STDOUT: 0: inst780000B6 +// CHECK:STDOUT: inst_block7800003D: +// CHECK:STDOUT: 0: inst78000018 +// CHECK:STDOUT: 1: inst7800001D +// CHECK:STDOUT: 2: inst780000B8 +// CHECK:STDOUT: inst_block7800003E: +// CHECK:STDOUT: 0: inst780000B9 +// CHECK:STDOUT: inst_block7800003F: +// CHECK:STDOUT: 0: inst780000BC +// CHECK:STDOUT: inst_block78000040: +// CHECK:STDOUT: 0: inst780000BD +// CHECK:STDOUT: inst_block78000041: +// CHECK:STDOUT: 0: inst780000BD +// CHECK:STDOUT: 1: inst780000BE +// CHECK:STDOUT: 2: inst780000BF +// CHECK:STDOUT: inst_block78000042: +// CHECK:STDOUT: 0: inst780000C6 +// CHECK:STDOUT: 1: inst780000C4 +// CHECK:STDOUT: inst_block78000043: +// CHECK:STDOUT: 0: inst780000C6 +// CHECK:STDOUT: inst_block78000044: +// CHECK:STDOUT: 0: inst780000C4 +// CHECK:STDOUT: inst_block78000045: +// CHECK:STDOUT: 0: inst780000CA +// CHECK:STDOUT: inst_block78000046: +// CHECK:STDOUT: 0: inst780000CB +// CHECK:STDOUT: 1: inst780000CC +// CHECK:STDOUT: 2: inst780000CD +// CHECK:STDOUT: 3: inst780000CE +// CHECK:STDOUT: inst_block78000047: +// CHECK:STDOUT: 0: inst78000018 +// CHECK:STDOUT: 1: inst7800001D +// CHECK:STDOUT: 2: inst7800001F +// CHECK:STDOUT: 3: inst780000C7 +// CHECK:STDOUT: inst_block78000048: +// CHECK:STDOUT: 0: inst780000BD +// CHECK:STDOUT: inst_block78000049: +// CHECK:STDOUT: 0: inst780000CF +// CHECK:STDOUT: 1: inst780000D0 +// CHECK:STDOUT: 2: inst780000D1 +// CHECK:STDOUT: inst_block7800004A: +// CHECK:STDOUT: 0: inst78000072 +// CHECK:STDOUT: 1: inst780000DD +// CHECK:STDOUT: inst_block7800004B: +// CHECK:STDOUT: 0: inst780000DF +// CHECK:STDOUT: inst_block7800004C: +// CHECK:STDOUT: 0: inst78000071 +// CHECK:STDOUT: 1: inst780000DC +// CHECK:STDOUT: inst_block7800004D: +// CHECK:STDOUT: 0: inst78000050 +// CHECK:STDOUT: 1: inst78000050 +// CHECK:STDOUT: inst_block7800004E: +// CHECK:STDOUT: 0: inst78000071 +// CHECK:STDOUT: 1: inst780000DC +// CHECK:STDOUT: 2: inst780000E6 +// CHECK:STDOUT: 3: inst78000072 +// CHECK:STDOUT: 4: inst780000DD +// CHECK:STDOUT: 5: inst780000DE +// CHECK:STDOUT: 6: inst780000E1 +// CHECK:STDOUT: inst_block7800004F: +// CHECK:STDOUT: 0: inst780000E3 +// CHECK:STDOUT: 1: inst780000E4 +// CHECK:STDOUT: inst_block78000050: +// CHECK:STDOUT: 0: inst780000EB +// CHECK:STDOUT: 1: inst780000E9 +// CHECK:STDOUT: inst_block78000051: +// CHECK:STDOUT: 0: inst780000EB +// CHECK:STDOUT: inst_block78000052: +// CHECK:STDOUT: 0: inst780000E9 +// CHECK:STDOUT: inst_block78000053: +// CHECK:STDOUT: 0: inst780000EF +// CHECK:STDOUT: 1: inst780000F0 +// CHECK:STDOUT: inst_block78000054: +// CHECK:STDOUT: 0: inst780000F2 +// CHECK:STDOUT: 1: inst780000F4 +// CHECK:STDOUT: inst_block78000055: +// CHECK:STDOUT: 0: inst780000F1 +// CHECK:STDOUT: 1: inst780000F2 +// CHECK:STDOUT: 2: inst780000F3 +// CHECK:STDOUT: 3: inst780000F4 +// CHECK:STDOUT: 4: inst780000F5 +// CHECK:STDOUT: 5: inst780000F6 +// CHECK:STDOUT: 6: inst780000F7 +// CHECK:STDOUT: inst_block78000056: +// CHECK:STDOUT: 0: inst780000DC +// CHECK:STDOUT: inst_block78000057: +// CHECK:STDOUT: 0: inst780000DC +// CHECK:STDOUT: 1: inst780000F9 +// CHECK:STDOUT: 2: inst780000FA +// CHECK:STDOUT: inst_block78000058: +// CHECK:STDOUT: 0: inst780000DC +// CHECK:STDOUT: 1: inst780000DD +// CHECK:STDOUT: 2: inst780000FF +// CHECK:STDOUT: 3: inst780000FE +// CHECK:STDOUT: inst_block78000059: +// CHECK:STDOUT: 0: inst780000F1 +// CHECK:STDOUT: inst_block7800005A: +// CHECK:STDOUT: 0: inst780000F1 +// CHECK:STDOUT: inst_block7800005B: +// CHECK:STDOUT: 0: inst780000F3 +// CHECK:STDOUT: inst_block7800005C: +// CHECK:STDOUT: 0: inst780000F3 +// CHECK:STDOUT: inst_block7800005D: +// CHECK:STDOUT: 0: inst78000102 +// CHECK:STDOUT: 1: inst78000103 +// CHECK:STDOUT: 2: inst78000104 +// CHECK:STDOUT: 3: inst78000105 +// CHECK:STDOUT: 4: inst78000106 +// CHECK:STDOUT: 5: inst78000107 +// CHECK:STDOUT: 6: inst78000108 +// CHECK:STDOUT: 7: inst78000109 +// CHECK:STDOUT: 8: inst7800010A +// CHECK:STDOUT: 9: inst7800010B +// CHECK:STDOUT: 10: inst7800010C +// CHECK:STDOUT: 11: inst7800010D +// CHECK:STDOUT: 12: inst7800010E +// CHECK:STDOUT: inst_block7800005E: +// CHECK:STDOUT: 0: inst78000071 +// CHECK:STDOUT: 1: inst78000072 +// CHECK:STDOUT: 2: inst780000DC +// CHECK:STDOUT: 3: inst780000DD +// CHECK:STDOUT: 4: inst780000DE +// CHECK:STDOUT: 5: inst780000E7 +// CHECK:STDOUT: 6: inst780000EC +// CHECK:STDOUT: inst_block7800005F: +// CHECK:STDOUT: 0: inst78000110 +// CHECK:STDOUT: 1: inst7800010F +// CHECK:STDOUT: inst_block78000060: +// CHECK:STDOUT: 0: inst78000113 +// CHECK:STDOUT: 1: inst78000114 +// CHECK:STDOUT: inst_block78000061: +// CHECK:STDOUT: 0: inst78000115 +// CHECK:STDOUT: 1: inst78000116 +// CHECK:STDOUT: inst_block78000062: +// CHECK:STDOUT: 0: inst78000118 +// CHECK:STDOUT: 1: inst78000119 +// CHECK:STDOUT: inst_block78000063: +// CHECK:STDOUT: 0: inst78000115 +// CHECK:STDOUT: 1: inst78000116 +// CHECK:STDOUT: inst_block78000064: +// CHECK:STDOUT: 0: inst78000115 +// CHECK:STDOUT: 1: inst78000116 +// CHECK:STDOUT: 2: inst78000117 +// CHECK:STDOUT: 3: inst78000118 +// CHECK:STDOUT: 4: inst78000119 +// CHECK:STDOUT: 5: inst7800011A +// CHECK:STDOUT: 6: inst7800011B +// CHECK:STDOUT: inst_block78000065: +// CHECK:STDOUT: 0: inst78000115 +// CHECK:STDOUT: 1: inst78000116 +// CHECK:STDOUT: inst_block78000066: +// CHECK:STDOUT: 0: inst7800011C +// CHECK:STDOUT: 1: inst7800011D +// CHECK:STDOUT: inst_block78000067: +// CHECK:STDOUT: 0: inst78000072 +// CHECK:STDOUT: 1: inst780000DD +// CHECK:STDOUT: 2: inst78000121 +// CHECK:STDOUT: inst_block78000068: +// CHECK:STDOUT: 0: inst78000123 +// CHECK:STDOUT: inst_block78000069: +// CHECK:STDOUT: 0: inst78000071 +// CHECK:STDOUT: 1: inst780000DC +// CHECK:STDOUT: 2: inst78000120 +// CHECK:STDOUT: inst_block7800006A: +// CHECK:STDOUT: 0: inst78000050 +// CHECK:STDOUT: 1: inst78000050 +// CHECK:STDOUT: 2: inst78000050 +// CHECK:STDOUT: inst_block7800006B: +// CHECK:STDOUT: 0: inst78000071 +// CHECK:STDOUT: 1: inst780000DC +// CHECK:STDOUT: 2: inst78000120 +// CHECK:STDOUT: 3: inst7800012A +// CHECK:STDOUT: 4: inst78000072 +// CHECK:STDOUT: 5: inst780000DD +// CHECK:STDOUT: 6: inst78000121 +// CHECK:STDOUT: 7: inst78000122 +// CHECK:STDOUT: 8: inst78000125 +// CHECK:STDOUT: inst_block7800006C: +// CHECK:STDOUT: 0: inst78000127 +// CHECK:STDOUT: 1: inst78000128 +// CHECK:STDOUT: inst_block7800006D: +// CHECK:STDOUT: 0: inst7800012F +// CHECK:STDOUT: 1: inst7800012D +// CHECK:STDOUT: inst_block7800006E: +// CHECK:STDOUT: 0: inst7800012F +// CHECK:STDOUT: inst_block7800006F: +// CHECK:STDOUT: 0: inst7800012D +// CHECK:STDOUT: inst_block78000070: +// CHECK:STDOUT: 0: inst78000133 +// CHECK:STDOUT: 1: inst78000134 +// CHECK:STDOUT: 2: inst78000135 +// CHECK:STDOUT: inst_block78000071: +// CHECK:STDOUT: 0: inst78000137 +// CHECK:STDOUT: 1: inst78000139 +// CHECK:STDOUT: 2: inst7800013B +// CHECK:STDOUT: inst_block78000072: +// CHECK:STDOUT: 0: inst78000136 +// CHECK:STDOUT: 1: inst78000137 +// CHECK:STDOUT: 2: inst78000138 +// CHECK:STDOUT: 3: inst78000139 +// CHECK:STDOUT: 4: inst7800013A +// CHECK:STDOUT: 5: inst7800013B +// CHECK:STDOUT: 6: inst7800013C +// CHECK:STDOUT: 7: inst7800013D +// CHECK:STDOUT: 8: inst7800013E +// CHECK:STDOUT: inst_block78000073: +// CHECK:STDOUT: 0: inst78000120 +// CHECK:STDOUT: inst_block78000074: +// CHECK:STDOUT: 0: inst78000120 +// CHECK:STDOUT: 1: inst78000140 +// CHECK:STDOUT: 2: inst78000141 +// CHECK:STDOUT: inst_block78000075: +// CHECK:STDOUT: 0: inst78000120 +// CHECK:STDOUT: 1: inst78000121 +// CHECK:STDOUT: 2: inst78000146 +// CHECK:STDOUT: 3: inst78000145 +// CHECK:STDOUT: inst_block78000076: +// CHECK:STDOUT: 0: inst78000136 +// CHECK:STDOUT: inst_block78000077: +// CHECK:STDOUT: 0: inst78000136 +// CHECK:STDOUT: inst_block78000078: +// CHECK:STDOUT: 0: inst78000138 +// CHECK:STDOUT: inst_block78000079: +// CHECK:STDOUT: 0: inst78000138 +// CHECK:STDOUT: inst_block7800007A: +// CHECK:STDOUT: 0: inst7800013A +// CHECK:STDOUT: inst_block7800007B: +// CHECK:STDOUT: 0: inst7800013A +// CHECK:STDOUT: inst_block7800007C: +// CHECK:STDOUT: 0: inst78000149 +// CHECK:STDOUT: 1: inst7800014A +// CHECK:STDOUT: 2: inst7800014B +// CHECK:STDOUT: 3: inst7800014C +// CHECK:STDOUT: 4: inst7800014D +// CHECK:STDOUT: 5: inst7800014E +// CHECK:STDOUT: 6: inst7800014F +// CHECK:STDOUT: 7: inst78000150 +// CHECK:STDOUT: 8: inst78000151 +// CHECK:STDOUT: 9: inst78000152 +// CHECK:STDOUT: 10: inst78000153 +// CHECK:STDOUT: 11: inst78000154 +// CHECK:STDOUT: 12: inst78000155 +// CHECK:STDOUT: 13: inst78000156 +// CHECK:STDOUT: 14: inst78000157 +// CHECK:STDOUT: 15: inst78000158 +// CHECK:STDOUT: 16: inst78000159 +// CHECK:STDOUT: 17: inst7800015A +// CHECK:STDOUT: 18: inst7800015B +// CHECK:STDOUT: inst_block7800007D: +// CHECK:STDOUT: 0: inst78000071 +// CHECK:STDOUT: 1: inst78000072 +// CHECK:STDOUT: 2: inst780000DC +// CHECK:STDOUT: 3: inst780000DD +// CHECK:STDOUT: 4: inst78000120 +// CHECK:STDOUT: 5: inst78000121 +// CHECK:STDOUT: 6: inst78000122 +// CHECK:STDOUT: 7: inst7800012B +// CHECK:STDOUT: 8: inst78000130 +// CHECK:STDOUT: inst_block7800007E: +// CHECK:STDOUT: 0: inst7800015E +// CHECK:STDOUT: 1: inst7800015D +// CHECK:STDOUT: 2: inst7800015C +// CHECK:STDOUT: inst_block7800007F: +// CHECK:STDOUT: 0: inst78000161 +// CHECK:STDOUT: 1: inst78000162 +// CHECK:STDOUT: 2: inst78000163 +// CHECK:STDOUT: inst_block78000080: +// CHECK:STDOUT: 0: inst78000164 +// CHECK:STDOUT: 1: inst78000165 +// CHECK:STDOUT: 2: inst78000166 +// CHECK:STDOUT: inst_block78000081: +// CHECK:STDOUT: 0: inst78000168 +// CHECK:STDOUT: 1: inst78000169 +// CHECK:STDOUT: 2: inst7800016A +// CHECK:STDOUT: inst_block78000082: +// CHECK:STDOUT: 0: inst78000164 +// CHECK:STDOUT: 1: inst78000165 +// CHECK:STDOUT: 2: inst78000166 +// CHECK:STDOUT: inst_block78000083: +// CHECK:STDOUT: 0: inst78000164 +// CHECK:STDOUT: 1: inst78000165 +// CHECK:STDOUT: 2: inst78000166 +// CHECK:STDOUT: 3: inst78000167 +// CHECK:STDOUT: 4: inst78000168 +// CHECK:STDOUT: 5: inst78000169 +// CHECK:STDOUT: 6: inst7800016A +// CHECK:STDOUT: 7: inst7800016B +// CHECK:STDOUT: 8: inst7800016C +// CHECK:STDOUT: inst_block78000084: +// CHECK:STDOUT: 0: inst78000164 +// CHECK:STDOUT: 1: inst78000165 +// CHECK:STDOUT: 2: inst78000166 +// CHECK:STDOUT: inst_block78000085: +// CHECK:STDOUT: 0: inst7800016D +// CHECK:STDOUT: 1: inst7800016E +// CHECK:STDOUT: inst_block78000086: +// CHECK:STDOUT: 0: inst780000C1 +// CHECK:STDOUT: 1: inst780000C2 +// CHECK:STDOUT: 2: inst78000042 +// CHECK:STDOUT: inst_block78000087: +// CHECK:STDOUT: 0: inst78000019 +// CHECK:STDOUT: inst_block78000088: +// CHECK:STDOUT: 0: inst78000172 +// CHECK:STDOUT: inst_block78000089: +// CHECK:STDOUT: 0: inst78000174 +// CHECK:STDOUT: inst_block7800008A: +// CHECK:STDOUT: 0: inst78000174 +// CHECK:STDOUT: 1: inst78000175 +// CHECK:STDOUT: 2: inst78000176 +// CHECK:STDOUT: inst_block7800008B: +// CHECK:STDOUT: 0: inst78000173 +// CHECK:STDOUT: inst_block7800008C: +// CHECK:STDOUT: 0: inst7800017A +// CHECK:STDOUT: inst_block7800008D: +// CHECK:STDOUT: 0: inst78000174 +// CHECK:STDOUT: 1: inst7800001D +// CHECK:STDOUT: 2: inst7800001F +// CHECK:STDOUT: 3: inst780000C7 +// CHECK:STDOUT: inst_block7800008E: +// CHECK:STDOUT: 0: inst7800017A +// CHECK:STDOUT: inst_block7800008F: +// CHECK:STDOUT: 0: inst78000048 +// CHECK:STDOUT: inst_block78000090: +// CHECK:STDOUT: 0: inst78000184 +// CHECK:STDOUT: 1: inst78000187 +// CHECK:STDOUT: inst_block78000091: +// CHECK:STDOUT: 0: inst78000043 +// CHECK:STDOUT: 1: inst78000047 +// CHECK:STDOUT: 2: inst78000171 +// CHECK:STDOUT: 3: inst78000173 +// CHECK:STDOUT: 4: inst7800017A +// CHECK:STDOUT: 5: inst7800017B +// CHECK:STDOUT: 6: inst7800017C +// CHECK:STDOUT: 7: inst7800017D +// CHECK:STDOUT: 8: inst78000181 +// CHECK:STDOUT: inst_block78000092: // CHECK:STDOUT: 0: instF -// CHECK:STDOUT: 1: inst58000010 -// CHECK:STDOUT: 2: inst5800003E +// CHECK:STDOUT: 1: inst78000010 +// CHECK:STDOUT: 2: inst7800003E // CHECK:STDOUT: value_stores: // CHECK:STDOUT: shared_values: // CHECK:STDOUT: ints: {} diff --git a/toolchain/check/testdata/builtins/float/make_type.carbon b/toolchain/check/testdata/builtins/float/make_type.carbon index 8e8c429b610a..3e9beece3a33 100644 --- a/toolchain/check/testdata/builtins/float/make_type.carbon +++ b/toolchain/check/testdata/builtins/float/make_type.carbon @@ -79,3 +79,8 @@ var dyn: Float(dyn_size); // CHECK:STDOUT: return %Float.call // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/maybe_unformed/make_type.carbon b/toolchain/check/testdata/builtins/maybe_unformed/make_type.carbon index d13477a66004..f3e62d7ed458 100644 --- a/toolchain/check/testdata/builtins/maybe_unformed/make_type.carbon +++ b/toolchain/check/testdata/builtins/maybe_unformed/make_type.carbon @@ -23,7 +23,7 @@ library "[[@TEST_NAME]]"; import library "types"; //@dump-sem-ir-begin -var b: Make(Make({})); +fn F(unused b: Make(Make({}))) {} //@dump-sem-ir-end // --- runtime_call.carbon @@ -63,6 +63,8 @@ fn ColonBangParam(T:! type) -> type = "maybe_unformed.make_type"; // CHECK:STDOUT: %.a8d: type = maybe_unformed_type %empty_struct_type [concrete] // CHECK:STDOUT: %.2ba: type = maybe_unformed_type %.a8d [concrete] // CHECK:STDOUT: %pattern_type.ce6: type = pattern_type %.2ba [concrete] +// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] +// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -70,24 +72,30 @@ fn ColonBangParam(T:! type) -> type = "maybe_unformed.make_type"; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type.ce6 = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type.ce6 = var_pattern %b.patt [concrete] +// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { +// CHECK:STDOUT: %b.patt: %pattern_type.ce6 = value_binding_pattern b [concrete] +// CHECK:STDOUT: %b.param_patt: %pattern_type.ce6 = value_param_pattern %b.patt [concrete] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %b.param: %.2ba = value_param call_param0 +// CHECK:STDOUT: %.loc7_29.1: type = splice_block %.loc7_29.3 [concrete = constants.%.2ba] { +// CHECK:STDOUT: %Make.ref.loc7_16: %Make.type = name_ref Make, imports.%Main.Make [concrete = constants.%Make] +// CHECK:STDOUT: %Make.ref.loc7_21: %Make.type = name_ref Make, imports.%Main.Make [concrete = constants.%Make] +// CHECK:STDOUT: %.loc7_27.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc7_27.2: type = converted %.loc7_27.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: %Make.call.loc7_28: init type = call %Make.ref.loc7_21(%.loc7_27.2) [concrete = constants.%.a8d] +// CHECK:STDOUT: %.loc7_28.1: type = value_of_initializer %Make.call.loc7_28 [concrete = constants.%.a8d] +// CHECK:STDOUT: %.loc7_28.2: type = converted %Make.call.loc7_28, %.loc7_28.1 [concrete = constants.%.a8d] +// CHECK:STDOUT: %Make.call.loc7_29: init type = call %Make.ref.loc7_16(%.loc7_28.2) [concrete = constants.%.2ba] +// CHECK:STDOUT: %.loc7_29.2: type = value_of_initializer %Make.call.loc7_29 [concrete = constants.%.2ba] +// CHECK:STDOUT: %.loc7_29.3: type = converted %Make.call.loc7_29, %.loc7_29.2 [concrete = constants.%.2ba] +// CHECK:STDOUT: } +// CHECK:STDOUT: %b: %.2ba = value_binding b, %b.param // CHECK:STDOUT: } -// CHECK:STDOUT: %b.var: ref %.2ba = var %b.var_patt [concrete] -// CHECK:STDOUT: %.loc7_21.1: type = splice_block %.loc7_21.3 [concrete = constants.%.2ba] { -// CHECK:STDOUT: %Make.ref.loc7_8: %Make.type = name_ref Make, imports.%Main.Make [concrete = constants.%Make] -// CHECK:STDOUT: %Make.ref.loc7_13: %Make.type = name_ref Make, imports.%Main.Make [concrete = constants.%Make] -// CHECK:STDOUT: %.loc7_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc7_19.2: type = converted %.loc7_19.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %Make.call.loc7_20: init type = call %Make.ref.loc7_13(%.loc7_19.2) [concrete = constants.%.a8d] -// CHECK:STDOUT: %.loc7_20.1: type = value_of_initializer %Make.call.loc7_20 [concrete = constants.%.a8d] -// CHECK:STDOUT: %.loc7_20.2: type = converted %Make.call.loc7_20, %.loc7_20.1 [concrete = constants.%.a8d] -// CHECK:STDOUT: %Make.call.loc7_21: init type = call %Make.ref.loc7_8(%.loc7_20.2) [concrete = constants.%.2ba] -// CHECK:STDOUT: %.loc7_21.2: type = value_of_initializer %Make.call.loc7_21 [concrete = constants.%.2ba] -// CHECK:STDOUT: %.loc7_21.3: type = converted %Make.call.loc7_21, %.loc7_21.2 [concrete = constants.%.2ba] -// CHECK:STDOUT: } -// CHECK:STDOUT: %b: ref %.2ba = ref_binding b, %b.var [concrete = %b.var] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @F(%b.param: %.2ba) { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- runtime_call.carbon diff --git a/toolchain/check/testdata/class/abstract/abstract.carbon b/toolchain/check/testdata/class/abstract/abstract.carbon index e3d064e1a8ba..861645b6f6a8 100644 --- a/toolchain/check/testdata/class/abstract/abstract.carbon +++ b/toolchain/check/testdata/class/abstract/abstract.carbon @@ -322,6 +322,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref = var %v.var_patt [concrete = ] +// CHECK:STDOUT: assign %v.var, // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %v: ref = ref_binding v, [concrete = ] // CHECK:STDOUT: return diff --git a/toolchain/check/testdata/class/abstract/fail_abstract_in_struct.carbon b/toolchain/check/testdata/class/abstract/fail_abstract_in_struct.carbon index bb5f0267c967..812c483162d6 100644 --- a/toolchain/check/testdata/class/abstract/fail_abstract_in_struct.carbon +++ b/toolchain/check/testdata/class/abstract/fail_abstract_in_struct.carbon @@ -197,6 +197,12 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: .Self = constants.%Abstract2 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%v.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_abstract_let.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -296,6 +302,12 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: .Self = constants.%Abstract5 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%v2.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- fail_abstract_first.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -335,6 +347,12 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: .Self = constants.%Abstract6 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%v3.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- fail_abstract_second.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -374,6 +392,12 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: .Self = constants.%Abstract7 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%v4.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- lib.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -437,3 +461,9 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: .Self = imports.%Main.import_ref.141 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%v5.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/abstract/fail_abstract_in_tuple.carbon b/toolchain/check/testdata/class/abstract/fail_abstract_in_tuple.carbon index 3d67e6356911..65daf47b392b 100644 --- a/toolchain/check/testdata/class/abstract/fail_abstract_in_tuple.carbon +++ b/toolchain/check/testdata/class/abstract/fail_abstract_in_tuple.carbon @@ -233,6 +233,7 @@ fn Var5() { // CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref = var %v.var_patt [concrete = ] +// CHECK:STDOUT: assign %v.var, // CHECK:STDOUT: %.loc13_28.1: type = splice_block %.loc13_28.3 [concrete = constants.%tuple.type.d46] { // CHECK:STDOUT: %Abstract2.ref: type = name_ref Abstract2, file.%Abstract2.decl [concrete = constants.%Abstract2] // CHECK:STDOUT: %.loc13_28.2: %tuple.type.85c = tuple_literal (%Abstract2.ref) [concrete = constants.%tuple] @@ -366,6 +367,7 @@ fn Var5() { // CHECK:STDOUT: %v2.var_patt: = var_pattern %v2.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %v2.var: ref = var %v2.var_patt [concrete = ] +// CHECK:STDOUT: assign %v2.var, // CHECK:STDOUT: %.loc14_39.1: type = splice_block %.loc14_39.3 [concrete = constants.%tuple.type.fa1] { // CHECK:STDOUT: %Abstract4.ref: type = name_ref Abstract4, file.%Abstract4.decl [concrete = constants.%Abstract4] // CHECK:STDOUT: %Abstract5.ref: type = name_ref Abstract5, file.%Abstract5.decl [concrete = constants.%Abstract5] @@ -426,6 +428,7 @@ fn Var5() { // CHECK:STDOUT: %v3.var_patt: = var_pattern %v3.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %v3.var: ref = var %v3.var_patt [concrete = ] +// CHECK:STDOUT: assign %v3.var, // CHECK:STDOUT: %.loc13_32.1: type = splice_block %.loc13_32.4 [concrete = constants.%tuple.type.a75] { // CHECK:STDOUT: %Abstract6.ref: type = name_ref Abstract6, file.%Abstract6.decl [concrete = constants.%Abstract6] // CHECK:STDOUT: %.loc13_31: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] @@ -487,6 +490,7 @@ fn Var5() { // CHECK:STDOUT: %v4.var_patt: = var_pattern %v4.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %v4.var: ref = var %v4.var_patt [concrete = ] +// CHECK:STDOUT: assign %v4.var, // CHECK:STDOUT: %.loc13_32.1: type = splice_block %.loc13_32.4 [concrete = constants.%tuple.type.ff9] { // CHECK:STDOUT: %.loc13_20: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %Abstract7.ref: type = name_ref Abstract7, file.%Abstract7.decl [concrete = constants.%Abstract7] @@ -581,6 +585,7 @@ fn Var5() { // CHECK:STDOUT: %v5.var_patt: = var_pattern %v5.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %v5.var: ref = var %v5.var_patt [concrete = ] +// CHECK:STDOUT: assign %v5.var, // CHECK:STDOUT: %.loc14_28.1: type = splice_block %.loc14_28.3 [concrete = constants.%tuple.type.e3a] { // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, imports.%Main.Abstract [concrete = constants.%Abstract] // CHECK:STDOUT: %.loc14_28.2: %tuple.type.85c = tuple_literal (%Abstract.ref) [concrete = constants.%tuple] diff --git a/toolchain/check/testdata/class/destroy_calls.carbon b/toolchain/check/testdata/class/destroy_calls.carbon index e29b0b793c38..3d5b4f93140d 100644 --- a/toolchain/check/testdata/class/destroy_calls.carbon +++ b/toolchain/check/testdata/class/destroy_calls.carbon @@ -20,9 +20,9 @@ class C {} //@dump-sem-ir-begin fn F() { - var unused a: A; - var unused b: B; - var unused c: C; + var unused a: A = {}; + var unused b: B = {}; + var unused c: C = {}; } //@dump-sem-ir-end @@ -36,10 +36,10 @@ class C {} //@dump-sem-ir-begin fn F() { - var unused a: A; - var unused b: B; + var unused a: A = {}; + var unused b: B = {}; if (true) { - var unused c: C; + var unused c: C = {}; } } //@dump-sem-ir-end @@ -71,7 +71,7 @@ class D(template T:! type) {} //@dump-sem-ir-begin fn F() { - var unused a: D(C); + var unused a: D(C) = {}; } //@dump-sem-ir-end @@ -82,7 +82,7 @@ class C(template T:! type) {} //@dump-sem-ir-begin fn F(template T:! type) { - var unused v: C(T); + var unused v: C(T) = {}; } //@dump-sem-ir-end @@ -92,14 +92,19 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.1ab: type = pattern_type %A [concrete] +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: %A.val: %A = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.1f4: type = pattern_type %B [concrete] +// CHECK:STDOUT: %B.val: %B = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.7c7: type = pattern_type %C [concrete] +// CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.bae255.1: type = fn_type @Destroy.Op.loc12 [concrete] // CHECK:STDOUT: %Destroy.Op.651ba6.1: %Destroy.Op.type.bae255.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.bae255.2: type = fn_type @Destroy.Op.loc11 [concrete] @@ -119,6 +124,10 @@ fn G() { F({}); } // CHECK:STDOUT: %a.var_patt: %pattern_type.1ab = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt +// CHECK:STDOUT: %.loc10_22.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc10_22.2: init %A to %a.var = class_init () [concrete = constants.%A.val] +// CHECK:STDOUT: %.loc10_3: init %A = converted %.loc10_22.1, %.loc10_22.2 [concrete = constants.%A.val] +// CHECK:STDOUT: assign %a.var, %.loc10_3 // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %a: ref %A = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { @@ -126,6 +135,10 @@ fn G() { F({}); } // CHECK:STDOUT: %b.var_patt: %pattern_type.1f4 = var_pattern %b.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %B = var %b.var_patt +// CHECK:STDOUT: %.loc11_22.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc11_22.2: init %B to %b.var = class_init () [concrete = constants.%B.val] +// CHECK:STDOUT: %.loc11_3: init %B = converted %.loc11_22.1, %.loc11_22.2 [concrete = constants.%B.val] +// CHECK:STDOUT: assign %b.var, %.loc11_3 // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %b: ref %B = ref_binding b, %b.var // CHECK:STDOUT: name_binding_decl { @@ -133,6 +146,10 @@ fn G() { F({}); } // CHECK:STDOUT: %c.var_patt: %pattern_type.7c7 = var_pattern %c.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt +// CHECK:STDOUT: %.loc12_22.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc12_22.2: init %C to %c.var = class_init () [concrete = constants.%C.val] +// CHECK:STDOUT: %.loc12_3: init %C = converted %.loc12_22.1, %.loc12_22.2 [concrete = constants.%C.val] +// CHECK:STDOUT: assign %c.var, %.loc12_3 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = ref_binding c, %c.var // CHECK:STDOUT: %Destroy.Op.bound.loc12: = bound_method %c.var, constants.%Destroy.Op.651ba6.1 @@ -154,15 +171,20 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.1ab: type = pattern_type %A [concrete] +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: %A.val: %A = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.1f4: type = pattern_type %B [concrete] +// CHECK:STDOUT: %B.val: %B = struct_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %pattern_type.7c7: type = pattern_type %C [concrete] +// CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.bae255.1: type = fn_type @Destroy.Op.loc13 [concrete] // CHECK:STDOUT: %Destroy.Op.651ba6.1: %Destroy.Op.type.bae255.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.bae255.2: type = fn_type @Destroy.Op.loc11 [concrete] @@ -182,6 +204,10 @@ fn G() { F({}); } // CHECK:STDOUT: %a.var_patt: %pattern_type.1ab = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt +// CHECK:STDOUT: %.loc10_22.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc10_22.2: init %A to %a.var = class_init () [concrete = constants.%A.val] +// CHECK:STDOUT: %.loc10_3: init %A = converted %.loc10_22.1, %.loc10_22.2 [concrete = constants.%A.val] +// CHECK:STDOUT: assign %a.var, %.loc10_3 // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %a: ref %A = ref_binding a, %a.var // CHECK:STDOUT: name_binding_decl { @@ -189,6 +215,10 @@ fn G() { F({}); } // CHECK:STDOUT: %b.var_patt: %pattern_type.1f4 = var_pattern %b.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %B = var %b.var_patt +// CHECK:STDOUT: %.loc11_22.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc11_22.2: init %B to %b.var = class_init () [concrete = constants.%B.val] +// CHECK:STDOUT: %.loc11_3: init %B = converted %.loc11_22.1, %.loc11_22.2 [concrete = constants.%B.val] +// CHECK:STDOUT: assign %b.var, %.loc11_3 // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %b: ref %B = ref_binding b, %b.var // CHECK:STDOUT: %true: bool = bool_literal true [concrete = constants.%true] @@ -200,6 +230,10 @@ fn G() { F({}); } // CHECK:STDOUT: %c.var_patt: %pattern_type.7c7 = var_pattern %c.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt +// CHECK:STDOUT: %.loc13_24.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc13_24.2: init %C to %c.var = class_init () [concrete = constants.%C.val] +// CHECK:STDOUT: %.loc13_5: init %C = converted %.loc13_24.1, %.loc13_24.2 [concrete = constants.%C.val] +// CHECK:STDOUT: assign %c.var, %.loc13_5 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = ref_binding c, %c.var // CHECK:STDOUT: br !if.else @@ -283,6 +317,7 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %D.type: type = generic_class_type @D [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %D.generic: %D.type = struct_value () [concrete] @@ -290,6 +325,8 @@ fn G() { F({}); } // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %D.213: type = class_type @D, @D(%C) [concrete] // CHECK:STDOUT: %pattern_type.002: type = pattern_type %D.213 [concrete] +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: %D.val: %D.213 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -305,7 +342,11 @@ fn G() { F({}); } // CHECK:STDOUT: %a.var_patt: %pattern_type.002 = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %D.213 = var %a.var_patt -// CHECK:STDOUT: %.loc9: type = splice_block %D [concrete = constants.%D.213] { +// CHECK:STDOUT: %.loc9_25.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc9_25.2: init %D.213 to %a.var = class_init () [concrete = constants.%D.val] +// CHECK:STDOUT: %.loc9_3: init %D.213 = converted %.loc9_25.1, %.loc9_25.2 [concrete = constants.%D.val] +// CHECK:STDOUT: assign %a.var, %.loc9_3 +// CHECK:STDOUT: %.loc9_20: type = splice_block %D [concrete = constants.%D.213] { // CHECK:STDOUT: %D.ref: %D.type = name_ref D, file.%D.decl [concrete = constants.%D.generic] // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = class_type @D, @D(constants.%C) [concrete = constants.%D.213] @@ -333,6 +374,8 @@ fn G() { F({}); } // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %C.5a3 [template] // CHECK:STDOUT: %pattern_type.3d5: type = pattern_type %C.5a3 [template] +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: %C.val.8b3: %C.5a3 = struct_value () [template] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %C.5a3, @Destroy [template] // CHECK:STDOUT: %Destroy.facet.472: %Destroy.type = facet_value %C.5a3, (%Destroy.lookup_impl_witness) [template] @@ -342,6 +385,7 @@ fn G() { F({}); } // CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @Destroy.WithSelf.Op(%Destroy.facet.472) [template] // CHECK:STDOUT: %C.850: type = class_type @C, @C(%empty_struct_type) [concrete] // CHECK:STDOUT: %pattern_type.526: type = pattern_type %C.850 [concrete] +// CHECK:STDOUT: %C.val.09d: %C.850 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.8d7: = custom_witness (%Destroy.Op), @Destroy [concrete] @@ -369,11 +413,12 @@ fn G() { F({}); } // CHECK:STDOUT: %C.loc7_20.2: type = class_type @C, @C(%T.loc6_15.1) [template = %C.loc7_20.2 (constants.%C.5a3)] // CHECK:STDOUT: %require_complete: = require_complete_type %C.loc7_20.2 [template = %require_complete (constants.%require_complete)] // CHECK:STDOUT: %pattern_type: type = pattern_type %C.loc7_20.2 [template = %pattern_type (constants.%pattern_type.3d5)] +// CHECK:STDOUT: %C.val: @F.%C.loc7_20.2 (%C.5a3) = struct_value () [template = %C.val (constants.%C.val.8b3)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %C.loc7_20.2, @Destroy [template = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] // CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %C.loc7_20.2, (%Destroy.lookup_impl_witness) [template = %Destroy.facet (constants.%Destroy.facet.472)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet) [template = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.7d1)] -// CHECK:STDOUT: %.loc7_3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet [template = %.loc7_3 (constants.%.306)] -// CHECK:STDOUT: %impl.elem0.loc7_3.2: @F.%.loc7_3 (%.306) = impl_witness_access %Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %.loc7_3.2: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet [template = %.loc7_3.2 (constants.%.306)] +// CHECK:STDOUT: %impl.elem0.loc7_3.2: @F.%.loc7_3.2 (%.306) = impl_witness_access %Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] // CHECK:STDOUT: %specific_impl_fn.loc7_3.2: = specific_impl_function %impl.elem0.loc7_3.2, @Destroy.WithSelf.Op(%Destroy.facet) [template = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { @@ -383,13 +428,17 @@ fn G() { F({}); } // CHECK:STDOUT: %v.var_patt: @F.%pattern_type (%pattern_type.3d5) = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref @F.%C.loc7_20.2 (%C.5a3) = var %v.var_patt +// CHECK:STDOUT: %.loc7_25.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc7_25.2: init @F.%C.loc7_20.2 (%C.5a3) to %v.var = class_init () [template = %C.val (constants.%C.val.8b3)] +// CHECK:STDOUT: %.loc7_3.1: init @F.%C.loc7_20.2 (%C.5a3) = converted %.loc7_25.1, %.loc7_25.2 [template = %C.val (constants.%C.val.8b3)] +// CHECK:STDOUT: assign %v.var, %.loc7_3.1 // CHECK:STDOUT: %.loc7_20: type = splice_block %C.loc7_20.1 [template = %C.loc7_20.2 (constants.%C.5a3)] { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc6_15.2 [template = %T.loc6_15.1 (constants.%T)] // CHECK:STDOUT: %C.loc7_20.1: type = class_type @C, @C(constants.%T) [template = %C.loc7_20.2 (constants.%C.5a3)] // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref @F.%C.loc7_20.2 (%C.5a3) = ref_binding v, %v.var -// CHECK:STDOUT: %impl.elem0.loc7_3.1: @F.%.loc7_3 (%.306) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %impl.elem0.loc7_3.1: @F.%.loc7_3.2 (%.306) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] // CHECK:STDOUT: %bound_method.loc7_3.1: = bound_method %v.var, %impl.elem0.loc7_3.1 // CHECK:STDOUT: %specific_impl_fn.loc7_3.1: = specific_impl_function %impl.elem0.loc7_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.472) [template = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: %bound_method.loc7_3.2: = bound_method %v.var, %specific_impl_fn.loc7_3.1 @@ -411,10 +460,11 @@ fn G() { F({}); } // CHECK:STDOUT: %C.loc7_20.2 => constants.%C.850 // CHECK:STDOUT: %require_complete => constants.%complete_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.526 +// CHECK:STDOUT: %C.val => constants.%C.val.09d // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.8d7 // CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.81b // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.599 -// CHECK:STDOUT: %.loc7_3 => constants.%.540 +// CHECK:STDOUT: %.loc7_3.2 => constants.%.540 // CHECK:STDOUT: %impl.elem0.loc7_3.2 => constants.%Destroy.Op // CHECK:STDOUT: %specific_impl_fn.loc7_3.2 => constants.%Destroy.Op // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/field/field_access.carbon b/toolchain/check/testdata/class/field/field_access.carbon index 5e853528a8e3..618134a4b6dc 100644 --- a/toolchain/check/testdata/class/field/field_access.carbon +++ b/toolchain/check/testdata/class/field/field_access.carbon @@ -41,6 +41,15 @@ fn Run() { // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.904: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6ca: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%Class) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.3d0: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Class) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.cda: %T.as.DefaultOrUnformed.impl.Op.type.3d0 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %Class, (%DefaultOrUnformed.impl_witness.6ca) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.cda, @T.as.DefaultOrUnformed.impl.Op(%Class) [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] @@ -83,6 +92,7 @@ fn Run() { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .Destroy = %Core.Destroy @@ -90,6 +100,9 @@ fn Run() { // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.42d: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -131,6 +144,14 @@ fn Run() { // CHECK:STDOUT: %c.var_patt: %pattern_type.904 = var_pattern %c.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Class = var %c.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Class, (constants.%DefaultOrUnformed.impl_witness.6ca) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc21_15.1: %DefaultOrUnformed.type = converted constants.%Class, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc21_15.1 [concrete = constants.%Class] +// CHECK:STDOUT: %.loc21_15.2: type = converted %.loc21_15.1, %as_type [concrete = constants.%Class] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.cda, @T.as.DefaultOrUnformed.impl.Op(constants.%Class) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc21_3: ref %Class = splice_block %c.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %Class to %.loc21_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %c.var, %T.as.DefaultOrUnformed.impl.Op.call // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %c: ref %Class = ref_binding c, %c.var // CHECK:STDOUT: %c.ref.loc22: ref %Class = name_ref c, %c diff --git a/toolchain/check/testdata/class/field/field_access_in_value.carbon b/toolchain/check/testdata/class/field/field_access_in_value.carbon index afa443d70925..5fd5d81f9120 100644 --- a/toolchain/check/testdata/class/field/field_access_in_value.carbon +++ b/toolchain/check/testdata/class/field/field_access_in_value.carbon @@ -42,6 +42,15 @@ fn Test() { // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.904: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6ca: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%Class) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.3d0: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Class) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.cda: %T.as.DefaultOrUnformed.impl.Op.type.3d0 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %Class, (%DefaultOrUnformed.impl_witness.6ca) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.cda, @T.as.DefaultOrUnformed.impl.Op(%Class) [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] @@ -84,6 +93,7 @@ fn Test() { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .Destroy = %Core.Destroy @@ -91,6 +101,9 @@ fn Test() { // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.42d: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -132,6 +145,14 @@ fn Test() { // CHECK:STDOUT: %cv.var_patt: %pattern_type.904 = var_pattern %cv.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %cv.var: ref %Class = var %cv.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Class, (constants.%DefaultOrUnformed.impl_witness.6ca) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc21_16.1: %DefaultOrUnformed.type = converted constants.%Class, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc21_16.1 [concrete = constants.%Class] +// CHECK:STDOUT: %.loc21_16.2: type = converted %.loc21_16.1, %as_type [concrete = constants.%Class] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.cda, @T.as.DefaultOrUnformed.impl.Op(constants.%Class) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc21_3: ref %Class = splice_block %cv.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %Class to %.loc21_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %cv.var, %T.as.DefaultOrUnformed.impl.Op.call // CHECK:STDOUT: %Class.ref.loc21: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %cv: ref %Class = ref_binding cv, %cv.var // CHECK:STDOUT: %cv.ref.loc22: ref %Class = name_ref cv, %cv diff --git a/toolchain/check/testdata/class/generic/call.carbon b/toolchain/check/testdata/class/generic/call.carbon index 76e0ccf0cb33..ffb9576b5005 100644 --- a/toolchain/check/testdata/class/generic/call.carbon +++ b/toolchain/check/testdata/class/generic/call.carbon @@ -129,6 +129,14 @@ class Outer(T:! type) { // CHECK:STDOUT: %int_5.0f6: %i32 = int_value 5 [concrete] // CHECK:STDOUT: %Class.ff1: type = class_type @Class, @Class(%ptr.235, %int_5.0f6) [concrete] // CHECK:STDOUT: %pattern_type.d58: type = pattern_type %Class.ff1 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.77b: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%Class.ff1) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.b8a: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Class.ff1) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.090: %T.as.DefaultOrUnformed.impl.Op.type.b8a = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.31a: %DefaultOrUnformed.type = facet_value %Class.ff1, (%DefaultOrUnformed.impl_witness.77b) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.16a: = specific_function %T.as.DefaultOrUnformed.impl.Op.090, @T.as.DefaultOrUnformed.impl.Op(%Class.ff1) [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.897: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5 [concrete] @@ -136,12 +144,18 @@ class Outer(T:! type) { // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %Class.7c6: type = class_type @Class, @Class(%empty_tuple.type, %int_0.6a9) [concrete] // CHECK:STDOUT: %pattern_type.a3c: type = pattern_type %Class.7c6 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.c95: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%Class.7c6) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.7ec: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Class.7c6) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.b11: %T.as.DefaultOrUnformed.impl.Op.type.7ec = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.d1f: %DefaultOrUnformed.type = facet_value %Class.7c6, (%DefaultOrUnformed.impl_witness.c95) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.87f: = specific_function %T.as.DefaultOrUnformed.impl.Op.b11, @T.as.DefaultOrUnformed.impl.Op(%Class.7c6) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -149,6 +163,9 @@ class Outer(T:! type) { // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.42d: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl [concrete] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -231,6 +248,27 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc6: %DefaultOrUnformed.type = facet_value constants.%Class.ff1, (constants.%DefaultOrUnformed.impl_witness.77b) [concrete = constants.%DefaultOrUnformed.facet.31a] +// CHECK:STDOUT: %.loc6_22.1: %DefaultOrUnformed.type = converted constants.%Class.ff1, %DefaultOrUnformed.facet.loc6 [concrete = constants.%DefaultOrUnformed.facet.31a] +// CHECK:STDOUT: %as_type.loc6: type = facet_access_type %.loc6_22.1 [concrete = constants.%Class.ff1] +// CHECK:STDOUT: %.loc6_22.2: type = converted %.loc6_22.1, %as_type.loc6 [concrete = constants.%Class.ff1] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.1: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.090, @T.as.DefaultOrUnformed.impl.Op(constants.%Class.ff1) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn.16a] +// CHECK:STDOUT: %.loc6_1: ref %Class.ff1 = splice_block file.%a.var [concrete = file.%a.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc6: init %Class.ff1 to %.loc6_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.1() +// CHECK:STDOUT: assign file.%a.var, %T.as.DefaultOrUnformed.impl.Op.call.loc6 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc9: %DefaultOrUnformed.type = facet_value constants.%Class.7c6, (constants.%DefaultOrUnformed.impl_witness.c95) [concrete = constants.%DefaultOrUnformed.facet.d1f] +// CHECK:STDOUT: %.loc9_20.1: %DefaultOrUnformed.type = converted constants.%Class.7c6, %DefaultOrUnformed.facet.loc9 [concrete = constants.%DefaultOrUnformed.facet.d1f] +// CHECK:STDOUT: %as_type.loc9: type = facet_access_type %.loc9_20.1 [concrete = constants.%Class.7c6] +// CHECK:STDOUT: %.loc9_20.2: type = converted %.loc9_20.1, %as_type.loc9 [concrete = constants.%Class.7c6] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.2: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.b11, @T.as.DefaultOrUnformed.impl.Op(constants.%Class.7c6) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn.87f] +// CHECK:STDOUT: %.loc9_1: ref %Class.7c6 = splice_block file.%b.var [concrete = file.%b.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc9: init %Class.7c6 to %.loc9_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.2() +// CHECK:STDOUT: assign file.%b.var, %T.as.DefaultOrUnformed.impl.Op.call.loc9 +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T, constants.%N.6f3) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%T // CHECK:STDOUT: %N.loc4_23.1 => constants.%N.6f3 @@ -330,6 +368,12 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%a.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T, constants.%N.6f3) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%T // CHECK:STDOUT: %N.loc4_23.1 => constants.%N.6f3 @@ -419,6 +463,12 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%a.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T, constants.%N.6f3) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%T // CHECK:STDOUT: %N.loc4_23.1 => constants.%N.6f3 @@ -511,6 +561,12 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%a.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T, constants.%N.6f3) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%T // CHECK:STDOUT: %N.loc4_23.1 => constants.%N.6f3 diff --git a/toolchain/check/testdata/class/generic/stringify.carbon b/toolchain/check/testdata/class/generic/stringify.carbon index 8d8b207bb499..4ce33dce0887 100644 --- a/toolchain/check/testdata/class/generic/stringify.carbon +++ b/toolchain/check/testdata/class/generic/stringify.carbon @@ -102,6 +102,15 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %EmptyParams.generic: %EmptyParams.type = struct_value () [concrete] // CHECK:STDOUT: %EmptyParams: type = class_type @EmptyParams [concrete] // CHECK:STDOUT: %pattern_type.8ec: type = pattern_type %NoParams [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.d7c: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%NoParams) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.51c: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%NoParams) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.5bb: %T.as.DefaultOrUnformed.impl.Op.type.51c = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %NoParams, (%DefaultOrUnformed.impl_witness.d7c) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.5bb, @T.as.DefaultOrUnformed.impl.Op(%NoParams) [concrete] // CHECK:STDOUT: %pattern_type.e19: type = pattern_type %EmptyParams [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] @@ -109,10 +118,14 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -164,6 +177,14 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%NoParams, (constants.%DefaultOrUnformed.impl_witness.d7c) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc7_16.1: %DefaultOrUnformed.type = converted constants.%NoParams, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc7_16.1 [concrete = constants.%NoParams] +// CHECK:STDOUT: %.loc7_16.2: type = converted %.loc7_16.1, %as_type [concrete = constants.%NoParams] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.5bb, @T.as.DefaultOrUnformed.impl.Op(constants.%NoParams) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc7_1: ref %NoParams = splice_block file.%v.var [concrete = file.%v.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %NoParams to %.loc7_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%v.var, %T.as.DefaultOrUnformed.impl.Op.call // CHECK:STDOUT: %v.ref: ref %NoParams = name_ref v, file.%v [concrete = file.%v.var] // CHECK:STDOUT: %.loc15: %EmptyParams = converted %v.ref, [concrete = ] // CHECK:STDOUT: assign file.%w.var, @@ -192,6 +213,14 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %Inner.type.cd9: type = generic_class_type @Inner, @Outer(%ptr.c28) [concrete] // CHECK:STDOUT: %Inner.generic.0f6: %Inner.type.cd9 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.acf: type = pattern_type %Outer.b7c [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.8e7: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%Outer.b7c) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.e70: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Outer.b7c) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.3a0: %T.as.DefaultOrUnformed.impl.Op.type.e70 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %Outer.b7c, (%DefaultOrUnformed.impl_witness.8e7) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.3a0, @T.as.DefaultOrUnformed.impl.Op(%Outer.b7c) [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] @@ -206,11 +235,15 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } @@ -308,6 +341,14 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Outer.b7c, (constants.%DefaultOrUnformed.impl_witness.8e7) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc9_18.1: %DefaultOrUnformed.type = converted constants.%Outer.b7c, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc9_18.1 [concrete = constants.%Outer.b7c] +// CHECK:STDOUT: %.loc9_18.2: type = converted %.loc9_18.1, %as_type [concrete = constants.%Outer.b7c] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.3a0, @T.as.DefaultOrUnformed.impl.Op(constants.%Outer.b7c) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc9_1: ref %Outer.b7c = splice_block file.%v.var [concrete = file.%v.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %Outer.b7c to %.loc9_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%v.var, %T.as.DefaultOrUnformed.impl.Op.call // CHECK:STDOUT: %v.ref: ref %Outer.b7c = name_ref v, file.%v [concrete = file.%v.var] // CHECK:STDOUT: %.loc19: %Inner.304 = converted %v.ref, [concrete = ] // CHECK:STDOUT: assign file.%w.var, diff --git a/toolchain/check/testdata/class/import.carbon b/toolchain/check/testdata/class/import.carbon index c4927f113da7..b1f617a67520 100644 --- a/toolchain/check/testdata/class/import.carbon +++ b/toolchain/check/testdata/class/import.carbon @@ -218,6 +218,14 @@ fn Run() { // CHECK:STDOUT: %Incomplete: type = class_type @Incomplete [concrete] // CHECK:STDOUT: %ptr.8c3: type = ptr_type %Incomplete [concrete] // CHECK:STDOUT: %pattern_type.b98: type = pattern_type %ptr.8c3 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.fb9: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%ptr.8c3) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.3ad: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%ptr.8c3) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.5f6: %T.as.DefaultOrUnformed.impl.Op.type.3ad = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %ptr.8c3, (%DefaultOrUnformed.impl_witness.fb9) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.5f6, @T.as.DefaultOrUnformed.impl.Op(%ptr.8c3) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.bae255.1: type = fn_type @Destroy.Op.loc18 [concrete] // CHECK:STDOUT: %Destroy.Op.651ba6.1: %Destroy.Op.type.bae255.1 = struct_value () [concrete] @@ -239,6 +247,7 @@ fn Run() { // CHECK:STDOUT: %Core.ece: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: .Copy = %Core.Copy +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... @@ -263,6 +272,9 @@ fn Run() { // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.203: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.2d4) = import_ref Core//prelude/parts/copy, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.74e)] // CHECK:STDOUT: %Copy.impl_witness_table.c3a = impl_witness_table (%Core.import_ref.203), @ptr.as.Copy.impl [concrete] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -402,7 +414,14 @@ fn Run() { // CHECK:STDOUT: %e.var_patt: %pattern_type.b98 = var_pattern %e.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %ptr.8c3 = var %e.var_patt -// CHECK:STDOUT: %.loc18: type = splice_block %ptr.loc18 [concrete = constants.%ptr.8c3] { +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%ptr.8c3, (constants.%DefaultOrUnformed.impl_witness.fb9) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc18_28.1: %DefaultOrUnformed.type = converted constants.%ptr.8c3, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc18_28.1 [concrete = constants.%ptr.8c3] +// CHECK:STDOUT: %.loc18_28.2: type = converted %.loc18_28.1, %as_type [concrete = constants.%ptr.8c3] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.5f6, @T.as.DefaultOrUnformed.impl.Op(constants.%ptr.8c3) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %ptr.8c3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %e.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc18_27: type = splice_block %ptr.loc18 [concrete = constants.%ptr.8c3] { // CHECK:STDOUT: %Incomplete.ref: type = name_ref Incomplete, imports.%Main.Incomplete [concrete = constants.%Incomplete] // CHECK:STDOUT: %ptr.loc18: type = ptr_type %Incomplete.ref [concrete = constants.%ptr.8c3] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/import_member_cycle.carbon b/toolchain/check/testdata/class/import_member_cycle.carbon index 759bde9c5a3e..228eb53c313a 100644 --- a/toolchain/check/testdata/class/import_member_cycle.carbon +++ b/toolchain/check/testdata/class/import_member_cycle.carbon @@ -78,8 +78,17 @@ fn Run() { // CHECK:STDOUT: %Cycle: type = class_type @Cycle [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Cycle [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %ptr} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete] +// CHECK:STDOUT: %complete_type.e68: = complete_type_witness %struct_type.a [concrete] // CHECK:STDOUT: %pattern_type.e31: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.446: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%ptr) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.4d8: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%ptr) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.1cb: %T.as.DefaultOrUnformed.impl.Op.type.4d8 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %ptr, (%DefaultOrUnformed.impl_witness.446) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.1cb, @T.as.DefaultOrUnformed.impl.Op(%ptr) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -88,13 +97,17 @@ fn Run() { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Main.Cycle: type = import_ref Main//a, Cycle, loaded [concrete = constants.%Cycle] // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Main.import_ref.4e3: = import_ref Main//a, loc6_1, loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Main.import_ref.4e3: = import_ref Main//a, loc6_1, loaded [concrete = constants.%complete_type.e68] // CHECK:STDOUT: %Main.import_ref.fd1 = import_ref Main//a, inst{{[0-9A-F]+}} [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.465 = import_ref Main//a, loc5_8, unloaded +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -124,7 +137,14 @@ fn Run() { // CHECK:STDOUT: %a.var_patt: %pattern_type.e31 = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %ptr = var %a.var_patt -// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%ptr, (constants.%DefaultOrUnformed.impl_witness.446) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc7_23.1: %DefaultOrUnformed.type = converted constants.%ptr, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc7_23.1 [concrete = constants.%ptr] +// CHECK:STDOUT: %.loc7_23.2: type = converted %.loc7_23.1, %as_type [concrete = constants.%ptr] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.1cb, @T.as.DefaultOrUnformed.impl.Op(constants.%ptr) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %ptr = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %a.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc7_22: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cycle.ref: type = name_ref Cycle, imports.%Main.Cycle [concrete = constants.%Cycle] // CHECK:STDOUT: %ptr: type = ptr_type %Cycle.ref [concrete = constants.%ptr] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/import_struct_cycle.carbon b/toolchain/check/testdata/class/import_struct_cycle.carbon index ef9fdaf88ab9..ca1af375b482 100644 --- a/toolchain/check/testdata/class/import_struct_cycle.carbon +++ b/toolchain/check/testdata/class/import_struct_cycle.carbon @@ -41,17 +41,30 @@ fn Run() { // CHECK:STDOUT: %Cycle: type = class_type @Cycle [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Cycle [concrete] // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %ptr} [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.b [concrete] +// CHECK:STDOUT: %pattern_type.d79: type = pattern_type %struct_type.b [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.64d: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%struct_type.b) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.d8d: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%struct_type.b) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.654: %T.as.DefaultOrUnformed.impl.Op.type.d8d = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %struct_type.b, (%DefaultOrUnformed.impl_witness.64d) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.654, @T.as.DefaultOrUnformed.impl.Op(%struct_type.b) [concrete] // CHECK:STDOUT: %Cycle.elem: type = unbound_element_type %Cycle, %struct_type.b [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %struct_type.b} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.c [concrete] +// CHECK:STDOUT: %complete_type.3fc: = complete_type_witness %struct_type.c [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -63,8 +76,8 @@ fn Run() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Cycle.decl.loc4: type = class_decl @Cycle [concrete = constants.%Cycle] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.d79 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.d79 = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %struct_type.b = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc6: type = splice_block %struct_type.b [concrete = constants.%struct_type.b] { @@ -81,7 +94,7 @@ fn Run() { // CHECK:STDOUT: %ptr: type = ptr_type %Cycle.ref [concrete = constants.%ptr] // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %ptr} [concrete = constants.%struct_type.b] // CHECK:STDOUT: %.loc10: %Cycle.elem = field_decl c, element0 [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.c [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.c [concrete = constants.%complete_type.3fc] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -90,6 +103,18 @@ fn Run() { // CHECK:STDOUT: .c = %.loc10 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%struct_type.b, (constants.%DefaultOrUnformed.impl_witness.64d) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc6_20.1: %DefaultOrUnformed.type = converted constants.%struct_type.b, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc6_20.1 [concrete = constants.%struct_type.b] +// CHECK:STDOUT: %.loc6_20.2: type = converted %.loc6_20.1, %as_type [concrete = constants.%struct_type.b] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.654, @T.as.DefaultOrUnformed.impl.Op(constants.%struct_type.b) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %struct_type.b = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%a.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- b.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/class/method/method.carbon b/toolchain/check/testdata/class/method/method.carbon index ecd27c74febe..d1f908e0b661 100644 --- a/toolchain/check/testdata/class/method/method.carbon +++ b/toolchain/check/testdata/class/method/method.carbon @@ -85,6 +85,7 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.824: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.9b9: %Int.as.Copy.impl.Op.type.824 = struct_value () [symbolic] +// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Copy.impl_witness.f17: = impl_witness imports.%Copy.impl_witness_table.e76, @Int.as.Copy.impl(%int_32) [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.546: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%int_32) [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.664: %Int.as.Copy.impl.Op.type.546 = struct_value () [concrete] @@ -123,13 +124,21 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: %CallWithRef.type: type = fn_type @CallWithRef [concrete] // CHECK:STDOUT: %CallWithRef: %CallWithRef.type = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6ca: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%Class) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.3d0: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Class) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.cda: %T.as.DefaultOrUnformed.impl.Op.type.3d0 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %Class, (%DefaultOrUnformed.impl_witness.6ca) [concrete] +// CHECK:STDOUT: %.cff: Core.Form = init_form %Class [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.cda, @T.as.DefaultOrUnformed.impl.Op(%Class) [concrete] // CHECK:STDOUT: %ptr.8e5: type = ptr_type %Class [concrete] // CHECK:STDOUT: %pattern_type.018: type = pattern_type %ptr.8e5 [concrete] // CHECK:STDOUT: %CallFThroughPointer.type: type = fn_type @CallFThroughPointer [concrete] // CHECK:STDOUT: %CallFThroughPointer: %CallFThroughPointer.type = struct_value () [concrete] // CHECK:STDOUT: %CallGThroughPointer.type: type = fn_type @CallGThroughPointer [concrete] // CHECK:STDOUT: %CallGThroughPointer: %CallGThroughPointer.type = struct_value () [concrete] -// CHECK:STDOUT: %.cff: Core.Form = init_form %Class [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %CallFOnInitializingExpr.type: type = fn_type @CallFOnInitializingExpr [concrete] @@ -144,6 +153,7 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: .Destroy = %Core.Destroy +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -155,6 +165,9 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %Core.import_ref.42d: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -409,6 +422,14 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %c.var_patt: %pattern_type.904 = var_pattern %c.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Class = var %c.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Class, (constants.%DefaultOrUnformed.impl_witness.6ca) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc43_15.1: %DefaultOrUnformed.type = converted constants.%Class, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc43_15.1 [concrete = constants.%Class] +// CHECK:STDOUT: %.loc43_15.2: type = converted %.loc43_15.1, %as_type [concrete = constants.%Class] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.cda, @T.as.DefaultOrUnformed.impl.Op(constants.%Class) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc43_3: ref %Class = splice_block %c.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %Class to %.loc43_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %c.var, %T.as.DefaultOrUnformed.impl.Op.call // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %c: ref %Class = ref_binding c, %c.var // CHECK:STDOUT: %c.ref: ref %Class = name_ref c, %c diff --git a/toolchain/check/testdata/class/method/static_method.carbon b/toolchain/check/testdata/class/method/static_method.carbon index ccc3e97f5faf..f590f1487f05 100644 --- a/toolchain/check/testdata/class/method/static_method.carbon +++ b/toolchain/check/testdata/class/method/static_method.carbon @@ -39,6 +39,15 @@ fn Run() -> i32 { // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.904: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6ca: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%Class) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.3d0: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Class) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.cda: %T.as.DefaultOrUnformed.impl.Op.type.3d0 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %Class, (%DefaultOrUnformed.impl_witness.6ca) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.cda, @T.as.DefaultOrUnformed.impl.Op(%Class) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -47,11 +56,15 @@ fn Run() -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -101,6 +114,14 @@ fn Run() -> i32 { // CHECK:STDOUT: %c.var_patt: %pattern_type.904 = var_pattern %c.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Class = var %c.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Class, (constants.%DefaultOrUnformed.impl_witness.6ca) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc20_15.1: %DefaultOrUnformed.type = converted constants.%Class, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc20_15.1 [concrete = constants.%Class] +// CHECK:STDOUT: %.loc20_15.2: type = converted %.loc20_15.1, %as_type [concrete = constants.%Class] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.cda, @T.as.DefaultOrUnformed.impl.Op(constants.%Class) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc20_3: ref %Class = splice_block %c.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %Class to %.loc20_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %c.var, %T.as.DefaultOrUnformed.impl.Op.call // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %c: ref %Class = ref_binding c, %c.var // CHECK:STDOUT: %c.ref: ref %Class = name_ref c, %c diff --git a/toolchain/check/testdata/class/nested.carbon b/toolchain/check/testdata/class/nested.carbon index b798fae218a6..9be94a94f9a0 100644 --- a/toolchain/check/testdata/class/nested.carbon +++ b/toolchain/check/testdata/class/nested.carbon @@ -76,7 +76,21 @@ fn F(a: Outer*) { // CHECK:STDOUT: %struct_type.po.qo.pi: type = struct_type {.po: %ptr.56b, .qo: %ptr.56b, .pi: %ptr.78a} [concrete] // CHECK:STDOUT: %complete_type.c34: = complete_type_witness %struct_type.po.qo.pi [concrete] // CHECK:STDOUT: %pattern_type.9ae: type = pattern_type %Outer [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.52f: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%Outer) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.8b8: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Outer) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.de4: %T.as.DefaultOrUnformed.impl.Op.type.8b8 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.83f: %DefaultOrUnformed.type = facet_value %Outer, (%DefaultOrUnformed.impl_witness.52f) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.a30: = specific_function %T.as.DefaultOrUnformed.impl.Op.de4, @T.as.DefaultOrUnformed.impl.Op(%Outer) [concrete] // CHECK:STDOUT: %pattern_type.86a: type = pattern_type %Inner [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.994: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%Inner) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.036: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Inner) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.da3: %T.as.DefaultOrUnformed.impl.Op.type.036 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.6ba: %DefaultOrUnformed.type = facet_value %Inner, (%DefaultOrUnformed.impl_witness.994) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.14b: = specific_function %T.as.DefaultOrUnformed.impl.Op.da3, @T.as.DefaultOrUnformed.impl.Op(%Inner) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type.bae255.1: type = fn_type @Destroy.Op.loc19 [concrete] // CHECK:STDOUT: %Destroy.Op.651ba6.1: %Destroy.Op.type.bae255.1 = struct_value () [concrete] @@ -87,7 +101,6 @@ fn F(a: Outer*) { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.565: type = pattern_type %ptr.78a [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] -// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.2d4: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.74e: %ptr.as.Copy.impl.Op.type.2d4 = struct_value () [symbolic] // CHECK:STDOUT: %Copy.impl_witness.3e0: = impl_witness imports.%Copy.impl_witness_table.c3a, @ptr.as.Copy.impl(%Outer) [concrete] @@ -108,11 +121,15 @@ fn F(a: Outer*) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.203: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.2d4) = import_ref Core//prelude/parts/copy, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.74e)] @@ -198,6 +215,14 @@ fn F(a: Outer*) { // CHECK:STDOUT: %o.var_patt: %pattern_type.9ae = var_pattern %o.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %o.var: ref %Outer = var %o.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc18: %DefaultOrUnformed.type = facet_value constants.%Outer, (constants.%DefaultOrUnformed.impl_witness.52f) [concrete = constants.%DefaultOrUnformed.facet.83f] +// CHECK:STDOUT: %.loc18_24.1: %DefaultOrUnformed.type = converted constants.%Outer, %DefaultOrUnformed.facet.loc18 [concrete = constants.%DefaultOrUnformed.facet.83f] +// CHECK:STDOUT: %as_type.loc18: type = facet_access_type %.loc18_24.1 [concrete = constants.%Outer] +// CHECK:STDOUT: %.loc18_24.2: type = converted %.loc18_24.1, %as_type.loc18 [concrete = constants.%Outer] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.1: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.de4, @T.as.DefaultOrUnformed.impl.Op(constants.%Outer) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn.a30] +// CHECK:STDOUT: %.loc18_5: ref %Outer = splice_block %o.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc18: init %Outer to %.loc18_5 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.1() +// CHECK:STDOUT: assign %o.var, %T.as.DefaultOrUnformed.impl.Op.call.loc18 // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %o: ref %Outer = ref_binding o, %o.var // CHECK:STDOUT: name_binding_decl { @@ -205,6 +230,14 @@ fn F(a: Outer*) { // CHECK:STDOUT: %i.var_patt: %pattern_type.86a = var_pattern %i.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var %i.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc19: %DefaultOrUnformed.type = facet_value constants.%Inner, (constants.%DefaultOrUnformed.impl_witness.994) [concrete = constants.%DefaultOrUnformed.facet.6ba] +// CHECK:STDOUT: %.loc19_24.1: %DefaultOrUnformed.type = converted constants.%Inner, %DefaultOrUnformed.facet.loc19 [concrete = constants.%DefaultOrUnformed.facet.6ba] +// CHECK:STDOUT: %as_type.loc19: type = facet_access_type %.loc19_24.1 [concrete = constants.%Inner] +// CHECK:STDOUT: %.loc19_24.2: type = converted %.loc19_24.1, %as_type.loc19 [concrete = constants.%Inner] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.2: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.da3, @T.as.DefaultOrUnformed.impl.Op(constants.%Inner) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn.14b] +// CHECK:STDOUT: %.loc19_5: ref %Inner = splice_block %i.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc19: init %Inner to %.loc19_5 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.2() +// CHECK:STDOUT: assign %i.var, %T.as.DefaultOrUnformed.impl.Op.call.loc19 // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: %i: ref %Inner = ref_binding i, %i.var // CHECK:STDOUT: %Destroy.Op.bound.loc19: = bound_method %i.var, constants.%Destroy.Op.651ba6.1 @@ -221,6 +254,14 @@ fn F(a: Outer*) { // CHECK:STDOUT: %o.var_patt: %pattern_type.9ae = var_pattern %o.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %o.var: ref %Outer = var %o.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc29: %DefaultOrUnformed.type = facet_value constants.%Outer, (constants.%DefaultOrUnformed.impl_witness.52f) [concrete = constants.%DefaultOrUnformed.facet.83f] +// CHECK:STDOUT: %.loc29_26.1: %DefaultOrUnformed.type = converted constants.%Outer, %DefaultOrUnformed.facet.loc29 [concrete = constants.%DefaultOrUnformed.facet.83f] +// CHECK:STDOUT: %as_type.loc29: type = facet_access_type %.loc29_26.1 [concrete = constants.%Outer] +// CHECK:STDOUT: %.loc29_26.2: type = converted %.loc29_26.1, %as_type.loc29 [concrete = constants.%Outer] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.1: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.de4, @T.as.DefaultOrUnformed.impl.Op(constants.%Outer) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn.a30] +// CHECK:STDOUT: %.loc29_7: ref %Outer = splice_block %o.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc29: init %Outer to %.loc29_7 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.1() +// CHECK:STDOUT: assign %o.var, %T.as.DefaultOrUnformed.impl.Op.call.loc29 // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %o: ref %Outer = ref_binding o, %o.var // CHECK:STDOUT: name_binding_decl { @@ -228,6 +269,14 @@ fn F(a: Outer*) { // CHECK:STDOUT: %i.var_patt: %pattern_type.86a = var_pattern %i.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var %i.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc30: %DefaultOrUnformed.type = facet_value constants.%Inner, (constants.%DefaultOrUnformed.impl_witness.994) [concrete = constants.%DefaultOrUnformed.facet.6ba] +// CHECK:STDOUT: %.loc30_26.1: %DefaultOrUnformed.type = converted constants.%Inner, %DefaultOrUnformed.facet.loc30 [concrete = constants.%DefaultOrUnformed.facet.6ba] +// CHECK:STDOUT: %as_type.loc30: type = facet_access_type %.loc30_26.1 [concrete = constants.%Inner] +// CHECK:STDOUT: %.loc30_26.2: type = converted %.loc30_26.1, %as_type.loc30 [concrete = constants.%Inner] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.2: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.da3, @T.as.DefaultOrUnformed.impl.Op(constants.%Inner) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn.14b] +// CHECK:STDOUT: %.loc30_7: ref %Inner = splice_block %i.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc30: init %Inner to %.loc30_7 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.2() +// CHECK:STDOUT: assign %i.var, %T.as.DefaultOrUnformed.impl.Op.call.loc30 // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: %i: ref %Inner = ref_binding i, %i.var // CHECK:STDOUT: %Destroy.Op.bound.loc30: = bound_method %i.var, constants.%Destroy.Op.651ba6.1 @@ -244,6 +293,14 @@ fn F(a: Outer*) { // CHECK:STDOUT: %o.var_patt: %pattern_type.9ae = var_pattern %o.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %o.var: ref %Outer = var %o.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc36: %DefaultOrUnformed.type = facet_value constants.%Outer, (constants.%DefaultOrUnformed.impl_witness.52f) [concrete = constants.%DefaultOrUnformed.facet.83f] +// CHECK:STDOUT: %.loc36_24.1: %DefaultOrUnformed.type = converted constants.%Outer, %DefaultOrUnformed.facet.loc36 [concrete = constants.%DefaultOrUnformed.facet.83f] +// CHECK:STDOUT: %as_type.loc36: type = facet_access_type %.loc36_24.1 [concrete = constants.%Outer] +// CHECK:STDOUT: %.loc36_24.2: type = converted %.loc36_24.1, %as_type.loc36 [concrete = constants.%Outer] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.1: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.de4, @T.as.DefaultOrUnformed.impl.Op(constants.%Outer) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn.a30] +// CHECK:STDOUT: %.loc36_5: ref %Outer = splice_block %o.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc36: init %Outer to %.loc36_5 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.1() +// CHECK:STDOUT: assign %o.var, %T.as.DefaultOrUnformed.impl.Op.call.loc36 // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %o: ref %Outer = ref_binding o, %o.var // CHECK:STDOUT: name_binding_decl { @@ -251,6 +308,14 @@ fn F(a: Outer*) { // CHECK:STDOUT: %i.var_patt: %pattern_type.86a = var_pattern %i.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var %i.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc37: %DefaultOrUnformed.type = facet_value constants.%Inner, (constants.%DefaultOrUnformed.impl_witness.994) [concrete = constants.%DefaultOrUnformed.facet.6ba] +// CHECK:STDOUT: %.loc37_24.1: %DefaultOrUnformed.type = converted constants.%Inner, %DefaultOrUnformed.facet.loc37 [concrete = constants.%DefaultOrUnformed.facet.6ba] +// CHECK:STDOUT: %as_type.loc37: type = facet_access_type %.loc37_24.1 [concrete = constants.%Inner] +// CHECK:STDOUT: %.loc37_24.2: type = converted %.loc37_24.1, %as_type.loc37 [concrete = constants.%Inner] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn.2: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.da3, @T.as.DefaultOrUnformed.impl.Op(constants.%Inner) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn.14b] +// CHECK:STDOUT: %.loc37_5: ref %Inner = splice_block %i.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc37: init %Inner to %.loc37_5 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.2() +// CHECK:STDOUT: assign %i.var, %T.as.DefaultOrUnformed.impl.Op.call.loc37 // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: %i: ref %Inner = ref_binding i, %i.var // CHECK:STDOUT: %Destroy.Op.bound.loc37: = bound_method %i.var, constants.%Destroy.Op.651ba6.1 diff --git a/toolchain/check/testdata/class/nested_name.carbon b/toolchain/check/testdata/class/nested_name.carbon index 41b95da1a1f0..26d08c5ee93b 100644 --- a/toolchain/check/testdata/class/nested_name.carbon +++ b/toolchain/check/testdata/class/nested_name.carbon @@ -50,6 +50,7 @@ fn G(o: Outer) { // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.824: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.9b9: %Int.as.Copy.impl.Op.type.824 = struct_value () [symbolic] +// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Copy.impl_witness.f17: = impl_witness imports.%Copy.impl_witness_table.e76, @Int.as.Copy.impl(%int_32) [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.546: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%int_32) [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.664: %Int.as.Copy.impl.Op.type.546 = struct_value () [concrete] @@ -60,6 +61,14 @@ fn G(o: Outer) { // CHECK:STDOUT: %pattern_type.9ae: type = pattern_type %Outer [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.994: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%Inner) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.036: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Inner) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.da3: %T.as.DefaultOrUnformed.impl.Op.type.036 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %Inner, (%DefaultOrUnformed.impl_witness.994) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.da3, @T.as.DefaultOrUnformed.impl.Op(%Inner) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -69,6 +78,7 @@ fn G(o: Outer) { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Copy = %Core.Copy +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... @@ -77,6 +87,9 @@ fn G(o: Outer) { // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.18d: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.824) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.9b9)] // CHECK:STDOUT: %Copy.impl_witness_table.e76 = impl_witness_table (%Core.import_ref.18d), @Int.as.Copy.impl [concrete] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -158,7 +171,15 @@ fn G(o: Outer) { // CHECK:STDOUT: %i.var_patt: %pattern_type.86a = var_pattern %i.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var %i.var_patt -// CHECK:STDOUT: %.loc26: type = splice_block %Inner.ref [concrete = constants.%Inner] { +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Inner, (constants.%DefaultOrUnformed.impl_witness.994) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc26_24.1: %DefaultOrUnformed.type = converted constants.%Inner, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc26_24.1 [concrete = constants.%Inner] +// CHECK:STDOUT: %.loc26_24.2: type = converted %.loc26_24.1, %as_type [concrete = constants.%Inner] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.da3, @T.as.DefaultOrUnformed.impl.Op(constants.%Inner) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc26_3: ref %Inner = splice_block %i.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %Inner to %.loc26_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %i.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc26_18: type = splice_block %Inner.ref [concrete = constants.%Inner] { // CHECK:STDOUT: %o.ref: %Outer = name_ref o, %o // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/self/raw_self_type.carbon b/toolchain/check/testdata/class/self/raw_self_type.carbon index aff4004f8b22..b4cc8a2e8a92 100644 --- a/toolchain/check/testdata/class/self/raw_self_type.carbon +++ b/toolchain/check/testdata/class/self/raw_self_type.carbon @@ -38,8 +38,16 @@ fn MemberNamedSelf.F(unused x: Self, unused y: r#Self) {} // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.8e5: type = ptr_type %Class [concrete] // CHECK:STDOUT: %pattern_type.018: type = pattern_type %ptr.8e5 [concrete] -// CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.5ad: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%ptr.8e5) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.e77: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%ptr.8e5) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.d9e: %T.as.DefaultOrUnformed.impl.Op.type.e77 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %ptr.8e5, (%DefaultOrUnformed.impl_witness.5ad) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.d9e, @T.as.DefaultOrUnformed.impl.Op(%ptr.8e5) [concrete] +// CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.2d4: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.74e: %ptr.as.Copy.impl.Op.type.2d4 = struct_value () [symbolic] // CHECK:STDOUT: %Copy.impl_witness.9d3: = impl_witness imports.%Copy.impl_witness_table.c3a, @ptr.as.Copy.impl(%Class) [concrete] @@ -62,11 +70,15 @@ fn MemberNamedSelf.F(unused x: Self, unused y: r#Self) {} // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.203: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.2d4) = import_ref Core//prelude/parts/copy, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.74e)] // CHECK:STDOUT: %Copy.impl_witness_table.c3a = impl_witness_table (%Core.import_ref.203), @ptr.as.Copy.impl [concrete] @@ -146,7 +158,14 @@ fn MemberNamedSelf.F(unused x: Self, unused y: r#Self) {} // CHECK:STDOUT: %Self.var_patt: %pattern_type.018 = var_pattern %Self.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %Self.var: ref %ptr.8e5 = var %Self.var_patt -// CHECK:STDOUT: %.loc17: type = splice_block %ptr.loc17 [concrete = constants.%ptr.8e5] { +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%ptr.8e5, (constants.%DefaultOrUnformed.impl_witness.5ad) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc17_22.1: %DefaultOrUnformed.type = converted constants.%ptr.8e5, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc17_22.1 [concrete = constants.%ptr.8e5] +// CHECK:STDOUT: %.loc17_22.2: type = converted %.loc17_22.1, %as_type [concrete = constants.%ptr.8e5] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.d9e, @T.as.DefaultOrUnformed.impl.Op(constants.%ptr.8e5) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %ptr.8e5 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %Self.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc17_21: type = splice_block %ptr.loc17 [concrete = constants.%ptr.8e5] { // CHECK:STDOUT: %Self.ref.loc17: type = name_ref Self, constants.%Class [concrete = constants.%Class] // CHECK:STDOUT: %ptr.loc17: type = ptr_type %Self.ref.loc17 [concrete = constants.%ptr.8e5] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/self/self_type.carbon b/toolchain/check/testdata/class/self/self_type.carbon index 88d543373c65..1c0015e5ae7c 100644 --- a/toolchain/check/testdata/class/self/self_type.carbon +++ b/toolchain/check/testdata/class/self/self_type.carbon @@ -46,8 +46,16 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %ptr.8e5 [concrete] // CHECK:STDOUT: %struct_type.p: type = struct_type {.p: %ptr.8e5} [concrete] // CHECK:STDOUT: %complete_type.141: = complete_type_witness %struct_type.p [concrete] -// CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6ca: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%Class) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.3d0: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Class) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.cda: %T.as.DefaultOrUnformed.impl.Op.type.3d0 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %Class, (%DefaultOrUnformed.impl_witness.6ca) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.cda, @T.as.DefaultOrUnformed.impl.Op(%Class) [concrete] +// CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.2d4: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.74e: %ptr.as.Copy.impl.Op.type.2d4 = struct_value () [symbolic] // CHECK:STDOUT: %Copy.impl_witness.9d3: = impl_witness imports.%Copy.impl_witness_table.c3a, @ptr.as.Copy.impl(%Class) [concrete] @@ -62,11 +70,15 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.203: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.2d4) = import_ref Core//prelude/parts/copy, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.74e)] // CHECK:STDOUT: %Copy.impl_witness_table.c3a = impl_witness_table (%Core.import_ref.203), @ptr.as.Copy.impl [concrete] @@ -115,7 +127,7 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: %return.param_patt: %pattern_type.904 = out_param_pattern %return.patt [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc17: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %.loc17: Core.Form = init_form %Self.ref.loc17 [concrete = constants.%.cff] +// CHECK:STDOUT: %.loc17_16.2: Core.Form = init_form %Self.ref.loc17 [concrete = constants.%.cff] // CHECK:STDOUT: %return.param: ref %Class = out_param call_param0 // CHECK:STDOUT: %return: ref %Class = return_slot %return.param // CHECK:STDOUT: } @@ -152,6 +164,14 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: %s.patt: %pattern_type.904 = ref_binding_pattern s [concrete] // CHECK:STDOUT: %s.var_patt: %pattern_type.904 = var_pattern %s.patt [concrete] // CHECK:STDOUT: } +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Class, (constants.%DefaultOrUnformed.impl_witness.6ca) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc18_25.1: %DefaultOrUnformed.type = converted constants.%Class, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc18_25.1 [concrete = constants.%Class] +// CHECK:STDOUT: %.loc18_25.2: type = converted %.loc18_25.1, %as_type [concrete = constants.%Class] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.cda, @T.as.DefaultOrUnformed.impl.Op(constants.%Class) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc17_16.1: ref %Class = splice_block %return.param {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %Class to %.loc17_16.1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %return.param, %T.as.DefaultOrUnformed.impl.Op.call // CHECK:STDOUT: %Self.ref.loc18: type = name_ref Self, constants.%Class [concrete = constants.%Class] // CHECK:STDOUT: %s: ref %Class = ref_binding s, %return.param // CHECK:STDOUT: %s.ref.loc19_5: ref %Class = name_ref s, %s diff --git a/toolchain/check/testdata/eval/aggregates.carbon b/toolchain/check/testdata/eval/aggregates.carbon index d6858c00db62..bd785e1352ac 100644 --- a/toolchain/check/testdata/eval/aggregates.carbon +++ b/toolchain/check/testdata/eval/aggregates.carbon @@ -492,13 +492,35 @@ fn G(N:! i32) { // CHECK:STDOUT: %tuple.type.3c8: type = tuple_type (%ptr.e8f, %const) [symbolic] // CHECK:STDOUT: %require_complete.666: = require_complete_type %tuple.type.3c8 [symbolic] // CHECK:STDOUT: %pattern_type.4ac: type = pattern_type %tuple.type.3c8 [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %.f7e: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%tuple.type.3c8) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.2ad: = lookup_impl_witness %tuple.type.3c8, @DefaultOrUnformed [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.facet.9a0: %DefaultOrUnformed.type = facet_value %tuple.type.3c8, (%DefaultOrUnformed.lookup_impl_witness.2ad) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.0af: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.9a0) [symbolic] +// CHECK:STDOUT: %.246: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type.0af, %DefaultOrUnformed.facet.9a0 [symbolic] +// CHECK:STDOUT: %impl.elem0.c6f: %.246 = impl_witness_access %DefaultOrUnformed.lookup_impl_witness.2ad, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.58b: = specific_impl_function %impl.elem0.c6f, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.9a0) [symbolic] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %T} [symbolic] // CHECK:STDOUT: %require_complete.5d6: = require_complete_type %struct_type.a [symbolic] // CHECK:STDOUT: %pattern_type.7b9: type = pattern_type %struct_type.a [symbolic] +// CHECK:STDOUT: %.d26: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%struct_type.a) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.169: = lookup_impl_witness %struct_type.a, @DefaultOrUnformed [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.facet.ca5: %DefaultOrUnformed.type = facet_value %struct_type.a, (%DefaultOrUnformed.lookup_impl_witness.169) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.0c5: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.ca5) [symbolic] +// CHECK:STDOUT: %.9ac: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type.0c5, %DefaultOrUnformed.facet.ca5 [symbolic] +// CHECK:STDOUT: %impl.elem0.e9c: %.9ac = impl_witness_access %DefaultOrUnformed.lookup_impl_witness.169, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.cf6: = specific_impl_function %impl.elem0.e9c, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.ca5) [symbolic] // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %array_type.742: type = array_type %int_5, %T [symbolic] // CHECK:STDOUT: %require_complete.345: = require_complete_type %array_type.742 [symbolic] // CHECK:STDOUT: %pattern_type.d52: type = pattern_type %array_type.742 [symbolic] +// CHECK:STDOUT: %.617: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%array_type.742) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.945: = lookup_impl_witness %array_type.742, @DefaultOrUnformed [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.facet.ad6: %DefaultOrUnformed.type = facet_value %array_type.742, (%DefaultOrUnformed.lookup_impl_witness.945) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.2f0: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.ad6) [symbolic] +// CHECK:STDOUT: %.544: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type.2f0, %DefaultOrUnformed.facet.ad6 [symbolic] +// CHECK:STDOUT: %impl.elem0.97e: %.544 = impl_witness_access %DefaultOrUnformed.lookup_impl_witness.945, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.261: = specific_impl_function %impl.elem0.97e, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.ad6) [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness.b29: = lookup_impl_witness %array_type.742, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.ddc: %Destroy.type = facet_value %array_type.742, (%Destroy.lookup_impl_witness.b29) [symbolic] @@ -538,6 +560,13 @@ fn G(N:! i32) { // CHECK:STDOUT: %array_type.2ec: type = array_type %Int.as.ImplicitAs.impl.Convert.call, %i32 [symbolic] // CHECK:STDOUT: %require_complete.5d1: = require_complete_type %array_type.2ec [symbolic] // CHECK:STDOUT: %pattern_type.99c: type = pattern_type %array_type.2ec [symbolic] +// CHECK:STDOUT: %.d6f: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%array_type.2ec) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.162: = lookup_impl_witness %array_type.2ec, @DefaultOrUnformed [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.facet.0c7: %DefaultOrUnformed.type = facet_value %array_type.2ec, (%DefaultOrUnformed.lookup_impl_witness.162) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.839: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.0c7) [symbolic] +// CHECK:STDOUT: %.78e: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type.839, %DefaultOrUnformed.facet.0c7 [symbolic] +// CHECK:STDOUT: %impl.elem0.82a: %.78e = impl_witness_access %DefaultOrUnformed.lookup_impl_witness.162, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.fcf: = specific_impl_function %impl.elem0.82a, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.0c7) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.f5c: = lookup_impl_witness %array_type.2ec, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.d1e: %Destroy.type = facet_value %array_type.2ec, (%Destroy.lookup_impl_witness.f5c) [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ff9: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.d1e) [symbolic] @@ -561,17 +590,38 @@ fn G(N:! i32) { // CHECK:STDOUT: %tuple.type: type = tuple_type (%ptr.loc6_19.2, %const.loc6_22.2) [symbolic = %tuple.type (constants.%tuple.type.3c8)] // CHECK:STDOUT: %require_complete.loc6: = require_complete_type %tuple.type [symbolic = %require_complete.loc6 (constants.%require_complete.666)] // CHECK:STDOUT: %pattern_type.loc6: type = pattern_type %tuple.type [symbolic = %pattern_type.loc6 (constants.%pattern_type.4ac)] +// CHECK:STDOUT: %.loc6_30.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%tuple.type) [symbolic = %.loc6_30.3 (constants.%.f7e)] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.loc6: = lookup_impl_witness %tuple.type, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness.loc6 (constants.%DefaultOrUnformed.lookup_impl_witness.2ad)] +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc6_30.2: %DefaultOrUnformed.type = facet_value %tuple.type, (%DefaultOrUnformed.lookup_impl_witness.loc6) [symbolic = %DefaultOrUnformed.facet.loc6_30.2 (constants.%DefaultOrUnformed.facet.9a0)] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.loc6: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.loc6_30.2) [symbolic = %DefaultOrUnformed.WithSelf.Op.type.loc6 (constants.%DefaultOrUnformed.WithSelf.Op.type.0af)] +// CHECK:STDOUT: %.loc6_30.4: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type.loc6, %DefaultOrUnformed.facet.loc6_30.2 [symbolic = %.loc6_30.4 (constants.%.246)] +// CHECK:STDOUT: %impl.elem0.loc6_30.2: @F.%.loc6_30.4 (%.246) = impl_witness_access %DefaultOrUnformed.lookup_impl_witness.loc6, element0 [symbolic = %impl.elem0.loc6_30.2 (constants.%impl.elem0.c6f)] +// CHECK:STDOUT: %specific_impl_fn.loc6_30.2: = specific_impl_function %impl.elem0.loc6_30.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc6_30.2) [symbolic = %specific_impl_fn.loc6_30.2 (constants.%specific_impl_fn.58b)] // CHECK:STDOUT: %struct_type.a.loc7_23.2: type = struct_type {.a: @F.%T.loc4_6.1 (%T)} [symbolic = %struct_type.a.loc7_23.2 (constants.%struct_type.a)] // CHECK:STDOUT: %require_complete.loc7: = require_complete_type %struct_type.a.loc7_23.2 [symbolic = %require_complete.loc7 (constants.%require_complete.5d6)] // CHECK:STDOUT: %pattern_type.loc7: type = pattern_type %struct_type.a.loc7_23.2 [symbolic = %pattern_type.loc7 (constants.%pattern_type.7b9)] +// CHECK:STDOUT: %.loc7_24.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%struct_type.a.loc7_23.2) [symbolic = %.loc7_24.3 (constants.%.d26)] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.loc7: = lookup_impl_witness %struct_type.a.loc7_23.2, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness.loc7 (constants.%DefaultOrUnformed.lookup_impl_witness.169)] +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc7_24.2: %DefaultOrUnformed.type = facet_value %struct_type.a.loc7_23.2, (%DefaultOrUnformed.lookup_impl_witness.loc7) [symbolic = %DefaultOrUnformed.facet.loc7_24.2 (constants.%DefaultOrUnformed.facet.ca5)] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.loc7: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.loc7_24.2) [symbolic = %DefaultOrUnformed.WithSelf.Op.type.loc7 (constants.%DefaultOrUnformed.WithSelf.Op.type.0c5)] +// CHECK:STDOUT: %.loc7_24.4: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type.loc7, %DefaultOrUnformed.facet.loc7_24.2 [symbolic = %.loc7_24.4 (constants.%.9ac)] +// CHECK:STDOUT: %impl.elem0.loc7_24.2: @F.%.loc7_24.4 (%.9ac) = impl_witness_access %DefaultOrUnformed.lookup_impl_witness.loc7, element0 [symbolic = %impl.elem0.loc7_24.2 (constants.%impl.elem0.e9c)] +// CHECK:STDOUT: %specific_impl_fn.loc7_24.2: = specific_impl_function %impl.elem0.loc7_24.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc7_24.2) [symbolic = %specific_impl_fn.loc7_24.2 (constants.%specific_impl_fn.cf6)] // CHECK:STDOUT: %array_type.loc8_27.2: type = array_type constants.%int_5, %T.loc4_6.1 [symbolic = %array_type.loc8_27.2 (constants.%array_type.742)] // CHECK:STDOUT: %require_complete.loc8: = require_complete_type %array_type.loc8_27.2 [symbolic = %require_complete.loc8 (constants.%require_complete.345)] // CHECK:STDOUT: %pattern_type.loc8: type = pattern_type %array_type.loc8_27.2 [symbolic = %pattern_type.loc8 (constants.%pattern_type.d52)] +// CHECK:STDOUT: %.loc8_28.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%array_type.loc8_27.2) [symbolic = %.loc8_28.3 (constants.%.617)] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness.loc8: = lookup_impl_witness %array_type.loc8_27.2, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness.loc8 (constants.%DefaultOrUnformed.lookup_impl_witness.945)] +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8_28.2: %DefaultOrUnformed.type = facet_value %array_type.loc8_27.2, (%DefaultOrUnformed.lookup_impl_witness.loc8) [symbolic = %DefaultOrUnformed.facet.loc8_28.2 (constants.%DefaultOrUnformed.facet.ad6)] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.loc8: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.loc8_28.2) [symbolic = %DefaultOrUnformed.WithSelf.Op.type.loc8 (constants.%DefaultOrUnformed.WithSelf.Op.type.2f0)] +// CHECK:STDOUT: %.loc8_28.4: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type.loc8, %DefaultOrUnformed.facet.loc8_28.2 [symbolic = %.loc8_28.4 (constants.%.544)] +// CHECK:STDOUT: %impl.elem0.loc8_28.2: @F.%.loc8_28.4 (%.544) = impl_witness_access %DefaultOrUnformed.lookup_impl_witness.loc8, element0 [symbolic = %impl.elem0.loc8_28.2 (constants.%impl.elem0.97e)] +// CHECK:STDOUT: %specific_impl_fn.loc8_28.2: = specific_impl_function %impl.elem0.loc8_28.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc8_28.2) [symbolic = %specific_impl_fn.loc8_28.2 (constants.%specific_impl_fn.261)] // CHECK:STDOUT: %Destroy.lookup_impl_witness.loc8: = lookup_impl_witness %array_type.loc8_27.2, @Destroy [symbolic = %Destroy.lookup_impl_witness.loc8 (constants.%Destroy.lookup_impl_witness.b29)] // CHECK:STDOUT: %Destroy.facet.loc8: %Destroy.type = facet_value %array_type.loc8_27.2, (%Destroy.lookup_impl_witness.loc8) [symbolic = %Destroy.facet.loc8 (constants.%Destroy.facet.ddc)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.loc8: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc8) [symbolic = %Destroy.WithSelf.Op.type.loc8 (constants.%Destroy.WithSelf.Op.type.3c6)] -// CHECK:STDOUT: %.loc8_3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.loc8, %Destroy.facet.loc8 [symbolic = %.loc8_3 (constants.%.950)] -// CHECK:STDOUT: %impl.elem0.loc8_3.2: @F.%.loc8_3 (%.950) = impl_witness_access %Destroy.lookup_impl_witness.loc8, element0 [symbolic = %impl.elem0.loc8_3.2 (constants.%impl.elem0.fa5)] +// CHECK:STDOUT: %.loc8_3.2: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.loc8, %Destroy.facet.loc8 [symbolic = %.loc8_3.2 (constants.%.950)] +// CHECK:STDOUT: %impl.elem0.loc8_3.2: @F.%.loc8_3.2 (%.950) = impl_witness_access %Destroy.lookup_impl_witness.loc8, element0 [symbolic = %impl.elem0.loc8_3.2 (constants.%impl.elem0.fa5)] // CHECK:STDOUT: %specific_impl_fn.loc8_3.2: = specific_impl_function %impl.elem0.loc8_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc8) [symbolic = %specific_impl_fn.loc8_3.2 (constants.%specific_impl_fn.ede)] // CHECK:STDOUT: %Destroy.lookup_impl_witness.loc7: = lookup_impl_witness %struct_type.a.loc7_23.2, @Destroy [symbolic = %Destroy.lookup_impl_witness.loc7 (constants.%Destroy.lookup_impl_witness.bed)] // CHECK:STDOUT: %Destroy.facet.loc7: %Destroy.type = facet_value %struct_type.a.loc7_23.2, (%Destroy.lookup_impl_witness.loc7) [symbolic = %Destroy.facet.loc7 (constants.%Destroy.facet.d21)] @@ -582,8 +632,8 @@ fn G(N:! i32) { // CHECK:STDOUT: %Destroy.lookup_impl_witness.loc6: = lookup_impl_witness %tuple.type, @Destroy [symbolic = %Destroy.lookup_impl_witness.loc6 (constants.%Destroy.lookup_impl_witness.7eb)] // CHECK:STDOUT: %Destroy.facet.loc6: %Destroy.type = facet_value %tuple.type, (%Destroy.lookup_impl_witness.loc6) [symbolic = %Destroy.facet.loc6 (constants.%Destroy.facet.66d)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.loc6: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc6) [symbolic = %Destroy.WithSelf.Op.type.loc6 (constants.%Destroy.WithSelf.Op.type.f23)] -// CHECK:STDOUT: %.loc6_3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.loc6, %Destroy.facet.loc6 [symbolic = %.loc6_3 (constants.%.f20)] -// CHECK:STDOUT: %impl.elem0.loc6_3.2: @F.%.loc6_3 (%.f20) = impl_witness_access %Destroy.lookup_impl_witness.loc6, element0 [symbolic = %impl.elem0.loc6_3.2 (constants.%impl.elem0.f5f)] +// CHECK:STDOUT: %.loc6_3.2: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.loc6, %Destroy.facet.loc6 [symbolic = %.loc6_3.2 (constants.%.f20)] +// CHECK:STDOUT: %impl.elem0.loc6_3.2: @F.%.loc6_3.2 (%.f20) = impl_witness_access %Destroy.lookup_impl_witness.loc6, element0 [symbolic = %impl.elem0.loc6_3.2 (constants.%impl.elem0.f5f)] // CHECK:STDOUT: %specific_impl_fn.loc6_3.2: = specific_impl_function %impl.elem0.loc6_3.2, @Destroy.WithSelf.Op(%Destroy.facet.loc6) [symbolic = %specific_impl_fn.loc6_3.2 (constants.%specific_impl_fn.87c)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { @@ -593,6 +643,15 @@ fn G(N:! i32) { // CHECK:STDOUT: %u.var_patt: @F.%pattern_type.loc6 (%pattern_type.4ac) = var_pattern %u.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %u.var: ref @F.%tuple.type (%tuple.type.3c8) = var %u.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc6_30.1: %DefaultOrUnformed.type = facet_value constants.%tuple.type.3c8, (constants.%DefaultOrUnformed.lookup_impl_witness.2ad) [symbolic = %DefaultOrUnformed.facet.loc6_30.2 (constants.%DefaultOrUnformed.facet.9a0)] +// CHECK:STDOUT: %.loc6_30.1: %DefaultOrUnformed.type = converted constants.%tuple.type.3c8, %DefaultOrUnformed.facet.loc6_30.1 [symbolic = %DefaultOrUnformed.facet.loc6_30.2 (constants.%DefaultOrUnformed.facet.9a0)] +// CHECK:STDOUT: %as_type.loc6: type = facet_access_type %.loc6_30.1 [symbolic = %tuple.type (constants.%tuple.type.3c8)] +// CHECK:STDOUT: %.loc6_30.2: type = converted %.loc6_30.1, %as_type.loc6 [symbolic = %tuple.type (constants.%tuple.type.3c8)] +// CHECK:STDOUT: %impl.elem0.loc6_30.1: @F.%.loc6_30.4 (%.246) = impl_witness_access constants.%DefaultOrUnformed.lookup_impl_witness.2ad, element0 [symbolic = %impl.elem0.loc6_30.2 (constants.%impl.elem0.c6f)] +// CHECK:STDOUT: %specific_impl_fn.loc6_30.1: = specific_impl_function %impl.elem0.loc6_30.1, @DefaultOrUnformed.WithSelf.Op(constants.%DefaultOrUnformed.facet.9a0) [symbolic = %specific_impl_fn.loc6_30.2 (constants.%specific_impl_fn.58b)] +// CHECK:STDOUT: %.loc6_3.1: ref @F.%tuple.type (%tuple.type.3c8) = splice_block %u.var {} +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.call.loc6: init @F.%tuple.type (%tuple.type.3c8) to %.loc6_3.1 = call %specific_impl_fn.loc6_30.1() +// CHECK:STDOUT: assign %u.var, %DefaultOrUnformed.WithSelf.Op.call.loc6 // CHECK:STDOUT: %.loc6_29.1: type = splice_block %.loc6_29.3 [symbolic = %tuple.type (constants.%tuple.type.3c8)] { // CHECK:STDOUT: %T.ref.loc6_18: type = name_ref T, %T.loc4_6.2 [symbolic = %T.loc4_6.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc6_19.1: type = ptr_type %T.ref.loc6_18 [symbolic = %ptr.loc6_19.2 (constants.%ptr.e8f)] @@ -607,6 +666,14 @@ fn G(N:! i32) { // CHECK:STDOUT: %v.var_patt: @F.%pattern_type.loc7 (%pattern_type.7b9) = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref @F.%struct_type.a.loc7_23.2 (%struct_type.a) = var %v.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc7_24.1: %DefaultOrUnformed.type = facet_value constants.%struct_type.a, (constants.%DefaultOrUnformed.lookup_impl_witness.169) [symbolic = %DefaultOrUnformed.facet.loc7_24.2 (constants.%DefaultOrUnformed.facet.ca5)] +// CHECK:STDOUT: %.loc7_24.1: %DefaultOrUnformed.type = converted constants.%struct_type.a, %DefaultOrUnformed.facet.loc7_24.1 [symbolic = %DefaultOrUnformed.facet.loc7_24.2 (constants.%DefaultOrUnformed.facet.ca5)] +// CHECK:STDOUT: %as_type.loc7: type = facet_access_type %.loc7_24.1 [symbolic = %struct_type.a.loc7_23.2 (constants.%struct_type.a)] +// CHECK:STDOUT: %.loc7_24.2: type = converted %.loc7_24.1, %as_type.loc7 [symbolic = %struct_type.a.loc7_23.2 (constants.%struct_type.a)] +// CHECK:STDOUT: %impl.elem0.loc7_24.1: @F.%.loc7_24.4 (%.9ac) = impl_witness_access constants.%DefaultOrUnformed.lookup_impl_witness.169, element0 [symbolic = %impl.elem0.loc7_24.2 (constants.%impl.elem0.e9c)] +// CHECK:STDOUT: %specific_impl_fn.loc7_24.1: = specific_impl_function %impl.elem0.loc7_24.1, @DefaultOrUnformed.WithSelf.Op(constants.%DefaultOrUnformed.facet.ca5) [symbolic = %specific_impl_fn.loc7_24.2 (constants.%specific_impl_fn.cf6)] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.call.loc7: init @F.%struct_type.a.loc7_23.2 (%struct_type.a) = call %specific_impl_fn.loc7_24.1() +// CHECK:STDOUT: assign %v.var, %DefaultOrUnformed.WithSelf.Op.call.loc7 // CHECK:STDOUT: %.loc7_23: type = splice_block %struct_type.a.loc7_23.1 [symbolic = %struct_type.a.loc7_23.2 (constants.%struct_type.a)] { // CHECK:STDOUT: %T.ref.loc7: type = name_ref T, %T.loc4_6.2 [symbolic = %T.loc4_6.1 (constants.%T)] // CHECK:STDOUT: %struct_type.a.loc7_23.1: type = struct_type {.a: @F.%T.loc4_6.1 (%T)} [symbolic = %struct_type.a.loc7_23.2 (constants.%struct_type.a)] @@ -617,13 +684,22 @@ fn G(N:! i32) { // CHECK:STDOUT: %w.var_patt: @F.%pattern_type.loc8 (%pattern_type.d52) = var_pattern %w.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref @F.%array_type.loc8_27.2 (%array_type.742) = var %w.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8_28.1: %DefaultOrUnformed.type = facet_value constants.%array_type.742, (constants.%DefaultOrUnformed.lookup_impl_witness.945) [symbolic = %DefaultOrUnformed.facet.loc8_28.2 (constants.%DefaultOrUnformed.facet.ad6)] +// CHECK:STDOUT: %.loc8_28.1: %DefaultOrUnformed.type = converted constants.%array_type.742, %DefaultOrUnformed.facet.loc8_28.1 [symbolic = %DefaultOrUnformed.facet.loc8_28.2 (constants.%DefaultOrUnformed.facet.ad6)] +// CHECK:STDOUT: %as_type.loc8: type = facet_access_type %.loc8_28.1 [symbolic = %array_type.loc8_27.2 (constants.%array_type.742)] +// CHECK:STDOUT: %.loc8_28.2: type = converted %.loc8_28.1, %as_type.loc8 [symbolic = %array_type.loc8_27.2 (constants.%array_type.742)] +// CHECK:STDOUT: %impl.elem0.loc8_28.1: @F.%.loc8_28.4 (%.544) = impl_witness_access constants.%DefaultOrUnformed.lookup_impl_witness.945, element0 [symbolic = %impl.elem0.loc8_28.2 (constants.%impl.elem0.97e)] +// CHECK:STDOUT: %specific_impl_fn.loc8_28.1: = specific_impl_function %impl.elem0.loc8_28.1, @DefaultOrUnformed.WithSelf.Op(constants.%DefaultOrUnformed.facet.ad6) [symbolic = %specific_impl_fn.loc8_28.2 (constants.%specific_impl_fn.261)] +// CHECK:STDOUT: %.loc8_3.1: ref @F.%array_type.loc8_27.2 (%array_type.742) = splice_block %w.var {} +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.call.loc8: init @F.%array_type.loc8_27.2 (%array_type.742) to %.loc8_3.1 = call %specific_impl_fn.loc8_28.1() +// CHECK:STDOUT: assign %w.var, %DefaultOrUnformed.WithSelf.Op.call.loc8 // CHECK:STDOUT: %.loc8_27: type = splice_block %array_type.loc8_27.1 [symbolic = %array_type.loc8_27.2 (constants.%array_type.742)] { // CHECK:STDOUT: %T.ref.loc8: type = name_ref T, %T.loc4_6.2 [symbolic = %T.loc4_6.1 (constants.%T)] // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5] // CHECK:STDOUT: %array_type.loc8_27.1: type = array_type %int_5, %T.ref.loc8 [symbolic = %array_type.loc8_27.2 (constants.%array_type.742)] // CHECK:STDOUT: } // CHECK:STDOUT: %w: ref @F.%array_type.loc8_27.2 (%array_type.742) = ref_binding w, %w.var -// CHECK:STDOUT: %impl.elem0.loc8_3.1: @F.%.loc8_3 (%.950) = impl_witness_access constants.%Destroy.lookup_impl_witness.b29, element0 [symbolic = %impl.elem0.loc8_3.2 (constants.%impl.elem0.fa5)] +// CHECK:STDOUT: %impl.elem0.loc8_3.1: @F.%.loc8_3.2 (%.950) = impl_witness_access constants.%Destroy.lookup_impl_witness.b29, element0 [symbolic = %impl.elem0.loc8_3.2 (constants.%impl.elem0.fa5)] // CHECK:STDOUT: %bound_method.loc8_3.1: = bound_method %w.var, %impl.elem0.loc8_3.1 // CHECK:STDOUT: %specific_impl_fn.loc8_3.1: = specific_impl_function %impl.elem0.loc8_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.ddc) [symbolic = %specific_impl_fn.loc8_3.2 (constants.%specific_impl_fn.ede)] // CHECK:STDOUT: %bound_method.loc8_3.2: = bound_method %w.var, %specific_impl_fn.loc8_3.1 @@ -633,7 +709,7 @@ fn G(N:! i32) { // CHECK:STDOUT: %specific_impl_fn.loc7_3.1: = specific_impl_function %impl.elem0.loc7_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.d21) [symbolic = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn.c3a)] // CHECK:STDOUT: %bound_method.loc7_3.2: = bound_method %v.var, %specific_impl_fn.loc7_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call.loc7: init %empty_tuple.type = call %bound_method.loc7_3.2(%v.var) -// CHECK:STDOUT: %impl.elem0.loc6_3.1: @F.%.loc6_3 (%.f20) = impl_witness_access constants.%Destroy.lookup_impl_witness.7eb, element0 [symbolic = %impl.elem0.loc6_3.2 (constants.%impl.elem0.f5f)] +// CHECK:STDOUT: %impl.elem0.loc6_3.1: @F.%.loc6_3.2 (%.f20) = impl_witness_access constants.%Destroy.lookup_impl_witness.7eb, element0 [symbolic = %impl.elem0.loc6_3.2 (constants.%impl.elem0.f5f)] // CHECK:STDOUT: %bound_method.loc6_3.1: = bound_method %u.var, %impl.elem0.loc6_3.1 // CHECK:STDOUT: %specific_impl_fn.loc6_3.1: = specific_impl_function %impl.elem0.loc6_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.66d) [symbolic = %specific_impl_fn.loc6_3.2 (constants.%specific_impl_fn.87c)] // CHECK:STDOUT: %bound_method.loc6_3.2: = bound_method %u.var, %specific_impl_fn.loc6_3.1 @@ -652,11 +728,18 @@ fn G(N:! i32) { // CHECK:STDOUT: %array_type.loc14_29.2: type = array_type %Int.as.ImplicitAs.impl.Convert.call.loc14_28.2, constants.%i32 [symbolic = %array_type.loc14_29.2 (constants.%array_type.2ec)] // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc14_29.2 [symbolic = %require_complete (constants.%require_complete.5d1)] // CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc14_29.2 [symbolic = %pattern_type (constants.%pattern_type.99c)] +// CHECK:STDOUT: %.loc14_30.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%array_type.loc14_29.2) [symbolic = %.loc14_30.3 (constants.%.d6f)] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: = lookup_impl_witness %array_type.loc14_29.2, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness (constants.%DefaultOrUnformed.lookup_impl_witness.162)] +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc14_30.2: %DefaultOrUnformed.type = facet_value %array_type.loc14_29.2, (%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc14_30.2 (constants.%DefaultOrUnformed.facet.0c7)] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.loc14_30.2) [symbolic = %DefaultOrUnformed.WithSelf.Op.type (constants.%DefaultOrUnformed.WithSelf.Op.type.839)] +// CHECK:STDOUT: %.loc14_30.4: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type, %DefaultOrUnformed.facet.loc14_30.2 [symbolic = %.loc14_30.4 (constants.%.78e)] +// CHECK:STDOUT: %impl.elem0.loc14_30.2: @G.%.loc14_30.4 (%.78e) = impl_witness_access %DefaultOrUnformed.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_30.2 (constants.%impl.elem0.82a)] +// CHECK:STDOUT: %specific_impl_fn.loc14_30.2: = specific_impl_function %impl.elem0.loc14_30.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc14_30.2) [symbolic = %specific_impl_fn.loc14_30.2 (constants.%specific_impl_fn.fcf)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %array_type.loc14_29.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.f5c)] // CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %array_type.loc14_29.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.d1e)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.ff9)] -// CHECK:STDOUT: %.loc14_3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet [symbolic = %.loc14_3 (constants.%.63e)] -// CHECK:STDOUT: %impl.elem0.loc14_3.2: @G.%.loc14_3 (%.63e) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_3.2 (constants.%impl.elem0.2bf)] +// CHECK:STDOUT: %.loc14_3.2: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet [symbolic = %.loc14_3.2 (constants.%.63e)] +// CHECK:STDOUT: %impl.elem0.loc14_3.2: @G.%.loc14_3.2 (%.63e) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_3.2 (constants.%impl.elem0.2bf)] // CHECK:STDOUT: %specific_impl_fn.loc14_3.2: = specific_impl_function %impl.elem0.loc14_3.2, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc14_3.2 (constants.%specific_impl_fn.0a5)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { @@ -666,6 +749,15 @@ fn G(N:! i32) { // CHECK:STDOUT: %k.var_patt: @G.%pattern_type (%pattern_type.99c) = var_pattern %k.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %k.var: ref @G.%array_type.loc14_29.2 (%array_type.2ec) = var %k.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc14_30.1: %DefaultOrUnformed.type = facet_value constants.%array_type.2ec, (constants.%DefaultOrUnformed.lookup_impl_witness.162) [symbolic = %DefaultOrUnformed.facet.loc14_30.2 (constants.%DefaultOrUnformed.facet.0c7)] +// CHECK:STDOUT: %.loc14_30.1: %DefaultOrUnformed.type = converted constants.%array_type.2ec, %DefaultOrUnformed.facet.loc14_30.1 [symbolic = %DefaultOrUnformed.facet.loc14_30.2 (constants.%DefaultOrUnformed.facet.0c7)] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc14_30.1 [symbolic = %array_type.loc14_29.2 (constants.%array_type.2ec)] +// CHECK:STDOUT: %.loc14_30.2: type = converted %.loc14_30.1, %as_type [symbolic = %array_type.loc14_29.2 (constants.%array_type.2ec)] +// CHECK:STDOUT: %impl.elem0.loc14_30.1: @G.%.loc14_30.4 (%.78e) = impl_witness_access constants.%DefaultOrUnformed.lookup_impl_witness.162, element0 [symbolic = %impl.elem0.loc14_30.2 (constants.%impl.elem0.82a)] +// CHECK:STDOUT: %specific_impl_fn.loc14_30.1: = specific_impl_function %impl.elem0.loc14_30.1, @DefaultOrUnformed.WithSelf.Op(constants.%DefaultOrUnformed.facet.0c7) [symbolic = %specific_impl_fn.loc14_30.2 (constants.%specific_impl_fn.fcf)] +// CHECK:STDOUT: %.loc14_3.1: ref @G.%array_type.loc14_29.2 (%array_type.2ec) = splice_block %k.var {} +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.call: init @G.%array_type.loc14_29.2 (%array_type.2ec) to %.loc14_3.1 = call %specific_impl_fn.loc14_30.1() +// CHECK:STDOUT: assign %k.var, %DefaultOrUnformed.WithSelf.Op.call // CHECK:STDOUT: %.loc14_29: type = splice_block %array_type.loc14_29.1 [symbolic = %array_type.loc14_29.2 (constants.%array_type.2ec)] { // CHECK:STDOUT: %i32.loc14: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %N.ref: %i32 = name_ref N, %N.loc12_6.2 [symbolic = %N.loc12_6.1 (constants.%N.5de)] @@ -679,7 +771,7 @@ fn G(N:! i32) { // CHECK:STDOUT: %array_type.loc14_29.1: type = array_type %.loc14_28.2, %i32.loc14 [symbolic = %array_type.loc14_29.2 (constants.%array_type.2ec)] // CHECK:STDOUT: } // CHECK:STDOUT: %k: ref @G.%array_type.loc14_29.2 (%array_type.2ec) = ref_binding k, %k.var -// CHECK:STDOUT: %impl.elem0.loc14_3.1: @G.%.loc14_3 (%.63e) = impl_witness_access constants.%Destroy.lookup_impl_witness.f5c, element0 [symbolic = %impl.elem0.loc14_3.2 (constants.%impl.elem0.2bf)] +// CHECK:STDOUT: %impl.elem0.loc14_3.1: @G.%.loc14_3.2 (%.63e) = impl_witness_access constants.%Destroy.lookup_impl_witness.f5c, element0 [symbolic = %impl.elem0.loc14_3.2 (constants.%impl.elem0.2bf)] // CHECK:STDOUT: %bound_method.loc14_3.1: = bound_method %k.var, %impl.elem0.loc14_3.1 // CHECK:STDOUT: %specific_impl_fn.loc14_3.1: = specific_impl_function %impl.elem0.loc14_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.d1e) [symbolic = %specific_impl_fn.loc14_3.2 (constants.%specific_impl_fn.0a5)] // CHECK:STDOUT: %bound_method.loc14_3.2: = bound_method %k.var, %specific_impl_fn.loc14_3.1 diff --git a/toolchain/check/testdata/eval/call.carbon b/toolchain/check/testdata/eval/call.carbon index 4d03af6502ca..73d2d9e388de 100644 --- a/toolchain/check/testdata/eval/call.carbon +++ b/toolchain/check/testdata/eval/call.carbon @@ -99,7 +99,7 @@ fn UseFGenerically(X:! i32) { // CHECK:STDERR: var unused v: F(X) = {}; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_dependent_call_type.carbon:[[@LINE+4]]:3: error: cannot access member of interface `Core.Destroy` in type `` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: fail_todo_dependent_call_type.carbon:[[@LINE+4]]:3: error: cannot access member of interface `Core.Destroy` in type `` that does not implement that interface [MissingImplInMemberAccess] // CHECK:STDERR: var unused v: F(X) = {}; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~ // CHECK:STDERR: diff --git a/toolchain/check/testdata/function/builtin/call.carbon b/toolchain/check/testdata/function/builtin/call.carbon index b1a5c0934758..4103202f90f9 100644 --- a/toolchain/check/testdata/function/builtin/call.carbon +++ b/toolchain/check/testdata/function/builtin/call.carbon @@ -69,6 +69,15 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] // CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.d11: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%array_type) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.576: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%array_type) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.9c0: %T.as.DefaultOrUnformed.impl.Op.type.576 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %array_type, (%DefaultOrUnformed.impl_witness.d11) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.9c0, @T.as.DefaultOrUnformed.impl.Op(%array_type) [concrete] // CHECK:STDOUT: %RuntimeCall.type: type = fn_type @RuntimeCall [concrete] // CHECK:STDOUT: %RuntimeCall: %RuntimeCall.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -77,6 +86,7 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -86,6 +96,9 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.import_ref.0bc: @Int.as.ImplicitAs.impl.%Int.as.ImplicitAs.impl.Convert.type (%Int.as.ImplicitAs.impl.Convert.type.2ed) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.ImplicitAs.impl.%Int.as.ImplicitAs.impl.Convert (constants.%Int.as.ImplicitAs.impl.Convert.d29)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.ea2 = impl_witness_table (%Core.import_ref.0bc), @Int.as.ImplicitAs.impl [concrete] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -184,3 +197,16 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: return %Add.call // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%array_type, (constants.%DefaultOrUnformed.impl_witness.d11) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc17_31.1: %DefaultOrUnformed.type = converted constants.%array_type, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc17_31.1 [concrete = constants.%array_type] +// CHECK:STDOUT: %.loc17_31.2: type = converted %.loc17_31.1, %as_type [concrete = constants.%array_type] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.9c0, @T.as.DefaultOrUnformed.impl.Op(constants.%array_type) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc17_1: ref %array_type = splice_block file.%arr.var [concrete = file.%arr.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %array_type to %.loc17_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%arr.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/builtin/method.carbon b/toolchain/check/testdata/function/builtin/method.carbon index 40372c7c2b07..75bea24f004b 100644 --- a/toolchain/check/testdata/function/builtin/method.carbon +++ b/toolchain/check/testdata/function/builtin/method.carbon @@ -98,6 +98,15 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] // CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.d11: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%array_type) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.576: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%array_type) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.9c0: %T.as.DefaultOrUnformed.impl.Op.type.576 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %array_type, (%DefaultOrUnformed.impl_witness.d11) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.9c0, @T.as.DefaultOrUnformed.impl.Op(%array_type) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -105,6 +114,7 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .As = %Core.As // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -117,6 +127,9 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.import_ref.0bc: @Int.as.ImplicitAs.impl.%Int.as.ImplicitAs.impl.Convert.type (%Int.as.ImplicitAs.impl.Convert.type.2ed) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.ImplicitAs.impl.%Int.as.ImplicitAs.impl.Convert (constants.%Int.as.ImplicitAs.impl.Convert.d29)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.ea2 = impl_witness_table (%Core.import_ref.0bc), @Int.as.ImplicitAs.impl [concrete] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -257,6 +270,19 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: // CHECK:STDOUT: fn @i32.as.I.impl.F(%self.param: %i32, %other.param: %i32) -> out %return.param: %i32 = "int.sadd"; // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%array_type, (constants.%DefaultOrUnformed.impl_witness.d11) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc23_41.1: %DefaultOrUnformed.type = converted constants.%array_type, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc23_41.1 [concrete = constants.%array_type] +// CHECK:STDOUT: %.loc23_41.2: type = converted %.loc23_41.1, %as_type [concrete = constants.%array_type] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.9c0, @T.as.DefaultOrUnformed.impl.Op(constants.%array_type) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc23_1: ref %array_type = splice_block file.%arr.var [concrete = file.%arr.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %array_type to %.loc23_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%arr.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: specific @I.WithSelf(constants.%Self.ab9) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Self => constants.%Self.ab9 diff --git a/toolchain/check/testdata/function/call/ref.carbon b/toolchain/check/testdata/function/call/ref.carbon index 627387e218b1..9eb2b897c7b5 100644 --- a/toolchain/check/testdata/function/call/ref.carbon +++ b/toolchain/check/testdata/function/call/ref.carbon @@ -190,10 +190,21 @@ fn G() { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6fd: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%C) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %C, (%DefaultOrUnformed.impl_witness.6fd) [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} @@ -225,6 +236,14 @@ fn G() { // CHECK:STDOUT: %c.var_patt: %pattern_type.7c7 = var_pattern %c.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%C, (constants.%DefaultOrUnformed.impl_witness.6fd) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc10_11.1: %DefaultOrUnformed.type = converted constants.%C, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc10_11.1 [concrete = constants.%C] +// CHECK:STDOUT: %.loc10_11.2: type = converted %.loc10_11.1, %as_type [concrete = constants.%C] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc10_3: ref %C = splice_block %c.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %C to %.loc10_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %c.var, %T.as.DefaultOrUnformed.impl.Op.call // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = ref_binding c, %c.var // CHECK:STDOUT: %c.ref: ref %C = name_ref c, %c diff --git a/toolchain/check/testdata/function/definition/fail_local_decl.carbon b/toolchain/check/testdata/function/definition/fail_local_decl.carbon index e1f3d34742cb..7240736e5c77 100644 --- a/toolchain/check/testdata/function/definition/fail_local_decl.carbon +++ b/toolchain/check/testdata/function/definition/fail_local_decl.carbon @@ -3,8 +3,6 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/destroy.carbon -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --dump-sem-ir-ranges=if-present // // AUTOUPDATE // TIP: To test this file alone, run: @@ -40,120 +38,13 @@ library "[[@TEST_NAME]]"; fn F() { // CHECK:STDERR: fail_access.carbon:[[@LINE+4]]:3: error: `private` not allowed; requires class or file scope [ModifierPrivateNotAllowed] - // CHECK:STDERR: private var unused v: {}; + // CHECK:STDERR: private var unused v: {} = {}; // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: - private var unused v: {}; + private var unused v: {} = {}; // CHECK:STDERR: fail_access.carbon:[[@LINE+4]]:3: error: `protected` not allowed; requires class scope [ModifierProtectedNotAllowed] - // CHECK:STDERR: protected var unused w: {}; + // CHECK:STDERR: protected var unused w: {} = {}; // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: - protected var unused w: {}; + protected var unused w: {} = {}; } - -// CHECK:STDOUT: --- fail_virtual.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %F.type.117: type = fn_type @F.loc4 [concrete] -// CHECK:STDOUT: %F.d98: %F.type.117 = struct_value () [concrete] -// CHECK:STDOUT: %F.type.21a: type = fn_type @F.loc9 [concrete] -// CHECK:STDOUT: %F.c14: %F.type.21a = struct_value () [concrete] -// CHECK:STDOUT: %G.type: type = fn_type @G [concrete] -// CHECK:STDOUT: %G: %G.type = struct_value () [concrete] -// CHECK:STDOUT: %H.type: type = fn_type @H [concrete] -// CHECK:STDOUT: %H: %H.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: import Core//prelude -// CHECK:STDOUT: import Core//prelude/... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Core = imports.%Core -// CHECK:STDOUT: .F = %F.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %F.decl: %F.type.117 = fn_decl @F.loc4 [concrete = constants.%F.d98] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @F.loc4() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %F.decl: %F.type.21a = fn_decl @F.loc9 [concrete = constants.%F.c14] {} {} -// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} -// CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] {} {} -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @F.loc9(); -// CHECK:STDOUT: -// CHECK:STDOUT: fn @G(); -// CHECK:STDOUT: -// CHECK:STDOUT: fn @H(); -// CHECK:STDOUT: -// CHECK:STDOUT: --- fail_access.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] -// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy -// CHECK:STDOUT: import Core//prelude -// CHECK:STDOUT: import Core//prelude/... -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Core = imports.%Core -// CHECK:STDOUT: .F = %F.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @F() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type.a96 = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type.a96 = var_pattern %v.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %v.var: ref %empty_struct_type = var %v.var_patt -// CHECK:STDOUT: %.loc9_26.1: type = splice_block %.loc9_26.3 [concrete = constants.%empty_struct_type] { -// CHECK:STDOUT: %.loc9_26.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc9_26.3: type = converted %.loc9_26.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %v: ref %empty_struct_type = ref_binding v, %v.var -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %pattern_type.a96 = ref_binding_pattern w [concrete] -// CHECK:STDOUT: %w.var_patt: %pattern_type.a96 = var_pattern %w.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %w.var: ref %empty_struct_type = var %w.var_patt -// CHECK:STDOUT: %.loc14_28.1: type = splice_block %.loc14_28.3 [concrete = constants.%empty_struct_type] { -// CHECK:STDOUT: %.loc14_28.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc14_28.3: type = converted %.loc14_28.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %w: ref %empty_struct_type = ref_binding w, %w.var -// CHECK:STDOUT: %Destroy.Op.bound.loc14: = bound_method %w.var, constants.%Destroy.Op -// CHECK:STDOUT: %Destroy.Op.call.loc14: init %empty_tuple.type = call %Destroy.Op.bound.loc14(%w.var) -// CHECK:STDOUT: %Destroy.Op.bound.loc9: = bound_method %v.var, constants.%Destroy.Op -// CHECK:STDOUT: %Destroy.Op.call.loc9: init %empty_tuple.type = call %Destroy.Op.bound.loc9(%v.var) -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %empty_struct_type) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/resolve_used.carbon b/toolchain/check/testdata/function/generic/resolve_used.carbon index 4d45f512fea7..3aa8bff93735 100644 --- a/toolchain/check/testdata/function/generic/resolve_used.carbon +++ b/toolchain/check/testdata/function/generic/resolve_used.carbon @@ -55,13 +55,24 @@ fn CallNegative() { // CHECK:STDOUT: %Int: type = class_type @Int, @Int(%N) [symbolic] // CHECK:STDOUT: %require_complete.901: = require_complete_type %Int [symbolic] // CHECK:STDOUT: %pattern_type.764: type = pattern_type %Int [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %.4a9: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%Int) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: = lookup_impl_witness %Int, @DefaultOrUnformed [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.facet.c82: %DefaultOrUnformed.type = facet_value %Int, (%DefaultOrUnformed.lookup_impl_witness) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.814: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.c82) [symbolic] +// CHECK:STDOUT: %.ca4: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type.814, %DefaultOrUnformed.facet.c82 [symbolic] +// CHECK:STDOUT: %impl.elem0.12f: %.ca4 = impl_witness_access %DefaultOrUnformed.lookup_impl_witness, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.f0d: = specific_impl_function %impl.elem0.12f, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.c82) [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Int, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.1c0: %Destroy.type = facet_value %Int, (%Destroy.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.297: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.1c0) [symbolic] // CHECK:STDOUT: %.e63: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.297, %Destroy.facet.1c0 [symbolic] -// CHECK:STDOUT: %impl.elem0: %.e63 = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic] -// CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @Destroy.WithSelf.Op(%Destroy.facet.1c0) [symbolic] +// CHECK:STDOUT: %impl.elem0.602: %.e63 = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.d65: = specific_impl_function %impl.elem0.602, @Destroy.WithSelf.Op(%Destroy.facet.1c0) [symbolic] // CHECK:STDOUT: %CallNegative.type: type = fn_type @CallNegative [concrete] // CHECK:STDOUT: %CallNegative: %CallNegative.type = struct_value () [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -69,6 +80,14 @@ fn CallNegative() { // CHECK:STDOUT: %i0: type = class_type @Int, @Int(%int_0) [concrete] // CHECK:STDOUT: %complete_type.d94: = complete_type_witness [concrete] // CHECK:STDOUT: %pattern_type.47b: type = pattern_type %i0 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.879: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%i0) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.7ec: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%i0) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.5b7: %T.as.DefaultOrUnformed.impl.Op.type.7ec = struct_value () [concrete] +// CHECK:STDOUT: %.d6a: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%i0) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.255: %DefaultOrUnformed.type = facet_value %i0, (%DefaultOrUnformed.impl_witness.879) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.bd6: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.255) [concrete] +// CHECK:STDOUT: %.639: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type.bd6, %DefaultOrUnformed.facet.255 [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.5b7, @T.as.DefaultOrUnformed.impl.Op(%i0) [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.8d7: = custom_witness (%Destroy.Op), @Destroy [concrete] @@ -81,12 +100,16 @@ fn CallNegative() { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .IntLiteral = %Core.IntLiteral // CHECK:STDOUT: .Int = %Core.Int +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.IntLiteral: %IntLiteral.type = import_ref Core//prelude/parts/int_literal, IntLiteral, loaded [concrete = constants.%IntLiteral] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -120,12 +143,19 @@ fn CallNegative() { // CHECK:STDOUT: %Int.loc9_27.2: type = class_type @Int, @Int(%N.loc4_19.1) [symbolic = %Int.loc9_27.2 (constants.%Int)] // CHECK:STDOUT: %require_complete: = require_complete_type %Int.loc9_27.2 [symbolic = %require_complete (constants.%require_complete.901)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Int.loc9_27.2 [symbolic = %pattern_type (constants.%pattern_type.764)] +// CHECK:STDOUT: %.loc9_28.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%Int.loc9_27.2) [symbolic = %.loc9_28.3 (constants.%.4a9)] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: = lookup_impl_witness %Int.loc9_27.2, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness (constants.%DefaultOrUnformed.lookup_impl_witness)] +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc9_28.2: %DefaultOrUnformed.type = facet_value %Int.loc9_27.2, (%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc9_28.2 (constants.%DefaultOrUnformed.facet.c82)] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.loc9_28.2) [symbolic = %DefaultOrUnformed.WithSelf.Op.type (constants.%DefaultOrUnformed.WithSelf.Op.type.814)] +// CHECK:STDOUT: %.loc9_28.4: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type, %DefaultOrUnformed.facet.loc9_28.2 [symbolic = %.loc9_28.4 (constants.%.ca4)] +// CHECK:STDOUT: %impl.elem0.loc9_28.2: @ErrorIfNIsZero.%.loc9_28.4 (%.ca4) = impl_witness_access %DefaultOrUnformed.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_28.2 (constants.%impl.elem0.12f)] +// CHECK:STDOUT: %specific_impl_fn.loc9_28.2: = specific_impl_function %impl.elem0.loc9_28.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc9_28.2) [symbolic = %specific_impl_fn.loc9_28.2 (constants.%specific_impl_fn.f0d)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Int.loc9_27.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] // CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %Int.loc9_27.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.1c0)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.297)] // CHECK:STDOUT: %.loc9_3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet [symbolic = %.loc9_3 (constants.%.e63)] -// CHECK:STDOUT: %impl.elem0.loc9_3.2: @ErrorIfNIsZero.%.loc9_3 (%.e63) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_3.2 (constants.%impl.elem0)] -// CHECK:STDOUT: %specific_impl_fn.loc9_3.2: = specific_impl_function %impl.elem0.loc9_3.2, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc9_3.2 (constants.%specific_impl_fn)] +// CHECK:STDOUT: %impl.elem0.loc9_3.2: @ErrorIfNIsZero.%.loc9_3 (%.e63) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_3.2 (constants.%impl.elem0.602)] +// CHECK:STDOUT: %specific_impl_fn.loc9_3.2: = specific_impl_function %impl.elem0.loc9_3.2, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc9_3.2 (constants.%specific_impl_fn.d65)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: @@ -134,6 +164,14 @@ fn CallNegative() { // CHECK:STDOUT: %v.var_patt: @ErrorIfNIsZero.%pattern_type (%pattern_type.764) = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref @ErrorIfNIsZero.%Int.loc9_27.2 (%Int) = var %v.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc9_28.1: %DefaultOrUnformed.type = facet_value constants.%Int, (constants.%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc9_28.2 (constants.%DefaultOrUnformed.facet.c82)] +// CHECK:STDOUT: %.loc9_28.1: %DefaultOrUnformed.type = converted constants.%Int, %DefaultOrUnformed.facet.loc9_28.1 [symbolic = %DefaultOrUnformed.facet.loc9_28.2 (constants.%DefaultOrUnformed.facet.c82)] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc9_28.1 [symbolic = %Int.loc9_27.2 (constants.%Int)] +// CHECK:STDOUT: %.loc9_28.2: type = converted %.loc9_28.1, %as_type [symbolic = %Int.loc9_27.2 (constants.%Int)] +// CHECK:STDOUT: %impl.elem0.loc9_28.1: @ErrorIfNIsZero.%.loc9_28.4 (%.ca4) = impl_witness_access constants.%DefaultOrUnformed.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_28.2 (constants.%impl.elem0.12f)] +// CHECK:STDOUT: %specific_impl_fn.loc9_28.1: = specific_impl_function %impl.elem0.loc9_28.1, @DefaultOrUnformed.WithSelf.Op(constants.%DefaultOrUnformed.facet.c82) [symbolic = %specific_impl_fn.loc9_28.2 (constants.%specific_impl_fn.f0d)] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.call: init @ErrorIfNIsZero.%Int.loc9_27.2 (%Int) = call %specific_impl_fn.loc9_28.1() +// CHECK:STDOUT: assign %v.var, %DefaultOrUnformed.WithSelf.Op.call // CHECK:STDOUT: %.loc9_27: type = splice_block %Int.loc9_27.1 [symbolic = %Int.loc9_27.2 (constants.%Int)] { // CHECK:STDOUT: %Core.ref.loc9: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Int.ref: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] @@ -141,9 +179,9 @@ fn CallNegative() { // CHECK:STDOUT: %Int.loc9_27.1: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc9_27.2 (constants.%Int)] // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref @ErrorIfNIsZero.%Int.loc9_27.2 (%Int) = ref_binding v, %v.var -// CHECK:STDOUT: %impl.elem0.loc9_3.1: @ErrorIfNIsZero.%.loc9_3 (%.e63) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_3.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %impl.elem0.loc9_3.1: @ErrorIfNIsZero.%.loc9_3 (%.e63) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_3.2 (constants.%impl.elem0.602)] // CHECK:STDOUT: %bound_method.loc9_3.1: = bound_method %v.var, %impl.elem0.loc9_3.1 -// CHECK:STDOUT: %specific_impl_fn.loc9_3.1: = specific_impl_function %impl.elem0.loc9_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.1c0) [symbolic = %specific_impl_fn.loc9_3.2 (constants.%specific_impl_fn)] +// CHECK:STDOUT: %specific_impl_fn.loc9_3.1: = specific_impl_function %impl.elem0.loc9_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.1c0) [symbolic = %specific_impl_fn.loc9_3.2 (constants.%specific_impl_fn.d65)] // CHECK:STDOUT: %bound_method.loc9_3.2: = bound_method %v.var, %specific_impl_fn.loc9_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc9_3.2(%v.var) // CHECK:STDOUT: return @@ -172,6 +210,13 @@ fn CallNegative() { // CHECK:STDOUT: %Int.loc9_27.2 => constants.%i0 // CHECK:STDOUT: %require_complete => constants.%complete_type.d94 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.47b +// CHECK:STDOUT: %.loc9_28.3 => constants.%.d6a +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness => constants.%DefaultOrUnformed.impl_witness.879 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc9_28.2 => constants.%DefaultOrUnformed.facet.255 +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type => constants.%DefaultOrUnformed.WithSelf.Op.type.bd6 +// CHECK:STDOUT: %.loc9_28.4 => constants.%.639 +// CHECK:STDOUT: %impl.elem0.loc9_28.2 => constants.%T.as.DefaultOrUnformed.impl.Op.5b7 +// CHECK:STDOUT: %specific_impl_fn.loc9_28.2 => constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.8d7 // CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.eb2 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.cef diff --git a/toolchain/check/testdata/function/generic/type_param.carbon b/toolchain/check/testdata/function/generic/type_param.carbon index dc6d29578dfe..14135fb8b8ef 100644 --- a/toolchain/check/testdata/function/generic/type_param.carbon +++ b/toolchain/check/testdata/function/generic/type_param.carbon @@ -30,23 +30,33 @@ fn F(T:! type) { // CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic] // CHECK:STDOUT: %require_complete.ef1: = require_complete_type %ptr [symbolic] // CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %.713: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%ptr) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: = lookup_impl_witness %ptr, @DefaultOrUnformed [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %ptr, (%DefaultOrUnformed.lookup_impl_witness) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.d74: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet) [symbolic] +// CHECK:STDOUT: %.425: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type.d74, %DefaultOrUnformed.facet [symbolic] +// CHECK:STDOUT: %impl.elem0.45d: %.425 = impl_witness_access %DefaultOrUnformed.lookup_impl_witness, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.a93: = specific_impl_function %impl.elem0.45d, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet) [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %ptr, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr, (%Destroy.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.bb2: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet) [symbolic] // CHECK:STDOUT: %.c3f: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.bb2, %Destroy.facet [symbolic] -// CHECK:STDOUT: %impl.elem0: %.c3f = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic] -// CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic] +// CHECK:STDOUT: %impl.elem0.b55: %.c3f = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.5c7: = specific_impl_function %impl.elem0.b55, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -74,14 +84,21 @@ fn F(T:! type) { // CHECK:STDOUT: %ptr.loc16_11.2: type = ptr_type %T.loc15_6.1 [symbolic = %ptr.loc16_11.2 (constants.%ptr)] // CHECK:STDOUT: %require_complete.loc16: = require_complete_type %ptr.loc16_11.2 [symbolic = %require_complete.loc16 (constants.%require_complete.ef1)] // CHECK:STDOUT: %pattern_type.loc16: type = pattern_type %ptr.loc16_11.2 [symbolic = %pattern_type.loc16 (constants.%pattern_type.4f4)] +// CHECK:STDOUT: %.loc16_12.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%ptr.loc16_11.2) [symbolic = %.loc16_12.3 (constants.%.713)] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: = lookup_impl_witness %ptr.loc16_11.2, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness (constants.%DefaultOrUnformed.lookup_impl_witness)] +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc16_12.2: %DefaultOrUnformed.type = facet_value %ptr.loc16_11.2, (%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc16_12.2 (constants.%DefaultOrUnformed.facet)] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.loc16_12.2) [symbolic = %DefaultOrUnformed.WithSelf.Op.type (constants.%DefaultOrUnformed.WithSelf.Op.type.d74)] +// CHECK:STDOUT: %.loc16_12.4: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type, %DefaultOrUnformed.facet.loc16_12.2 [symbolic = %.loc16_12.4 (constants.%.425)] +// CHECK:STDOUT: %impl.elem0.loc16_12.2: @F.%.loc16_12.4 (%.425) = impl_witness_access %DefaultOrUnformed.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_12.2 (constants.%impl.elem0.45d)] +// CHECK:STDOUT: %specific_impl_fn.loc16_12.2: = specific_impl_function %impl.elem0.loc16_12.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc16_12.2) [symbolic = %specific_impl_fn.loc16_12.2 (constants.%specific_impl_fn.a93)] // CHECK:STDOUT: %require_complete.loc17: = require_complete_type %T.loc15_6.1 [symbolic = %require_complete.loc17 (constants.%require_complete.944)] // CHECK:STDOUT: %pattern_type.loc17: type = pattern_type %T.loc15_6.1 [symbolic = %pattern_type.loc17 (constants.%pattern_type.51d)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %ptr.loc16_11.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] // CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr.loc16_11.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.bb2)] // CHECK:STDOUT: %.loc16_3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet [symbolic = %.loc16_3 (constants.%.c3f)] -// CHECK:STDOUT: %impl.elem0.loc16_3.2: @F.%.loc16_3 (%.c3f) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_3.2 (constants.%impl.elem0)] -// CHECK:STDOUT: %specific_impl_fn.loc16_3.2: = specific_impl_function %impl.elem0.loc16_3.2, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc16_3.2 (constants.%specific_impl_fn)] +// CHECK:STDOUT: %impl.elem0.loc16_3.2: @F.%.loc16_3 (%.c3f) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_3.2 (constants.%impl.elem0.b55)] +// CHECK:STDOUT: %specific_impl_fn.loc16_3.2: = specific_impl_function %impl.elem0.loc16_3.2, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc16_3.2 (constants.%specific_impl_fn.5c7)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: @@ -90,6 +107,14 @@ fn F(T:! type) { // CHECK:STDOUT: %p.var_patt: @F.%pattern_type.loc16 (%pattern_type.4f4) = var_pattern %p.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref @F.%ptr.loc16_11.2 (%ptr) = var %p.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc16_12.1: %DefaultOrUnformed.type = facet_value constants.%ptr, (constants.%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc16_12.2 (constants.%DefaultOrUnformed.facet)] +// CHECK:STDOUT: %.loc16_12.1: %DefaultOrUnformed.type = converted constants.%ptr, %DefaultOrUnformed.facet.loc16_12.1 [symbolic = %DefaultOrUnformed.facet.loc16_12.2 (constants.%DefaultOrUnformed.facet)] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc16_12.1 [symbolic = %ptr.loc16_11.2 (constants.%ptr)] +// CHECK:STDOUT: %.loc16_12.2: type = converted %.loc16_12.1, %as_type [symbolic = %ptr.loc16_11.2 (constants.%ptr)] +// CHECK:STDOUT: %impl.elem0.loc16_12.1: @F.%.loc16_12.4 (%.425) = impl_witness_access constants.%DefaultOrUnformed.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_12.2 (constants.%impl.elem0.45d)] +// CHECK:STDOUT: %specific_impl_fn.loc16_12.1: = specific_impl_function %impl.elem0.loc16_12.1, @DefaultOrUnformed.WithSelf.Op(constants.%DefaultOrUnformed.facet) [symbolic = %specific_impl_fn.loc16_12.2 (constants.%specific_impl_fn.a93)] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.call: init @F.%ptr.loc16_11.2 (%ptr) = call %specific_impl_fn.loc16_12.1() +// CHECK:STDOUT: assign %p.var, %DefaultOrUnformed.WithSelf.Op.call // CHECK:STDOUT: %.loc16_11: type = splice_block %ptr.loc16_11.1 [symbolic = %ptr.loc16_11.2 (constants.%ptr)] { // CHECK:STDOUT: %T.ref.loc16: type = name_ref T, %T.loc15_6.2 [symbolic = %T.loc15_6.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc16_11.1: type = ptr_type %T.ref.loc16 [symbolic = %ptr.loc16_11.2 (constants.%ptr)] @@ -104,9 +129,9 @@ fn F(T:! type) { // CHECK:STDOUT: %T.ref.loc17: type = name_ref T, %T.loc15_6.2 [symbolic = %T.loc15_6.1 (constants.%T)] // CHECK:STDOUT: %.loc17_21.2: @F.%T.loc15_6.1 (%T) = acquire_value %.loc17_21.1 // CHECK:STDOUT: %n: @F.%T.loc15_6.1 (%T) = value_binding n, %.loc17_21.2 -// CHECK:STDOUT: %impl.elem0.loc16_3.1: @F.%.loc16_3 (%.c3f) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_3.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %impl.elem0.loc16_3.1: @F.%.loc16_3 (%.c3f) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_3.2 (constants.%impl.elem0.b55)] // CHECK:STDOUT: %bound_method.loc16_3.1: = bound_method %p.var, %impl.elem0.loc16_3.1 -// CHECK:STDOUT: %specific_impl_fn.loc16_3.1: = specific_impl_function %impl.elem0.loc16_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc16_3.2 (constants.%specific_impl_fn)] +// CHECK:STDOUT: %specific_impl_fn.loc16_3.1: = specific_impl_function %impl.elem0.loc16_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc16_3.2 (constants.%specific_impl_fn.5c7)] // CHECK:STDOUT: %bound_method.loc16_3.2: = bound_method %p.var, %specific_impl_fn.loc16_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc16_3.2(%p.var) // CHECK:STDOUT: return diff --git a/toolchain/check/testdata/generic/call_basic_depth.carbon b/toolchain/check/testdata/generic/call_basic_depth.carbon index ba5bc34edd55..0a04a45d9446 100644 --- a/toolchain/check/testdata/generic/call_basic_depth.carbon +++ b/toolchain/check/testdata/generic/call_basic_depth.carbon @@ -32,12 +32,12 @@ fn G[T:! type](x: T) { F(x); //@dump-sem-ir-end - var c: C; + var c: C = {}; c.Cfn(x); } fn M() { - var n: C; + var n: C = {}; //@dump-sem-ir-begin F(n); diff --git a/toolchain/check/testdata/generic/complete_type.carbon b/toolchain/check/testdata/generic/complete_type.carbon index 47fe045f43fe..9a0e6dc38106 100644 --- a/toolchain/check/testdata/generic/complete_type.carbon +++ b/toolchain/check/testdata/generic/complete_type.carbon @@ -49,13 +49,12 @@ library "[[@TEST_NAME]]"; class B; -fn F(T:! type) { - var v: T*; +fn F(T:! type, v: T*) { *v; } // F(B) isn't resolved until the end of the file. -fn G() { F(B); } +fn G(p: B*) { F(B, p); } class B {} @@ -65,22 +64,21 @@ library "[[@TEST_NAME]]"; class B; -fn F(T:! type) { - var p: T*; +fn F(T:! type, p: T*) { let _: T = *p; } -// CHECK:STDERR: fail_incomplete_in_function_at_eof.carbon:[[@LINE+10]]:10: error: unable to monomorphize specific `F(B)` [ResolvingSpecificHere] -// CHECK:STDERR: fn G() { F(B); } -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_incomplete_in_function_at_eof.carbon:[[@LINE+10]]:15: error: unable to monomorphize specific `F(B)` [ResolvingSpecificHere] +// CHECK:STDERR: fn G(p: B*) { F(B, p); } +// CHECK:STDERR: ^ // CHECK:STDERR: fail_incomplete_in_function_at_eof.carbon:[[@LINE-6]]:10: note: `T` evaluates to incomplete type `B` [IncompleteTypeInMonomorphization] // CHECK:STDERR: let _: T = *p; // CHECK:STDERR: ^ -// CHECK:STDERR: fail_incomplete_in_function_at_eof.carbon:[[@LINE-13]]:1: note: class was forward declared here [ClassForwardDeclaredHere] +// CHECK:STDERR: fail_incomplete_in_function_at_eof.carbon:[[@LINE-12]]:1: note: class was forward declared here [ClassForwardDeclaredHere] // CHECK:STDERR: class B; // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: -fn G() { F(B); } +fn G(p: B*) { F(B, p); } // CHECK:STDOUT: --- fail_incomplete_in_class.carbon // CHECK:STDOUT: @@ -207,42 +205,27 @@ fn G() { F(B); } // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] -// CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.e8f [symbolic] -// CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %ptr.e8f, @Destroy [symbolic] -// CHECK:STDOUT: %Destroy.facet.617: %Destroy.type = facet_value %ptr.e8f, (%Destroy.lookup_impl_witness) [symbolic] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.bb2: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.617) [symbolic] -// CHECK:STDOUT: %.c3f: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.bb2, %Destroy.facet.617 [symbolic] -// CHECK:STDOUT: %impl.elem0: %.c3f = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic] -// CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @Destroy.WithSelf.Op(%Destroy.facet.617) [symbolic] +// CHECK:STDOUT: %ptr.27c: type = ptr_type %B [concrete] +// CHECK:STDOUT: %pattern_type.191: type = pattern_type %ptr.27c [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%B) [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %ptr.27c: type = ptr_type %B [concrete] // CHECK:STDOUT: %complete_type.04a: = complete_type_witness %ptr.27c [concrete] -// CHECK:STDOUT: %pattern_type.191: type = pattern_type %ptr.27c [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.8d7: = custom_witness (%Destroy.Op), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.d35: %Destroy.type = facet_value %ptr.27c, (%custom_witness.8d7) [concrete] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.540: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.d35) [concrete] -// CHECK:STDOUT: %.b27: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.540, %Destroy.facet.d35 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -256,15 +239,33 @@ fn G() { F(B); } // CHECK:STDOUT: %B.decl.loc4: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { // CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %v.patt: @F.%pattern_type (%pattern_type.4f4) = value_binding_pattern v [concrete] +// CHECK:STDOUT: %v.param_patt: @F.%pattern_type (%pattern_type.4f4) = value_param_pattern %v.patt [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_10.1: type = splice_block %.loc6_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %.loc6_10.2: type = type_literal type [concrete = type] // CHECK:STDOUT: } // CHECK:STDOUT: %T.loc6_6.2: type = symbolic_binding T, 0 [symbolic = %T.loc6_6.1 (constants.%T)] +// CHECK:STDOUT: %v.param: @F.%ptr.loc6_20.1 (%ptr.e8f) = value_param call_param0 +// CHECK:STDOUT: %.loc6_20: type = splice_block %ptr.loc6_20.2 [symbolic = %ptr.loc6_20.1 (constants.%ptr.e8f)] { +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc6_6.2 [symbolic = %T.loc6_6.1 (constants.%T)] +// CHECK:STDOUT: %ptr.loc6_20.2: type = ptr_type %T.ref [symbolic = %ptr.loc6_20.1 (constants.%ptr.e8f)] +// CHECK:STDOUT: } +// CHECK:STDOUT: %v: @F.%ptr.loc6_20.1 (%ptr.e8f) = value_binding v, %v.param // CHECK:STDOUT: } -// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} -// CHECK:STDOUT: %B.decl.loc14: type = class_decl @B [concrete = constants.%B] {} {} +// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { +// CHECK:STDOUT: %p.patt: %pattern_type.191 = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.191 = value_param_pattern %p.patt [concrete] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %p.param: %ptr.27c = value_param call_param0 +// CHECK:STDOUT: %.loc11: type = splice_block %ptr [concrete = constants.%ptr.27c] { +// CHECK:STDOUT: %B.ref.loc11_9: type = name_ref B, file.%B.decl.loc4 [concrete = constants.%B] +// CHECK:STDOUT: %ptr: type = ptr_type %B.ref.loc11_9 [concrete = constants.%ptr.27c] +// CHECK:STDOUT: } +// CHECK:STDOUT: %p: %ptr.27c = value_binding p, %p.param +// CHECK:STDOUT: } +// CHECK:STDOUT: %B.decl.loc13: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { @@ -277,70 +278,43 @@ fn G() { F(B); } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.2: type) { // CHECK:STDOUT: %T.loc6_6.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_6.1 (constants.%T)] +// CHECK:STDOUT: %ptr.loc6_20.1: type = ptr_type %T.loc6_6.1 [symbolic = %ptr.loc6_20.1 (constants.%ptr.e8f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc6_20.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %ptr.loc7_11.2: type = ptr_type %T.loc6_6.1 [symbolic = %ptr.loc7_11.2 (constants.%ptr.e8f)] -// CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc7_11.2 [symbolic = %require_complete (constants.%require_complete)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc7_11.2 [symbolic = %pattern_type (constants.%pattern_type.4f4)] -// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %ptr.loc7_11.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr.loc7_11.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.617)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.bb2)] -// CHECK:STDOUT: %.loc7_3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet [symbolic = %.loc7_3 (constants.%.c3f)] -// CHECK:STDOUT: %impl.elem0.loc7_3.2: @F.%.loc7_3 (%.c3f) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] -// CHECK:STDOUT: %specific_impl_fn.loc7_3.2: = specific_impl_function %impl.elem0.loc7_3.2, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn)] +// CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc6_20.1 [symbolic = %require_complete (constants.%require_complete)] // CHECK:STDOUT: -// CHECK:STDOUT: fn() { +// CHECK:STDOUT: fn(%v.param: @F.%ptr.loc6_20.1 (%ptr.e8f)) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @F.%pattern_type (%pattern_type.4f4) = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: @F.%pattern_type (%pattern_type.4f4) = var_pattern %v.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %v.var: ref @F.%ptr.loc7_11.2 (%ptr.e8f) = var %v.var_patt -// CHECK:STDOUT: %.loc7_11: type = splice_block %ptr.loc7_11.1 [symbolic = %ptr.loc7_11.2 (constants.%ptr.e8f)] { -// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc6_6.2 [symbolic = %T.loc6_6.1 (constants.%T)] -// CHECK:STDOUT: %ptr.loc7_11.1: type = ptr_type %T.ref [symbolic = %ptr.loc7_11.2 (constants.%ptr.e8f)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %v: ref @F.%ptr.loc7_11.2 (%ptr.e8f) = ref_binding v, %v.var -// CHECK:STDOUT: %v.ref: ref @F.%ptr.loc7_11.2 (%ptr.e8f) = name_ref v, %v -// CHECK:STDOUT: %.loc8_4: @F.%ptr.loc7_11.2 (%ptr.e8f) = acquire_value %v.ref -// CHECK:STDOUT: %.loc8_3: ref @F.%T.loc6_6.1 (%T) = deref %.loc8_4 -// CHECK:STDOUT: %impl.elem0.loc7_3.1: @F.%.loc7_3 (%.c3f) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] -// CHECK:STDOUT: %bound_method.loc7_3.1: = bound_method %v.var, %impl.elem0.loc7_3.1 -// CHECK:STDOUT: %specific_impl_fn.loc7_3.1: = specific_impl_function %impl.elem0.loc7_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.617) [symbolic = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn)] -// CHECK:STDOUT: %bound_method.loc7_3.2: = bound_method %v.var, %specific_impl_fn.loc7_3.1 -// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc7_3.2(%v.var) +// CHECK:STDOUT: %v.ref: @F.%ptr.loc6_20.1 (%ptr.e8f) = name_ref v, %v +// CHECK:STDOUT: %.loc7: ref @F.%T.loc6_6.1 (%T) = deref %v.ref // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @G() { +// CHECK:STDOUT: fn @G(%p.param: %ptr.27c) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] -// CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl.loc4 [concrete = constants.%B] +// CHECK:STDOUT: %B.ref.loc11_17: type = name_ref B, file.%B.decl.loc4 [concrete = constants.%B] +// CHECK:STDOUT: %p.ref: %ptr.27c = name_ref p, %p // CHECK:STDOUT: %F.specific_fn: = specific_function %F.ref, @F(constants.%B) [concrete = constants.%F.specific_fn] -// CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn() +// CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn(%p.ref) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %ptr.27c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc6_6.1 => constants.%T +// CHECK:STDOUT: %ptr.loc6_20.1 => constants.%ptr.e8f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%B) { // CHECK:STDOUT: %T.loc6_6.1 => constants.%B +// CHECK:STDOUT: %ptr.loc6_20.1 => constants.%ptr.27c +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.191 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %ptr.loc7_11.2 => constants.%ptr.27c // CHECK:STDOUT: %require_complete => constants.%complete_type.04a -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.191 -// CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.8d7 -// CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.d35 -// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.540 -// CHECK:STDOUT: %.loc7_3 => constants.%.b27 -// CHECK:STDOUT: %impl.elem0.loc7_3.2 => constants.%Destroy.Op -// CHECK:STDOUT: %specific_impl_fn.loc7_3.2 => constants.%Destroy.Op // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_incomplete_in_function_at_eof.carbon @@ -351,43 +325,28 @@ fn G() { F(B); } // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] -// CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %require_complete.ef1: = require_complete_type %ptr.e8f [symbolic] -// CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic] // CHECK:STDOUT: %require_complete.944: = require_complete_type %T [symbolic] // CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %ptr.e8f, @Destroy [symbolic] -// CHECK:STDOUT: %Destroy.facet.617: %Destroy.type = facet_value %ptr.e8f, (%Destroy.lookup_impl_witness) [symbolic] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.bb2: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.617) [symbolic] -// CHECK:STDOUT: %.c3f: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.bb2, %Destroy.facet.617 [symbolic] -// CHECK:STDOUT: %impl.elem0: %.c3f = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic] -// CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @Destroy.WithSelf.Op(%Destroy.facet.617) [symbolic] +// CHECK:STDOUT: %ptr.27c: type = ptr_type %B [concrete] +// CHECK:STDOUT: %pattern_type.191: type = pattern_type %ptr.27c [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%B) [concrete] -// CHECK:STDOUT: %ptr.27c: type = ptr_type %B [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %ptr.27c [concrete] -// CHECK:STDOUT: %pattern_type.191: type = pattern_type %ptr.27c [concrete] // CHECK:STDOUT: %pattern_type.1f4: type = pattern_type %B [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.8d7: = custom_witness (%Destroy.Op), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.d35: %Destroy.type = facet_value %ptr.27c, (%custom_witness.8d7) [concrete] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.540: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.d35) [concrete] -// CHECK:STDOUT: %.b27: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.540, %Destroy.facet.d35 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -401,93 +360,84 @@ fn G() { F(B); } // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { // CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc6 (%pattern_type.4f4) = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc6 (%pattern_type.4f4) = value_param_pattern %p.patt [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_10.1: type = splice_block %.loc6_10.2 [concrete = type] { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %.loc6_10.2: type = type_literal type [concrete = type] // CHECK:STDOUT: } // CHECK:STDOUT: %T.loc6_6.2: type = symbolic_binding T, 0 [symbolic = %T.loc6_6.1 (constants.%T)] +// CHECK:STDOUT: %p.param: @F.%ptr.loc6_20.1 (%ptr.e8f) = value_param call_param0 +// CHECK:STDOUT: %.loc6_20: type = splice_block %ptr.loc6_20.2 [symbolic = %ptr.loc6_20.1 (constants.%ptr.e8f)] { +// CHECK:STDOUT: %T.ref.loc6: type = name_ref T, %T.loc6_6.2 [symbolic = %T.loc6_6.1 (constants.%T)] +// CHECK:STDOUT: %ptr.loc6_20.2: type = ptr_type %T.ref.loc6 [symbolic = %ptr.loc6_20.1 (constants.%ptr.e8f)] +// CHECK:STDOUT: } +// CHECK:STDOUT: %p: @F.%ptr.loc6_20.1 (%ptr.e8f) = value_binding p, %p.param +// CHECK:STDOUT: } +// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { +// CHECK:STDOUT: %p.patt: %pattern_type.191 = value_binding_pattern p [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type.191 = value_param_pattern %p.patt [concrete] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %p.param: %ptr.27c = value_param call_param0 +// CHECK:STDOUT: %.loc20: type = splice_block %ptr [concrete = constants.%ptr.27c] { +// CHECK:STDOUT: %B.ref.loc20_9: type = name_ref B, file.%B.decl [concrete = constants.%B] +// CHECK:STDOUT: %ptr: type = ptr_type %B.ref.loc20_9 [concrete = constants.%ptr.27c] +// CHECK:STDOUT: } +// CHECK:STDOUT: %p: %ptr.27c = value_binding p, %p.param // CHECK:STDOUT: } -// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.2: type) { // CHECK:STDOUT: %T.loc6_6.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_6.1 (constants.%T)] +// CHECK:STDOUT: %ptr.loc6_20.1: type = ptr_type %T.loc6_6.1 [symbolic = %ptr.loc6_20.1 (constants.%ptr.e8f)] +// CHECK:STDOUT: %pattern_type.loc6: type = pattern_type %ptr.loc6_20.1 [symbolic = %pattern_type.loc6 (constants.%pattern_type.4f4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %ptr.loc7_11.2: type = ptr_type %T.loc6_6.1 [symbolic = %ptr.loc7_11.2 (constants.%ptr.e8f)] -// CHECK:STDOUT: %require_complete.loc7: = require_complete_type %ptr.loc7_11.2 [symbolic = %require_complete.loc7 (constants.%require_complete.ef1)] -// CHECK:STDOUT: %pattern_type.loc7: type = pattern_type %ptr.loc7_11.2 [symbolic = %pattern_type.loc7 (constants.%pattern_type.4f4)] -// CHECK:STDOUT: %require_complete.loc8: = require_complete_type %T.loc6_6.1 [symbolic = %require_complete.loc8 (constants.%require_complete.944)] -// CHECK:STDOUT: %pattern_type.loc8: type = pattern_type %T.loc6_6.1 [symbolic = %pattern_type.loc8 (constants.%pattern_type.51d)] -// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %ptr.loc7_11.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] -// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr.loc7_11.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.617)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.bb2)] -// CHECK:STDOUT: %.loc7_3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet [symbolic = %.loc7_3 (constants.%.c3f)] -// CHECK:STDOUT: %impl.elem0.loc7_3.2: @F.%.loc7_3 (%.c3f) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] -// CHECK:STDOUT: %specific_impl_fn.loc7_3.2: = specific_impl_function %impl.elem0.loc7_3.2, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn)] +// CHECK:STDOUT: %require_complete.loc6: = require_complete_type %ptr.loc6_20.1 [symbolic = %require_complete.loc6 (constants.%require_complete.ef1)] +// CHECK:STDOUT: %require_complete.loc7: = require_complete_type %T.loc6_6.1 [symbolic = %require_complete.loc7 (constants.%require_complete.944)] +// CHECK:STDOUT: %pattern_type.loc7: type = pattern_type %T.loc6_6.1 [symbolic = %pattern_type.loc7 (constants.%pattern_type.51d)] // CHECK:STDOUT: -// CHECK:STDOUT: fn() { +// CHECK:STDOUT: fn(%p.param: @F.%ptr.loc6_20.1 (%ptr.e8f)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc7 (%pattern_type.4f4) = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: @F.%pattern_type.loc7 (%pattern_type.4f4) = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %_.patt: @F.%pattern_type.loc7 (%pattern_type.51d) = value_binding_pattern _ [concrete] // CHECK:STDOUT: } -// CHECK:STDOUT: %p.var: ref @F.%ptr.loc7_11.2 (%ptr.e8f) = var %p.var_patt -// CHECK:STDOUT: %.loc7_11: type = splice_block %ptr.loc7_11.1 [symbolic = %ptr.loc7_11.2 (constants.%ptr.e8f)] { -// CHECK:STDOUT: %T.ref.loc7: type = name_ref T, %T.loc6_6.2 [symbolic = %T.loc6_6.1 (constants.%T)] -// CHECK:STDOUT: %ptr.loc7_11.1: type = ptr_type %T.ref.loc7 [symbolic = %ptr.loc7_11.2 (constants.%ptr.e8f)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %p: ref @F.%ptr.loc7_11.2 (%ptr.e8f) = ref_binding p, %p.var -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: @F.%pattern_type.loc8 (%pattern_type.51d) = value_binding_pattern _ [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %p.ref: ref @F.%ptr.loc7_11.2 (%ptr.e8f) = name_ref p, %p -// CHECK:STDOUT: %.loc8_15: @F.%ptr.loc7_11.2 (%ptr.e8f) = acquire_value %p.ref -// CHECK:STDOUT: %.loc8_14.1: ref @F.%T.loc6_6.1 (%T) = deref %.loc8_15 -// CHECK:STDOUT: %T.ref.loc8: type = name_ref T, %T.loc6_6.2 [symbolic = %T.loc6_6.1 (constants.%T)] -// CHECK:STDOUT: %.loc8_14.2: @F.%T.loc6_6.1 (%T) = acquire_value %.loc8_14.1 -// CHECK:STDOUT: %_: @F.%T.loc6_6.1 (%T) = value_binding _, %.loc8_14.2 -// CHECK:STDOUT: %impl.elem0.loc7_3.1: @F.%.loc7_3 (%.c3f) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_3.2 (constants.%impl.elem0)] -// CHECK:STDOUT: %bound_method.loc7_3.1: = bound_method %p.var, %impl.elem0.loc7_3.1 -// CHECK:STDOUT: %specific_impl_fn.loc7_3.1: = specific_impl_function %impl.elem0.loc7_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet.617) [symbolic = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn)] -// CHECK:STDOUT: %bound_method.loc7_3.2: = bound_method %p.var, %specific_impl_fn.loc7_3.1 -// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc7_3.2(%p.var) +// CHECK:STDOUT: %p.ref: @F.%ptr.loc6_20.1 (%ptr.e8f) = name_ref p, %p +// CHECK:STDOUT: %.loc7_14.1: ref @F.%T.loc6_6.1 (%T) = deref %p.ref +// CHECK:STDOUT: %T.ref.loc7: type = name_ref T, %T.loc6_6.2 [symbolic = %T.loc6_6.1 (constants.%T)] +// CHECK:STDOUT: %.loc7_14.2: @F.%T.loc6_6.1 (%T) = acquire_value %.loc7_14.1 +// CHECK:STDOUT: %_: @F.%T.loc6_6.1 (%T) = value_binding _, %.loc7_14.2 // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @G() { +// CHECK:STDOUT: fn @G(%p.param: %ptr.27c) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] -// CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] +// CHECK:STDOUT: %B.ref.loc20_17: type = name_ref B, file.%B.decl [concrete = constants.%B] +// CHECK:STDOUT: %p.ref: %ptr.27c = name_ref p, %p // CHECK:STDOUT: %F.specific_fn: = specific_function %F.ref, @F(constants.%B) [concrete = constants.%F.specific_fn] -// CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn() +// CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn(%p.ref) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %ptr.27c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc6_6.1 => constants.%T +// CHECK:STDOUT: %ptr.loc6_20.1 => constants.%ptr.e8f +// CHECK:STDOUT: %pattern_type.loc6 => constants.%pattern_type.4f4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%B) { // CHECK:STDOUT: %T.loc6_6.1 => constants.%B +// CHECK:STDOUT: %ptr.loc6_20.1 => constants.%ptr.27c +// CHECK:STDOUT: %pattern_type.loc6 => constants.%pattern_type.191 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %ptr.loc7_11.2 => constants.%ptr.27c -// CHECK:STDOUT: %require_complete.loc7 => constants.%complete_type -// CHECK:STDOUT: %pattern_type.loc7 => constants.%pattern_type.191 -// CHECK:STDOUT: %require_complete.loc8 => -// CHECK:STDOUT: %pattern_type.loc8 => constants.%pattern_type.1f4 -// CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.8d7 -// CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.d35 -// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.540 -// CHECK:STDOUT: %.loc7_3 => constants.%.b27 -// CHECK:STDOUT: %impl.elem0.loc7_3.2 => constants.%Destroy.Op -// CHECK:STDOUT: %specific_impl_fn.loc7_3.2 => constants.%Destroy.Op +// CHECK:STDOUT: %require_complete.loc6 => constants.%complete_type +// CHECK:STDOUT: %require_complete.loc7 => +// CHECK:STDOUT: %pattern_type.loc7 => constants.%pattern_type.1f4 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/extend_type_completion.carbon b/toolchain/check/testdata/generic/extend_type_completion.carbon index 0235d356a83c..9daa70033d9a 100644 --- a/toolchain/check/testdata/generic/extend_type_completion.carbon +++ b/toolchain/check/testdata/generic/extend_type_completion.carbon @@ -20,7 +20,7 @@ class C(N:! i32) { } // C does not extend K so the type of K is not completed. No error. -var v: C(-1); +fn F(unused v: C(-1)) {} // --- fail_class_extend_impl_does_need_complete_interface.carbon library "[[@TEST_NAME]]"; @@ -32,14 +32,14 @@ class C(N:! i32) { } // C extends K so the type of K is completed, but is invalid. -// CHECK:STDERR: fail_class_extend_impl_does_need_complete_interface.carbon:[[@LINE+7]]:8: error: binding pattern has incomplete type `C(-1)` in name binding declaration [IncompleteTypeInBindingDecl] -// CHECK:STDERR: var v: C(-1); -// CHECK:STDERR: ^~~~~ +// CHECK:STDERR: fail_class_extend_impl_does_need_complete_interface.carbon:[[@LINE+7]]:13: error: parameter has incomplete type `C(-1)` in function definition [IncompleteTypeInFunctionParam] +// CHECK:STDERR: fn F(unused v: C(-1)) {} +// CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: fail_class_extend_impl_does_need_complete_interface.carbon:[[@LINE-7]]:18: note: array bound of -1 is negative [ArrayBoundNegative] // CHECK:STDERR: extend impl as K(array(i32, N)) {} // CHECK:STDERR: ^~~~~~~~~~~~~~~~ // CHECK:STDERR: -var v: C(-1); +fn F(unused v: C(-1)) {} // --- interface_require_impls_doesnt_need_complete_interface.carbon library "[[@TEST_NAME]]"; @@ -50,7 +50,7 @@ interface J(N:! i32) { } // J does not extend K so the type of K is not completed. No error. -var v: J(-1); +fn F(unused v: J(-1)) {} // --- fail_interface_extend_require_impls_does_need_complete_interface.carbon library "[[@TEST_NAME]]"; @@ -69,9 +69,9 @@ interface I(N:! i32) { // need a location for the type in context.bind_name_map() to use as the // location to Convert(). // -// CHECK:STDERR: fail_interface_extend_require_impls_does_need_complete_interface.carbon:[[@LINE+10]]:8: error: binding pattern has incomplete type `I(-1)` in name binding declaration [IncompleteTypeInBindingDecl] -// CHECK:STDERR: var v: I(-1); -// CHECK:STDERR: ^~~~~ +// CHECK:STDERR: fail_interface_extend_require_impls_does_need_complete_interface.carbon:[[@LINE+10]]:13: error: parameter has incomplete type `I(-1)` in function definition [IncompleteTypeInFunctionParam] +// CHECK:STDERR: fn F(unused v: I(-1)) {} +// CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: fail_interface_extend_require_impls_does_need_complete_interface.carbon:[[@LINE-12]]:24: note: `J(N)` evaluates to incomplete type `J(-1)` [IncompleteTypeInMonomorphization] // CHECK:STDERR: extend require impls J(N); // CHECK:STDERR: ^~~~ @@ -79,7 +79,7 @@ interface I(N:! i32) { // CHECK:STDERR: extend require impls K(array(i32, N)); // CHECK:STDERR: ^~~~~~~~~~~~~~~~ // CHECK:STDERR: -var v: I(-1); +fn F(unused v: I(-1)) {} // --- constraint_require_impls_doesnt_need_complete_interface.carbon library "[[@TEST_NAME]]"; @@ -90,7 +90,7 @@ constraint J(N:! i32) { } // J does not extend K so the type of K is not completed. No error. -var v: J(-1); +fn F(unused v: J(-1)) {} // --- fail_constraint_extend_require_impls_does_need_complete_interface.carbon library "[[@TEST_NAME]]"; @@ -104,9 +104,9 @@ constraint I(N:! i32) { } // I extends J extends K so the type of K is completed, but is invalid. -// CHECK:STDERR: fail_constraint_extend_require_impls_does_need_complete_interface.carbon:[[@LINE+10]]:8: error: binding pattern has incomplete type `I(-1)` in name binding declaration [IncompleteTypeInBindingDecl] -// CHECK:STDERR: var v: I(-1); -// CHECK:STDERR: ^~~~~ +// CHECK:STDERR: fail_constraint_extend_require_impls_does_need_complete_interface.carbon:[[@LINE+10]]:13: error: parameter has incomplete type `I(-1)` in function definition [IncompleteTypeInFunctionParam] +// CHECK:STDERR: fn F(unused v: I(-1)) {} +// CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: fail_constraint_extend_require_impls_does_need_complete_interface.carbon:[[@LINE-7]]:24: note: `J(N)` evaluates to incomplete type `J(-1)` [IncompleteTypeInMonomorphization] // CHECK:STDERR: extend require impls J(N); // CHECK:STDERR: ^~~~ @@ -114,7 +114,7 @@ constraint I(N:! i32) { // CHECK:STDERR: extend require impls K(array(i32, N)); // CHECK:STDERR: ^~~~~~~~~~~~~~~~ // CHECK:STDERR: -var v: I(-1); +fn F(unused v: I(-1)) {} // --- interface_require_impls_doesnt_need_complete_self.carbon library "[[@TEST_NAME]]"; @@ -125,7 +125,7 @@ interface J(N:! i32) { } // J does not extend K so the type of Self impling K is not completed. No error. -var v: J(-1); +fn F(unused v: J(-1)) {} // --- constraint_require_impls_doesnt_need_complete_self.carbon library "[[@TEST_NAME]]"; @@ -136,4 +136,4 @@ constraint J(N:! i32) { } // J does not extend K so the type of Self impling K is not completed. No error. -var v: J(-1); +fn F(unused v: J(-1)) {} diff --git a/toolchain/check/testdata/global/basics.carbon b/toolchain/check/testdata/global/basics.carbon index 58f29a06a26d..ce479cdeca3d 100644 --- a/toolchain/check/testdata/global/basics.carbon +++ b/toolchain/check/testdata/global/basics.carbon @@ -2,7 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon +// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/convert.carbon // // AUTOUPDATE // TIP: To test this file alone, run: @@ -58,13 +58,24 @@ var a: A = Make(); // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.3f9: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%empty_struct_type) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %empty_struct_type, (%DefaultOrUnformed.impl_witness.3f9) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.a96 = ref_binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type.a96 = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_struct_type = var %a.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_struct_type] { @@ -74,6 +85,18 @@ var a: A = Make(); // CHECK:STDOUT: %a: ref %empty_struct_type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%empty_struct_type, (constants.%DefaultOrUnformed.impl_witness.3f9) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc4_10.1: %DefaultOrUnformed.type = converted constants.%empty_struct_type, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc4_10.1 [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: %.loc4_10.2: type = converted %.loc4_10.1, %as_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %empty_struct_type = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%a.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- simple_init.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/interface/as_type_of_type.carbon b/toolchain/check/testdata/interface/as_type_of_type.carbon index 4f513a6744b4..b147f0d34c2a 100644 --- a/toolchain/check/testdata/interface/as_type_of_type.carbon +++ b/toolchain/check/testdata/interface/as_type_of_type.carbon @@ -35,29 +35,39 @@ fn F(T:! Empty) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.7d1: type = pattern_type %Empty.type [concrete] -// CHECK:STDOUT: %T: %Empty.type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.0c3: %Empty.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] -// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T [symbolic] +// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.0c3 [symbolic] // CHECK:STDOUT: %ptr: type = ptr_type %T.binding.as_type [symbolic] -// CHECK:STDOUT: %require_complete: = require_complete_type %ptr [symbolic] +// CHECK:STDOUT: %require_complete.315: = require_complete_type %ptr [symbolic] // CHECK:STDOUT: %pattern_type.fd9: type = pattern_type %ptr [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %.a5e: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%ptr) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: = lookup_impl_witness %ptr, @DefaultOrUnformed [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %ptr, (%DefaultOrUnformed.lookup_impl_witness) [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.478: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet) [symbolic] +// CHECK:STDOUT: %.fb3: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type.478, %DefaultOrUnformed.facet [symbolic] +// CHECK:STDOUT: %impl.elem0.369: %.fb3 = impl_witness_access %DefaultOrUnformed.lookup_impl_witness, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.e86: = specific_impl_function %impl.elem0.369, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet) [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %ptr, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr, (%Destroy.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.4bc: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet) [symbolic] // CHECK:STDOUT: %.40e: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.4bc, %Destroy.facet [symbolic] -// CHECK:STDOUT: %impl.elem0: %.40e = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic] -// CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic] +// CHECK:STDOUT: %impl.elem0.b68: %.40e = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.a7f: = specific_impl_function %impl.elem0.b68, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -82,7 +92,7 @@ fn F(T:! Empty) { // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %Empty.ref: type = name_ref Empty, file.%Empty.decl [concrete = constants.%Empty.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %T.loc21_6.2: %Empty.type = symbolic_binding T, 0 [symbolic = %T.loc21_6.1 (constants.%T)] +// CHECK:STDOUT: %T.loc21_6.2: %Empty.type = symbolic_binding T, 0 [symbolic = %T.loc21_6.1 (constants.%T.0c3)] // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -114,19 +124,26 @@ fn F(T:! Empty) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc21_6.2: %Empty.type) { -// CHECK:STDOUT: %T.loc21_6.1: %Empty.type = symbolic_binding T, 0 [symbolic = %T.loc21_6.1 (constants.%T)] +// CHECK:STDOUT: %T.loc21_6.1: %Empty.type = symbolic_binding T, 0 [symbolic = %T.loc21_6.1 (constants.%T.0c3)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc21_6.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)] // CHECK:STDOUT: %ptr.loc22_18.2: type = ptr_type %T.binding.as_type [symbolic = %ptr.loc22_18.2 (constants.%ptr)] -// CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc22_18.2 [symbolic = %require_complete (constants.%require_complete)] +// CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc22_18.2 [symbolic = %require_complete (constants.%require_complete.315)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc22_18.2 [symbolic = %pattern_type (constants.%pattern_type.fd9)] +// CHECK:STDOUT: %.loc22_19.3: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%ptr.loc22_18.2) [symbolic = %.loc22_19.3 (constants.%.a5e)] +// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: = lookup_impl_witness %ptr.loc22_18.2, @DefaultOrUnformed [symbolic = %DefaultOrUnformed.lookup_impl_witness (constants.%DefaultOrUnformed.lookup_impl_witness)] +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc22_19.2: %DefaultOrUnformed.type = facet_value %ptr.loc22_18.2, (%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc22_19.2 (constants.%DefaultOrUnformed.facet)] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.loc22_19.2) [symbolic = %DefaultOrUnformed.WithSelf.Op.type (constants.%DefaultOrUnformed.WithSelf.Op.type.478)] +// CHECK:STDOUT: %.loc22_19.4: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type, %DefaultOrUnformed.facet.loc22_19.2 [symbolic = %.loc22_19.4 (constants.%.fb3)] +// CHECK:STDOUT: %impl.elem0.loc22_19.2: @F.%.loc22_19.4 (%.fb3) = impl_witness_access %DefaultOrUnformed.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_19.2 (constants.%impl.elem0.369)] +// CHECK:STDOUT: %specific_impl_fn.loc22_19.2: = specific_impl_function %impl.elem0.loc22_19.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc22_19.2) [symbolic = %specific_impl_fn.loc22_19.2 (constants.%specific_impl_fn.e86)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %ptr.loc22_18.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)] // CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr.loc22_18.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.4bc)] // CHECK:STDOUT: %.loc22_3: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet [symbolic = %.loc22_3 (constants.%.40e)] -// CHECK:STDOUT: %impl.elem0.loc22_3.2: @F.%.loc22_3 (%.40e) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_3.2 (constants.%impl.elem0)] -// CHECK:STDOUT: %specific_impl_fn.loc22_3.2: = specific_impl_function %impl.elem0.loc22_3.2, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc22_3.2 (constants.%specific_impl_fn)] +// CHECK:STDOUT: %impl.elem0.loc22_3.2: @F.%.loc22_3 (%.40e) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_3.2 (constants.%impl.elem0.b68)] +// CHECK:STDOUT: %specific_impl_fn.loc22_3.2: = specific_impl_function %impl.elem0.loc22_3.2, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc22_3.2 (constants.%specific_impl_fn.a7f)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: @@ -135,16 +152,24 @@ fn F(T:! Empty) { // CHECK:STDOUT: %x.var_patt: @F.%pattern_type (%pattern_type.fd9) = var_pattern %x.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref @F.%ptr.loc22_18.2 (%ptr) = var %x.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc22_19.1: %DefaultOrUnformed.type = facet_value constants.%ptr, (constants.%DefaultOrUnformed.lookup_impl_witness) [symbolic = %DefaultOrUnformed.facet.loc22_19.2 (constants.%DefaultOrUnformed.facet)] +// CHECK:STDOUT: %.loc22_19.1: %DefaultOrUnformed.type = converted constants.%ptr, %DefaultOrUnformed.facet.loc22_19.1 [symbolic = %DefaultOrUnformed.facet.loc22_19.2 (constants.%DefaultOrUnformed.facet)] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc22_19.1 [symbolic = %ptr.loc22_18.2 (constants.%ptr)] +// CHECK:STDOUT: %.loc22_19.2: type = converted %.loc22_19.1, %as_type [symbolic = %ptr.loc22_18.2 (constants.%ptr)] +// CHECK:STDOUT: %impl.elem0.loc22_19.1: @F.%.loc22_19.4 (%.fb3) = impl_witness_access constants.%DefaultOrUnformed.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_19.2 (constants.%impl.elem0.369)] +// CHECK:STDOUT: %specific_impl_fn.loc22_19.1: = specific_impl_function %impl.elem0.loc22_19.1, @DefaultOrUnformed.WithSelf.Op(constants.%DefaultOrUnformed.facet) [symbolic = %specific_impl_fn.loc22_19.2 (constants.%specific_impl_fn.e86)] +// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.call: init @F.%ptr.loc22_18.2 (%ptr) = call %specific_impl_fn.loc22_19.1() +// CHECK:STDOUT: assign %x.var, %DefaultOrUnformed.WithSelf.Op.call // CHECK:STDOUT: %.loc22_18.1: type = splice_block %ptr.loc22_18.1 [symbolic = %ptr.loc22_18.2 (constants.%ptr)] { -// CHECK:STDOUT: %T.ref: %Empty.type = name_ref T, %T.loc21_6.2 [symbolic = %T.loc21_6.1 (constants.%T)] +// CHECK:STDOUT: %T.ref: %Empty.type = name_ref T, %T.loc21_6.2 [symbolic = %T.loc21_6.1 (constants.%T.0c3)] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type)] // CHECK:STDOUT: %.loc22_18.2: type = converted %T.ref, %T.as_type [symbolic = %T.binding.as_type (constants.%T.binding.as_type)] // CHECK:STDOUT: %ptr.loc22_18.1: type = ptr_type %.loc22_18.2 [symbolic = %ptr.loc22_18.2 (constants.%ptr)] // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref @F.%ptr.loc22_18.2 (%ptr) = ref_binding x, %x.var -// CHECK:STDOUT: %impl.elem0.loc22_3.1: @F.%.loc22_3 (%.40e) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_3.2 (constants.%impl.elem0)] +// CHECK:STDOUT: %impl.elem0.loc22_3.1: @F.%.loc22_3 (%.40e) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_3.2 (constants.%impl.elem0.b68)] // CHECK:STDOUT: %bound_method.loc22_3.1: = bound_method %x.var, %impl.elem0.loc22_3.1 -// CHECK:STDOUT: %specific_impl_fn.loc22_3.1: = specific_impl_function %impl.elem0.loc22_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc22_3.2 (constants.%specific_impl_fn)] +// CHECK:STDOUT: %specific_impl_fn.loc22_3.1: = specific_impl_function %impl.elem0.loc22_3.1, @Destroy.WithSelf.Op(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc22_3.2 (constants.%specific_impl_fn.a7f)] // CHECK:STDOUT: %bound_method.loc22_3.2: = bound_method %x.var, %specific_impl_fn.loc22_3.1 // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc22_3.2(%x.var) // CHECK:STDOUT: return @@ -159,7 +184,7 @@ fn F(T:! Empty) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @F(constants.%T) { -// CHECK:STDOUT: %T.loc21_6.1 => constants.%T +// CHECK:STDOUT: specific @F(constants.%T.0c3) { +// CHECK:STDOUT: %T.loc21_6.1 => constants.%T.0c3 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/fail_member_lookup.carbon b/toolchain/check/testdata/interface/fail_member_lookup.carbon index a452b1ca3971..04cd7cfc1511 100644 --- a/toolchain/check/testdata/interface/fail_member_lookup.carbon +++ b/toolchain/check/testdata/interface/fail_member_lookup.carbon @@ -154,6 +154,7 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: %v.var_patt: = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref = var %v.var_patt [concrete = ] +// CHECK:STDOUT: assign %v.var, // CHECK:STDOUT: %.1: = splice_block [concrete = ] { // CHECK:STDOUT: %Interface.ref.loc23: type = name_ref Interface, file.%Interface.decl [concrete = constants.%Interface.type] // CHECK:STDOUT: %T.ref: %Interface.assoc_type = name_ref T, @T.%assoc1 [concrete = constants.%assoc1] diff --git a/toolchain/check/testdata/interface/generic_method.carbon b/toolchain/check/testdata/interface/generic_method.carbon index 0a150d0fbdaf..13b98513e126 100644 --- a/toolchain/check/testdata/interface/generic_method.carbon +++ b/toolchain/check/testdata/interface/generic_method.carbon @@ -154,6 +154,14 @@ fn CallIndirect() { // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.bdb: type = pattern_type %Z [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.263: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%Z) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.b84: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%Z) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.4f1: %T.as.DefaultOrUnformed.impl.Op.type.b84 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %Z, (%DefaultOrUnformed.impl_witness.263) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.4f1, @T.as.DefaultOrUnformed.impl.Op(%Z) [concrete] // CHECK:STDOUT: %.de2: type = fn_type_with_self_type %A.WithSelf.F.type.12f, %A.facet [concrete] // CHECK:STDOUT: %ptr.2a0: type = ptr_type %Z [concrete] // CHECK:STDOUT: %pattern_type.771: type = pattern_type %ptr.2a0 [concrete] @@ -213,6 +221,7 @@ fn CallIndirect() { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Copy = %Core.Copy +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... @@ -220,6 +229,9 @@ fn CallIndirect() { // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.203: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.2d4455.1) = import_ref Core//prelude/parts/copy, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.74e93b.1)] // CHECK:STDOUT: %Copy.impl_witness_table.c3a = impl_witness_table (%Core.import_ref.203), @ptr.as.Copy.impl [concrete] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -457,6 +469,14 @@ fn CallIndirect() { // CHECK:STDOUT: %u.var_patt: %pattern_type.bdb = var_pattern %u.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %u.var: ref %Z = var %u.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Z, (constants.%DefaultOrUnformed.impl_witness.263) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc22_11.1: %DefaultOrUnformed.type = converted constants.%Z, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type.loc22: type = facet_access_type %.loc22_11.1 [concrete = constants.%Z] +// CHECK:STDOUT: %.loc22_11.2: type = converted %.loc22_11.1, %as_type.loc22 [concrete = constants.%Z] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.4f1, @T.as.DefaultOrUnformed.impl.Op(constants.%Z) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc22_3: ref %Z = splice_block %u.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %Z to %.loc22_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %u.var, %T.as.DefaultOrUnformed.impl.Op.call // CHECK:STDOUT: %Z.ref.loc22: type = name_ref Z, file.%Z.decl [concrete = constants.%Z] // CHECK:STDOUT: %u: ref %Z = ref_binding u, %u.var // CHECK:STDOUT: %Y.ref: type = name_ref Y, file.%Y.decl [concrete = constants.%Y] @@ -465,8 +485,8 @@ fn CallIndirect() { // CHECK:STDOUT: %A.type: type = facet_type <@A, @A(constants.%X)> [concrete = constants.%A.type.ab6] // CHECK:STDOUT: %A.facet: %A.type.ab6 = facet_value %Y.ref, (constants.%A.impl_witness) [concrete = constants.%A.facet] // CHECK:STDOUT: %.loc23_6: %A.type.ab6 = converted %Y.ref, %A.facet [concrete = constants.%A.facet] -// CHECK:STDOUT: %as_type: type = facet_access_type %.loc23_6 [concrete = constants.%Y] -// CHECK:STDOUT: %.loc23_14.1: type = converted %.loc23_6, %as_type [concrete = constants.%Y] +// CHECK:STDOUT: %as_type.loc23: type = facet_access_type %.loc23_6 [concrete = constants.%Y] +// CHECK:STDOUT: %.loc23_14.1: type = converted %.loc23_6, %as_type.loc23 [concrete = constants.%Y] // CHECK:STDOUT: %.loc23_14.2: %A.assoc_type.f05 = specific_constant @A.WithSelf.%assoc0.loc6_41.1, @A.WithSelf(constants.%X, constants.%A.facet) [concrete = constants.%assoc0.368] // CHECK:STDOUT: %F.ref: %A.assoc_type.f05 = name_ref F, %.loc23_14.2 [concrete = constants.%assoc0.368] // CHECK:STDOUT: %impl.elem0: %.de2 = impl_witness_access constants.%A.impl_witness, element0 [concrete = constants.%Y.as.A.impl.F] @@ -514,6 +534,14 @@ fn CallIndirect() { // CHECK:STDOUT: %u.var_patt: %pattern_type.bdb = var_pattern %u.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %u.var: ref %Z = var %u.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%Z, (constants.%DefaultOrUnformed.impl_witness.263) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc27_11.1: %DefaultOrUnformed.type = converted constants.%Z, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc27_11.1 [concrete = constants.%Z] +// CHECK:STDOUT: %.loc27_11.2: type = converted %.loc27_11.1, %as_type [concrete = constants.%Z] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.4f1, @T.as.DefaultOrUnformed.impl.Op(constants.%Z) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc27_3: ref %Z = splice_block %u.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %Z to %.loc27_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %u.var, %T.as.DefaultOrUnformed.impl.Op.call // CHECK:STDOUT: %Z.ref.loc27: type = name_ref Z, file.%Z.decl [concrete = constants.%Z] // CHECK:STDOUT: %u: ref %Z = ref_binding u, %u.var // CHECK:STDOUT: %T.ref: %A.type.ab6 = name_ref T, %T.loc26_16.2 [symbolic = %T.loc26_16.1 (constants.%T.2bc)] diff --git a/toolchain/check/testdata/interface/import.carbon b/toolchain/check/testdata/interface/import.carbon index d1aceb4b6912..57087110cc88 100644 --- a/toolchain/check/testdata/interface/import.carbon +++ b/toolchain/check/testdata/interface/import.carbon @@ -72,14 +72,27 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %ForwardDeclared.WithSelf.F: %ForwardDeclared.WithSelf.F.type = struct_value () [symbolic] // CHECK:STDOUT: %assoc1.91f: %ForwardDeclared.assoc_type = assoc_entity element1, @ForwardDeclared.WithSelf.%ForwardDeclared.WithSelf.F.decl [concrete] // CHECK:STDOUT: %struct_type.f: type = struct_type {.f: %ForwardDeclared.type} [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.f [concrete] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %struct_type.f [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.527: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%struct_type.f) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.8d4: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%struct_type.f) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.100: %T.as.DefaultOrUnformed.impl.Op.type.8d4 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %struct_type.f, (%DefaultOrUnformed.impl_witness.527) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.100, @T.as.DefaultOrUnformed.impl.Op(%struct_type.f) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -95,8 +108,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %Basic.decl: type = interface_decl @Basic [concrete = constants.%Basic.type] {} {} // CHECK:STDOUT: %ForwardDeclared.decl: type = interface_decl @ForwardDeclared [concrete = constants.%ForwardDeclared.type] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f_ref.patt: %pattern_type = ref_binding_pattern f_ref [concrete] -// CHECK:STDOUT: %f_ref.var_patt: %pattern_type = var_pattern %f_ref.patt [concrete] +// CHECK:STDOUT: %f_ref.patt: %pattern_type.afe = ref_binding_pattern f_ref [concrete] +// CHECK:STDOUT: %f_ref.var_patt: %pattern_type.afe = var_pattern %f_ref.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %f_ref.var: ref %struct_type.f = var %f_ref.var_patt [concrete] // CHECK:STDOUT: %.loc20: type = splice_block %struct_type.f [concrete = constants.%struct_type.f] { @@ -165,6 +178,18 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%struct_type.f, (constants.%DefaultOrUnformed.impl_witness.527) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc20_33.1: %DefaultOrUnformed.type = converted constants.%struct_type.f, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc20_33.1 [concrete = constants.%struct_type.f] +// CHECK:STDOUT: %.loc20_33.2: type = converted %.loc20_33.1, %as_type [concrete = constants.%struct_type.f] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.100, @T.as.DefaultOrUnformed.impl.Op(constants.%struct_type.f) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %struct_type.f = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%f_ref.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: specific @Empty.WithSelf(constants.%Self.61e) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Basic.WithSelf(constants.%Self.3e6) {} diff --git a/toolchain/check/testdata/interop/cpp/builtins.carbon b/toolchain/check/testdata/interop/cpp/builtins.carbon index b6e4c7bfcb8f..3f042f0544ba 100644 --- a/toolchain/check/testdata/interop/cpp/builtins.carbon +++ b/toolchain/check/testdata/interop/cpp/builtins.carbon @@ -510,6 +510,12 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %unsigned_int: type = class_type @unsigned_int [concrete] // CHECK:STDOUT: %pattern_type.5ec: type = pattern_type %unsigned_int [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.4c4: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%unsigned_int) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %unsigned_int, (%DefaultOrUnformed.impl_witness.4c4) [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.4a9: type = pattern_type %u32 [concrete] @@ -527,6 +533,8 @@ fn F() { // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %unsigned_int.decl: type = class_decl @unsigned_int [concrete = constants.%unsigned_int] {} {} +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %unsigned_int.foo.cpp_overload_set.value: %unsigned_int.foo.cpp_overload_set.type = cpp_overload_set_value @unsigned_int.foo.cpp_overload_set [concrete = constants.%unsigned_int.foo.cpp_overload_set.value] // CHECK:STDOUT: %unsigned_int.foo.decl: %unsigned_int.foo.type = fn_decl @unsigned_int.foo [concrete = constants.%unsigned_int.foo] { // CHECK:STDOUT: %self.patt: %pattern_type.5ec = ref_binding_pattern self [concrete] @@ -547,7 +555,15 @@ fn F() { // CHECK:STDOUT: %unsigned_int.var_patt: %pattern_type.5ec = var_pattern %unsigned_int.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %unsigned_int.var: ref %unsigned_int = var %unsigned_int.var_patt -// CHECK:STDOUT: %.loc12: type = splice_block %unsigned_int.ref.loc12 [concrete = constants.%unsigned_int] { +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%unsigned_int, (constants.%DefaultOrUnformed.impl_witness.4c4) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc12_38.1: %DefaultOrUnformed.type = converted constants.%unsigned_int, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc12_38.1 [concrete = constants.%unsigned_int] +// CHECK:STDOUT: %.loc12_38.2: type = converted %.loc12_38.1, %as_type [concrete = constants.%unsigned_int] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc12_3: ref %unsigned_int = splice_block %unsigned_int.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %unsigned_int to %.loc12_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %unsigned_int.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc12_25: type = splice_block %unsigned_int.ref.loc12 [concrete = constants.%unsigned_int] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %unsigned_int.ref.loc12: type = name_ref unsigned_int, imports.%unsigned_int.decl [concrete = constants.%unsigned_int] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/function/class.carbon b/toolchain/check/testdata/interop/cpp/function/class.carbon index 8c9505fe7473..532c8878a728 100644 --- a/toolchain/check/testdata/interop/cpp/function/class.carbon +++ b/toolchain/check/testdata/interop/cpp/function/class.carbon @@ -652,6 +652,12 @@ fn F() { // CHECK:STDOUT: %ptr.838: type = ptr_type %C [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6df: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%C) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %C, (%DefaultOrUnformed.impl_witness.6df) [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] // CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -673,6 +679,8 @@ fn F() { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%c.param: %C) { @@ -688,7 +696,15 @@ fn F() { // CHECK:STDOUT: %x.var_patt: %pattern_type.69f = var_pattern %x.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %C = var %x.var_patt -// CHECK:STDOUT: %.loc10: type = splice_block %C.ref.loc10 [concrete = constants.%C] { +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%C, (constants.%DefaultOrUnformed.impl_witness.6df) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc10_24.1: %DefaultOrUnformed.type = converted constants.%C, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc10_24.1 [concrete = constants.%C] +// CHECK:STDOUT: %.loc10_24.2: type = converted %.loc10_24.1, %as_type [concrete = constants.%C] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc10_3: ref %C = splice_block %x.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %C to %.loc10_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %x.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc10_22: type = splice_block %C.ref.loc10 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc10: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C] @@ -758,6 +774,12 @@ fn F() { // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.cff: type = pattern_type %O [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.938: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%O) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %O, (%DefaultOrUnformed.impl_witness.938) [concrete] // CHECK:STDOUT: %O.cpp_destructor.type: type = fn_type @O.cpp_destructor [concrete] // CHECK:STDOUT: %O.cpp_destructor: %O.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -775,6 +797,8 @@ fn F() { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%c.param: %C) { @@ -790,7 +814,15 @@ fn F() { // CHECK:STDOUT: %x.var_patt: %pattern_type.cff = var_pattern %x.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %O = var %x.var_patt -// CHECK:STDOUT: %.loc9: type = splice_block %O.ref.loc9 [concrete = constants.%O] { +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.938) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc9_22.1: %DefaultOrUnformed.type = converted constants.%O, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc9_22.1 [concrete = constants.%O] +// CHECK:STDOUT: %.loc9_22.2: type = converted %.loc9_22.1, %as_type [concrete = constants.%O] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc9_3: ref %O = splice_block %x.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %O to %.loc9_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %x.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc9_20: type = splice_block %O.ref.loc9 [concrete = constants.%O] { // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %O.ref.loc9: type = name_ref O, imports.%O.decl [concrete = constants.%O] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/function/decayed_param.carbon b/toolchain/check/testdata/interop/cpp/function/decayed_param.carbon index 90867525ea7b..f11441a9d259 100644 --- a/toolchain/check/testdata/interop/cpp/function/decayed_param.carbon +++ b/toolchain/check/testdata/interop/cpp/function/decayed_param.carbon @@ -82,8 +82,21 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete] -// CHECK:STDOUT: %array_type: type = array_type %int_42, %i32 [concrete] -// CHECK:STDOUT: %pattern_type.b6e: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %array_type.643: type = array_type %int_42, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.b6e: type = pattern_type %array_type.643 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %UnformedInit.type: type = facet_type <@UnformedInit> [concrete] +// CHECK:STDOUT: %T.c4d: %UnformedInit.type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.binding.as_type.as.DefaultOrUnformed.impl.Op.type.8c3: type = fn_type @T.binding.as_type.as.DefaultOrUnformed.impl.Op.2, @T.binding.as_type.as.DefaultOrUnformed.impl.90a(%T.c4d) [symbolic] +// CHECK:STDOUT: %T.binding.as_type.as.DefaultOrUnformed.impl.Op.2df: %T.binding.as_type.as.DefaultOrUnformed.impl.Op.type.8c3 = struct_value () [symbolic] +// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic] +// CHECK:STDOUT: %UnformedInit.impl_witness.340: = impl_witness imports.%UnformedInit.impl_witness_table.c5f, @Int.as.UnformedInit.impl(%int_32) [concrete] +// CHECK:STDOUT: %UnformedInit.facet.b6d: %UnformedInit.type = facet_value %i32, (%UnformedInit.impl_witness.340) [concrete] +// CHECK:STDOUT: %UnformedInit.impl_witness.90e: = impl_witness imports.%UnformedInit.impl_witness_table.60d, @array_type.as.UnformedInit.impl(%UnformedInit.facet.b6d, %int_42) [concrete] +// CHECK:STDOUT: %UnformedInit.facet.40a: %UnformedInit.type = facet_value %array_type.643, (%UnformedInit.impl_witness.90e) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.eb0: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.626, @T.binding.as_type.as.DefaultOrUnformed.impl.90a(%UnformedInit.facet.40a) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %array_type.643, (%DefaultOrUnformed.impl_witness.eb0) [concrete] // CHECK:STDOUT: %TakesArray.cpp_overload_set.type: type = cpp_overload_set_type @TakesArray.cpp_overload_set [concrete] // CHECK:STDOUT: %TakesArray.cpp_overload_set.value: %TakesArray.cpp_overload_set.type = cpp_overload_set_value @TakesArray.cpp_overload_set [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -91,7 +104,6 @@ fn F() { // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6 = struct_value () [symbolic] -// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.impl_witness.6bc: = impl_witness imports.%ImplicitAs.impl_witness_table.74f, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e0d: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e0d = struct_value () [concrete] @@ -106,7 +118,6 @@ fn F() { // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %T.542: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.e1f: = lookup_impl_witness %ptr.e8f, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.617: %Destroy.type = facet_value %ptr.e8f, (%Destroy.lookup_impl_witness.e1f) [symbolic] // CHECK:STDOUT: %MaybeUnformed.2e9: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.617) [symbolic] @@ -161,6 +172,10 @@ fn F() { // CHECK:STDOUT: .nullptr = @F.%uninit // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import_ref.e09: @T.binding.as_type.as.DefaultOrUnformed.impl.90a.%T.binding.as_type.as.DefaultOrUnformed.impl.Op.type (%T.binding.as_type.as.DefaultOrUnformed.impl.Op.type.8c3) = import_ref Core//prelude/default, loc{{\d+_\d+}}, loaded [symbolic = @T.binding.as_type.as.DefaultOrUnformed.impl.90a.%T.binding.as_type.as.DefaultOrUnformed.impl.Op (constants.%T.binding.as_type.as.DefaultOrUnformed.impl.Op.2df)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.626 = impl_witness_table (%Core.import_ref.e09), @T.binding.as_type.as.DefaultOrUnformed.impl.90a [concrete] +// CHECK:STDOUT: %UnformedInit.impl_witness_table.60d = impl_witness_table (), @array_type.as.UnformedInit.impl [concrete] +// CHECK:STDOUT: %UnformedInit.impl_witness_table.c5f = impl_witness_table (), @Int.as.UnformedInit.impl [concrete] // CHECK:STDOUT: %TakesArray.cpp_overload_set.value: %TakesArray.cpp_overload_set.type = cpp_overload_set_value @TakesArray.cpp_overload_set [concrete = constants.%TakesArray.cpp_overload_set.value] // CHECK:STDOUT: %Core.import_ref.42d: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -196,16 +211,24 @@ fn F() { // CHECK:STDOUT: %n.patt: %pattern_type.b6e = ref_binding_pattern n [concrete] // CHECK:STDOUT: %n.var_patt: %pattern_type.b6e = var_pattern %n.patt [concrete] // CHECK:STDOUT: } -// CHECK:STDOUT: %n.var: ref %array_type = var %n.var_patt -// CHECK:STDOUT: %.loc10: type = splice_block %array_type [concrete = constants.%array_type] { +// CHECK:STDOUT: %n.var: ref %array_type.643 = var %n.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%array_type.643, (constants.%DefaultOrUnformed.impl_witness.eb0) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc10_24.1: %DefaultOrUnformed.type = converted constants.%array_type.643, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc10_24.1 [concrete = constants.%array_type.643] +// CHECK:STDOUT: %.loc10_24.2: type = converted %.loc10_24.1, %as_type [concrete = constants.%array_type.643] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc10_3: ref %array_type.643 = splice_block %n.var {} +// CHECK:STDOUT: %T.binding.as_type.as.DefaultOrUnformed.impl.Op.call: init %array_type.643 to %.loc10_3 = call %T.binding.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %n.var, %T.binding.as_type.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc10_23: type = splice_block %array_type [concrete = constants.%array_type.643] { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete = constants.%int_42] -// CHECK:STDOUT: %array_type: type = array_type %int_42, %i32 [concrete = constants.%array_type] +// CHECK:STDOUT: %array_type: type = array_type %int_42, %i32 [concrete = constants.%array_type.643] // CHECK:STDOUT: } -// CHECK:STDOUT: %n: ref %array_type = ref_binding n, %n.var +// CHECK:STDOUT: %n: ref %array_type.643 = ref_binding n, %n.var // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %TakesArray.ref.loc11: %TakesArray.cpp_overload_set.type = name_ref TakesArray, imports.%TakesArray.cpp_overload_set.value [concrete = constants.%TakesArray.cpp_overload_set.value] -// CHECK:STDOUT: %n.ref: ref %array_type = name_ref n, %n +// CHECK:STDOUT: %n.ref: ref %array_type.643 = name_ref n, %n // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] // CHECK:STDOUT: %impl.elem0.loc11_21: %.545 = impl_witness_access constants.%ImplicitAs.impl_witness.6bc, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5] // CHECK:STDOUT: %bound_method.loc11_21.1: = bound_method %int_0, %impl.elem0.loc11_21 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] @@ -252,7 +275,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.Op.loc13(%self.param: ref %Optional.75d) = "no_op"; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc10(%self.param: ref %array_type) = "no_op"; +// CHECK:STDOUT: fn @Destroy.Op.loc10(%self.param: ref %array_type.643) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_call_params_2.carbon // CHECK:STDOUT: @@ -267,8 +290,19 @@ fn F() { // CHECK:STDOUT: %Function.cpp_overload_set.type: type = cpp_overload_set_type @Function.cpp_overload_set [concrete] // CHECK:STDOUT: %Function.cpp_overload_set.value: %Function.cpp_overload_set.type = cpp_overload_set_value @Function.cpp_overload_set [concrete] // CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete] -// CHECK:STDOUT: %array_type: type = array_type %int_42, %i32 [concrete] -// CHECK:STDOUT: %pattern_type.b6e: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %array_type.643: type = array_type %int_42, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.b6e: type = pattern_type %array_type.643 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %UnformedInit.type: type = facet_type <@UnformedInit> [concrete] +// CHECK:STDOUT: %T.c4d: %UnformedInit.type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.binding.as_type.as.DefaultOrUnformed.impl.Op.type.8c3: type = fn_type @T.binding.as_type.as.DefaultOrUnformed.impl.Op.2, @T.binding.as_type.as.DefaultOrUnformed.impl.90a(%T.c4d) [symbolic] +// CHECK:STDOUT: %T.binding.as_type.as.DefaultOrUnformed.impl.Op.2df: %T.binding.as_type.as.DefaultOrUnformed.impl.Op.type.8c3 = struct_value () [symbolic] +// CHECK:STDOUT: %UnformedInit.impl_witness.340: = impl_witness imports.%UnformedInit.impl_witness_table.c5f, @Int.as.UnformedInit.impl(%int_32) [concrete] +// CHECK:STDOUT: %UnformedInit.facet.b6d: %UnformedInit.type = facet_value %i32, (%UnformedInit.impl_witness.340) [concrete] +// CHECK:STDOUT: %UnformedInit.impl_witness.90e: = impl_witness imports.%UnformedInit.impl_witness_table.60d, @array_type.as.UnformedInit.impl(%UnformedInit.facet.b6d, %int_42) [concrete] +// CHECK:STDOUT: %UnformedInit.facet.40a: %UnformedInit.type = facet_value %array_type.643, (%UnformedInit.impl_witness.90e) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.eb0: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.626, @T.binding.as_type.as.DefaultOrUnformed.impl.90a(%UnformedInit.facet.40a) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %array_type.643, (%DefaultOrUnformed.impl_witness.eb0) [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.e8c: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -300,6 +334,10 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %TakesFunction.cpp_overload_set.value: %TakesFunction.cpp_overload_set.type = cpp_overload_set_value @TakesFunction.cpp_overload_set [concrete = constants.%TakesFunction.cpp_overload_set.value] // CHECK:STDOUT: %Function.cpp_overload_set.value: %Function.cpp_overload_set.type = cpp_overload_set_value @Function.cpp_overload_set [concrete = constants.%Function.cpp_overload_set.value] +// CHECK:STDOUT: %Core.import_ref.e09: @T.binding.as_type.as.DefaultOrUnformed.impl.90a.%T.binding.as_type.as.DefaultOrUnformed.impl.Op.type (%T.binding.as_type.as.DefaultOrUnformed.impl.Op.type.8c3) = import_ref Core//prelude/default, loc{{\d+_\d+}}, loaded [symbolic = @T.binding.as_type.as.DefaultOrUnformed.impl.90a.%T.binding.as_type.as.DefaultOrUnformed.impl.Op (constants.%T.binding.as_type.as.DefaultOrUnformed.impl.Op.2df)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.626 = impl_witness_table (%Core.import_ref.e09), @T.binding.as_type.as.DefaultOrUnformed.impl.90a [concrete] +// CHECK:STDOUT: %UnformedInit.impl_witness_table.60d = impl_witness_table (), @array_type.as.UnformedInit.impl [concrete] +// CHECK:STDOUT: %UnformedInit.impl_witness_table.c5f = impl_witness_table (), @Int.as.UnformedInit.impl [concrete] // CHECK:STDOUT: %Core.import_ref.42d: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: } @@ -317,16 +355,24 @@ fn F() { // CHECK:STDOUT: %n.patt: %pattern_type.b6e = ref_binding_pattern n [concrete] // CHECK:STDOUT: %n.var_patt: %pattern_type.b6e = var_pattern %n.patt [concrete] // CHECK:STDOUT: } -// CHECK:STDOUT: %n.var: ref %array_type = var %n.var_patt -// CHECK:STDOUT: %.loc22: type = splice_block %array_type [concrete = constants.%array_type] { +// CHECK:STDOUT: %n.var: ref %array_type.643 = var %n.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%array_type.643, (constants.%DefaultOrUnformed.impl_witness.eb0) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc22_24.1: %DefaultOrUnformed.type = converted constants.%array_type.643, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc22_24.1 [concrete = constants.%array_type.643] +// CHECK:STDOUT: %.loc22_24.2: type = converted %.loc22_24.1, %as_type [concrete = constants.%array_type.643] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc22_3: ref %array_type.643 = splice_block %n.var {} +// CHECK:STDOUT: %T.binding.as_type.as.DefaultOrUnformed.impl.Op.call: init %array_type.643 to %.loc22_3 = call %T.binding.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %n.var, %T.binding.as_type.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc22_23: type = splice_block %array_type [concrete = constants.%array_type.643] { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete = constants.%int_42] -// CHECK:STDOUT: %array_type: type = array_type %int_42, %i32 [concrete = constants.%array_type] +// CHECK:STDOUT: %array_type: type = array_type %int_42, %i32 [concrete = constants.%array_type.643] // CHECK:STDOUT: } -// CHECK:STDOUT: %n: ref %array_type = ref_binding n, %n.var +// CHECK:STDOUT: %n: ref %array_type.643 = ref_binding n, %n.var // CHECK:STDOUT: %Cpp.ref.loc31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %TakesFunction.ref.loc31: %TakesFunction.cpp_overload_set.type = name_ref TakesFunction, imports.%TakesFunction.cpp_overload_set.value [concrete = constants.%TakesFunction.cpp_overload_set.value] -// CHECK:STDOUT: %n.ref: ref %array_type = name_ref n, %n +// CHECK:STDOUT: %n.ref: ref %array_type.643 = name_ref n, %n // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] // CHECK:STDOUT: %impl.elem0: %.545 = impl_witness_access constants.%ImplicitAs.impl_witness.6bc, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5] // CHECK:STDOUT: %bound_method.loc31_24.1: = bound_method %int_0, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] @@ -347,5 +393,5 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc22(%self.param: ref %array_type) = "no_op"; +// CHECK:STDOUT: fn @Destroy.Op.loc22(%self.param: ref %array_type.643) = "no_op"; // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/reference.carbon b/toolchain/check/testdata/interop/cpp/function/reference.carbon index ee6c3aa0b729..2e61acc8324d 100644 --- a/toolchain/check/testdata/interop/cpp/function/reference.carbon +++ b/toolchain/check/testdata/interop/cpp/function/reference.carbon @@ -380,11 +380,19 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %pattern_type.7da: type = pattern_type %S [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6b7: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%S) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.d8f: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.6b7) [concrete] // CHECK:STDOUT: %TakesLValue.cpp_overload_set.type: type = cpp_overload_set_type @TakesLValue.cpp_overload_set [concrete] // CHECK:STDOUT: %TakesLValue.cpp_overload_set.value: %TakesLValue.cpp_overload_set.type = cpp_overload_set_value @TakesLValue.cpp_overload_set [concrete] // CHECK:STDOUT: %const: type = const_type %S [concrete] -// CHECK:STDOUT: %T: type = class_type @T [concrete] -// CHECK:STDOUT: %pattern_type.e6b: type = pattern_type %T [concrete] +// CHECK:STDOUT: %T.e15: type = class_type @T [concrete] +// CHECK:STDOUT: %pattern_type.e6b: type = pattern_type %T.e15 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.a11: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%T.e15) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.5fe: %DefaultOrUnformed.type = facet_value %T.e15, (%DefaultOrUnformed.impl_witness.a11) [concrete] // CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete] // CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %T.cpp_destructor.type: type = fn_type @T.cpp_destructor [concrete] @@ -399,8 +407,10 @@ fn F() { // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %TakesLValue.cpp_overload_set.value: %TakesLValue.cpp_overload_set.type = cpp_overload_set_value @TakesLValue.cpp_overload_set [concrete = constants.%TakesLValue.cpp_overload_set.value] -// CHECK:STDOUT: %T.decl: type = class_decl @T [concrete = constants.%T] {} {} +// CHECK:STDOUT: %T.decl: type = class_decl @T [concrete = constants.%T.e15] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { @@ -410,7 +420,15 @@ fn F() { // CHECK:STDOUT: %v.var_patt: %pattern_type.7da = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %S = var %v.var_patt -// CHECK:STDOUT: %.loc8: type = splice_block %S.ref.loc8 [concrete = constants.%S] { +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.6b7) [concrete = constants.%DefaultOrUnformed.facet.d8f] +// CHECK:STDOUT: %.loc8_15.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.d8f] +// CHECK:STDOUT: %as_type.loc8: type = facet_access_type %.loc8_15.1 [concrete = constants.%S] +// CHECK:STDOUT: %.loc8_15.2: type = converted %.loc8_15.1, %as_type.loc8 [concrete = constants.%S] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc8_3: ref %S = splice_block %v.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc8: init %S to %.loc8_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.1() +// CHECK:STDOUT: assign %v.var, %T.as.DefaultOrUnformed.impl.Op.call.loc8 +// CHECK:STDOUT: %.loc8_13: type = splice_block %S.ref.loc8 [concrete = constants.%S] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %S.ref.loc8: type = name_ref S, imports.%S.decl [concrete = constants.%S] // CHECK:STDOUT: } @@ -440,21 +458,37 @@ fn F() { // CHECK:STDOUT: %t.patt: %pattern_type.e6b = ref_binding_pattern t [concrete] // CHECK:STDOUT: %t.var_patt: %pattern_type.e6b = var_pattern %t.patt [concrete] // CHECK:STDOUT: } -// CHECK:STDOUT: %t.var: ref %T = var %t.var_patt -// CHECK:STDOUT: %.loc30: type = splice_block %T.ref [concrete = constants.%T] { +// CHECK:STDOUT: %t.var: ref %T.e15 = var %t.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc30: %DefaultOrUnformed.type = facet_value constants.%T.e15, (constants.%DefaultOrUnformed.impl_witness.a11) [concrete = constants.%DefaultOrUnformed.facet.5fe] +// CHECK:STDOUT: %.loc30_15.1: %DefaultOrUnformed.type = converted constants.%T.e15, %DefaultOrUnformed.facet.loc30 [concrete = constants.%DefaultOrUnformed.facet.5fe] +// CHECK:STDOUT: %as_type.loc30: type = facet_access_type %.loc30_15.1 [concrete = constants.%T.e15] +// CHECK:STDOUT: %.loc30_15.2: type = converted %.loc30_15.1, %as_type.loc30 [concrete = constants.%T.e15] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc30_3: ref %T.e15 = splice_block %t.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc30: init %T.e15 to %.loc30_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.2() +// CHECK:STDOUT: assign %t.var, %T.as.DefaultOrUnformed.impl.Op.call.loc30 +// CHECK:STDOUT: %.loc30_13: type = splice_block %T.ref [concrete = constants.%T.e15] { // CHECK:STDOUT: %Cpp.ref.loc30: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %T.ref: type = name_ref T, imports.%T.decl [concrete = constants.%T] +// CHECK:STDOUT: %T.ref: type = name_ref T, imports.%T.decl [concrete = constants.%T.e15] // CHECK:STDOUT: } -// CHECK:STDOUT: %t: ref %T = ref_binding t, %t.var +// CHECK:STDOUT: %t: ref %T.e15 = ref_binding t, %t.var // CHECK:STDOUT: %Cpp.ref.loc39: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %TakesLValue.ref.loc39: %TakesLValue.cpp_overload_set.type = name_ref TakesLValue, imports.%TakesLValue.cpp_overload_set.value [concrete = constants.%TakesLValue.cpp_overload_set.value] -// CHECK:STDOUT: %t.ref: ref %T = name_ref t, %t +// CHECK:STDOUT: %t.ref: ref %T.e15 = name_ref t, %t // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %u.patt: %pattern_type.7da = ref_binding_pattern u [concrete] // CHECK:STDOUT: %u.var_patt: %pattern_type.7da = var_pattern %u.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %u.var: ref %S = var %u.var_patt -// CHECK:STDOUT: %.loc41: type = splice_block %S.ref.loc41 [concrete = constants.%S] { +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc41: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.6b7) [concrete = constants.%DefaultOrUnformed.facet.d8f] +// CHECK:STDOUT: %.loc41_15.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet.loc41 [concrete = constants.%DefaultOrUnformed.facet.d8f] +// CHECK:STDOUT: %as_type.loc41: type = facet_access_type %.loc41_15.1 [concrete = constants.%S] +// CHECK:STDOUT: %.loc41_15.2: type = converted %.loc41_15.1, %as_type.loc41 [concrete = constants.%S] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc41_3: ref %S = splice_block %u.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc41: init %S to %.loc41_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.3() +// CHECK:STDOUT: assign %u.var, %T.as.DefaultOrUnformed.impl.Op.call.loc41 +// CHECK:STDOUT: %.loc41_13: type = splice_block %S.ref.loc41 [concrete = constants.%S] { // CHECK:STDOUT: %Cpp.ref.loc41: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %S.ref.loc41: type = name_ref S, imports.%S.decl [concrete = constants.%S] // CHECK:STDOUT: } @@ -535,10 +569,18 @@ fn F() { // CHECK:STDOUT: %S: type = class_type @S [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.7da: type = pattern_type %S [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6b7: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%S) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.d8f: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.6b7) [concrete] // CHECK:STDOUT: %TakesRValue.cpp_overload_set.type: type = cpp_overload_set_type @TakesRValue.cpp_overload_set [concrete] // CHECK:STDOUT: %TakesRValue.cpp_overload_set.value: %TakesRValue.cpp_overload_set.type = cpp_overload_set_value @TakesRValue.cpp_overload_set [concrete] -// CHECK:STDOUT: %T: type = class_type @T [concrete] -// CHECK:STDOUT: %pattern_type.e6b: type = pattern_type %T [concrete] +// CHECK:STDOUT: %T.e15: type = class_type @T [concrete] +// CHECK:STDOUT: %pattern_type.e6b: type = pattern_type %T.e15 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.a11: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%T.e15) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.5fe: %DefaultOrUnformed.type = facet_value %T.e15, (%DefaultOrUnformed.impl_witness.a11) [concrete] // CHECK:STDOUT: %empty_struct.a40: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %S.val: %S = struct_value () [concrete] // CHECK:STDOUT: %const: type = const_type %S [concrete] @@ -557,8 +599,10 @@ fn F() { // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %TakesRValue.cpp_overload_set.value: %TakesRValue.cpp_overload_set.type = cpp_overload_set_value @TakesRValue.cpp_overload_set [concrete = constants.%TakesRValue.cpp_overload_set.value] -// CHECK:STDOUT: %T.decl: type = class_decl @T [concrete = constants.%T] {} {} +// CHECK:STDOUT: %T.decl: type = class_decl @T [concrete = constants.%T.e15] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { @@ -568,7 +612,15 @@ fn F() { // CHECK:STDOUT: %s.var_patt: %pattern_type.7da = var_pattern %s.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %S = var %s.var_patt -// CHECK:STDOUT: %.loc8: type = splice_block %S.ref.loc8 [concrete = constants.%S] { +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.6b7) [concrete = constants.%DefaultOrUnformed.facet.d8f] +// CHECK:STDOUT: %.loc8_15.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.d8f] +// CHECK:STDOUT: %as_type.loc8: type = facet_access_type %.loc8_15.1 [concrete = constants.%S] +// CHECK:STDOUT: %.loc8_15.2: type = converted %.loc8_15.1, %as_type.loc8 [concrete = constants.%S] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc8_3: ref %S = splice_block %s.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc8: init %S to %.loc8_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.1() +// CHECK:STDOUT: assign %s.var, %T.as.DefaultOrUnformed.impl.Op.call.loc8 +// CHECK:STDOUT: %.loc8_13: type = splice_block %S.ref.loc8 [concrete = constants.%S] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %S.ref.loc8: type = name_ref S, imports.%S.decl [concrete = constants.%S] // CHECK:STDOUT: } @@ -580,15 +632,23 @@ fn F() { // CHECK:STDOUT: %t.patt: %pattern_type.e6b = ref_binding_pattern t [concrete] // CHECK:STDOUT: %t.var_patt: %pattern_type.e6b = var_pattern %t.patt [concrete] // CHECK:STDOUT: } -// CHECK:STDOUT: %t.var: ref %T = var %t.var_patt -// CHECK:STDOUT: %.loc19: type = splice_block %T.ref [concrete = constants.%T] { +// CHECK:STDOUT: %t.var: ref %T.e15 = var %t.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc19: %DefaultOrUnformed.type = facet_value constants.%T.e15, (constants.%DefaultOrUnformed.impl_witness.a11) [concrete = constants.%DefaultOrUnformed.facet.5fe] +// CHECK:STDOUT: %.loc19_15.1: %DefaultOrUnformed.type = converted constants.%T.e15, %DefaultOrUnformed.facet.loc19 [concrete = constants.%DefaultOrUnformed.facet.5fe] +// CHECK:STDOUT: %as_type.loc19: type = facet_access_type %.loc19_15.1 [concrete = constants.%T.e15] +// CHECK:STDOUT: %.loc19_15.2: type = converted %.loc19_15.1, %as_type.loc19 [concrete = constants.%T.e15] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc19_3: ref %T.e15 = splice_block %t.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc19: init %T.e15 to %.loc19_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.2() +// CHECK:STDOUT: assign %t.var, %T.as.DefaultOrUnformed.impl.Op.call.loc19 +// CHECK:STDOUT: %.loc19_13: type = splice_block %T.ref [concrete = constants.%T.e15] { // CHECK:STDOUT: %Cpp.ref.loc19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %T.ref: type = name_ref T, imports.%T.decl [concrete = constants.%T] +// CHECK:STDOUT: %T.ref: type = name_ref T, imports.%T.decl [concrete = constants.%T.e15] // CHECK:STDOUT: } -// CHECK:STDOUT: %t: ref %T = ref_binding t, %t.var +// CHECK:STDOUT: %t: ref %T.e15 = ref_binding t, %t.var // CHECK:STDOUT: %Cpp.ref.loc28: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %TakesRValue.ref.loc28: %TakesRValue.cpp_overload_set.type = name_ref TakesRValue, imports.%TakesRValue.cpp_overload_set.value [concrete = constants.%TakesRValue.cpp_overload_set.value] -// CHECK:STDOUT: %t.ref: ref %T = name_ref t, %t +// CHECK:STDOUT: %t.ref: ref %T.e15 = name_ref t, %t // CHECK:STDOUT: %Cpp.ref.loc38_3: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %TakesRValue.ref.loc38: %TakesRValue.cpp_overload_set.type = name_ref TakesRValue, imports.%TakesRValue.cpp_overload_set.value [concrete = constants.%TakesRValue.cpp_overload_set.value] // CHECK:STDOUT: %.loc38_21.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct.a40] diff --git a/toolchain/check/testdata/interop/cpp/function/struct.carbon b/toolchain/check/testdata/interop/cpp/function/struct.carbon index d848d0f175a1..b90d30d4eae3 100644 --- a/toolchain/check/testdata/interop/cpp/function/struct.carbon +++ b/toolchain/check/testdata/interop/cpp/function/struct.carbon @@ -651,6 +651,12 @@ fn F() { // CHECK:STDOUT: %ptr.edf: type = ptr_type %S [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.590: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%S) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.590) [concrete] // CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete] // CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -672,6 +678,8 @@ fn F() { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%s.param: %S) { @@ -687,7 +695,15 @@ fn F() { // CHECK:STDOUT: %x.var_patt: %pattern_type.cd8 = var_pattern %x.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %S = var %x.var_patt -// CHECK:STDOUT: %.loc10: type = splice_block %S.ref.loc10 [concrete = constants.%S] { +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.590) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc10_24.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc10_24.1 [concrete = constants.%S] +// CHECK:STDOUT: %.loc10_24.2: type = converted %.loc10_24.1, %as_type [concrete = constants.%S] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc10_3: ref %S = splice_block %x.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %S to %.loc10_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %x.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc10_22: type = splice_block %S.ref.loc10 [concrete = constants.%S] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc10: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %S.ref.loc10: type = name_ref S, imports.%S.decl [concrete = constants.%S] @@ -757,6 +773,12 @@ fn F() { // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.cff: type = pattern_type %O [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.938: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%O) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %O, (%DefaultOrUnformed.impl_witness.938) [concrete] // CHECK:STDOUT: %O.cpp_destructor.type: type = fn_type @O.cpp_destructor [concrete] // CHECK:STDOUT: %O.cpp_destructor: %O.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -774,6 +796,8 @@ fn F() { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%s.param: %S) { @@ -789,7 +813,15 @@ fn F() { // CHECK:STDOUT: %x.var_patt: %pattern_type.cff = var_pattern %x.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %O = var %x.var_patt -// CHECK:STDOUT: %.loc9: type = splice_block %O.ref.loc9 [concrete = constants.%O] { +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.938) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc9_22.1: %DefaultOrUnformed.type = converted constants.%O, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc9_22.1 [concrete = constants.%O] +// CHECK:STDOUT: %.loc9_22.2: type = converted %.loc9_22.1, %as_type [concrete = constants.%O] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc9_3: ref %O = splice_block %x.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %O to %.loc9_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %x.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc9_20: type = splice_block %O.ref.loc9 [concrete = constants.%O] { // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %O.ref.loc9: type = name_ref O, imports.%O.decl [concrete = constants.%O] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/function/union.carbon b/toolchain/check/testdata/interop/cpp/function/union.carbon index 993b0517df76..2d82d6a245bb 100644 --- a/toolchain/check/testdata/interop/cpp/function/union.carbon +++ b/toolchain/check/testdata/interop/cpp/function/union.carbon @@ -576,6 +576,12 @@ fn F() { // CHECK:STDOUT: %ptr.87e: type = ptr_type %U [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.860: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%U) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %U, (%DefaultOrUnformed.impl_witness.860) [concrete] // CHECK:STDOUT: %U.cpp_destructor.type: type = fn_type @U.cpp_destructor [concrete] // CHECK:STDOUT: %U.cpp_destructor: %U.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -597,6 +603,8 @@ fn F() { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%u.param: %U) { @@ -612,7 +620,15 @@ fn F() { // CHECK:STDOUT: %x.var_patt: %pattern_type.eb9 = var_pattern %x.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %U = var %x.var_patt -// CHECK:STDOUT: %.loc10: type = splice_block %U.ref.loc10 [concrete = constants.%U] { +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%U, (constants.%DefaultOrUnformed.impl_witness.860) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc10_24.1: %DefaultOrUnformed.type = converted constants.%U, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc10_24.1 [concrete = constants.%U] +// CHECK:STDOUT: %.loc10_24.2: type = converted %.loc10_24.1, %as_type [concrete = constants.%U] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc10_3: ref %U = splice_block %x.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %U to %.loc10_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %x.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc10_22: type = splice_block %U.ref.loc10 [concrete = constants.%U] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc10: = name_ref N, imports.%N [concrete = imports.%N] // CHECK:STDOUT: %U.ref.loc10: type = name_ref U, imports.%U.decl [concrete = constants.%U] @@ -682,6 +698,12 @@ fn F() { // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.cff: type = pattern_type %O [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.938: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%O) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %O, (%DefaultOrUnformed.impl_witness.938) [concrete] // CHECK:STDOUT: %O.cpp_destructor.type: type = fn_type @O.cpp_destructor [concrete] // CHECK:STDOUT: %O.cpp_destructor: %O.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -699,6 +721,8 @@ fn F() { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%u.param: %U) { @@ -714,7 +738,15 @@ fn F() { // CHECK:STDOUT: %x.var_patt: %pattern_type.cff = var_pattern %x.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %O = var %x.var_patt -// CHECK:STDOUT: %.loc9: type = splice_block %O.ref.loc9 [concrete = constants.%O] { +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.938) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc9_22.1: %DefaultOrUnformed.type = converted constants.%O, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc9_22.1 [concrete = constants.%O] +// CHECK:STDOUT: %.loc9_22.2: type = converted %.loc9_22.1, %as_type [concrete = constants.%O] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc9_3: ref %O = splice_block %x.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %O to %.loc9_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %x.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc9_20: type = splice_block %O.ref.loc9 [concrete = constants.%O] { // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %O.ref.loc9: type = name_ref O, imports.%O.decl [concrete = constants.%O] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/import.carbon b/toolchain/check/testdata/interop/cpp/import.carbon index 999dfb6dce8e..dee8f2dd70cb 100644 --- a/toolchain/check/testdata/interop/cpp/import.carbon +++ b/toolchain/check/testdata/interop/cpp/import.carbon @@ -165,6 +165,7 @@ fn F() { // CHECK:STDOUT: %x.var_patt: = var_pattern %x.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref = var %x.var_patt [concrete = ] +// CHECK:STDOUT: assign %x.var, // CHECK:STDOUT: %MyStructAlias.ref: type = name_ref MyStructAlias, imports.%Main.MyStructAlias [concrete = ] // CHECK:STDOUT: %x: ref = ref_binding x, [concrete = ] // CHECK:STDOUT: %x.ref: ref = name_ref x, %x [concrete = ] diff --git a/toolchain/check/testdata/interop/cpp/template/argument_count.carbon b/toolchain/check/testdata/interop/cpp/template/argument_count.carbon index 9db5de554547..15bb962ab179 100644 --- a/toolchain/check/testdata/interop/cpp/template/argument_count.carbon +++ b/toolchain/check/testdata/interop/cpp/template/argument_count.carbon @@ -122,29 +122,70 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %TwoTypes [concrete] +// CHECK:STDOUT: %pattern_type.2da: type = pattern_type %TwoTypes [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.679: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%TwoTypes) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTypes, (%DefaultOrUnformed.impl_witness.679) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.2da = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.2da = var_pattern %x.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %TwoTypes = var %x.var_patt [concrete] // CHECK:STDOUT: %x: ref %TwoTypes = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTypes, (constants.%DefaultOrUnformed.impl_witness.679) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc7_34.1: %DefaultOrUnformed.type = converted constants.%TwoTypes, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc7_34.1 [concrete = constants.%TwoTypes] +// CHECK:STDOUT: %.loc7_34.2: type = converted %.loc7_34.1, %as_type [concrete = constants.%TwoTypes] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc7_1: ref %TwoTypes = splice_block file.%x.var [concrete = file.%x.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %TwoTypes to %.loc7_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%x.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- pack.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %TypePack.49edc4.1: type = class_type @TypePack.1 [concrete] // CHECK:STDOUT: %pattern_type.9db866.1: type = pattern_type %TypePack.49edc4.1 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.bca864.1: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%TypePack.49edc4.1) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.95dbcc.1: %DefaultOrUnformed.type = facet_value %TypePack.49edc4.1, (%DefaultOrUnformed.impl_witness.bca864.1) [concrete] // CHECK:STDOUT: %TypePack.49edc4.2: type = class_type @TypePack.2 [concrete] // CHECK:STDOUT: %pattern_type.9db866.2: type = pattern_type %TypePack.49edc4.2 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.bca864.2: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%TypePack.49edc4.2) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.95dbcc.2: %DefaultOrUnformed.type = facet_value %TypePack.49edc4.2, (%DefaultOrUnformed.impl_witness.bca864.2) [concrete] // CHECK:STDOUT: %TypePack.49edc4.3: type = class_type @TypePack.3 [concrete] // CHECK:STDOUT: %pattern_type.9db866.3: type = pattern_type %TypePack.49edc4.3 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.bca864.3: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%TypePack.49edc4.3) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.95dbcc.3: %DefaultOrUnformed.type = facet_value %TypePack.49edc4.3, (%DefaultOrUnformed.impl_witness.bca864.3) [concrete] // CHECK:STDOUT: %TypePack.49edc4.4: type = class_type @TypePack.4 [concrete] // CHECK:STDOUT: %pattern_type.9db866.4: type = pattern_type %TypePack.49edc4.4 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.bca864.4: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%TypePack.49edc4.4) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.95dbcc.4: %DefaultOrUnformed.type = facet_value %TypePack.49edc4.4, (%DefaultOrUnformed.impl_witness.bca864.4) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -174,3 +215,40 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B); // CHECK:STDOUT: %a3: ref %TypePack.49edc4.4 = ref_binding a3, %a3.var [concrete = %a3.var] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc7: %DefaultOrUnformed.type = facet_value constants.%TypePack.49edc4.1, (constants.%DefaultOrUnformed.impl_witness.bca864.1) [concrete = constants.%DefaultOrUnformed.facet.95dbcc.1] +// CHECK:STDOUT: %.loc7_23.1: %DefaultOrUnformed.type = converted constants.%TypePack.49edc4.1, %DefaultOrUnformed.facet.loc7 [concrete = constants.%DefaultOrUnformed.facet.95dbcc.1] +// CHECK:STDOUT: %as_type.loc7: type = facet_access_type %.loc7_23.1 [concrete = constants.%TypePack.49edc4.1] +// CHECK:STDOUT: %.loc7_23.2: type = converted %.loc7_23.1, %as_type.loc7 [concrete = constants.%TypePack.49edc4.1] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc7_1: ref %TypePack.49edc4.1 = splice_block file.%a0.var [concrete = file.%a0.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc7: init %TypePack.49edc4.1 to %.loc7_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.1() +// CHECK:STDOUT: assign file.%a0.var, %T.as.DefaultOrUnformed.impl.Op.call.loc7 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%TypePack.49edc4.2, (constants.%DefaultOrUnformed.impl_witness.bca864.2) [concrete = constants.%DefaultOrUnformed.facet.95dbcc.2] +// CHECK:STDOUT: %.loc8_28.1: %DefaultOrUnformed.type = converted constants.%TypePack.49edc4.2, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.95dbcc.2] +// CHECK:STDOUT: %as_type.loc8: type = facet_access_type %.loc8_28.1 [concrete = constants.%TypePack.49edc4.2] +// CHECK:STDOUT: %.loc8_28.2: type = converted %.loc8_28.1, %as_type.loc8 [concrete = constants.%TypePack.49edc4.2] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc8_1: ref %TypePack.49edc4.2 = splice_block file.%a1.var [concrete = file.%a1.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc8: init %TypePack.49edc4.2 to %.loc8_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.2() +// CHECK:STDOUT: assign file.%a1.var, %T.as.DefaultOrUnformed.impl.Op.call.loc8 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc9: %DefaultOrUnformed.type = facet_value constants.%TypePack.49edc4.3, (constants.%DefaultOrUnformed.impl_witness.bca864.3) [concrete = constants.%DefaultOrUnformed.facet.95dbcc.3] +// CHECK:STDOUT: %.loc9_35.1: %DefaultOrUnformed.type = converted constants.%TypePack.49edc4.3, %DefaultOrUnformed.facet.loc9 [concrete = constants.%DefaultOrUnformed.facet.95dbcc.3] +// CHECK:STDOUT: %as_type.loc9: type = facet_access_type %.loc9_35.1 [concrete = constants.%TypePack.49edc4.3] +// CHECK:STDOUT: %.loc9_35.2: type = converted %.loc9_35.1, %as_type.loc9 [concrete = constants.%TypePack.49edc4.3] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc9_1: ref %TypePack.49edc4.3 = splice_block file.%a2.var [concrete = file.%a2.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc9: init %TypePack.49edc4.3 to %.loc9_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.3() +// CHECK:STDOUT: assign file.%a2.var, %T.as.DefaultOrUnformed.impl.Op.call.loc9 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc10: %DefaultOrUnformed.type = facet_value constants.%TypePack.49edc4.4, (constants.%DefaultOrUnformed.impl_witness.bca864.4) [concrete = constants.%DefaultOrUnformed.facet.95dbcc.4] +// CHECK:STDOUT: %.loc10_42.1: %DefaultOrUnformed.type = converted constants.%TypePack.49edc4.4, %DefaultOrUnformed.facet.loc10 [concrete = constants.%DefaultOrUnformed.facet.95dbcc.4] +// CHECK:STDOUT: %as_type.loc10: type = facet_access_type %.loc10_42.1 [concrete = constants.%TypePack.49edc4.4] +// CHECK:STDOUT: %.loc10_42.2: type = converted %.loc10_42.1, %as_type.loc10 [concrete = constants.%TypePack.49edc4.4] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc10_1: ref %TypePack.49edc4.4 = splice_block file.%a3.var [concrete = file.%a3.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc10: init %TypePack.49edc4.4 to %.loc10_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.4() +// CHECK:STDOUT: assign file.%a3.var, %T.as.DefaultOrUnformed.impl.Op.call.loc10 +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/template/non_type_param.carbon b/toolchain/check/testdata/interop/cpp/template/non_type_param.carbon index dd55afc88103..812f22315818 100644 --- a/toolchain/check/testdata/interop/cpp/template/non_type_param.carbon +++ b/toolchain/check/testdata/interop/cpp/template/non_type_param.carbon @@ -118,7 +118,7 @@ library "[[@TEST_NAME]]"; import Cpp library "templates.h"; //@dump-sem-ir-begin -var x: Cpp.TwoNonType(1, 2); +var x: Cpp.TwoNonType(1, 2) = {}; //@dump-sem-ir-end // --- dependent.carbon @@ -129,7 +129,7 @@ import Cpp library "templates.h"; //@dump-sem-ir-begin var x: Cpp.DependentNonType(i32, 123) = Cpp.MakeDependentNonType123(); -var y: Cpp.DependentNonType(i32*, &Cpp.StaticInt); +var y: Cpp.DependentNonType(i32*, &Cpp.StaticInt) = {}; //@dump-sem-ir-end // --- fail_type_argument.carbon @@ -139,13 +139,13 @@ library "[[@TEST_NAME]]"; import Cpp library "templates.h"; // CHECK:STDERR: fail_type_argument.carbon:[[@LINE+7]]:26: error: cannot implicitly convert expression of type `type` to `i32` [ConversionFailure] -// CHECK:STDERR: var x: Cpp.TwoNonType(1, Cpp.A); +// CHECK:STDERR: var x: Cpp.TwoNonType(1, Cpp.A) = {}; // CHECK:STDERR: ^~~~~ // CHECK:STDERR: fail_type_argument.carbon:[[@LINE+4]]:26: note: type `type` does not implement interface `Core.ImplicitAs(i32)` [MissingImplInMemberAccessInContext] -// CHECK:STDERR: var x: Cpp.TwoNonType(1, Cpp.A); +// CHECK:STDERR: var x: Cpp.TwoNonType(1, Cpp.A) = {}; // CHECK:STDERR: ^~~~~ // CHECK:STDERR: -var x: Cpp.TwoNonType(1, Cpp.A); +var x: Cpp.TwoNonType(1, Cpp.A) = {}; // --- fail_no_conversion.carbon @@ -156,13 +156,13 @@ import Cpp library "templates.h"; var n: i32; // CHECK:STDERR: fail_no_conversion.carbon:[[@LINE+7]]:26: error: cannot implicitly convert expression of type `i32*` to `i32` [ConversionFailure] -// CHECK:STDERR: var x: Cpp.TwoNonType(1, &n); +// CHECK:STDERR: var x: Cpp.TwoNonType(1, &n) = {}; // CHECK:STDERR: ^~ // CHECK:STDERR: fail_no_conversion.carbon:[[@LINE+4]]:26: note: type `i32*` does not implement interface `Core.ImplicitAs(i32)` [MissingImplInMemberAccessInContext] -// CHECK:STDERR: var x: Cpp.TwoNonType(1, &n); +// CHECK:STDERR: var x: Cpp.TwoNonType(1, &n) = {}; // CHECK:STDERR: ^~ // CHECK:STDERR: -var x: Cpp.TwoNonType(1, &n); +var x: Cpp.TwoNonType(1, &n) = {}; // --- dependent_parameter_pack.carbon @@ -182,7 +182,10 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %TwoNonType: type = class_type @TwoNonType [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.8a6: type = pattern_type %TwoNonType [concrete] +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: %TwoNonType.val: %TwoNonType = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -194,6 +197,15 @@ fn G() -> i32 { // CHECK:STDOUT: %x: ref %TwoNonType = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %.loc7_32.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc7_32.2: init %TwoNonType to file.%x.var = class_init () [concrete = constants.%TwoNonType.val] +// CHECK:STDOUT: %.loc7_1: init %TwoNonType = converted %.loc7_32.1, %.loc7_32.2 [concrete = constants.%TwoNonType.val] +// CHECK:STDOUT: assign file.%x.var, %.loc7_1 +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- dependent.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -204,6 +216,7 @@ fn G() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %DependentNonType.794fcf.1: type = class_type @DependentNonType.1 [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %pattern_type.b95a71.1: type = pattern_type %DependentNonType.794fcf.1 [concrete] // CHECK:STDOUT: %MakeDependentNonType123.cpp_overload_set.type: type = cpp_overload_set_type @MakeDependentNonType123.cpp_overload_set [concrete] // CHECK:STDOUT: %MakeDependentNonType123.cpp_overload_set.value: %MakeDependentNonType123.cpp_overload_set.type = cpp_overload_set_value @MakeDependentNonType123.cpp_overload_set [concrete] @@ -212,6 +225,8 @@ fn G() -> i32 { // CHECK:STDOUT: %MakeDependentNonType123__carbon_thunk: %MakeDependentNonType123__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %DependentNonType.794fcf.2: type = class_type @DependentNonType.2 [concrete] // CHECK:STDOUT: %pattern_type.b95a71.2: type = pattern_type %DependentNonType.794fcf.2 [concrete] +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: %DependentNonType.val: %DependentNonType.794fcf.2 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -257,6 +272,10 @@ fn G() -> i32 { // CHECK:STDOUT: %MakeDependentNonType123__carbon_thunk.call: init %empty_tuple.type = call imports.%MakeDependentNonType123__carbon_thunk.decl(%addr) // CHECK:STDOUT: %.loc7_69: init %DependentNonType.794fcf.1 to %.loc7_1 = mark_in_place_init %MakeDependentNonType123__carbon_thunk.call // CHECK:STDOUT: assign file.%x.var, %.loc7_69 +// CHECK:STDOUT: %.loc8_54.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc8_54.2: init %DependentNonType.794fcf.2 to file.%y.var = class_init () [concrete = constants.%DependentNonType.val] +// CHECK:STDOUT: %.loc8_1: init %DependentNonType.794fcf.2 = converted %.loc8_54.1, %.loc8_54.2 [concrete = constants.%DependentNonType.val] +// CHECK:STDOUT: assign file.%y.var, %.loc8_1 // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/template/template_template_param.carbon b/toolchain/check/testdata/interop/cpp/template/template_template_param.carbon index bcc736ec642a..b3c3b58cf254 100644 --- a/toolchain/check/testdata/interop/cpp/template/template_template_param.carbon +++ b/toolchain/check/testdata/interop/cpp/template/template_template_param.carbon @@ -84,18 +84,42 @@ var x: Cpp.TwoTemplates(Cpp.A, true); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %TwoTemplates: type = class_type @TwoTemplates [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %TwoTemplates [concrete] +// CHECK:STDOUT: %pattern_type.2b7: type = pattern_type %TwoTemplates [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.cea: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%TwoTemplates) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTemplates, (%DefaultOrUnformed.impl_witness.cea) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.2b7 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.2b7 = var_pattern %x.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %TwoTemplates = var %x.var_patt [concrete] // CHECK:STDOUT: %x: ref %TwoTemplates = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTemplates, (constants.%DefaultOrUnformed.impl_witness.cea) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc7_38.1: %DefaultOrUnformed.type = converted constants.%TwoTemplates, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc7_38.1 [concrete = constants.%TwoTemplates] +// CHECK:STDOUT: %.loc7_38.2: type = converted %.loc7_38.1, %as_type [concrete = constants.%TwoTemplates] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc7_1: ref %TwoTemplates = splice_block file.%x.var [concrete = file.%x.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %TwoTemplates to %.loc7_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%x.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- fail_template_mismatch.carbon // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -107,3 +131,9 @@ var x: Cpp.TwoTemplates(Cpp.A, true); // CHECK:STDOUT: %x: ref = ref_binding x, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%x.var, +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/template/type_param.carbon b/toolchain/check/testdata/interop/cpp/template/type_param.carbon index 48e831299adf..6f1718f3a7aa 100644 --- a/toolchain/check/testdata/interop/cpp/template/type_param.carbon +++ b/toolchain/check/testdata/interop/cpp/template/type_param.carbon @@ -68,23 +68,18 @@ var x: Cpp.TwoTypes(Cpp.A, {}); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %TwoTypes [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %x.var: ref %TwoTypes = var %x.var_patt [concrete] -// CHECK:STDOUT: %x: ref %TwoTypes = ref_binding x, %x.var [concrete = %x.var] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: --- char.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete] // CHECK:STDOUT: %pattern_type.2da: type = pattern_type %TwoTypes [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.679: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%TwoTypes) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTypes, (%DefaultOrUnformed.impl_witness.679) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -96,3 +91,56 @@ var x: Cpp.TwoTypes(Cpp.A, {}); // CHECK:STDOUT: %x: ref %TwoTypes = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTypes, (constants.%DefaultOrUnformed.impl_witness.679) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc7_34.1: %DefaultOrUnformed.type = converted constants.%TwoTypes, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc7_34.1 [concrete = constants.%TwoTypes] +// CHECK:STDOUT: %.loc7_34.2: type = converted %.loc7_34.1, %as_type [concrete = constants.%TwoTypes] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc7_1: ref %TwoTypes = splice_block file.%x.var [concrete = file.%x.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %TwoTypes to %.loc7_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%x.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- char.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete] +// CHECK:STDOUT: %pattern_type.2da: type = pattern_type %TwoTypes [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.679: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%TwoTypes) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTypes, (%DefaultOrUnformed.impl_witness.679) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %x.patt: %pattern_type.2da = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.2da = var_pattern %x.patt [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: %x.var: ref %TwoTypes = var %x.var_patt [concrete] +// CHECK:STDOUT: %x: ref %TwoTypes = ref_binding x, %x.var [concrete = %x.var] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTypes, (constants.%DefaultOrUnformed.impl_witness.679) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc7_32.1: %DefaultOrUnformed.type = converted constants.%TwoTypes, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc7_32.1 [concrete = constants.%TwoTypes] +// CHECK:STDOUT: %.loc7_32.2: type = converted %.loc7_32.1, %as_type [concrete = constants.%TwoTypes] +// CHECK:STDOUT: +// CHECK:STDOUT: %.loc7_1: ref %TwoTypes = splice_block file.%x.var [concrete = file.%x.var] {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %TwoTypes to %.loc7_1 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%x.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/let/generic_import.carbon b/toolchain/check/testdata/let/generic_import.carbon index 6a53503cf505..1a76f7e89532 100644 --- a/toolchain/check/testdata/let/generic_import.carbon +++ b/toolchain/check/testdata/let/generic_import.carbon @@ -121,6 +121,7 @@ var b: T = *a; // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%a.var, // CHECK:STDOUT: %a.ref: ref = name_ref a, file.%a [concrete = ] // CHECK:STDOUT: %.loc13: ref = deref [concrete = ] // CHECK:STDOUT: assign file.%b.var, diff --git a/toolchain/check/testdata/named_constraint/invalid_members.carbon b/toolchain/check/testdata/named_constraint/invalid_members.carbon index 40bda30496bb..6fe064e761e1 100644 --- a/toolchain/check/testdata/named_constraint/invalid_members.carbon +++ b/toolchain/check/testdata/named_constraint/invalid_members.carbon @@ -30,7 +30,7 @@ library "[[@TEST_NAME]]"; constraint E { // TODO: Any var in a constraint is an error. - var c: (); + var c: () = (); } // --- fail_todo_invalid_var_template.carbon @@ -46,7 +46,7 @@ library "[[@TEST_NAME]]"; // CHECK:STDERR: template constraint E { // TODO: Any var in a constraint is an error. - var c: (); + var c: () = (); } // --- todo_fail_invalid_let.carbon @@ -54,7 +54,7 @@ library "[[@TEST_NAME]]"; constraint E { // TODO: Any let in a constraint is an error. - var c: (); + var c: () = (); } // --- fail_todo_invalid_let_template.carbon @@ -70,5 +70,5 @@ library "[[@TEST_NAME]]"; // CHECK:STDERR: template constraint E { // TODO: Any let in a constraint is an error. - var c: (); + var c: () = (); } diff --git a/toolchain/check/testdata/namespace/merging_with_indirections.carbon b/toolchain/check/testdata/namespace/merging_with_indirections.carbon index ffd3e0393ea5..89bfc6e08a97 100644 --- a/toolchain/check/testdata/namespace/merging_with_indirections.carbon +++ b/toolchain/check/testdata/namespace/merging_with_indirections.carbon @@ -170,6 +170,15 @@ fn Run() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.272: type = pattern_type %A [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.c9e: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%A) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.ffd: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%A) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.993: %T.as.DefaultOrUnformed.impl.Op.type.ffd = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %A, (%DefaultOrUnformed.impl_witness.c9e) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.993, @T.as.DefaultOrUnformed.impl.Op(%A) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] @@ -177,6 +186,7 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... @@ -197,6 +207,9 @@ fn Run() { // CHECK:STDOUT: import Other//a // CHECK:STDOUT: } // CHECK:STDOUT: %Other.A: type = import_ref Other//a, A, loaded [concrete = constants.%A] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -230,7 +243,15 @@ fn Run() { // CHECK:STDOUT: %a.var_patt: %pattern_type.272 = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt -// CHECK:STDOUT: %.loc10: type = splice_block %A.ref [concrete = constants.%A] { +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%A, (constants.%DefaultOrUnformed.impl_witness.c9e) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc10_21.1: %DefaultOrUnformed.type = converted constants.%A, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc10_21.1 [concrete = constants.%A] +// CHECK:STDOUT: %.loc10_21.2: type = converted %.loc10_21.1, %as_type [concrete = constants.%A] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.993, @T.as.DefaultOrUnformed.impl.Op(constants.%A) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %.loc10_3: ref %A = splice_block %a.var {} +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %A to %.loc10_3 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %a.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc10_19: type = splice_block %A.ref [concrete = constants.%A] { // CHECK:STDOUT: %Other.ref.loc10: = name_ref Other, imports.%Other [concrete = imports.%Other] // CHECK:STDOUT: %NS1.ref: = name_ref NS1, imports.%NS1.f3d [concrete = imports.%NS1.f3d] // CHECK:STDOUT: %A.ref: type = name_ref A, imports.%Other.A [concrete = constants.%A] diff --git a/toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon b/toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon index 644d50f03edb..970385dbfa46 100644 --- a/toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon @@ -97,6 +97,7 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: %a.var_patt: = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref = var %a.var_patt [concrete = ] +// CHECK:STDOUT: assign %a.var, // CHECK:STDOUT: br !.loc9_20 // CHECK:STDOUT: // CHECK:STDOUT: !.loc9_20: @@ -132,6 +133,7 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: %b.var_patt: = var_pattern %b.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref = var %b.var_patt [concrete = ] +// CHECK:STDOUT: assign %b.var, // CHECK:STDOUT: br !.loc14_20 // CHECK:STDOUT: // CHECK:STDOUT: !.loc14_20: @@ -215,6 +217,7 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: %c.var_patt: = var_pattern %c.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref = var %c.var_patt [concrete = ] +// CHECK:STDOUT: assign %c.var, // CHECK:STDOUT: br !.loc11_20 // CHECK:STDOUT: // CHECK:STDOUT: !.loc11_20: @@ -250,6 +253,7 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: %d.var_patt: = var_pattern %d.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref = var %d.var_patt [concrete = ] +// CHECK:STDOUT: assign %d.var, // CHECK:STDOUT: br !.loc16_20 // CHECK:STDOUT: // CHECK:STDOUT: !.loc16_20: diff --git a/toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon b/toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon index 576fa2396232..208debc41ac4 100644 --- a/toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon @@ -78,6 +78,7 @@ fn Main() { // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] +// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Copy.impl_witness.98e: = impl_witness imports.%Copy.impl_witness_table.d8f [concrete] // CHECK:STDOUT: %Copy.facet.34f: %Copy.type = facet_value Core.IntLiteral, (%Copy.impl_witness.98e) [concrete] // CHECK:STDOUT: %Copy.WithSelf.Op.type.42e: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.34f) [concrete] @@ -132,6 +133,14 @@ fn Main() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.061: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5 [concrete] // CHECK:STDOUT: %bound_method.fa7: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_3.822: %i32 = int_value 3 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T.67d) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.8d3: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%i32) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.c67: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%i32) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.137: %T.as.DefaultOrUnformed.impl.Op.type.c67 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %i32, (%DefaultOrUnformed.impl_witness.8d3) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.137, @T.as.DefaultOrUnformed.impl.Op(%i32) [concrete] // CHECK:STDOUT: %int_10.64f: Core.IntLiteral = int_value 10 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.2bf: = bound_method %int_10.64f, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5 [concrete] // CHECK:STDOUT: %bound_method.409: = bound_method %int_10.64f, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -146,6 +155,7 @@ fn Main() { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... @@ -159,6 +169,9 @@ fn Main() { // CHECK:STDOUT: %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.import_ref.1a7: %type.as.Copy.impl.Op.type = import_ref Core//prelude/parts/copy, loc{{\d+_\d+}}, loaded [concrete = constants.%type.as.Copy.impl.Op] // CHECK:STDOUT: %Copy.impl_witness_table.b1c = impl_witness_table (%Core.import_ref.1a7), @type.as.Copy.impl [concrete] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -334,6 +347,13 @@ fn Main() { // CHECK:STDOUT: %a.var_patt: %pattern_type.7ce = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%i32, (constants.%DefaultOrUnformed.impl_witness.8d3) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc56_13.1: %DefaultOrUnformed.type = converted constants.%i32, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc56_13.1 [concrete = constants.%i32] +// CHECK:STDOUT: %.loc56_13.2: type = converted %.loc56_13.1, %as_type [concrete = constants.%i32] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.137, @T.as.DefaultOrUnformed.impl.Op(constants.%i32) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %i32 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign %a.var, %T.as.DefaultOrUnformed.impl.Op.call // CHECK:STDOUT: %i32.loc56: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %a: ref %i32 = ref_binding a, %a.var // CHECK:STDOUT: %true.loc61: bool = bool_literal true [concrete = constants.%true] diff --git a/toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon b/toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon index 4101bc388ac1..4f4795d35286 100644 --- a/toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon +++ b/toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon @@ -73,15 +73,28 @@ import library "var"; // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.8d3: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%i32) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.c67: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%i32) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.137: %T.as.DefaultOrUnformed.impl.Op.type.c67 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %i32, (%DefaultOrUnformed.impl_witness.8d3) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.137, @T.as.DefaultOrUnformed.impl.Op(%i32) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -99,6 +112,18 @@ import library "var"; // CHECK:STDOUT: %Foo: ref %i32 = ref_binding Foo, %Foo.var [concrete = %Foo.var] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%i32, (constants.%DefaultOrUnformed.impl_witness.8d3) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc4_13.1: %DefaultOrUnformed.type = converted constants.%i32, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc4_13.1 [concrete = constants.%i32] +// CHECK:STDOUT: %.loc4_13.2: type = converted %.loc4_13.1, %as_type [concrete = constants.%i32] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.137, @T.as.DefaultOrUnformed.impl.Op(constants.%i32) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %i32 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%Foo.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- fail_conflict.carbon // CHECK:STDOUT: // CHECK:STDOUT: imports { diff --git a/toolchain/check/testdata/packages/fail_import_type_error.carbon b/toolchain/check/testdata/packages/fail_import_type_error.carbon index 78196e7622f7..fa23b4bcd41d 100644 --- a/toolchain/check/testdata/packages/fail_import_type_error.carbon +++ b/toolchain/check/testdata/packages/fail_import_type_error.carbon @@ -106,6 +106,15 @@ var d: i32 = d_ref; // CHECK:STDOUT: %d_ref: ref = ref_binding d_ref, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%a_ref.var, +// CHECK:STDOUT: assign file.%b_ref.var, +// CHECK:STDOUT: assign file.%c_ref.var, +// CHECK:STDOUT: assign file.%d_ref.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- implicit.impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/packages/missing_prelude.carbon b/toolchain/check/testdata/packages/missing_prelude.carbon index 2f4523541c27..69479fc8b931 100644 --- a/toolchain/check/testdata/packages/missing_prelude.carbon +++ b/toolchain/check/testdata/packages/missing_prelude.carbon @@ -139,6 +139,12 @@ let n: type = i32; // CHECK:STDOUT: %n: ref = ref_binding n, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%n.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- prelude_empty.carbon // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -169,6 +175,12 @@ let n: type = i32; // CHECK:STDOUT: %n: ref = ref_binding n, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%n.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- prelude_fake_int.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/patterns/tuple.carbon b/toolchain/check/testdata/patterns/tuple.carbon index e011eb5e29d9..d5904a1b9f89 100644 --- a/toolchain/check/testdata/patterns/tuple.carbon +++ b/toolchain/check/testdata/patterns/tuple.carbon @@ -35,7 +35,7 @@ let (a: (), b: ()) = F(); library "[[@TEST_NAME]]"; -var t: ((), ()); +var t: ((), ()) = ((), ()); //@dump-sem-ir-begin let (a: (), b: ()) = t; //@dump-sem-ir-end @@ -133,9 +133,9 @@ let (a: (), b: ()) = t; // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type [concrete] -// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %tuple.elem0: ref %empty_tuple.type = tuple_access file.%t.var, element0 [concrete] // CHECK:STDOUT: %tuple.elem1: ref %empty_tuple.type = tuple_access file.%t.var, element1 [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -164,6 +164,7 @@ let (a: (), b: ()) = t; // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: // CHECK:STDOUT: %t.ref: ref %tuple.type = name_ref t, file.%t [concrete = file.%t.var] // CHECK:STDOUT: // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/pointer/fail_deref_type.carbon b/toolchain/check/testdata/pointer/fail_deref_type.carbon index ce066fa06de8..119613cfeb79 100644 --- a/toolchain/check/testdata/pointer/fail_deref_type.carbon +++ b/toolchain/check/testdata/pointer/fail_deref_type.carbon @@ -74,3 +74,10 @@ var p2: i32->foo; // CHECK:STDOUT: %p2: ref = ref_binding p2, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%p.var, +// CHECK:STDOUT: assign file.%p2.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/primitives/type_literals.carbon b/toolchain/check/testdata/primitives/type_literals.carbon index b13661bfaf50..6c9139cf5131 100644 --- a/toolchain/check/testdata/primitives/type_literals.carbon +++ b/toolchain/check/testdata/primitives/type_literals.carbon @@ -275,15 +275,32 @@ var test_str: str = (); // CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: %i8: type = class_type @Int, @Int(%int_8) [concrete] // CHECK:STDOUT: %pattern_type.e3f: type = pattern_type %i8 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.8de: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%i8) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.e22: %DefaultOrUnformed.type = facet_value %i8, (%DefaultOrUnformed.impl_witness.8de) [concrete] // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] // CHECK:STDOUT: %i16: type = class_type @Int, @Int(%int_16) [concrete] // CHECK:STDOUT: %pattern_type.2f8: type = pattern_type %i16 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.e93: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%i16) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.cc9: %DefaultOrUnformed.type = facet_value %i16, (%DefaultOrUnformed.impl_witness.e93) [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.8d3: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%i32) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.266: %DefaultOrUnformed.type = facet_value %i32, (%DefaultOrUnformed.impl_witness.8d3) [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.95b: type = pattern_type %i64 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.3a1: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%i64) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.161: %DefaultOrUnformed.type = facet_value %i64, (%DefaultOrUnformed.impl_witness.3a1) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -317,21 +334,71 @@ var test_str: str = (); // CHECK:STDOUT: %test_i64: ref %i64 = ref_binding test_i64, %test_i64.var [concrete = %test_i64.var] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc4: %DefaultOrUnformed.type = facet_value constants.%i8, (constants.%DefaultOrUnformed.impl_witness.8de) [concrete = constants.%DefaultOrUnformed.facet.e22] +// CHECK:STDOUT: %.loc4_16.1: %DefaultOrUnformed.type = converted constants.%i8, %DefaultOrUnformed.facet.loc4 [concrete = constants.%DefaultOrUnformed.facet.e22] +// CHECK:STDOUT: %as_type.loc4: type = facet_access_type %.loc4_16.1 [concrete = constants.%i8] +// CHECK:STDOUT: %.loc4_16.2: type = converted %.loc4_16.1, %as_type.loc4 [concrete = constants.%i8] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc4: init %i8 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.1() +// CHECK:STDOUT: assign file.%test_i8.var, %T.as.DefaultOrUnformed.impl.Op.call.loc4 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc5: %DefaultOrUnformed.type = facet_value constants.%i16, (constants.%DefaultOrUnformed.impl_witness.e93) [concrete = constants.%DefaultOrUnformed.facet.cc9] +// CHECK:STDOUT: %.loc5_18.1: %DefaultOrUnformed.type = converted constants.%i16, %DefaultOrUnformed.facet.loc5 [concrete = constants.%DefaultOrUnformed.facet.cc9] +// CHECK:STDOUT: %as_type.loc5: type = facet_access_type %.loc5_18.1 [concrete = constants.%i16] +// CHECK:STDOUT: %.loc5_18.2: type = converted %.loc5_18.1, %as_type.loc5 [concrete = constants.%i16] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc5: init %i16 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.2() +// CHECK:STDOUT: assign file.%test_i16.var, %T.as.DefaultOrUnformed.impl.Op.call.loc5 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc6: %DefaultOrUnformed.type = facet_value constants.%i32, (constants.%DefaultOrUnformed.impl_witness.8d3) [concrete = constants.%DefaultOrUnformed.facet.266] +// CHECK:STDOUT: %.loc6_18.1: %DefaultOrUnformed.type = converted constants.%i32, %DefaultOrUnformed.facet.loc6 [concrete = constants.%DefaultOrUnformed.facet.266] +// CHECK:STDOUT: %as_type.loc6: type = facet_access_type %.loc6_18.1 [concrete = constants.%i32] +// CHECK:STDOUT: %.loc6_18.2: type = converted %.loc6_18.1, %as_type.loc6 [concrete = constants.%i32] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc6: init %i32 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.3() +// CHECK:STDOUT: assign file.%test_i32.var, %T.as.DefaultOrUnformed.impl.Op.call.loc6 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc7: %DefaultOrUnformed.type = facet_value constants.%i64, (constants.%DefaultOrUnformed.impl_witness.3a1) [concrete = constants.%DefaultOrUnformed.facet.161] +// CHECK:STDOUT: %.loc7_18.1: %DefaultOrUnformed.type = converted constants.%i64, %DefaultOrUnformed.facet.loc7 [concrete = constants.%DefaultOrUnformed.facet.161] +// CHECK:STDOUT: %as_type.loc7: type = facet_access_type %.loc7_18.1 [concrete = constants.%i64] +// CHECK:STDOUT: %.loc7_18.2: type = converted %.loc7_18.1, %as_type.loc7 [concrete = constants.%i64] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc7: init %i64 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.4() +// CHECK:STDOUT: assign file.%test_i64.var, %T.as.DefaultOrUnformed.impl.Op.call.loc7 +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- uN.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: %u8: type = class_type @UInt, @UInt(%int_8) [concrete] // CHECK:STDOUT: %pattern_type.8f3: type = pattern_type %u8 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.341: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%u8) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.56df: %DefaultOrUnformed.type = facet_value %u8, (%DefaultOrUnformed.impl_witness.341) [concrete] // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] // CHECK:STDOUT: %u16: type = class_type @UInt, @UInt(%int_16) [concrete] // CHECK:STDOUT: %pattern_type.9db: type = pattern_type %u16 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.f79: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%u16) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.ad7: %DefaultOrUnformed.type = facet_value %u16, (%DefaultOrUnformed.impl_witness.f79) [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.4a9: type = pattern_type %u32 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.486: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%u32) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.5f8: %DefaultOrUnformed.type = facet_value %u32, (%DefaultOrUnformed.impl_witness.486) [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %u64: type = class_type @UInt, @UInt(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.157: type = pattern_type %u64 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.8ea: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%u64) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.56d3: %DefaultOrUnformed.type = facet_value %u64, (%DefaultOrUnformed.impl_witness.8ea) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -365,21 +432,71 @@ var test_str: str = (); // CHECK:STDOUT: %test_u64: ref %u64 = ref_binding test_u64, %test_u64.var [concrete = %test_u64.var] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc4: %DefaultOrUnformed.type = facet_value constants.%u8, (constants.%DefaultOrUnformed.impl_witness.341) [concrete = constants.%DefaultOrUnformed.facet.56df] +// CHECK:STDOUT: %.loc4_16.1: %DefaultOrUnformed.type = converted constants.%u8, %DefaultOrUnformed.facet.loc4 [concrete = constants.%DefaultOrUnformed.facet.56df] +// CHECK:STDOUT: %as_type.loc4: type = facet_access_type %.loc4_16.1 [concrete = constants.%u8] +// CHECK:STDOUT: %.loc4_16.2: type = converted %.loc4_16.1, %as_type.loc4 [concrete = constants.%u8] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc4: init %u8 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.1() +// CHECK:STDOUT: assign file.%test_u8.var, %T.as.DefaultOrUnformed.impl.Op.call.loc4 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc5: %DefaultOrUnformed.type = facet_value constants.%u16, (constants.%DefaultOrUnformed.impl_witness.f79) [concrete = constants.%DefaultOrUnformed.facet.ad7] +// CHECK:STDOUT: %.loc5_18.1: %DefaultOrUnformed.type = converted constants.%u16, %DefaultOrUnformed.facet.loc5 [concrete = constants.%DefaultOrUnformed.facet.ad7] +// CHECK:STDOUT: %as_type.loc5: type = facet_access_type %.loc5_18.1 [concrete = constants.%u16] +// CHECK:STDOUT: %.loc5_18.2: type = converted %.loc5_18.1, %as_type.loc5 [concrete = constants.%u16] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc5: init %u16 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.2() +// CHECK:STDOUT: assign file.%test_u16.var, %T.as.DefaultOrUnformed.impl.Op.call.loc5 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc6: %DefaultOrUnformed.type = facet_value constants.%u32, (constants.%DefaultOrUnformed.impl_witness.486) [concrete = constants.%DefaultOrUnformed.facet.5f8] +// CHECK:STDOUT: %.loc6_18.1: %DefaultOrUnformed.type = converted constants.%u32, %DefaultOrUnformed.facet.loc6 [concrete = constants.%DefaultOrUnformed.facet.5f8] +// CHECK:STDOUT: %as_type.loc6: type = facet_access_type %.loc6_18.1 [concrete = constants.%u32] +// CHECK:STDOUT: %.loc6_18.2: type = converted %.loc6_18.1, %as_type.loc6 [concrete = constants.%u32] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc6: init %u32 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.3() +// CHECK:STDOUT: assign file.%test_u32.var, %T.as.DefaultOrUnformed.impl.Op.call.loc6 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc7: %DefaultOrUnformed.type = facet_value constants.%u64, (constants.%DefaultOrUnformed.impl_witness.8ea) [concrete = constants.%DefaultOrUnformed.facet.56d3] +// CHECK:STDOUT: %.loc7_18.1: %DefaultOrUnformed.type = converted constants.%u64, %DefaultOrUnformed.facet.loc7 [concrete = constants.%DefaultOrUnformed.facet.56d3] +// CHECK:STDOUT: %as_type.loc7: type = facet_access_type %.loc7_18.1 [concrete = constants.%u64] +// CHECK:STDOUT: %.loc7_18.2: type = converted %.loc7_18.1, %as_type.loc7 [concrete = constants.%u64] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc7: init %u64 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.4() +// CHECK:STDOUT: assign file.%test_u64.var, %T.as.DefaultOrUnformed.impl.Op.call.loc7 +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- fN.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] // CHECK:STDOUT: %f16.a6a: type = class_type @Float, @Float(%int_16) [concrete] // CHECK:STDOUT: %pattern_type.cd1: type = pattern_type %f16.a6a [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.a55: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%f16.a6a) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.671: %DefaultOrUnformed.type = facet_value %f16.a6a, (%DefaultOrUnformed.impl_witness.a55) [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %f32.97e: type = class_type @Float, @Float(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.201: type = pattern_type %f32.97e [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.567: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%f32.97e) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.60c: %DefaultOrUnformed.type = facet_value %f32.97e, (%DefaultOrUnformed.impl_witness.567) [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.d77: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.0ae: type = pattern_type %f64.d77 [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.461: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%f64.d77) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.625: %DefaultOrUnformed.type = facet_value %f64.d77, (%DefaultOrUnformed.impl_witness.461) [concrete] // CHECK:STDOUT: %int_128: Core.IntLiteral = int_value 128 [concrete] // CHECK:STDOUT: %f128.b8c: type = class_type @Float, @Float(%int_128) [concrete] // CHECK:STDOUT: %pattern_type.22c: type = pattern_type %f128.b8c [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.39e: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%f128.b8c) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.560: %DefaultOrUnformed.type = facet_value %f128.b8c, (%DefaultOrUnformed.impl_witness.39e) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -413,6 +530,39 @@ var test_str: str = (); // CHECK:STDOUT: %test_f128: ref %f128.b8c = ref_binding test_f128, %test_f128.var [concrete = %test_f128.var] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc4: %DefaultOrUnformed.type = facet_value constants.%f16.a6a, (constants.%DefaultOrUnformed.impl_witness.a55) [concrete = constants.%DefaultOrUnformed.facet.671] +// CHECK:STDOUT: %.loc4_18.1: %DefaultOrUnformed.type = converted constants.%f16.a6a, %DefaultOrUnformed.facet.loc4 [concrete = constants.%DefaultOrUnformed.facet.671] +// CHECK:STDOUT: %as_type.loc4: type = facet_access_type %.loc4_18.1 [concrete = constants.%f16.a6a] +// CHECK:STDOUT: %.loc4_18.2: type = converted %.loc4_18.1, %as_type.loc4 [concrete = constants.%f16.a6a] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc4: init %f16.a6a = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.1() +// CHECK:STDOUT: assign file.%test_f16.var, %T.as.DefaultOrUnformed.impl.Op.call.loc4 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc5: %DefaultOrUnformed.type = facet_value constants.%f32.97e, (constants.%DefaultOrUnformed.impl_witness.567) [concrete = constants.%DefaultOrUnformed.facet.60c] +// CHECK:STDOUT: %.loc5_18.1: %DefaultOrUnformed.type = converted constants.%f32.97e, %DefaultOrUnformed.facet.loc5 [concrete = constants.%DefaultOrUnformed.facet.60c] +// CHECK:STDOUT: %as_type.loc5: type = facet_access_type %.loc5_18.1 [concrete = constants.%f32.97e] +// CHECK:STDOUT: %.loc5_18.2: type = converted %.loc5_18.1, %as_type.loc5 [concrete = constants.%f32.97e] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc5: init %f32.97e = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.2() +// CHECK:STDOUT: assign file.%test_f32.var, %T.as.DefaultOrUnformed.impl.Op.call.loc5 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc6: %DefaultOrUnformed.type = facet_value constants.%f64.d77, (constants.%DefaultOrUnformed.impl_witness.461) [concrete = constants.%DefaultOrUnformed.facet.625] +// CHECK:STDOUT: %.loc6_18.1: %DefaultOrUnformed.type = converted constants.%f64.d77, %DefaultOrUnformed.facet.loc6 [concrete = constants.%DefaultOrUnformed.facet.625] +// CHECK:STDOUT: %as_type.loc6: type = facet_access_type %.loc6_18.1 [concrete = constants.%f64.d77] +// CHECK:STDOUT: %.loc6_18.2: type = converted %.loc6_18.1, %as_type.loc6 [concrete = constants.%f64.d77] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc6: init %f64.d77 = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.3() +// CHECK:STDOUT: assign file.%test_f64.var, %T.as.DefaultOrUnformed.impl.Op.call.loc6 +// CHECK:STDOUT: %DefaultOrUnformed.facet.loc7: %DefaultOrUnformed.type = facet_value constants.%f128.b8c, (constants.%DefaultOrUnformed.impl_witness.39e) [concrete = constants.%DefaultOrUnformed.facet.560] +// CHECK:STDOUT: %.loc7_20.1: %DefaultOrUnformed.type = converted constants.%f128.b8c, %DefaultOrUnformed.facet.loc7 [concrete = constants.%DefaultOrUnformed.facet.560] +// CHECK:STDOUT: %as_type.loc7: type = facet_access_type %.loc7_20.1 [concrete = constants.%f128.b8c] +// CHECK:STDOUT: %.loc7_20.2: type = converted %.loc7_20.1, %as_type.loc7 [concrete = constants.%f128.b8c] +// CHECK:STDOUT: +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call.loc7: init %f128.b8c = call %T.as.DefaultOrUnformed.impl.Op.specific_fn.4() +// CHECK:STDOUT: assign file.%test_f128.var, %T.as.DefaultOrUnformed.impl.Op.call.loc7 +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- char.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/struct/fail_nested_incomplete.carbon b/toolchain/check/testdata/struct/fail_nested_incomplete.carbon index afdd917569f5..83e6fe4cd3b7 100644 --- a/toolchain/check/testdata/struct/fail_nested_incomplete.carbon +++ b/toolchain/check/testdata/struct/fail_nested_incomplete.carbon @@ -67,6 +67,7 @@ var p: Incomplete* = &s.a; // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%s.var, // CHECK:STDOUT: %s.ref: ref = name_ref s, file.%s [concrete = ] // CHECK:STDOUT: %a.ref: = name_ref a, [concrete = ] // CHECK:STDOUT: %addr: = addr_of %a.ref [concrete = ] diff --git a/toolchain/check/testdata/struct/fail_value_as_type.carbon b/toolchain/check/testdata/struct/fail_value_as_type.carbon index fe5f07fdd90f..e3eb6ce6f34d 100644 --- a/toolchain/check/testdata/struct/fail_value_as_type.carbon +++ b/toolchain/check/testdata/struct/fail_value_as_type.carbon @@ -59,3 +59,9 @@ var x: {.a = 1}; // CHECK:STDOUT: %x: ref = ref_binding x, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: assign file.%x.var, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/tuple/tuple_pattern.carbon b/toolchain/check/testdata/tuple/tuple_pattern.carbon index 334e241d7ae8..2b51a271d4a5 100644 --- a/toolchain/check/testdata/tuple/tuple_pattern.carbon +++ b/toolchain/check/testdata/tuple/tuple_pattern.carbon @@ -15,10 +15,10 @@ library "[[@TEST_NAME]]"; -fn F() { +fn F(v: ({}, {})) { //@dump-sem-ir-begin let (unused x: {}, unused y: {}) = ({}, {}); - var (unused a: {}, unused b: {}); + var (unused a: {}, unused b: {}) = v; var (unused c: {}, unused d: {}) = ({}, {}); //@dump-sem-ir-end } @@ -102,18 +102,18 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: --- basic.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] -// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] -// CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type.b6b [concrete] // CHECK:STDOUT: %tuple: %tuple.type.b6b = tuple_value (%empty_struct, %empty_struct) [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type.b6b [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F() { +// CHECK:STDOUT: fn @F(%v.param: %tuple.type.b6b) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %x.patt: %pattern_type.a96 = value_binding_pattern x [concrete] @@ -144,18 +144,30 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: %.var_patt.loc7: %pattern_type.de4 = var_pattern %.loc7_34 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %.var.loc7: ref %tuple.type.b6b = var %.var_patt.loc7 -// CHECK:STDOUT: %tuple.elem0.loc7: ref %empty_struct_type = tuple_access %.var.loc7, element0 -// CHECK:STDOUT: %tuple.elem1.loc7: ref %empty_struct_type = tuple_access %.var.loc7, element1 +// CHECK:STDOUT: %v.ref: %tuple.type.b6b = name_ref v, %v +// CHECK:STDOUT: %tuple.elem0.loc7_38.1: %empty_struct_type = tuple_access %v.ref, element0 +// CHECK:STDOUT: %tuple.elem0.loc7_38.2: ref %empty_struct_type = tuple_access %.var.loc7, element0 +// CHECK:STDOUT: %.loc7_38.1: init %empty_struct_type = struct_init () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc7_38.2: init %empty_struct_type = converted %tuple.elem0.loc7_38.1, %.loc7_38.1 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %tuple.elem1.loc7_38.1: %empty_struct_type = tuple_access %v.ref, element1 +// CHECK:STDOUT: %tuple.elem1.loc7_38.2: ref %empty_struct_type = tuple_access %.var.loc7, element1 +// CHECK:STDOUT: %.loc7_38.3: init %empty_struct_type = struct_init () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc7_38.4: init %empty_struct_type = converted %tuple.elem1.loc7_38.1, %.loc7_38.3 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc7_38.5: init %tuple.type.b6b to %.var.loc7 = tuple_init (%.loc7_38.2, %.loc7_38.4) [concrete = constants.%tuple] +// CHECK:STDOUT: %.loc7_3: init %tuple.type.b6b = converted %v.ref, %.loc7_38.5 [concrete = constants.%tuple] +// CHECK:STDOUT: assign %.var.loc7, %.loc7_3 +// CHECK:STDOUT: %tuple.elem0.loc7_3: ref %empty_struct_type = tuple_access %.var.loc7, element0 +// CHECK:STDOUT: %tuple.elem1.loc7_3: ref %empty_struct_type = tuple_access %.var.loc7, element1 // CHECK:STDOUT: %.loc7_19.1: type = splice_block %.loc7_19.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc7_19.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc7_19.3: type = converted %.loc7_19.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: } -// CHECK:STDOUT: %a: ref %empty_struct_type = ref_binding a, %tuple.elem0.loc7 +// CHECK:STDOUT: %a: ref %empty_struct_type = ref_binding a, %tuple.elem0.loc7_3 // CHECK:STDOUT: %.loc7_33.1: type = splice_block %.loc7_33.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc7_33.2: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] // CHECK:STDOUT: %.loc7_33.3: type = converted %.loc7_33.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: } -// CHECK:STDOUT: %b: ref %empty_struct_type = ref_binding b, %tuple.elem1.loc7 +// CHECK:STDOUT: %b: ref %empty_struct_type = ref_binding b, %tuple.elem1.loc7_3 // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %c.patt: %pattern_type.a96 = ref_binding_pattern c [concrete] // CHECK:STDOUT: %d.patt: %pattern_type.a96 = ref_binding_pattern d [concrete] diff --git a/toolchain/check/testdata/var/decl.carbon b/toolchain/check/testdata/var/decl.carbon deleted file mode 100644 index 5a857af9f35e..000000000000 --- a/toolchain/check/testdata/var/decl.carbon +++ /dev/null @@ -1,70 +0,0 @@ -// 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/destroy.carbon -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --dump-sem-ir-ranges=if-present -// -// AUTOUPDATE -// TIP: To test this file alone, run: -// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/var/decl.carbon -// TIP: To dump output, run: -// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/var/decl.carbon - -// --- basic.carbon - -fn Main() { - var unused x: (); -} - -// CHECK:STDOUT: --- basic.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] -// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy -// CHECK:STDOUT: import Core//prelude -// CHECK:STDOUT: import Core//prelude/... -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Core = imports.%Core -// CHECK:STDOUT: .Main = %Main.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Main() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt -// CHECK:STDOUT: %.loc3_18.1: type = splice_block %.loc3_18.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc3_18.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc3_18.3: type = converted %.loc3_18.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %x: ref %empty_tuple.type = ref_binding x, %x.var -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %x.var, constants.%Destroy.Op -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%x.var) -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %empty_tuple.type) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/var/decl_with_init.carbon b/toolchain/check/testdata/var/decl_with_init.carbon deleted file mode 100644 index ec03a76d2c7a..000000000000 --- a/toolchain/check/testdata/var/decl_with_init.carbon +++ /dev/null @@ -1,74 +0,0 @@ -// 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/destroy.carbon -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --dump-sem-ir-ranges=if-present -// -// AUTOUPDATE -// TIP: To test this file alone, run: -// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/var/decl_with_init.carbon -// TIP: To dump output, run: -// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/var/decl_with_init.carbon - -// --- basic.carbon - -fn Main() { - var unused x: () = (); -} - -// CHECK:STDOUT: --- basic.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] -// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy -// CHECK:STDOUT: import Core//prelude -// CHECK:STDOUT: import Core//prelude/... -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Core = imports.%Core -// CHECK:STDOUT: .Main = %Main.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Main() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt -// CHECK:STDOUT: %.loc3_23.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc3_23.2: init %empty_tuple.type = tuple_init () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc3_3: init %empty_tuple.type = converted %.loc3_23.1, %.loc3_23.2 [concrete = constants.%empty_tuple] -// CHECK:STDOUT: assign %x.var, %.loc3_3 -// CHECK:STDOUT: %.loc3_18.1: type = splice_block %.loc3_18.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc3_18.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc3_18.3: type = converted %.loc3_18.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %x: ref %empty_tuple.type = ref_binding x, %x.var -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %x.var, constants.%Destroy.Op -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%x.var) -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %empty_tuple.type) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/var/export_name.carbon b/toolchain/check/testdata/var/export_name.carbon index d8857c07a018..f2de9a551707 100644 --- a/toolchain/check/testdata/var/export_name.carbon +++ b/toolchain/check/testdata/var/export_name.carbon @@ -2,7 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon +// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/convert.carbon // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". // EXTRA-ARGS: --dump-sem-ir-ranges=if-present // @@ -47,16 +47,38 @@ var w: () = v; // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.6c6: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%T) [symbolic] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.ae1: %T.as.DefaultOrUnformed.impl.Op.type.6c6 = struct_value () [symbolic] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.159: = impl_witness imports.%DefaultOrUnformed.impl_witness_table, @T.as.DefaultOrUnformed.impl(%empty_tuple.type) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.type.f72: type = fn_type @T.as.DefaultOrUnformed.impl.Op, @T.as.DefaultOrUnformed.impl(%empty_tuple.type) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.365: %T.as.DefaultOrUnformed.impl.Op.type.f72 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %empty_tuple.type, (%DefaultOrUnformed.impl_witness.159) [concrete] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function %T.as.DefaultOrUnformed.impl.Op.365, @T.as.DefaultOrUnformed.impl.Op(%empty_tuple.type) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .DefaultOrUnformed = %Core.DefaultOrUnformed +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.DefaultOrUnformed: type = import_ref Core//prelude/parts/default, DefaultOrUnformed, loaded [concrete = constants.%DefaultOrUnformed.type] +// CHECK:STDOUT: %Core.import_ref.01d: @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op.type (%T.as.DefaultOrUnformed.impl.Op.type.6c6) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as.DefaultOrUnformed.impl.%T.as.DefaultOrUnformed.impl.Op (constants.%T.as.DefaultOrUnformed.impl.Op.ae1)] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.01d), @T.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: package: = namespace [concrete] { +// CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: .v = %v // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %pattern_type = ref_binding_pattern v [concrete] -// CHECK:STDOUT: %v.var_patt: %pattern_type = var_pattern %v.patt [concrete] +// CHECK:STDOUT: %v.patt: %pattern_type.cb1 = ref_binding_pattern v [concrete] +// CHECK:STDOUT: %v.var_patt: %pattern_type.cb1 = var_pattern %v.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var %v.var_patt [concrete] // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -66,6 +88,18 @@ var w: () = v; // CHECK:STDOUT: %v: ref %empty_tuple.type = ref_binding v, %v.var [concrete = %v.var] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%empty_tuple.type, (constants.%DefaultOrUnformed.impl_witness.159) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc4_10.1: %DefaultOrUnformed.type = converted constants.%empty_tuple.type, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc4_10.1 [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: %.loc4_10.2: type = converted %.loc4_10.1, %as_type [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.specific_fn: = specific_function constants.%T.as.DefaultOrUnformed.impl.Op.365, @T.as.DefaultOrUnformed.impl.Op(constants.%empty_tuple.type) [concrete = constants.%T.as.DefaultOrUnformed.impl.Op.specific_fn] +// CHECK:STDOUT: %T.as.DefaultOrUnformed.impl.Op.call: init %empty_tuple.type = call %T.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: assign file.%v.var, %T.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: --- export.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -75,6 +109,10 @@ var w: () = v; // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Main.v: ref %empty_tuple.type = import_ref Main//base, v, loaded [concrete = %v.var] +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } // CHECK:STDOUT: %v.patt: %pattern_type = ref_binding_pattern v [concrete] // CHECK:STDOUT: %v.var_patt: %pattern_type = var_pattern %v.patt [concrete] // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var %v.var_patt [concrete] @@ -83,7 +121,9 @@ var w: () = v; // CHECK:STDOUT: file { // CHECK:STDOUT: package: = namespace [concrete] { // CHECK:STDOUT: .v = %v +// CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %v: ref %empty_tuple.type = export v, imports.%Main.v [concrete = imports.%v.var] // CHECK:STDOUT: } @@ -98,6 +138,10 @@ var w: () = v; // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Main.v: ref %empty_tuple.type = import_ref Main//export, v, loaded [concrete = %v.var] +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } // CHECK:STDOUT: %v.patt: %pattern_type = ref_binding_pattern v [concrete] // CHECK:STDOUT: %v.var_patt: %pattern_type = var_pattern %v.patt [concrete] // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var %v.var_patt [concrete] @@ -106,8 +150,10 @@ var w: () = v; // CHECK:STDOUT: file { // CHECK:STDOUT: package: = namespace [concrete] { // CHECK:STDOUT: .v = imports.%Main.v +// CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: .w = %w // CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %w.patt: %pattern_type = ref_binding_pattern w [concrete] diff --git a/toolchain/check/testdata/var/fail_lookup_outside_scope.carbon b/toolchain/check/testdata/var/fail_lookup_outside_scope.carbon index 7327ded123ed..afd8f8916029 100644 --- a/toolchain/check/testdata/var/fail_lookup_outside_scope.carbon +++ b/toolchain/check/testdata/var/fail_lookup_outside_scope.carbon @@ -2,9 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/destroy.carbon -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --dump-sem-ir-ranges=if-present +// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/convert.carbon // // AUTOUPDATE // TIP: To test this file alone, run: @@ -23,73 +21,3 @@ fn Main() { // CHECK:STDERR: ^ // CHECK:STDERR: var y: () = x; - -// CHECK:STDOUT: --- fail_basic.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] -// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy -// CHECK:STDOUT: import Core//prelude -// CHECK:STDOUT: import Core//prelude/... -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Core = imports.%Core -// CHECK:STDOUT: .Main = %Main.decl -// CHECK:STDOUT: .y = %y -// CHECK:STDOUT: .x = -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] {} {} -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = ref_binding_pattern y [concrete] -// CHECK:STDOUT: %y.var_patt: %pattern_type.cb1 = var_pattern %y.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %y.var: ref %empty_tuple.type = var %y.var_patt [concrete] -// CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc10_9.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc10_9.3: type = converted %.loc10_9.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %y: ref %empty_tuple.type = ref_binding y, %y.var [concrete = %y.var] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Main() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt -// CHECK:STDOUT: %.loc3_18.1: type = splice_block %.loc3_18.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc3_18.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc3_18.3: type = converted %.loc3_18.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %x: ref %empty_tuple.type = ref_binding x, %x.var -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %x.var, constants.%Destroy.Op -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%x.var) -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %empty_tuple.type) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @__global_init() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %x.ref: = name_ref x, [concrete = ] -// CHECK:STDOUT: assign file.%y.var, -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/var/fail_modifiers.carbon b/toolchain/check/testdata/var/fail_modifiers.carbon index b700a704ce0b..d95431d98bf8 100644 --- a/toolchain/check/testdata/var/fail_modifiers.carbon +++ b/toolchain/check/testdata/var/fail_modifiers.carbon @@ -3,8 +3,6 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --dump-sem-ir-ranges=if-present // // AUTOUPDATE // TIP: To test this file alone, run: @@ -13,93 +11,35 @@ // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/var/fail_modifiers.carbon // CHECK:STDERR: fail_modifiers.carbon:[[@LINE+4]]:1: error: `protected` not allowed; requires class scope [ModifierProtectedNotAllowed] -// CHECK:STDERR: protected var b: (); +// CHECK:STDERR: protected var b: () = (); // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: -protected var b: (); +protected var b: () = (); // CHECK:STDERR: fail_modifiers.carbon:[[@LINE+7]]:9: error: `protected` not allowed on declaration with `private` [ModifierNotAllowedWith] -// CHECK:STDERR: private protected var c: (); +// CHECK:STDERR: private protected var c: () = (); // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: fail_modifiers.carbon:[[@LINE+4]]:1: note: `private` previously appeared here [ModifierPrevious] -// CHECK:STDERR: private protected var c: (); +// CHECK:STDERR: private protected var c: () = (); // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: -private protected var c: (); +private protected var c: () = (); // CHECK:STDERR: fail_modifiers.carbon:[[@LINE+11]]:11: error: `protected` repeated on declaration [ModifierRepeated] -// CHECK:STDERR: protected protected var d: (); +// CHECK:STDERR: protected protected var d: () = (); // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: fail_modifiers.carbon:[[@LINE+8]]:1: note: `protected` previously appeared here [ModifierPrevious] -// CHECK:STDERR: protected protected var d: (); +// CHECK:STDERR: protected protected var d: () = (); // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_modifiers.carbon:[[@LINE+4]]:1: error: `protected` not allowed; requires class scope [ModifierProtectedNotAllowed] -// CHECK:STDERR: protected protected var d: (); +// CHECK:STDERR: protected protected var d: () = (); // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: -protected protected var d: (); +protected protected var d: () = (); // CHECK:STDERR: fail_modifiers.carbon:[[@LINE+4]]:1: error: `abstract` not allowed on `var` declaration [ModifierNotAllowedOnDeclaration] -// CHECK:STDERR: abstract var e: (); +// CHECK:STDERR: abstract var e: () = (); // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: -abstract var e: (); - -// CHECK:STDOUT: --- fail_modifiers.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .b [protected] = %b -// CHECK:STDOUT: .c [private] = %c -// CHECK:STDOUT: .d [protected] = %d -// CHECK:STDOUT: .e = %e -// CHECK:STDOUT: } -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %pattern_type = ref_binding_pattern b [concrete] -// CHECK:STDOUT: %b.var_patt: %pattern_type = var_pattern %b.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %b.var: ref %empty_tuple.type = var %b.var_patt [concrete] -// CHECK:STDOUT: %.loc19_19.1: type = splice_block %.loc19_19.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc19_19.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc19_19.3: type = converted %.loc19_19.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %b: ref %empty_tuple.type = ref_binding b, %b.var [concrete = %b.var] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type = var_pattern %c.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %c.var: ref %empty_tuple.type = var %c.var_patt [concrete] -// CHECK:STDOUT: %.loc28_27.1: type = splice_block %.loc28_27.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc28_27.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc28_27.3: type = converted %.loc28_27.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %c: ref %empty_tuple.type = ref_binding c, %c.var [concrete = %c.var] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type = ref_binding_pattern d [concrete] -// CHECK:STDOUT: %d.var_patt: %pattern_type = var_pattern %d.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %d.var: ref %empty_tuple.type = var %d.var_patt [concrete] -// CHECK:STDOUT: %.loc41_29.1: type = splice_block %.loc41_29.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc41_29.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc41_29.3: type = converted %.loc41_29.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %d: ref %empty_tuple.type = ref_binding d, %d.var [concrete = %d.var] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %pattern_type = ref_binding_pattern e [concrete] -// CHECK:STDOUT: %e.var_patt: %pattern_type = var_pattern %e.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %e.var: ref %empty_tuple.type = var %e.var_patt [concrete] -// CHECK:STDOUT: %.loc47_18.1: type = splice_block %.loc47_18.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc47_18.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc47_18.3: type = converted %.loc47_18.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %e: ref %empty_tuple.type = ref_binding e, %e.var [concrete = %e.var] -// CHECK:STDOUT: } -// CHECK:STDOUT: +abstract var e: () = (); diff --git a/toolchain/check/testdata/var/fail_namespace_conflict.carbon b/toolchain/check/testdata/var/fail_namespace_conflict.carbon index 8aedcee73407..b00d6f6ecc78 100644 --- a/toolchain/check/testdata/var/fail_namespace_conflict.carbon +++ b/toolchain/check/testdata/var/fail_namespace_conflict.carbon @@ -2,9 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --dump-sem-ir-ranges=if-present +// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/convert.carbon // // AUTOUPDATE // TIP: To test this file alone, run: @@ -31,48 +29,3 @@ var A: (); // CHECK:STDERR: ^~~~~~~~~~~~ // CHECK:STDERR: var A: () = (); - -// CHECK:STDOUT: --- fail_namespace_conflict.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .A = %A.loc15 -// CHECK:STDOUT: } -// CHECK:STDOUT: %A.loc15: = namespace [concrete] {} -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %A.patt.loc24: %pattern_type = ref_binding_pattern A [concrete] -// CHECK:STDOUT: %A.var_patt.loc24: %pattern_type = var_pattern %A.patt.loc24 [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %A.var.loc24: ref %empty_tuple.type = var %A.var_patt.loc24 [concrete] -// CHECK:STDOUT: %.loc24_9.1: type = splice_block %.loc24_9.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc24_9.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc24_9.3: type = converted %.loc24_9.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %A.loc24: ref %empty_tuple.type = ref_binding A, %A.var.loc24 [concrete = %A.var.loc24] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %A.patt.loc33: %pattern_type = ref_binding_pattern A [concrete] -// CHECK:STDOUT: %A.var_patt.loc33: %pattern_type = var_pattern %A.patt.loc33 [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %A.var.loc33: ref %empty_tuple.type = var %A.var_patt.loc33 [concrete] -// CHECK:STDOUT: %.loc33_9.1: type = splice_block %.loc33_9.3 [concrete = constants.%empty_tuple.type] { -// CHECK:STDOUT: %.loc33_9.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc33_9.3: type = converted %.loc33_9.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %A.loc33: ref %empty_tuple.type = ref_binding A, %A.var.loc33 [concrete = %A.var.loc33] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @__global_init() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %.loc33_14.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc33_14.2: init %empty_tuple.type = tuple_init () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc33_1: init %empty_tuple.type = converted %.loc33_14.1, %.loc33_14.2 [concrete = constants.%empty_tuple] -// CHECK:STDOUT: assign file.%A.var.loc33, %.loc33_1 -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/var/global_decl.carbon b/toolchain/check/testdata/var/global_decl.carbon index 66351aeb6310..790774cb5795 100644 --- a/toolchain/check/testdata/var/global_decl.carbon +++ b/toolchain/check/testdata/var/global_decl.carbon @@ -3,8 +3,6 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --dump-sem-ir-ranges=if-present // // AUTOUPDATE // TIP: To test this file alone, run: @@ -12,7 +10,9 @@ // TIP: To dump output, run: // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/var/global_decl.carbon -var x: {.v: ()}; +//@dump-sem-ir-begin +var x: {.v: ()} = {.v = ()}; +//@dump-sem-ir-end // CHECK:STDOUT: --- global_decl.carbon // CHECK:STDOUT: @@ -21,22 +21,34 @@ var x: {.v: ()}; // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.v [concrete] +// CHECK:STDOUT: %struct: %struct_type.v = struct_value (%empty_tuple) [concrete] +// CHECK:STDOUT: %.c0c: ref %empty_tuple.type = struct_access file.%x.var, element0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .x = %x -// CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] // CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.v = var %x.var_patt [concrete] -// CHECK:STDOUT: %.loc15_15: type = splice_block %struct_type.v [concrete = constants.%struct_type.v] { -// CHECK:STDOUT: %.loc15_14.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc15_14.2: type = converted %.loc15_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: %.loc14_15: type = splice_block %struct_type.v [concrete = constants.%struct_type.v] { +// CHECK:STDOUT: %.loc14_14.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc14_14.2: type = converted %.loc14_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete = constants.%struct_type.v] // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.v = ref_binding x, %x.var [concrete = %x.var] // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %.loc14_26.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc14_27.1: %struct_type.v = struct_literal (%.loc14_26.1) [concrete = constants.%struct] +// CHECK:STDOUT: %.loc14_27.2: ref %empty_tuple.type = struct_access file.%x.var, element0 [concrete = constants.%.c0c] +// CHECK:STDOUT: %.loc14_26.2: init %empty_tuple.type = tuple_init () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc14_27.3: init %empty_tuple.type = converted %.loc14_26.1, %.loc14_26.2 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc14_27.4: init %struct_type.v to file.%x.var = struct_init (%.loc14_27.3) [concrete = constants.%struct] +// CHECK:STDOUT: %.loc14_1: init %struct_type.v = converted %.loc14_27.1, %.loc14_27.4 [concrete = constants.%struct] +// CHECK:STDOUT: assign file.%x.var, %.loc14_1 +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/var/global_decl_import.carbon b/toolchain/check/testdata/var/global_decl_import.carbon index dc8a31e177df..283a45b5360e 100644 --- a/toolchain/check/testdata/var/global_decl_import.carbon +++ b/toolchain/check/testdata/var/global_decl_import.carbon @@ -3,8 +3,6 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --dump-sem-ir-ranges=if-present // // AUTOUPDATE // TIP: To test this file alone, run: @@ -16,7 +14,7 @@ library "[[@TEST_NAME]]"; -var x: {.v: ()}; +var x: {.v: ()} = {.v = ()}; // --- import.carbon @@ -25,45 +23,18 @@ library "[[@TEST_NAME]]"; import library "decl"; fn G() -> {.v: ()} { + //@dump-sem-ir-begin return x; + //@dump-sem-ir-end } -// CHECK:STDOUT: --- decl.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] -// CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.v [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .x = %x -// CHECK:STDOUT: } -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type = var_pattern %x.patt [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %x.var: ref %struct_type.v = var %x.var_patt [concrete] -// CHECK:STDOUT: %.loc4_15: type = splice_block %struct_type.v [concrete = constants.%struct_type.v] { -// CHECK:STDOUT: %.loc4_14.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc4_14.2: type = converted %.loc4_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete = constants.%struct_type.v] -// CHECK:STDOUT: } -// CHECK:STDOUT: %x: ref %struct_type.v = ref_binding x, %x.var [concrete = %x.var] -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- import.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] -// CHECK:STDOUT: %.020: Core.Form = init_form %struct_type.v [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.v [concrete] -// CHECK:STDOUT: %G.type: type = fn_type @G [concrete] -// CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %.c0c: ref %empty_tuple.type = struct_access imports.%x.var, element0 [concrete] // CHECK:STDOUT: %struct: %struct_type.v = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -75,33 +46,14 @@ fn G() -> {.v: ()} { // CHECK:STDOUT: %x.var: ref %struct_type.v = var %x.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .x = imports.%Main.x -// CHECK:STDOUT: .G = %G.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %default.import = import -// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %.loc6_17.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc6_17.2: type = converted %.loc6_17.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete = constants.%struct_type.v] -// CHECK:STDOUT: %.loc6_18: Core.Form = init_form %struct_type.v [concrete = constants.%.020] -// CHECK:STDOUT: %return.param: ref %struct_type.v = out_param call_param0 -// CHECK:STDOUT: %return: ref %struct_type.v = return_slot %return.param -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @G() -> out %return.param: %struct_type.v { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: ref %struct_type.v = name_ref x, imports.%Main.x [concrete = imports.%x.var] -// CHECK:STDOUT: %.loc7_10.1: ref %empty_tuple.type = struct_access %x.ref, element0 [concrete = constants.%.c0c] -// CHECK:STDOUT: %.loc7_10.2: init %empty_tuple.type = tuple_init () [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc7_10.3: init %empty_tuple.type = converted %.loc7_10.1, %.loc7_10.2 [concrete = constants.%empty_tuple] -// CHECK:STDOUT: %.loc7_10.4: init %struct_type.v = struct_init (%.loc7_10.3) [concrete = constants.%struct] -// CHECK:STDOUT: %.loc7_11: init %struct_type.v = converted %x.ref, %.loc7_10.4 [concrete = constants.%struct] -// CHECK:STDOUT: return %.loc7_11 +// CHECK:STDOUT: %.loc8_10.1: ref %empty_tuple.type = struct_access %x.ref, element0 [concrete = constants.%.c0c] +// CHECK:STDOUT: %.loc8_10.2: init %empty_tuple.type = tuple_init () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc8_10.3: init %empty_tuple.type = converted %.loc8_10.1, %.loc8_10.2 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc8_10.4: init %struct_type.v = struct_init (%.loc8_10.3) [concrete = constants.%struct] +// CHECK:STDOUT: %.loc8_11: init %struct_type.v = converted %x.ref, %.loc8_10.4 [concrete = constants.%struct] +// CHECK:STDOUT: return %.loc8_11 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/var/initialization.carbon b/toolchain/check/testdata/var/initialization.carbon new file mode 100644 index 000000000000..6fa3d193cfc2 --- /dev/null +++ b/toolchain/check/testdata/var/initialization.carbon @@ -0,0 +1,146 @@ +// 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/none.carbon +// +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/var/initialization.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/var/initialization.carbon + +// --- core.carbon + +package Core; + +interface DefaultOrUnformed { + fn Op() -> Self; +} + +interface Destroy { + fn Op[ref self: Self](); +} + +impl () as DefaultOrUnformed { + fn Op() -> Self { return (); } +} + +// --- initialized.carbon + +library "[[@TEST_NAME]]"; + +import Core; + +fn Main() { + //@dump-sem-ir-begin + var unused x: () = (); + //@dump-sem-ir-end +} + +// --- uninitialized.carbon + +library "[[@TEST_NAME]]"; + +import Core; + +fn Main() { + //@dump-sem-ir-begin + var unused x: (); + //@dump-sem-ir-end +} + +// --- fail_uninitialized_no_impl.carbon + +library "[[@TEST_NAME]]"; + +import Core; + +class A {} + +fn Main() { + // CHECK:STDERR: fail_uninitialized_no_impl.carbon:[[@LINE+4]]:3: error: cannot convert type `A` into type implementing `Core.DefaultOrUnformed` [ConversionFailureTypeToFacet] + // CHECK:STDERR: var unused x: A; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~ + // CHECK:STDERR: + var unused x: A; +} + +// CHECK:STDOUT: --- initialized.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] +// CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @Main() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt +// CHECK:STDOUT: %.loc8_23.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc8_23.2: init %empty_tuple.type = tuple_init () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc8_3: init %empty_tuple.type = converted %.loc8_23.1, %.loc8_23.2 [concrete = constants.%empty_tuple] +// CHECK:STDOUT: assign %x.var, %.loc8_3 +// CHECK:STDOUT: %.loc8_18.1: type = splice_block %.loc8_18.3 [concrete = constants.%empty_tuple.type] { +// CHECK:STDOUT: %.loc8_18.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc8_18.3: type = converted %.loc8_18.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %x: ref %empty_tuple.type = ref_binding x, %x.var +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %x.var, constants.%Destroy.Op +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%x.var) +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %empty_tuple.type) = "no_op"; +// CHECK:STDOUT: +// CHECK:STDOUT: --- uninitialized.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness: = impl_witness imports.%DefaultOrUnformed.impl_witness_table [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %empty_tuple.type, (%DefaultOrUnformed.impl_witness) [concrete] +// CHECK:STDOUT: %empty_tuple.type.as.DefaultOrUnformed.impl.Op.type: type = fn_type @empty_tuple.type.as.DefaultOrUnformed.impl.Op [concrete] +// CHECK:STDOUT: %empty_tuple.type.as.DefaultOrUnformed.impl.Op: %empty_tuple.type.as.DefaultOrUnformed.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] +// CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.6a3: %empty_tuple.type.as.DefaultOrUnformed.impl.Op.type = import_ref Core//default, loc{{\d+_\d+}}, loaded [concrete = constants.%empty_tuple.type.as.DefaultOrUnformed.impl.Op] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table = impl_witness_table (%Core.import_ref.6a3), @empty_tuple.type.as.DefaultOrUnformed.impl [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @Main() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.cb1 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: %x.var: ref %empty_tuple.type = var %x.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%empty_tuple.type, (constants.%DefaultOrUnformed.impl_witness) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc8_19.1: %DefaultOrUnformed.type = converted constants.%empty_tuple.type, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc8_19.1 [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: %.loc8_19.2: type = converted %.loc8_19.1, %as_type [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: %empty_tuple.type.as.DefaultOrUnformed.impl.Op.call: init %empty_tuple.type = call constants.%empty_tuple.type.as.DefaultOrUnformed.impl.Op() +// CHECK:STDOUT: assign %x.var, %empty_tuple.type.as.DefaultOrUnformed.impl.Op.call +// CHECK:STDOUT: %.loc8_18.1: type = splice_block %.loc8_18.3 [concrete = constants.%empty_tuple.type] { +// CHECK:STDOUT: %.loc8_18.2: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple] +// CHECK:STDOUT: %.loc8_18.3: type = converted %.loc8_18.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %x: ref %empty_tuple.type = ref_binding x, %x.var +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %x.var, constants.%Destroy.Op +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%x.var) +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %empty_tuple.type) = "no_op"; +// CHECK:STDOUT: diff --git a/toolchain/driver/testdata/compile/optimize/optimize_debug.carbon b/toolchain/driver/testdata/compile/optimize/optimize_debug.carbon index 2419043aa9da..cb61167ff699 100644 --- a/toolchain/driver/testdata/compile/optimize/optimize_debug.carbon +++ b/toolchain/driver/testdata/compile/optimize/optimize_debug.carbon @@ -113,16 +113,16 @@ fn VectorizedWithOptSpeed(a: array(i32, 65536)*) { // CHECK:STDOUT: !21 = !DILocalVariable(arg: 1, scope: !16, type: !19) // CHECK:STDOUT: !22 = !DILocation(line: 18, column: 9, scope: !16) // CHECK:STDOUT: !23 = !DILocation(line: 19, column: 5, scope: !16) -// CHECK:STDOUT: !24 = !DILocation(line: 296, column: 3, scope: !25, inlinedAt: !32) -// CHECK:STDOUT: !25 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !26, line: 296, type: !27, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !29) +// CHECK:STDOUT: !24 = !DILocation(line: 299, column: 3, scope: !25, inlinedAt: !32) +// CHECK:STDOUT: !25 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !26, line: 299, type: !27, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !29) // CHECK:STDOUT: !26 = !DIFile(filename: "{{.*}}/prelude/types/int.carbon", directory: "") // CHECK:STDOUT: !27 = !DISubroutineType(types: !28) // CHECK:STDOUT: !28 = !{null, !7, !7} // CHECK:STDOUT: !29 = !{!30, !31} // CHECK:STDOUT: !30 = !DILocalVariable(arg: 1, scope: !25, type: !7) // CHECK:STDOUT: !31 = !DILocalVariable(arg: 2, scope: !25, type: !7) -// CHECK:STDOUT: !32 = distinct !DILocation(line: 362, column: 5, scope: !33, inlinedAt: !38) -// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !26, line: 360, type: !34, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !36) +// CHECK:STDOUT: !32 = distinct !DILocation(line: 365, column: 5, scope: !33, inlinedAt: !38) +// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !26, line: 363, type: !34, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !36) // CHECK:STDOUT: !34 = !DISubroutineType(types: !35) // CHECK:STDOUT: !35 = !{null, !7} // CHECK:STDOUT: !36 = !{!37} diff --git a/toolchain/driver/testdata/compile/optimize/optimize_default.carbon b/toolchain/driver/testdata/compile/optimize/optimize_default.carbon index 16e4cd9b7a4f..5d2d83c98902 100644 --- a/toolchain/driver/testdata/compile/optimize/optimize_default.carbon +++ b/toolchain/driver/testdata/compile/optimize/optimize_default.carbon @@ -113,16 +113,16 @@ fn VectorizedWithOptSpeed(a: array(i32, 65536)*) { // CHECK:STDOUT: !21 = !DILocalVariable(arg: 1, scope: !16, type: !19) // CHECK:STDOUT: !22 = !DILocation(line: 18, column: 9, scope: !16) // CHECK:STDOUT: !23 = !DILocation(line: 19, column: 5, scope: !16) -// CHECK:STDOUT: !24 = !DILocation(line: 296, column: 3, scope: !25, inlinedAt: !32) -// CHECK:STDOUT: !25 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !26, line: 296, type: !27, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !29) +// CHECK:STDOUT: !24 = !DILocation(line: 299, column: 3, scope: !25, inlinedAt: !32) +// CHECK:STDOUT: !25 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !26, line: 299, type: !27, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !29) // CHECK:STDOUT: !26 = !DIFile(filename: "{{.*}}/prelude/types/int.carbon", directory: "") // CHECK:STDOUT: !27 = !DISubroutineType(types: !28) // CHECK:STDOUT: !28 = !{null, !7, !7} // CHECK:STDOUT: !29 = !{!30, !31} // CHECK:STDOUT: !30 = !DILocalVariable(arg: 1, scope: !25, type: !7) // CHECK:STDOUT: !31 = !DILocalVariable(arg: 2, scope: !25, type: !7) -// CHECK:STDOUT: !32 = distinct !DILocation(line: 362, column: 5, scope: !33, inlinedAt: !38) -// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !26, line: 360, type: !34, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !36) +// CHECK:STDOUT: !32 = distinct !DILocation(line: 365, column: 5, scope: !33, inlinedAt: !38) +// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !26, line: 363, type: !34, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !36) // CHECK:STDOUT: !34 = !DISubroutineType(types: !35) // CHECK:STDOUT: !35 = !{null, !7} // CHECK:STDOUT: !36 = !{!37} diff --git a/toolchain/driver/testdata/compile/optimize/optimize_none.carbon b/toolchain/driver/testdata/compile/optimize/optimize_none.carbon index 161e0ee4d4cd..3fc0862c2be0 100644 --- a/toolchain/driver/testdata/compile/optimize/optimize_none.carbon +++ b/toolchain/driver/testdata/compile/optimize/optimize_none.carbon @@ -145,30 +145,30 @@ fn VectorizedWithOptSpeed(a: array(i32, 65536)*) { // CHECK:STDOUT: !25 = !DILocation(line: 20, column: 5, scope: !14) // CHECK:STDOUT: !26 = !DILocation(line: 18, column: 3, scope: !14) // CHECK:STDOUT: !27 = !DILocation(line: 15, column: 1, scope: !14) -// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !29, line: 360, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !32) +// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !29, line: 363, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !32) // CHECK:STDOUT: !29 = !DIFile(filename: "{{.*}}/prelude/types/int.carbon", directory: "") // CHECK:STDOUT: !30 = !DISubroutineType(types: !31) // CHECK:STDOUT: !31 = !{null, !7} // CHECK:STDOUT: !32 = !{!33} // CHECK:STDOUT: !33 = !DILocalVariable(arg: 1, scope: !28, type: !7) -// CHECK:STDOUT: !34 = !DILocation(line: 362, column: 5, scope: !28) -// CHECK:STDOUT: !35 = !DILocation(line: 360, column: 3, scope: !28) -// CHECK:STDOUT: !36 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !29, line: 296, type: !37, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !39) +// CHECK:STDOUT: !34 = !DILocation(line: 365, column: 5, scope: !28) +// CHECK:STDOUT: !35 = !DILocation(line: 363, column: 3, scope: !28) +// CHECK:STDOUT: !36 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !29, line: 299, type: !37, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !39) // CHECK:STDOUT: !37 = !DISubroutineType(types: !38) // CHECK:STDOUT: !38 = !{null, !7, !7} // CHECK:STDOUT: !39 = !{!40, !41} // CHECK:STDOUT: !40 = !DILocalVariable(arg: 1, scope: !36, type: !7) // CHECK:STDOUT: !41 = !DILocalVariable(arg: 2, scope: !36, type: !7) // CHECK:STDOUT: !42 = !DILocation(line: 4294967295, scope: !36) -// CHECK:STDOUT: !43 = !DILocation(line: 296, column: 3, scope: !36) -// CHECK:STDOUT: !44 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.628184612c80324d", scope: null, file: !29, line: 59, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !47) +// CHECK:STDOUT: !43 = !DILocation(line: 299, column: 3, scope: !36) +// CHECK:STDOUT: !44 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.628184612c80324d", scope: null, file: !29, line: 62, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !47) // CHECK:STDOUT: !45 = !DISubroutineType(types: !46) // CHECK:STDOUT: !46 = !{!7, !7} // CHECK:STDOUT: !47 = !{!48} // CHECK:STDOUT: !48 = !DILocalVariable(arg: 1, scope: !44, type: !7) -// CHECK:STDOUT: !49 = !DILocation(line: 61, column: 17, scope: !44) -// CHECK:STDOUT: !50 = !DILocation(line: 61, column: 5, scope: !44) -// CHECK:STDOUT: !51 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !29, line: 54, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !52) +// CHECK:STDOUT: !49 = !DILocation(line: 64, column: 17, scope: !44) +// CHECK:STDOUT: !50 = !DILocation(line: 64, column: 5, scope: !44) +// CHECK:STDOUT: !51 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !29, line: 57, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !52) // CHECK:STDOUT: !52 = !{!53} // CHECK:STDOUT: !53 = !DILocalVariable(arg: 1, scope: !51, type: !7) -// CHECK:STDOUT: !54 = !DILocation(line: 54, column: 36, scope: !51) +// CHECK:STDOUT: !54 = !DILocation(line: 57, column: 36, scope: !51) diff --git a/toolchain/driver/testdata/compile/optimize/optimize_size.carbon b/toolchain/driver/testdata/compile/optimize/optimize_size.carbon index 4532ac69b6c1..81c56e6cd2d2 100644 --- a/toolchain/driver/testdata/compile/optimize/optimize_size.carbon +++ b/toolchain/driver/testdata/compile/optimize/optimize_size.carbon @@ -145,30 +145,30 @@ fn VectorizedWithOptSpeed(a: array(i32, 65536)*) { // CHECK:STDOUT: !25 = !DILocation(line: 20, column: 5, scope: !14) // CHECK:STDOUT: !26 = !DILocation(line: 18, column: 3, scope: !14) // CHECK:STDOUT: !27 = !DILocation(line: 15, column: 1, scope: !14) -// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !29, line: 360, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !32) +// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !29, line: 363, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !32) // CHECK:STDOUT: !29 = !DIFile(filename: "{{.*}}/prelude/types/int.carbon", directory: "") // CHECK:STDOUT: !30 = !DISubroutineType(types: !31) // CHECK:STDOUT: !31 = !{null, !7} // CHECK:STDOUT: !32 = !{!33} // CHECK:STDOUT: !33 = !DILocalVariable(arg: 1, scope: !28, type: !7) -// CHECK:STDOUT: !34 = !DILocation(line: 362, column: 5, scope: !28) -// CHECK:STDOUT: !35 = !DILocation(line: 360, column: 3, scope: !28) -// CHECK:STDOUT: !36 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !29, line: 296, type: !37, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !39) +// CHECK:STDOUT: !34 = !DILocation(line: 365, column: 5, scope: !28) +// CHECK:STDOUT: !35 = !DILocation(line: 363, column: 3, scope: !28) +// CHECK:STDOUT: !36 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !29, line: 299, type: !37, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !39) // CHECK:STDOUT: !37 = !DISubroutineType(types: !38) // CHECK:STDOUT: !38 = !{null, !7, !7} // CHECK:STDOUT: !39 = !{!40, !41} // CHECK:STDOUT: !40 = !DILocalVariable(arg: 1, scope: !36, type: !7) // CHECK:STDOUT: !41 = !DILocalVariable(arg: 2, scope: !36, type: !7) // CHECK:STDOUT: !42 = !DILocation(line: 4294967295, scope: !36) -// CHECK:STDOUT: !43 = !DILocation(line: 296, column: 3, scope: !36) -// CHECK:STDOUT: !44 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.628184612c80324d", scope: null, file: !29, line: 59, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !47) +// CHECK:STDOUT: !43 = !DILocation(line: 299, column: 3, scope: !36) +// CHECK:STDOUT: !44 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.628184612c80324d", scope: null, file: !29, line: 62, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !47) // CHECK:STDOUT: !45 = !DISubroutineType(types: !46) // CHECK:STDOUT: !46 = !{!7, !7} // CHECK:STDOUT: !47 = !{!48} // CHECK:STDOUT: !48 = !DILocalVariable(arg: 1, scope: !44, type: !7) -// CHECK:STDOUT: !49 = !DILocation(line: 61, column: 17, scope: !44) -// CHECK:STDOUT: !50 = !DILocation(line: 61, column: 5, scope: !44) -// CHECK:STDOUT: !51 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !29, line: 54, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !52) +// CHECK:STDOUT: !49 = !DILocation(line: 64, column: 17, scope: !44) +// CHECK:STDOUT: !50 = !DILocation(line: 64, column: 5, scope: !44) +// CHECK:STDOUT: !51 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !29, line: 57, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !52) // CHECK:STDOUT: !52 = !{!53} // CHECK:STDOUT: !53 = !DILocalVariable(arg: 1, scope: !51, type: !7) -// CHECK:STDOUT: !54 = !DILocation(line: 54, column: 36, scope: !51) +// CHECK:STDOUT: !54 = !DILocation(line: 57, column: 36, scope: !51) diff --git a/toolchain/driver/testdata/compile/optimize/optimize_speed.carbon b/toolchain/driver/testdata/compile/optimize/optimize_speed.carbon index 9a40c6323bdf..416deeec2ae0 100644 --- a/toolchain/driver/testdata/compile/optimize/optimize_speed.carbon +++ b/toolchain/driver/testdata/compile/optimize/optimize_speed.carbon @@ -128,16 +128,16 @@ fn VectorizedWithOptSpeed(a: array(i32, 65536)*) { // CHECK:STDOUT: !20 = !{!21} // CHECK:STDOUT: !21 = !DILocalVariable(arg: 1, scope: !16, type: !19) // CHECK:STDOUT: !22 = !DILocation(line: 18, column: 9, scope: !16) -// CHECK:STDOUT: !23 = !DILocation(line: 296, column: 3, scope: !24, inlinedAt: !31) -// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !25, line: 296, type: !26, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !28) +// CHECK:STDOUT: !23 = !DILocation(line: 299, column: 3, scope: !24, inlinedAt: !31) +// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !25, line: 299, type: !26, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !28) // CHECK:STDOUT: !25 = !DIFile(filename: "{{.*}}/prelude/types/int.carbon", directory: "") // CHECK:STDOUT: !26 = !DISubroutineType(types: !27) // CHECK:STDOUT: !27 = !{null, !7, !7} // CHECK:STDOUT: !28 = !{!29, !30} // CHECK:STDOUT: !29 = !DILocalVariable(arg: 1, scope: !24, type: !7) // CHECK:STDOUT: !30 = !DILocalVariable(arg: 2, scope: !24, type: !7) -// CHECK:STDOUT: !31 = distinct !DILocation(line: 362, column: 5, scope: !32, inlinedAt: !37) -// CHECK:STDOUT: !32 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !25, line: 360, type: !33, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !35) +// CHECK:STDOUT: !31 = distinct !DILocation(line: 365, column: 5, scope: !32, inlinedAt: !37) +// CHECK:STDOUT: !32 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !25, line: 363, type: !33, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !35) // CHECK:STDOUT: !33 = !DISubroutineType(types: !34) // CHECK:STDOUT: !34 = !{null, !7} // CHECK:STDOUT: !35 = !{!36} diff --git a/toolchain/lower/handle_call.cpp b/toolchain/lower/handle_call.cpp index ef2bf4ff01c3..61428adf362e 100644 --- a/toolchain/lower/handle_call.cpp +++ b/toolchain/lower/handle_call.cpp @@ -330,6 +330,12 @@ static auto HandleBuiltinCall(FunctionContext& context, SemIR::InstId inst_id, case SemIR::BuiltinFunctionKind::NoOp: return; + case SemIR::BuiltinFunctionKind::MakeUninitialized: { + context.SetLocal(inst_id, + llvm::PoisonValue::get(context.GetTypeOfInst(inst_id))); + return; + } + case SemIR::BuiltinFunctionKind::PrimitiveCopy: context.SetLocal(inst_id, context.GetValue(arg_ids[0])); return; diff --git a/toolchain/lower/testdata/array/iterate.carbon b/toolchain/lower/testdata/array/iterate.carbon index 8109e7b85596..9648b74f1a92 100644 --- a/toolchain/lower/testdata/array/iterate.carbon +++ b/toolchain/lower/testdata/array/iterate.carbon @@ -219,74 +219,74 @@ fn F() { // CHECK:STDOUT: !33 = !DILocation(line: 27, column: 7, scope: !21) // CHECK:STDOUT: !34 = !DILocation(line: 29, column: 14, scope: !21) // CHECK:STDOUT: !35 = !DILocation(line: 29, column: 7, scope: !21) -// CHECK:STDOUT: !36 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.b5e6acce74484d77", scope: null, file: !37, line: 32, type: !38, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !40) +// CHECK:STDOUT: !36 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.b5e6acce74484d77", scope: null, file: !37, line: 33, type: !38, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !40) // CHECK:STDOUT: !37 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "") // CHECK:STDOUT: !38 = !DISubroutineType(types: !39) // CHECK:STDOUT: !39 = !{!17, !17} // CHECK:STDOUT: !40 = !{!41} // CHECK:STDOUT: !41 = !DILocalVariable(arg: 1, scope: !36, type: !17) -// CHECK:STDOUT: !42 = !DILocation(line: 33, column: 12, scope: !36) -// CHECK:STDOUT: !43 = !DILocation(line: 33, column: 5, scope: !36) -// CHECK:STDOUT: !44 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.b5e6acce74484d77", scope: null, file: !37, line: 35, type: !14, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45) +// CHECK:STDOUT: !42 = !DILocation(line: 34, column: 12, scope: !36) +// CHECK:STDOUT: !43 = !DILocation(line: 34, column: 5, scope: !36) +// CHECK:STDOUT: !44 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.b5e6acce74484d77", scope: null, file: !37, line: 36, type: !14, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45) // CHECK:STDOUT: !45 = !{!46} // CHECK:STDOUT: !46 = !DILocalVariable(arg: 1, scope: !44, type: !17) -// CHECK:STDOUT: !47 = !DILocation(line: 36, column: 12, scope: !44) -// CHECK:STDOUT: !48 = !DILocation(line: 36, column: 5, scope: !44) -// CHECK:STDOUT: !49 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !50, line: 360, type: !51, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !53) +// CHECK:STDOUT: !47 = !DILocation(line: 37, column: 12, scope: !44) +// CHECK:STDOUT: !48 = !DILocation(line: 37, column: 5, scope: !44) +// CHECK:STDOUT: !49 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !50, line: 363, type: !51, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !53) // CHECK:STDOUT: !50 = !DIFile(filename: "{{.*}}/prelude/types/int.carbon", directory: "") // CHECK:STDOUT: !51 = !DISubroutineType(types: !52) // CHECK:STDOUT: !52 = !{null, !16} // CHECK:STDOUT: !53 = !{!54} // CHECK:STDOUT: !54 = !DILocalVariable(arg: 1, scope: !49, type: !16) -// CHECK:STDOUT: !55 = !DILocation(line: 362, column: 5, scope: !49) -// CHECK:STDOUT: !56 = !DILocation(line: 360, column: 3, scope: !49) -// CHECK:STDOUT: !57 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.b5e6acce74484d77", scope: null, file: !37, line: 29, type: !58, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !60) +// CHECK:STDOUT: !55 = !DILocation(line: 365, column: 5, scope: !49) +// CHECK:STDOUT: !56 = !DILocation(line: 363, column: 3, scope: !49) +// CHECK:STDOUT: !57 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.b5e6acce74484d77", scope: null, file: !37, line: 30, type: !58, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !60) // CHECK:STDOUT: !58 = !DISubroutineType(types: !59) // CHECK:STDOUT: !59 = !{!17, !16} // CHECK:STDOUT: !60 = !{!61} // CHECK:STDOUT: !61 = !DILocalVariable(arg: 1, scope: !57, type: !16) -// CHECK:STDOUT: !62 = !DILocation(line: 30, column: 12, scope: !57) -// CHECK:STDOUT: !63 = !DILocation(line: 30, column: 5, scope: !57) -// CHECK:STDOUT: !64 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.b5e6acce74484d77", scope: null, file: !37, line: 26, type: !65, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !62 = !DILocation(line: 31, column: 12, scope: !57) +// CHECK:STDOUT: !63 = !DILocation(line: 31, column: 5, scope: !57) +// CHECK:STDOUT: !64 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.b5e6acce74484d77", scope: null, file: !37, line: 27, type: !65, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !65 = !DISubroutineType(types: !66) // CHECK:STDOUT: !66 = !{!17} -// CHECK:STDOUT: !67 = !DILocation(line: 27, column: 12, scope: !64) -// CHECK:STDOUT: !68 = !DILocation(line: 27, column: 5, scope: !64) -// CHECK:STDOUT: !69 = distinct !DISubprogram(name: "Has", linkageName: "_CHas.3e8267224c5dc9c2:OptionalStorage.Core.bfb441135f07cbe1", scope: null, file: !37, line: 123, type: !38, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !70) +// CHECK:STDOUT: !67 = !DILocation(line: 28, column: 12, scope: !64) +// CHECK:STDOUT: !68 = !DILocation(line: 28, column: 5, scope: !64) +// CHECK:STDOUT: !69 = distinct !DISubprogram(name: "Has", linkageName: "_CHas.3e8267224c5dc9c2:OptionalStorage.Core.bfb441135f07cbe1", scope: null, file: !37, line: 132, type: !38, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !70) // CHECK:STDOUT: !70 = !{!71} // CHECK:STDOUT: !71 = !DILocalVariable(arg: 1, scope: !69, type: !17) -// CHECK:STDOUT: !72 = !DILocation(line: 124, column: 12, scope: !69) -// CHECK:STDOUT: !73 = !DILocation(line: 124, column: 5, scope: !69) -// CHECK:STDOUT: !74 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.3e8267224c5dc9c2:OptionalStorage.Core.bfb441135f07cbe1", scope: null, file: !37, line: 126, type: !14, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !75) +// CHECK:STDOUT: !72 = !DILocation(line: 133, column: 12, scope: !69) +// CHECK:STDOUT: !73 = !DILocation(line: 133, column: 5, scope: !69) +// CHECK:STDOUT: !74 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.3e8267224c5dc9c2:OptionalStorage.Core.bfb441135f07cbe1", scope: null, file: !37, line: 135, type: !14, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !75) // CHECK:STDOUT: !75 = !{!76} // CHECK:STDOUT: !76 = !DILocalVariable(arg: 1, scope: !74, type: !17) -// CHECK:STDOUT: !77 = !DILocation(line: 127, column: 12, scope: !74) -// CHECK:STDOUT: !78 = !DILocation(line: 127, column: 5, scope: !74) -// CHECK:STDOUT: !79 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.e2da7149b7fcf782.Core.23ea0ff7335d4fdc", scope: null, file: !50, line: 296, type: !80, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !82) +// CHECK:STDOUT: !77 = !DILocation(line: 136, column: 12, scope: !74) +// CHECK:STDOUT: !78 = !DILocation(line: 136, column: 5, scope: !74) +// CHECK:STDOUT: !79 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.e2da7149b7fcf782.Core.23ea0ff7335d4fdc", scope: null, file: !50, line: 299, type: !80, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !82) // CHECK:STDOUT: !80 = !DISubroutineType(types: !81) // CHECK:STDOUT: !81 = !{null, !16, !16} // CHECK:STDOUT: !82 = !{!83, !84} // CHECK:STDOUT: !83 = !DILocalVariable(arg: 1, scope: !79, type: !16) // CHECK:STDOUT: !84 = !DILocalVariable(arg: 2, scope: !79, type: !16) // CHECK:STDOUT: !85 = !DILocation(line: 4294967295, scope: !79) -// CHECK:STDOUT: !86 = !DILocation(line: 296, column: 3, scope: !79) -// CHECK:STDOUT: !87 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.3e8267224c5dc9c2:OptionalStorage.Core.bfb441135f07cbe1", scope: null, file: !37, line: 115, type: !58, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !88) +// CHECK:STDOUT: !86 = !DILocation(line: 299, column: 3, scope: !79) +// CHECK:STDOUT: !87 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.3e8267224c5dc9c2:OptionalStorage.Core.bfb441135f07cbe1", scope: null, file: !37, line: 122, type: !58, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !88) // CHECK:STDOUT: !88 = !{!89} // CHECK:STDOUT: !89 = !DILocalVariable(arg: 1, scope: !87, type: !16) -// CHECK:STDOUT: !90 = !DILocation(line: 119, column: 5, scope: !87) -// CHECK:STDOUT: !91 = !DILocation(line: 120, column: 5, scope: !87) -// CHECK:STDOUT: !92 = !DILocation(line: 121, column: 5, scope: !87) -// CHECK:STDOUT: !93 = distinct !DISubprogram(name: "None", linkageName: "_CNone.3e8267224c5dc9c2:OptionalStorage.Core.bfb441135f07cbe1", scope: null, file: !37, line: 110, type: !65, spFlags: DISPFlagDefinition, unit: !2) -// CHECK:STDOUT: !94 = !DILocation(line: 112, column: 5, scope: !93) -// CHECK:STDOUT: !95 = !DILocation(line: 113, column: 5, scope: !93) -// CHECK:STDOUT: !96 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.93210ed0b06d6c25:ImplicitAs.11da3bb3c3dce533.Core.5da21217b3d19eab", scope: null, file: !50, line: 59, type: !97, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !99) +// CHECK:STDOUT: !90 = !DILocation(line: 128, column: 5, scope: !87) +// CHECK:STDOUT: !91 = !DILocation(line: 129, column: 5, scope: !87) +// CHECK:STDOUT: !92 = !DILocation(line: 130, column: 5, scope: !87) +// CHECK:STDOUT: !93 = distinct !DISubprogram(name: "None", linkageName: "_CNone.3e8267224c5dc9c2:OptionalStorage.Core.bfb441135f07cbe1", scope: null, file: !37, line: 116, type: !65, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !94 = !DILocation(line: 119, column: 5, scope: !93) +// CHECK:STDOUT: !95 = !DILocation(line: 120, column: 5, scope: !93) +// CHECK:STDOUT: !96 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.93210ed0b06d6c25:ImplicitAs.11da3bb3c3dce533.Core.5da21217b3d19eab", scope: null, file: !50, line: 62, type: !97, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !99) // CHECK:STDOUT: !97 = !DISubroutineType(types: !98) // CHECK:STDOUT: !98 = !{!16, !16} // CHECK:STDOUT: !99 = !{!100} // CHECK:STDOUT: !100 = !DILocalVariable(arg: 1, scope: !96, type: !16) -// CHECK:STDOUT: !101 = !DILocation(line: 61, column: 17, scope: !96) -// CHECK:STDOUT: !102 = !DILocation(line: 61, column: 5, scope: !96) -// CHECK:STDOUT: !103 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !50, line: 54, type: !97, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !104) +// CHECK:STDOUT: !101 = !DILocation(line: 64, column: 17, scope: !96) +// CHECK:STDOUT: !102 = !DILocation(line: 64, column: 5, scope: !96) +// CHECK:STDOUT: !103 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !50, line: 57, type: !97, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !104) // CHECK:STDOUT: !104 = !{!105} // CHECK:STDOUT: !105 = !DILocalVariable(arg: 1, scope: !103, type: !16) -// CHECK:STDOUT: !106 = !DILocation(line: 54, column: 36, scope: !103) +// CHECK:STDOUT: !106 = !DILocation(line: 57, column: 36, scope: !103) diff --git a/toolchain/lower/testdata/for/bindings.carbon b/toolchain/lower/testdata/for/bindings.carbon index 8367bb7933e0..8094d2290643 100644 --- a/toolchain/lower/testdata/for/bindings.carbon +++ b/toolchain/lower/testdata/for/bindings.carbon @@ -184,37 +184,37 @@ fn For() { // CHECK:STDOUT: !25 = !DILocalVariable(arg: 2, scope: !20, type: !16) // CHECK:STDOUT: !26 = !DILocation(line: 19, column: 14, scope: !20) // CHECK:STDOUT: !27 = !DILocation(line: 19, column: 7, scope: !20) -// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.6b64456bb8003a40", scope: null, file: !29, line: 32, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !32) +// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.6b64456bb8003a40", scope: null, file: !29, line: 33, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !32) // CHECK:STDOUT: !29 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "") // CHECK:STDOUT: !30 = !DISubroutineType(types: !31) // CHECK:STDOUT: !31 = !{!16, !16} // CHECK:STDOUT: !32 = !{!33} // CHECK:STDOUT: !33 = !DILocalVariable(arg: 1, scope: !28, type: !16) -// CHECK:STDOUT: !34 = !DILocation(line: 33, column: 12, scope: !28) -// CHECK:STDOUT: !35 = !DILocation(line: 33, column: 5, scope: !28) -// CHECK:STDOUT: !36 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.6b64456bb8003a40", scope: null, file: !29, line: 35, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !37) +// CHECK:STDOUT: !34 = !DILocation(line: 34, column: 12, scope: !28) +// CHECK:STDOUT: !35 = !DILocation(line: 34, column: 5, scope: !28) +// CHECK:STDOUT: !36 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.6b64456bb8003a40", scope: null, file: !29, line: 36, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !37) // CHECK:STDOUT: !37 = !{!38} // CHECK:STDOUT: !38 = !DILocalVariable(arg: 1, scope: !36, type: !16) -// CHECK:STDOUT: !39 = !DILocation(line: 36, column: 12, scope: !36) -// CHECK:STDOUT: !40 = !DILocation(line: 36, column: 5, scope: !36) -// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.6b64456bb8003a40", scope: null, file: !29, line: 26, type: !42, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !39 = !DILocation(line: 37, column: 12, scope: !36) +// CHECK:STDOUT: !40 = !DILocation(line: 37, column: 5, scope: !36) +// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.6b64456bb8003a40", scope: null, file: !29, line: 27, type: !42, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !42 = !DISubroutineType(types: !43) // CHECK:STDOUT: !43 = !{!16} -// CHECK:STDOUT: !44 = !DILocation(line: 27, column: 12, scope: !41) -// CHECK:STDOUT: !45 = !DILocation(line: 27, column: 5, scope: !41) -// CHECK:STDOUT: !46 = distinct !DISubprogram(name: "Has", linkageName: "_CHas.3e8267224c5dc9c2:OptionalStorage.Core.8d745d19e7d6c4bd", scope: null, file: !29, line: 123, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !47) +// CHECK:STDOUT: !44 = !DILocation(line: 28, column: 12, scope: !41) +// CHECK:STDOUT: !45 = !DILocation(line: 28, column: 5, scope: !41) +// CHECK:STDOUT: !46 = distinct !DISubprogram(name: "Has", linkageName: "_CHas.3e8267224c5dc9c2:OptionalStorage.Core.8d745d19e7d6c4bd", scope: null, file: !29, line: 132, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !47) // CHECK:STDOUT: !47 = !{!48} // CHECK:STDOUT: !48 = !DILocalVariable(arg: 1, scope: !46, type: !16) -// CHECK:STDOUT: !49 = !DILocation(line: 124, column: 12, scope: !46) -// CHECK:STDOUT: !50 = !DILocation(line: 124, column: 5, scope: !46) -// CHECK:STDOUT: !51 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.3e8267224c5dc9c2:OptionalStorage.Core.8d745d19e7d6c4bd", scope: null, file: !29, line: 126, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !52) +// CHECK:STDOUT: !49 = !DILocation(line: 133, column: 12, scope: !46) +// CHECK:STDOUT: !50 = !DILocation(line: 133, column: 5, scope: !46) +// CHECK:STDOUT: !51 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.3e8267224c5dc9c2:OptionalStorage.Core.8d745d19e7d6c4bd", scope: null, file: !29, line: 135, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !52) // CHECK:STDOUT: !52 = !{!53} // CHECK:STDOUT: !53 = !DILocalVariable(arg: 1, scope: !51, type: !16) -// CHECK:STDOUT: !54 = !DILocation(line: 127, column: 12, scope: !51) -// CHECK:STDOUT: !55 = !DILocation(line: 127, column: 5, scope: !51) -// CHECK:STDOUT: !56 = distinct !DISubprogram(name: "None", linkageName: "_CNone.3e8267224c5dc9c2:OptionalStorage.Core.8d745d19e7d6c4bd", scope: null, file: !29, line: 110, type: !42, spFlags: DISPFlagDefinition, unit: !2) -// CHECK:STDOUT: !57 = !DILocation(line: 112, column: 5, scope: !56) -// CHECK:STDOUT: !58 = !DILocation(line: 113, column: 5, scope: !56) +// CHECK:STDOUT: !54 = !DILocation(line: 136, column: 12, scope: !51) +// CHECK:STDOUT: !55 = !DILocation(line: 136, column: 5, scope: !51) +// CHECK:STDOUT: !56 = distinct !DISubprogram(name: "None", linkageName: "_CNone.3e8267224c5dc9c2:OptionalStorage.Core.8d745d19e7d6c4bd", scope: null, file: !29, line: 116, type: !42, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !57 = !DILocation(line: 119, column: 5, scope: !56) +// CHECK:STDOUT: !58 = !DILocation(line: 120, column: 5, scope: !56) // CHECK:STDOUT: !59 = distinct !DISubprogram(name: "Op", linkageName: "_COp.e4daa70d026fdea2:Copy.Core.3e36085cb869f630", scope: null, file: !60, line: 58, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !61) // CHECK:STDOUT: !60 = !DIFile(filename: "{{.*}}/prelude/copy.carbon", directory: "") // CHECK:STDOUT: !61 = !{!62} diff --git a/toolchain/lower/testdata/for/break_continue.carbon b/toolchain/lower/testdata/for/break_continue.carbon index 007328f7d632..b28ded33a478 100644 --- a/toolchain/lower/testdata/for/break_continue.carbon +++ b/toolchain/lower/testdata/for/break_continue.carbon @@ -248,74 +248,74 @@ fn For() { // CHECK:STDOUT: !42 = !DILocation(line: 30, column: 9, scope: !28) // CHECK:STDOUT: !43 = !DILocation(line: 32, column: 16, scope: !28) // CHECK:STDOUT: !44 = !DILocation(line: 32, column: 9, scope: !28) -// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.a0986cb4211ec3fb", scope: null, file: !46, line: 32, type: !47, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !49) +// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.a0986cb4211ec3fb", scope: null, file: !46, line: 33, type: !47, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !49) // CHECK:STDOUT: !46 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "") // CHECK:STDOUT: !47 = !DISubroutineType(types: !48) // CHECK:STDOUT: !48 = !{!23, !23} // CHECK:STDOUT: !49 = !{!50} // CHECK:STDOUT: !50 = !DILocalVariable(arg: 1, scope: !45, type: !23) -// CHECK:STDOUT: !51 = !DILocation(line: 33, column: 12, scope: !45) -// CHECK:STDOUT: !52 = !DILocation(line: 33, column: 5, scope: !45) -// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.a0986cb4211ec3fb", scope: null, file: !46, line: 35, type: !20, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !54) +// CHECK:STDOUT: !51 = !DILocation(line: 34, column: 12, scope: !45) +// CHECK:STDOUT: !52 = !DILocation(line: 34, column: 5, scope: !45) +// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.a0986cb4211ec3fb", scope: null, file: !46, line: 36, type: !20, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !54) // CHECK:STDOUT: !54 = !{!55} // CHECK:STDOUT: !55 = !DILocalVariable(arg: 1, scope: !53, type: !23) -// CHECK:STDOUT: !56 = !DILocation(line: 36, column: 12, scope: !53) -// CHECK:STDOUT: !57 = !DILocation(line: 36, column: 5, scope: !53) -// CHECK:STDOUT: !58 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !59, line: 360, type: !60, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !62) +// CHECK:STDOUT: !56 = !DILocation(line: 37, column: 12, scope: !53) +// CHECK:STDOUT: !57 = !DILocation(line: 37, column: 5, scope: !53) +// CHECK:STDOUT: !58 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !59, line: 363, type: !60, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !62) // CHECK:STDOUT: !59 = !DIFile(filename: "{{.*}}/prelude/types/int.carbon", directory: "") // CHECK:STDOUT: !60 = !DISubroutineType(types: !61) // CHECK:STDOUT: !61 = !{null, !22} // CHECK:STDOUT: !62 = !{!63} // CHECK:STDOUT: !63 = !DILocalVariable(arg: 1, scope: !58, type: !22) -// CHECK:STDOUT: !64 = !DILocation(line: 362, column: 5, scope: !58) -// CHECK:STDOUT: !65 = !DILocation(line: 360, column: 3, scope: !58) -// CHECK:STDOUT: !66 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.a0986cb4211ec3fb", scope: null, file: !46, line: 29, type: !67, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !69) +// CHECK:STDOUT: !64 = !DILocation(line: 365, column: 5, scope: !58) +// CHECK:STDOUT: !65 = !DILocation(line: 363, column: 3, scope: !58) +// CHECK:STDOUT: !66 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.a0986cb4211ec3fb", scope: null, file: !46, line: 30, type: !67, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !69) // CHECK:STDOUT: !67 = !DISubroutineType(types: !68) // CHECK:STDOUT: !68 = !{!23, !22} // CHECK:STDOUT: !69 = !{!70} // CHECK:STDOUT: !70 = !DILocalVariable(arg: 1, scope: !66, type: !22) -// CHECK:STDOUT: !71 = !DILocation(line: 30, column: 12, scope: !66) -// CHECK:STDOUT: !72 = !DILocation(line: 30, column: 5, scope: !66) -// CHECK:STDOUT: !73 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.a0986cb4211ec3fb", scope: null, file: !46, line: 26, type: !74, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !71 = !DILocation(line: 31, column: 12, scope: !66) +// CHECK:STDOUT: !72 = !DILocation(line: 31, column: 5, scope: !66) +// CHECK:STDOUT: !73 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.a0986cb4211ec3fb", scope: null, file: !46, line: 27, type: !74, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !74 = !DISubroutineType(types: !75) // CHECK:STDOUT: !75 = !{!23} -// CHECK:STDOUT: !76 = !DILocation(line: 27, column: 12, scope: !73) -// CHECK:STDOUT: !77 = !DILocation(line: 27, column: 5, scope: !73) -// CHECK:STDOUT: !78 = distinct !DISubprogram(name: "Has", linkageName: "_CHas.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !46, line: 123, type: !47, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !79) +// CHECK:STDOUT: !76 = !DILocation(line: 28, column: 12, scope: !73) +// CHECK:STDOUT: !77 = !DILocation(line: 28, column: 5, scope: !73) +// CHECK:STDOUT: !78 = distinct !DISubprogram(name: "Has", linkageName: "_CHas.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !46, line: 132, type: !47, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !79) // CHECK:STDOUT: !79 = !{!80} // CHECK:STDOUT: !80 = !DILocalVariable(arg: 1, scope: !78, type: !23) -// CHECK:STDOUT: !81 = !DILocation(line: 124, column: 12, scope: !78) -// CHECK:STDOUT: !82 = !DILocation(line: 124, column: 5, scope: !78) -// CHECK:STDOUT: !83 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !46, line: 126, type: !20, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !84) +// CHECK:STDOUT: !81 = !DILocation(line: 133, column: 12, scope: !78) +// CHECK:STDOUT: !82 = !DILocation(line: 133, column: 5, scope: !78) +// CHECK:STDOUT: !83 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !46, line: 135, type: !20, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !84) // CHECK:STDOUT: !84 = !{!85} // CHECK:STDOUT: !85 = !DILocalVariable(arg: 1, scope: !83, type: !23) -// CHECK:STDOUT: !86 = !DILocation(line: 127, column: 12, scope: !83) -// CHECK:STDOUT: !87 = !DILocation(line: 127, column: 5, scope: !83) -// CHECK:STDOUT: !88 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !59, line: 296, type: !89, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !91) +// CHECK:STDOUT: !86 = !DILocation(line: 136, column: 12, scope: !83) +// CHECK:STDOUT: !87 = !DILocation(line: 136, column: 5, scope: !83) +// CHECK:STDOUT: !88 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !59, line: 299, type: !89, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !91) // CHECK:STDOUT: !89 = !DISubroutineType(types: !90) // CHECK:STDOUT: !90 = !{null, !22, !22} // CHECK:STDOUT: !91 = !{!92, !93} // CHECK:STDOUT: !92 = !DILocalVariable(arg: 1, scope: !88, type: !22) // CHECK:STDOUT: !93 = !DILocalVariable(arg: 2, scope: !88, type: !22) // CHECK:STDOUT: !94 = !DILocation(line: 4294967295, scope: !88) -// CHECK:STDOUT: !95 = !DILocation(line: 296, column: 3, scope: !88) -// CHECK:STDOUT: !96 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !46, line: 115, type: !67, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !97) +// CHECK:STDOUT: !95 = !DILocation(line: 299, column: 3, scope: !88) +// CHECK:STDOUT: !96 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !46, line: 122, type: !67, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !97) // CHECK:STDOUT: !97 = !{!98} // CHECK:STDOUT: !98 = !DILocalVariable(arg: 1, scope: !96, type: !22) -// CHECK:STDOUT: !99 = !DILocation(line: 119, column: 5, scope: !96) -// CHECK:STDOUT: !100 = !DILocation(line: 120, column: 5, scope: !96) -// CHECK:STDOUT: !101 = !DILocation(line: 121, column: 5, scope: !96) -// CHECK:STDOUT: !102 = distinct !DISubprogram(name: "None", linkageName: "_CNone.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !46, line: 110, type: !74, spFlags: DISPFlagDefinition, unit: !2) -// CHECK:STDOUT: !103 = !DILocation(line: 112, column: 5, scope: !102) -// CHECK:STDOUT: !104 = !DILocation(line: 113, column: 5, scope: !102) -// CHECK:STDOUT: !105 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.628184612c80324d", scope: null, file: !59, line: 59, type: !106, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !108) +// CHECK:STDOUT: !99 = !DILocation(line: 128, column: 5, scope: !96) +// CHECK:STDOUT: !100 = !DILocation(line: 129, column: 5, scope: !96) +// CHECK:STDOUT: !101 = !DILocation(line: 130, column: 5, scope: !96) +// CHECK:STDOUT: !102 = distinct !DISubprogram(name: "None", linkageName: "_CNone.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !46, line: 116, type: !74, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !103 = !DILocation(line: 119, column: 5, scope: !102) +// CHECK:STDOUT: !104 = !DILocation(line: 120, column: 5, scope: !102) +// CHECK:STDOUT: !105 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.628184612c80324d", scope: null, file: !59, line: 62, type: !106, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !108) // CHECK:STDOUT: !106 = !DISubroutineType(types: !107) // CHECK:STDOUT: !107 = !{!22, !22} // CHECK:STDOUT: !108 = !{!109} // CHECK:STDOUT: !109 = !DILocalVariable(arg: 1, scope: !105, type: !22) -// CHECK:STDOUT: !110 = !DILocation(line: 61, column: 17, scope: !105) -// CHECK:STDOUT: !111 = !DILocation(line: 61, column: 5, scope: !105) -// CHECK:STDOUT: !112 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !59, line: 54, type: !106, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !113) +// CHECK:STDOUT: !110 = !DILocation(line: 64, column: 17, scope: !105) +// CHECK:STDOUT: !111 = !DILocation(line: 64, column: 5, scope: !105) +// CHECK:STDOUT: !112 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !59, line: 57, type: !106, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !113) // CHECK:STDOUT: !113 = !{!114} // CHECK:STDOUT: !114 = !DILocalVariable(arg: 1, scope: !112, type: !22) -// CHECK:STDOUT: !115 = !DILocation(line: 54, column: 36, scope: !112) +// CHECK:STDOUT: !115 = !DILocation(line: 57, column: 36, scope: !112) diff --git a/toolchain/lower/testdata/for/for.carbon b/toolchain/lower/testdata/for/for.carbon index 3479075ba7ea..18f80dc5fd3a 100644 --- a/toolchain/lower/testdata/for/for.carbon +++ b/toolchain/lower/testdata/for/for.carbon @@ -232,74 +232,74 @@ fn For() { // CHECK:STDOUT: !38 = !DILocation(line: 30, column: 9, scope: !24) // CHECK:STDOUT: !39 = !DILocation(line: 32, column: 16, scope: !24) // CHECK:STDOUT: !40 = !DILocation(line: 32, column: 9, scope: !24) -// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.a0986cb4211ec3fb", scope: null, file: !42, line: 32, type: !43, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45) +// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.a0986cb4211ec3fb", scope: null, file: !42, line: 33, type: !43, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45) // CHECK:STDOUT: !42 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "") // CHECK:STDOUT: !43 = !DISubroutineType(types: !44) // CHECK:STDOUT: !44 = !{!19, !19} // CHECK:STDOUT: !45 = !{!46} // CHECK:STDOUT: !46 = !DILocalVariable(arg: 1, scope: !41, type: !19) -// CHECK:STDOUT: !47 = !DILocation(line: 33, column: 12, scope: !41) -// CHECK:STDOUT: !48 = !DILocation(line: 33, column: 5, scope: !41) -// CHECK:STDOUT: !49 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.a0986cb4211ec3fb", scope: null, file: !42, line: 35, type: !16, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !50) +// CHECK:STDOUT: !47 = !DILocation(line: 34, column: 12, scope: !41) +// CHECK:STDOUT: !48 = !DILocation(line: 34, column: 5, scope: !41) +// CHECK:STDOUT: !49 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.a0986cb4211ec3fb", scope: null, file: !42, line: 36, type: !16, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !50) // CHECK:STDOUT: !50 = !{!51} // CHECK:STDOUT: !51 = !DILocalVariable(arg: 1, scope: !49, type: !19) -// CHECK:STDOUT: !52 = !DILocation(line: 36, column: 12, scope: !49) -// CHECK:STDOUT: !53 = !DILocation(line: 36, column: 5, scope: !49) -// CHECK:STDOUT: !54 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !55, line: 360, type: !56, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !58) +// CHECK:STDOUT: !52 = !DILocation(line: 37, column: 12, scope: !49) +// CHECK:STDOUT: !53 = !DILocation(line: 37, column: 5, scope: !49) +// CHECK:STDOUT: !54 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !55, line: 363, type: !56, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !58) // CHECK:STDOUT: !55 = !DIFile(filename: "{{.*}}/prelude/types/int.carbon", directory: "") // CHECK:STDOUT: !56 = !DISubroutineType(types: !57) // CHECK:STDOUT: !57 = !{null, !18} // CHECK:STDOUT: !58 = !{!59} // CHECK:STDOUT: !59 = !DILocalVariable(arg: 1, scope: !54, type: !18) -// CHECK:STDOUT: !60 = !DILocation(line: 362, column: 5, scope: !54) -// CHECK:STDOUT: !61 = !DILocation(line: 360, column: 3, scope: !54) -// CHECK:STDOUT: !62 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.a0986cb4211ec3fb", scope: null, file: !42, line: 29, type: !63, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !65) +// CHECK:STDOUT: !60 = !DILocation(line: 365, column: 5, scope: !54) +// CHECK:STDOUT: !61 = !DILocation(line: 363, column: 3, scope: !54) +// CHECK:STDOUT: !62 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.a0986cb4211ec3fb", scope: null, file: !42, line: 30, type: !63, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !65) // CHECK:STDOUT: !63 = !DISubroutineType(types: !64) // CHECK:STDOUT: !64 = !{!19, !18} // CHECK:STDOUT: !65 = !{!66} // CHECK:STDOUT: !66 = !DILocalVariable(arg: 1, scope: !62, type: !18) -// CHECK:STDOUT: !67 = !DILocation(line: 30, column: 12, scope: !62) -// CHECK:STDOUT: !68 = !DILocation(line: 30, column: 5, scope: !62) -// CHECK:STDOUT: !69 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.a0986cb4211ec3fb", scope: null, file: !42, line: 26, type: !70, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !67 = !DILocation(line: 31, column: 12, scope: !62) +// CHECK:STDOUT: !68 = !DILocation(line: 31, column: 5, scope: !62) +// CHECK:STDOUT: !69 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.a0986cb4211ec3fb", scope: null, file: !42, line: 27, type: !70, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !70 = !DISubroutineType(types: !71) // CHECK:STDOUT: !71 = !{!19} -// CHECK:STDOUT: !72 = !DILocation(line: 27, column: 12, scope: !69) -// CHECK:STDOUT: !73 = !DILocation(line: 27, column: 5, scope: !69) -// CHECK:STDOUT: !74 = distinct !DISubprogram(name: "Has", linkageName: "_CHas.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !42, line: 123, type: !43, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !75) +// CHECK:STDOUT: !72 = !DILocation(line: 28, column: 12, scope: !69) +// CHECK:STDOUT: !73 = !DILocation(line: 28, column: 5, scope: !69) +// CHECK:STDOUT: !74 = distinct !DISubprogram(name: "Has", linkageName: "_CHas.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !42, line: 132, type: !43, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !75) // CHECK:STDOUT: !75 = !{!76} // CHECK:STDOUT: !76 = !DILocalVariable(arg: 1, scope: !74, type: !19) -// CHECK:STDOUT: !77 = !DILocation(line: 124, column: 12, scope: !74) -// CHECK:STDOUT: !78 = !DILocation(line: 124, column: 5, scope: !74) -// CHECK:STDOUT: !79 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !42, line: 126, type: !16, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !80) +// CHECK:STDOUT: !77 = !DILocation(line: 133, column: 12, scope: !74) +// CHECK:STDOUT: !78 = !DILocation(line: 133, column: 5, scope: !74) +// CHECK:STDOUT: !79 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !42, line: 135, type: !16, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !80) // CHECK:STDOUT: !80 = !{!81} // CHECK:STDOUT: !81 = !DILocalVariable(arg: 1, scope: !79, type: !19) -// CHECK:STDOUT: !82 = !DILocation(line: 127, column: 12, scope: !79) -// CHECK:STDOUT: !83 = !DILocation(line: 127, column: 5, scope: !79) -// CHECK:STDOUT: !84 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !55, line: 296, type: !85, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !87) +// CHECK:STDOUT: !82 = !DILocation(line: 136, column: 12, scope: !79) +// CHECK:STDOUT: !83 = !DILocation(line: 136, column: 5, scope: !79) +// CHECK:STDOUT: !84 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !55, line: 299, type: !85, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !87) // CHECK:STDOUT: !85 = !DISubroutineType(types: !86) // CHECK:STDOUT: !86 = !{null, !18, !18} // CHECK:STDOUT: !87 = !{!88, !89} // CHECK:STDOUT: !88 = !DILocalVariable(arg: 1, scope: !84, type: !18) // CHECK:STDOUT: !89 = !DILocalVariable(arg: 2, scope: !84, type: !18) // CHECK:STDOUT: !90 = !DILocation(line: 4294967295, scope: !84) -// CHECK:STDOUT: !91 = !DILocation(line: 296, column: 3, scope: !84) -// CHECK:STDOUT: !92 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !42, line: 115, type: !63, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !93) +// CHECK:STDOUT: !91 = !DILocation(line: 299, column: 3, scope: !84) +// CHECK:STDOUT: !92 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !42, line: 122, type: !63, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !93) // CHECK:STDOUT: !93 = !{!94} // CHECK:STDOUT: !94 = !DILocalVariable(arg: 1, scope: !92, type: !18) -// CHECK:STDOUT: !95 = !DILocation(line: 119, column: 5, scope: !92) -// CHECK:STDOUT: !96 = !DILocation(line: 120, column: 5, scope: !92) -// CHECK:STDOUT: !97 = !DILocation(line: 121, column: 5, scope: !92) -// CHECK:STDOUT: !98 = distinct !DISubprogram(name: "None", linkageName: "_CNone.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !42, line: 110, type: !70, spFlags: DISPFlagDefinition, unit: !2) -// CHECK:STDOUT: !99 = !DILocation(line: 112, column: 5, scope: !98) -// CHECK:STDOUT: !100 = !DILocation(line: 113, column: 5, scope: !98) -// CHECK:STDOUT: !101 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.628184612c80324d", scope: null, file: !55, line: 59, type: !102, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !104) +// CHECK:STDOUT: !95 = !DILocation(line: 128, column: 5, scope: !92) +// CHECK:STDOUT: !96 = !DILocation(line: 129, column: 5, scope: !92) +// CHECK:STDOUT: !97 = !DILocation(line: 130, column: 5, scope: !92) +// CHECK:STDOUT: !98 = distinct !DISubprogram(name: "None", linkageName: "_CNone.3e8267224c5dc9c2:OptionalStorage.Core.0b1ea4541e2057b5", scope: null, file: !42, line: 116, type: !70, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !99 = !DILocation(line: 119, column: 5, scope: !98) +// CHECK:STDOUT: !100 = !DILocation(line: 120, column: 5, scope: !98) +// CHECK:STDOUT: !101 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.628184612c80324d", scope: null, file: !55, line: 62, type: !102, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !104) // CHECK:STDOUT: !102 = !DISubroutineType(types: !103) // CHECK:STDOUT: !103 = !{!18, !18} // CHECK:STDOUT: !104 = !{!105} // CHECK:STDOUT: !105 = !DILocalVariable(arg: 1, scope: !101, type: !18) -// CHECK:STDOUT: !106 = !DILocation(line: 61, column: 17, scope: !101) -// CHECK:STDOUT: !107 = !DILocation(line: 61, column: 5, scope: !101) -// CHECK:STDOUT: !108 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !55, line: 54, type: !102, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !109) +// CHECK:STDOUT: !106 = !DILocation(line: 64, column: 17, scope: !101) +// CHECK:STDOUT: !107 = !DILocation(line: 64, column: 5, scope: !101) +// CHECK:STDOUT: !108 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !55, line: 57, type: !102, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !109) // CHECK:STDOUT: !109 = !{!110} // CHECK:STDOUT: !110 = !DILocalVariable(arg: 1, scope: !108, type: !18) -// CHECK:STDOUT: !111 = !DILocation(line: 54, column: 36, scope: !108) +// CHECK:STDOUT: !111 = !DILocation(line: 57, column: 36, scope: !108) diff --git a/toolchain/lower/testdata/function/generic/call_basic.carbon b/toolchain/lower/testdata/function/generic/call_basic.carbon index cc84444bc6be..c939e2f55290 100644 --- a/toolchain/lower/testdata/function/generic/call_basic.carbon +++ b/toolchain/lower/testdata/function/generic/call_basic.carbon @@ -125,15 +125,19 @@ fn M() { // CHECK:STDOUT: %H.call.loc31 = call i32 @_CH.Main.64ccbb8e5d9a0b8e(i32 %.loc31_8.4), !dbg !39 // CHECK:STDOUT: store i32 %H.call.loc31, ptr %.loc31_9.2.temp, align 4, !dbg !39 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %var_f64.var), !dbg !40 +// CHECK:STDOUT: store double poison, ptr %var_f64.var, align 8, !dbg !40 // CHECK:STDOUT: %.loc35_5 = load double, ptr %var_f64.var, align 8, !dbg !47 // CHECK:STDOUT: %H.call.loc35 = call double @_CH.Main.de5b400758c39a65(double %.loc35_5), !dbg !48 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !41 +// CHECK:STDOUT: store ptr poison, ptr %ptr_i32.var, align 8, !dbg !41 // CHECK:STDOUT: %.loc37_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !49 // CHECK:STDOUT: %H.call.loc37 = call ptr @_CH.Main.779b9c0f3b54a7f8(ptr %.loc37_5), !dbg !50 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !42 +// CHECK:STDOUT: store ptr poison, ptr %ptr_f64.var, align 8, !dbg !42 // CHECK:STDOUT: %.loc39_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !51 // CHECK:STDOUT: %H.call.loc39 = call ptr @_CH.Main.779b9c0f3b54a7f8(ptr %.loc39_5), !dbg !52 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i8.var), !dbg !43 +// CHECK:STDOUT: store ptr poison, ptr %ptr_i8.var, align 8, !dbg !43 // CHECK:STDOUT: %.loc41_5 = load ptr, ptr %ptr_i8.var, align 8, !dbg !53 // CHECK:STDOUT: %H.call.loc41 = call ptr @_CH.Main.779b9c0f3b54a7f8(ptr %.loc41_5), !dbg !54 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !44 @@ -172,15 +176,19 @@ fn M() { // CHECK:STDOUT: %H.call.loc31 = call double @_CH.Main.de5b400758c39a65(double %.loc31_8.4), !dbg !67 // CHECK:STDOUT: store double %H.call.loc31, ptr %.loc31_9.2.temp, align 8, !dbg !67 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %var_f64.var), !dbg !68 +// CHECK:STDOUT: store double poison, ptr %var_f64.var, align 8, !dbg !68 // CHECK:STDOUT: %.loc35_5 = load double, ptr %var_f64.var, align 8, !dbg !75 // CHECK:STDOUT: %H.call.loc35 = call double @_CH.Main.de5b400758c39a65(double %.loc35_5), !dbg !76 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !69 +// CHECK:STDOUT: store ptr poison, ptr %ptr_i32.var, align 8, !dbg !69 // CHECK:STDOUT: %.loc37_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !77 // CHECK:STDOUT: %H.call.loc37 = call ptr @_CH.Main.779b9c0f3b54a7f8(ptr %.loc37_5), !dbg !78 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !70 +// CHECK:STDOUT: store ptr poison, ptr %ptr_f64.var, align 8, !dbg !70 // CHECK:STDOUT: %.loc39_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !79 // CHECK:STDOUT: %H.call.loc39 = call ptr @_CH.Main.779b9c0f3b54a7f8(ptr %.loc39_5), !dbg !80 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i8.var), !dbg !71 +// CHECK:STDOUT: store ptr poison, ptr %ptr_i8.var, align 8, !dbg !71 // CHECK:STDOUT: %.loc41_5 = load ptr, ptr %ptr_i8.var, align 8, !dbg !81 // CHECK:STDOUT: %H.call.loc41 = call ptr @_CH.Main.779b9c0f3b54a7f8(ptr %.loc41_5), !dbg !82 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !72 diff --git a/toolchain/lower/testdata/function/generic/call_basic_depth.carbon b/toolchain/lower/testdata/function/generic/call_basic_depth.carbon index bc67c74beedd..6bbd705407a4 100644 --- a/toolchain/lower/testdata/function/generic/call_basic_depth.carbon +++ b/toolchain/lower/testdata/function/generic/call_basic_depth.carbon @@ -47,6 +47,7 @@ fn M() -> i32 { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %n.var), !dbg !8 // CHECK:STDOUT: store i32 0, ptr %n.var, align 4, !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %m.var), !dbg !9 +// CHECK:STDOUT: store i32 poison, ptr %m.var, align 4, !dbg !9 // CHECK:STDOUT: %.loc34 = load i32, ptr %n.var, align 4, !dbg !10 // CHECK:STDOUT: call void @_CF.Main.b88d1103f417c6d4(i32 %.loc34), !dbg !11 // CHECK:STDOUT: %.loc35_9 = load i32, ptr %n.var, align 4, !dbg !12 diff --git a/toolchain/lower/testdata/function/generic/call_dedup_ptr.carbon b/toolchain/lower/testdata/function/generic/call_dedup_ptr.carbon index 2ce069ec6d6d..5e64403962ad 100644 --- a/toolchain/lower/testdata/function/generic/call_dedup_ptr.carbon +++ b/toolchain/lower/testdata/function/generic/call_dedup_ptr.carbon @@ -33,12 +33,15 @@ fn M() { // CHECK:STDOUT: %ptr_f64.var = alloca ptr, align 8, !dbg !8 // CHECK:STDOUT: %ptr_i8.var = alloca ptr, align 8, !dbg !9 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !7 +// CHECK:STDOUT: store ptr poison, ptr %ptr_i32.var, align 8, !dbg !7 // CHECK:STDOUT: %.loc19_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !10 // CHECK:STDOUT: %F.call.loc19 = call ptr @_CF.Main.779b9c0f3b54a7f8(ptr %.loc19_5), !dbg !11 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !8 +// CHECK:STDOUT: store ptr poison, ptr %ptr_f64.var, align 8, !dbg !8 // CHECK:STDOUT: %.loc21_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !12 // CHECK:STDOUT: %F.call.loc21 = call ptr @_CF.Main.779b9c0f3b54a7f8(ptr %.loc21_5), !dbg !13 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i8.var), !dbg !9 +// CHECK:STDOUT: store ptr poison, ptr %ptr_i8.var, align 8, !dbg !9 // CHECK:STDOUT: %.loc23_5 = load ptr, ptr %ptr_i8.var, align 8, !dbg !14 // CHECK:STDOUT: %F.call.loc23 = call ptr @_CF.Main.779b9c0f3b54a7f8(ptr %.loc23_5), !dbg !15 // CHECK:STDOUT: ret void, !dbg !16 diff --git a/toolchain/lower/testdata/function/generic/call_deref_ptr.carbon b/toolchain/lower/testdata/function/generic/call_deref_ptr.carbon index 408695f55af0..0d6849789ea9 100644 --- a/toolchain/lower/testdata/function/generic/call_deref_ptr.carbon +++ b/toolchain/lower/testdata/function/generic/call_deref_ptr.carbon @@ -51,7 +51,9 @@ fn M() { // CHECK:STDOUT: %ptr_i32.var = alloca ptr, align 8, !dbg !7 // CHECK:STDOUT: %ptr_f64.var = alloca ptr, align 8, !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !7 +// CHECK:STDOUT: store ptr poison, ptr %ptr_i32.var, align 8, !dbg !7 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !8 +// CHECK:STDOUT: store ptr poison, ptr %ptr_f64.var, align 8, !dbg !8 // CHECK:STDOUT: %.loc39_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !9 // CHECK:STDOUT: call void @_CF.Main.bfb441135f07cbe1(ptr %.loc39_5), !dbg !10 // CHECK:STDOUT: %.loc40_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !11 diff --git a/toolchain/lower/testdata/function/generic/call_different_associated_const.carbon b/toolchain/lower/testdata/function/generic/call_different_associated_const.carbon index 5386392d82ab..e9e758dd909d 100644 --- a/toolchain/lower/testdata/function/generic/call_different_associated_const.carbon +++ b/toolchain/lower/testdata/function/generic/call_different_associated_const.carbon @@ -53,6 +53,7 @@ fn H() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %_.var = alloca ptr, align 8, !dbg !11 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !11 +// CHECK:STDOUT: store ptr poison, ptr %_.var, align 8, !dbg !11 // CHECK:STDOUT: ret void, !dbg !12 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -61,6 +62,7 @@ fn H() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %_.var = alloca ptr, align 8, !dbg !14 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !14 +// CHECK:STDOUT: store ptr poison, ptr %_.var, align 8, !dbg !14 // CHECK:STDOUT: ret void, !dbg !15 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/function/generic/call_different_specific.carbon b/toolchain/lower/testdata/function/generic/call_different_specific.carbon index 95e9c0785d49..abc22b2b43ad 100644 --- a/toolchain/lower/testdata/function/generic/call_different_specific.carbon +++ b/toolchain/lower/testdata/function/generic/call_different_specific.carbon @@ -39,10 +39,7 @@ fn F[T:! Core.Copy & Core.Destroy](x: T*) { B(x); } -fn M() { - var ptr_i32 : i32*; - var ptr_f64 : f64*; - +fn M(ptr_i32: i32*, ptr_f64: f64*) { F(ptr_i32); F(ptr_f64); } @@ -53,81 +50,75 @@ fn M() { // CHECK:STDOUT: %type = type {} // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CM.Main() #0 !dbg !4 { +// CHECK:STDOUT: define void @_CM.Main(ptr %ptr_i32, ptr %ptr_f64) #0 !dbg !4 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %ptr_i32.var = alloca ptr, align 8, !dbg !7 -// CHECK:STDOUT: %ptr_f64.var = alloca ptr, align 8, !dbg !8 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !7 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !8 -// CHECK:STDOUT: %.loc46_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !9 -// CHECK:STDOUT: call void @_CF.Main.bfb441135f07cbe1(ptr %.loc46_5), !dbg !10 -// CHECK:STDOUT: %.loc47_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !11 -// CHECK:STDOUT: call void @_CF.Main.29cf1dfeccef7249(ptr %.loc47_5), !dbg !12 +// CHECK:STDOUT: call void @_CF.Main.bfb441135f07cbe1(ptr %ptr_i32), !dbg !11 +// CHECK:STDOUT: call void @_CF.Main.29cf1dfeccef7249(ptr %ptr_f64), !dbg !12 // CHECK:STDOUT: ret void, !dbg !13 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define linkonce_odr void @_CF.Main.bfb441135f07cbe1(ptr %x) #0 !dbg !14 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %A.call = call %type @_CA.Main.582d60b54baf6b63(%type zeroinitializer), !dbg !19 +// CHECK:STDOUT: call void @_CB.Main.bfb441135f07cbe1(ptr %x), !dbg !20 +// CHECK:STDOUT: ret void, !dbg !21 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define linkonce_odr void @_CF.Main.29cf1dfeccef7249(ptr %x) #0 !dbg !22 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %A.call = call %type @_CA.Main.582d60b54baf6b63(%type zeroinitializer), !dbg !25 +// CHECK:STDOUT: call void @_CB.Main.29cf1dfeccef7249(ptr %x), !dbg !26 +// CHECK:STDOUT: ret void, !dbg !27 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define linkonce_odr %type @_CA.Main.582d60b54baf6b63(%type %x) #0 !dbg !28 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: ret %type %x, !dbg !33 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define linkonce_odr void @_CB.Main.bfb441135f07cbe1(ptr %x) #0 !dbg !34 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc34_7.2.temp = alloca i32, align 4, !dbg !37 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc34_7.2.temp), !dbg !37 +// CHECK:STDOUT: %.loc34_5.2 = load i32, ptr %x, align 4, !dbg !38 +// CHECK:STDOUT: %D.call = call i32 @_CD.Main.64ccbb8e5d9a0b8e(i32 %.loc34_5.2), !dbg !37 +// CHECK:STDOUT: store i32 %D.call, ptr %.loc34_7.2.temp, align 4, !dbg !37 +// CHECK:STDOUT: ret void, !dbg !39 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define linkonce_odr void @_CB.Main.29cf1dfeccef7249(ptr %x) #0 !dbg !40 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc34_7.2.temp = alloca double, align 8, !dbg !43 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc34_7.2.temp), !dbg !43 +// CHECK:STDOUT: %.loc34_5.2 = load double, ptr %x, align 8, !dbg !44 +// CHECK:STDOUT: %D.call = call double @_CD.Main.de5b400758c39a65(double %.loc34_5.2), !dbg !43 +// CHECK:STDOUT: store double %D.call, ptr %.loc34_7.2.temp, align 8, !dbg !43 +// CHECK:STDOUT: ret void, !dbg !45 +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #1 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr void @_CF.Main.bfb441135f07cbe1(ptr %x) #0 !dbg !14 { +// CHECK:STDOUT: define linkonce_odr i32 @_CD.Main.64ccbb8e5d9a0b8e(i32 %x) #0 !dbg !46 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %A.call = call %type @_CA.Main.582d60b54baf6b63(%type zeroinitializer), !dbg !20 -// CHECK:STDOUT: call void @_CB.Main.bfb441135f07cbe1(ptr %x), !dbg !21 -// CHECK:STDOUT: ret void, !dbg !22 +// CHECK:STDOUT: ret i32 %x, !dbg !52 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr void @_CF.Main.29cf1dfeccef7249(ptr %x) #0 !dbg !23 { +// CHECK:STDOUT: define linkonce_odr double @_CD.Main.de5b400758c39a65(double %x) #0 !dbg !53 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %A.call = call %type @_CA.Main.582d60b54baf6b63(%type zeroinitializer), !dbg !26 -// CHECK:STDOUT: call void @_CB.Main.29cf1dfeccef7249(ptr %x), !dbg !27 -// CHECK:STDOUT: ret void, !dbg !28 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr %type @_CA.Main.582d60b54baf6b63(%type %x) #0 !dbg !29 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: ret %type %x, !dbg !34 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr void @_CB.Main.bfb441135f07cbe1(ptr %x) #0 !dbg !35 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc34_7.2.temp = alloca i32, align 4, !dbg !38 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc34_7.2.temp), !dbg !38 -// CHECK:STDOUT: %.loc34_5.2 = load i32, ptr %x, align 4, !dbg !39 -// CHECK:STDOUT: %D.call = call i32 @_CD.Main.64ccbb8e5d9a0b8e(i32 %.loc34_5.2), !dbg !38 -// CHECK:STDOUT: store i32 %D.call, ptr %.loc34_7.2.temp, align 4, !dbg !38 -// CHECK:STDOUT: ret void, !dbg !40 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr void @_CB.Main.29cf1dfeccef7249(ptr %x) #0 !dbg !41 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc34_7.2.temp = alloca double, align 8, !dbg !44 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc34_7.2.temp), !dbg !44 -// CHECK:STDOUT: %.loc34_5.2 = load double, ptr %x, align 8, !dbg !45 -// CHECK:STDOUT: %D.call = call double @_CD.Main.de5b400758c39a65(double %.loc34_5.2), !dbg !44 -// CHECK:STDOUT: store double %D.call, ptr %.loc34_7.2.temp, align 8, !dbg !44 -// CHECK:STDOUT: ret void, !dbg !46 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr i32 @_CD.Main.64ccbb8e5d9a0b8e(i32 %x) #0 !dbg !47 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: ret i32 %x, !dbg !53 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr double @_CD.Main.de5b400758c39a65(double %x) #0 !dbg !54 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: ret double %x, !dbg !57 +// CHECK:STDOUT: ret double %x, !dbg !56 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; uselistorder directives -// CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 0, 1, 3, 2 } // CHECK:STDOUT: uselistorder ptr @_CA.Main.582d60b54baf6b63, { 1, 0 } +// CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 1, 0 } // CHECK:STDOUT: // CHECK:STDOUT: attributes #0 = { nounwind } // CHECK:STDOUT: attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } @@ -139,57 +130,56 @@ fn M() { // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3} // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug) // CHECK:STDOUT: !3 = !DIFile(filename: "call_different_specific.carbon", directory: "") -// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 42, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 42, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !8) // CHECK:STDOUT: !5 = !DISubroutineType(types: !6) -// CHECK:STDOUT: !6 = !{null} -// CHECK:STDOUT: !7 = !DILocation(line: 43, column: 3, scope: !4) -// CHECK:STDOUT: !8 = !DILocation(line: 44, column: 3, scope: !4) -// CHECK:STDOUT: !9 = !DILocation(line: 46, column: 5, scope: !4) -// CHECK:STDOUT: !10 = !DILocation(line: 46, column: 3, scope: !4) -// CHECK:STDOUT: !11 = !DILocation(line: 47, column: 5, scope: !4) -// CHECK:STDOUT: !12 = !DILocation(line: 47, column: 3, scope: !4) +// CHECK:STDOUT: !6 = !{null, !7, !7} +// CHECK:STDOUT: !7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 8) +// CHECK:STDOUT: !8 = !{!9, !10} +// CHECK:STDOUT: !9 = !DILocalVariable(arg: 1, scope: !4, type: !7) +// CHECK:STDOUT: !10 = !DILocalVariable(arg: 2, scope: !4, type: !7) +// CHECK:STDOUT: !11 = !DILocation(line: 43, column: 3, scope: !4) +// CHECK:STDOUT: !12 = !DILocation(line: 44, column: 3, scope: !4) // CHECK:STDOUT: !13 = !DILocation(line: 42, column: 1, scope: !4) -// CHECK:STDOUT: !14 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.bfb441135f07cbe1", scope: null, file: !3, line: 37, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !18) +// CHECK:STDOUT: !14 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.bfb441135f07cbe1", scope: null, file: !3, line: 37, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !17) // CHECK:STDOUT: !15 = !DISubroutineType(types: !16) -// CHECK:STDOUT: !16 = !{null, !17} -// CHECK:STDOUT: !17 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 8) -// CHECK:STDOUT: !18 = !{!19} -// CHECK:STDOUT: !19 = !DILocalVariable(arg: 1, scope: !14, type: !17) -// CHECK:STDOUT: !20 = !DILocation(line: 38, column: 3, scope: !14) -// CHECK:STDOUT: !21 = !DILocation(line: 39, column: 3, scope: !14) -// CHECK:STDOUT: !22 = !DILocation(line: 37, column: 1, scope: !14) -// CHECK:STDOUT: !23 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.29cf1dfeccef7249", scope: null, file: !3, line: 37, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !24) -// CHECK:STDOUT: !24 = !{!25} -// CHECK:STDOUT: !25 = !DILocalVariable(arg: 1, scope: !23, type: !17) -// CHECK:STDOUT: !26 = !DILocation(line: 38, column: 3, scope: !23) -// CHECK:STDOUT: !27 = !DILocation(line: 39, column: 3, scope: !23) -// CHECK:STDOUT: !28 = !DILocation(line: 37, column: 1, scope: !23) -// CHECK:STDOUT: !29 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.582d60b54baf6b63", scope: null, file: !3, line: 25, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !32) -// CHECK:STDOUT: !30 = !DISubroutineType(types: !31) -// CHECK:STDOUT: !31 = !{!17, !17} -// CHECK:STDOUT: !32 = !{!33} -// CHECK:STDOUT: !33 = !DILocalVariable(arg: 1, scope: !29, type: !17) -// CHECK:STDOUT: !34 = !DILocation(line: 26, column: 3, scope: !29) -// CHECK:STDOUT: !35 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.bfb441135f07cbe1", scope: null, file: !3, line: 33, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !36) -// CHECK:STDOUT: !36 = !{!37} -// CHECK:STDOUT: !37 = !DILocalVariable(arg: 1, scope: !35, type: !17) -// CHECK:STDOUT: !38 = !DILocation(line: 34, column: 3, scope: !35) -// CHECK:STDOUT: !39 = !DILocation(line: 34, column: 5, scope: !35) -// CHECK:STDOUT: !40 = !DILocation(line: 33, column: 1, scope: !35) -// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.29cf1dfeccef7249", scope: null, file: !3, line: 33, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !42) -// CHECK:STDOUT: !42 = !{!43} -// CHECK:STDOUT: !43 = !DILocalVariable(arg: 1, scope: !41, type: !17) -// CHECK:STDOUT: !44 = !DILocation(line: 34, column: 3, scope: !41) -// CHECK:STDOUT: !45 = !DILocation(line: 34, column: 5, scope: !41) -// CHECK:STDOUT: !46 = !DILocation(line: 33, column: 1, scope: !41) -// CHECK:STDOUT: !47 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.64ccbb8e5d9a0b8e", scope: null, file: !3, line: 29, type: !48, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !51) -// CHECK:STDOUT: !48 = !DISubroutineType(types: !49) -// CHECK:STDOUT: !49 = !{!50, !50} -// CHECK:STDOUT: !50 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -// CHECK:STDOUT: !51 = !{!52} -// CHECK:STDOUT: !52 = !DILocalVariable(arg: 1, scope: !47, type: !50) -// CHECK:STDOUT: !53 = !DILocation(line: 30, column: 3, scope: !47) -// CHECK:STDOUT: !54 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.de5b400758c39a65", scope: null, file: !3, line: 29, type: !30, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !55) -// CHECK:STDOUT: !55 = !{!56} -// CHECK:STDOUT: !56 = !DILocalVariable(arg: 1, scope: !54, type: !17) -// CHECK:STDOUT: !57 = !DILocation(line: 30, column: 3, scope: !54) +// CHECK:STDOUT: !16 = !{null, !7} +// CHECK:STDOUT: !17 = !{!18} +// CHECK:STDOUT: !18 = !DILocalVariable(arg: 1, scope: !14, type: !7) +// CHECK:STDOUT: !19 = !DILocation(line: 38, column: 3, scope: !14) +// CHECK:STDOUT: !20 = !DILocation(line: 39, column: 3, scope: !14) +// CHECK:STDOUT: !21 = !DILocation(line: 37, column: 1, scope: !14) +// CHECK:STDOUT: !22 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.29cf1dfeccef7249", scope: null, file: !3, line: 37, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !23) +// CHECK:STDOUT: !23 = !{!24} +// CHECK:STDOUT: !24 = !DILocalVariable(arg: 1, scope: !22, type: !7) +// CHECK:STDOUT: !25 = !DILocation(line: 38, column: 3, scope: !22) +// CHECK:STDOUT: !26 = !DILocation(line: 39, column: 3, scope: !22) +// CHECK:STDOUT: !27 = !DILocation(line: 37, column: 1, scope: !22) +// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.582d60b54baf6b63", scope: null, file: !3, line: 25, type: !29, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !31) +// CHECK:STDOUT: !29 = !DISubroutineType(types: !30) +// CHECK:STDOUT: !30 = !{!7, !7} +// CHECK:STDOUT: !31 = !{!32} +// CHECK:STDOUT: !32 = !DILocalVariable(arg: 1, scope: !28, type: !7) +// CHECK:STDOUT: !33 = !DILocation(line: 26, column: 3, scope: !28) +// CHECK:STDOUT: !34 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.bfb441135f07cbe1", scope: null, file: !3, line: 33, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !35) +// CHECK:STDOUT: !35 = !{!36} +// CHECK:STDOUT: !36 = !DILocalVariable(arg: 1, scope: !34, type: !7) +// CHECK:STDOUT: !37 = !DILocation(line: 34, column: 3, scope: !34) +// CHECK:STDOUT: !38 = !DILocation(line: 34, column: 5, scope: !34) +// CHECK:STDOUT: !39 = !DILocation(line: 33, column: 1, scope: !34) +// CHECK:STDOUT: !40 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.29cf1dfeccef7249", scope: null, file: !3, line: 33, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !41) +// CHECK:STDOUT: !41 = !{!42} +// CHECK:STDOUT: !42 = !DILocalVariable(arg: 1, scope: !40, type: !7) +// CHECK:STDOUT: !43 = !DILocation(line: 34, column: 3, scope: !40) +// CHECK:STDOUT: !44 = !DILocation(line: 34, column: 5, scope: !40) +// CHECK:STDOUT: !45 = !DILocation(line: 33, column: 1, scope: !40) +// CHECK:STDOUT: !46 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.64ccbb8e5d9a0b8e", scope: null, file: !3, line: 29, type: !47, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !50) +// CHECK:STDOUT: !47 = !DISubroutineType(types: !48) +// CHECK:STDOUT: !48 = !{!49, !49} +// CHECK:STDOUT: !49 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) +// CHECK:STDOUT: !50 = !{!51} +// CHECK:STDOUT: !51 = !DILocalVariable(arg: 1, scope: !46, type: !49) +// CHECK:STDOUT: !52 = !DILocation(line: 30, column: 3, scope: !46) +// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.de5b400758c39a65", scope: null, file: !3, line: 29, type: !29, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !54) +// CHECK:STDOUT: !54 = !{!55} +// CHECK:STDOUT: !55 = !DILocalVariable(arg: 1, scope: !53, type: !7) +// CHECK:STDOUT: !56 = !DILocation(line: 30, column: 3, scope: !53) diff --git a/toolchain/lower/testdata/function/generic/call_recursive_basic.carbon b/toolchain/lower/testdata/function/generic/call_recursive_basic.carbon index c8b4390d2d04..86f6f2f8372f 100644 --- a/toolchain/lower/testdata/function/generic/call_recursive_basic.carbon +++ b/toolchain/lower/testdata/function/generic/call_recursive_basic.carbon @@ -28,15 +28,15 @@ fn F[T:! Core.Copy](x: T, count: i32) -> T { fn M() { var n: i32 = 0; var m: f64 = 1.0; - var ptr_i32 : i32*; - var ptr_f64 : f64*; + var ptr_i32 : i32* = &n; + var ptr_f64 : f64* = &m; F(n, 0); F(m, 0); F(ptr_i32, 0); F(ptr_f64, 0); - var c: C; + var c: C = {}; F(c, 0); } @@ -66,7 +66,9 @@ fn M() { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %m.var), !dbg !15 // CHECK:STDOUT: store double 1.000000e+00, ptr %m.var, align 8, !dbg !15 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !16 +// CHECK:STDOUT: store ptr %n.var, ptr %ptr_i32.var, align 8, !dbg !16 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !17 +// CHECK:STDOUT: store ptr %m.var, ptr %ptr_f64.var, align 8, !dbg !17 // CHECK:STDOUT: %.loc34_5 = load i32, ptr %n.var, align 4, !dbg !20 // CHECK:STDOUT: %F.call.loc34 = call i32 @_CF.Main.64ccbb8e5d9a0b8e(i32 %.loc34_5, i32 0), !dbg !21 // CHECK:STDOUT: %.loc35_5 = load double, ptr %m.var, align 8, !dbg !22 @@ -76,6 +78,7 @@ fn M() { // CHECK:STDOUT: %.loc37_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !26 // CHECK:STDOUT: %F.call.loc37 = call ptr @_CF.Main.779b9c0f3b54a7f8(ptr %.loc37_5, i32 0), !dbg !27 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !18 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %c.var, ptr align 1 @C.val.loc15_51, i64 0, i1 false), !dbg !18 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc40_9.4.temp), !dbg !19 // CHECK:STDOUT: call void @_CF.Main.706e9f413f1bae3d(ptr %.loc40_9.4.temp, ptr %c.var, i32 0), !dbg !19 // CHECK:STDOUT: ret void, !dbg !28 @@ -149,6 +152,7 @@ fn M() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; uselistorder directives +// CHECK:STDOUT: uselistorder ptr @llvm.memcpy.p0.p0.i64, { 1, 0 } // CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 5, 4, 3, 2, 1, 0 } // CHECK:STDOUT: uselistorder ptr @_CF.Main.779b9c0f3b54a7f8, { 1, 2, 0 } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/function/generic/call_recursive_diamond.carbon b/toolchain/lower/testdata/function/generic/call_recursive_diamond.carbon index dd3ddd2c10fb..dd409b353e14 100644 --- a/toolchain/lower/testdata/function/generic/call_recursive_diamond.carbon +++ b/toolchain/lower/testdata/function/generic/call_recursive_diamond.carbon @@ -47,8 +47,8 @@ fn D[T:! Core.Copy](x: T, count: i32) -> T { fn M() { var n: i32 = 0; var m: f64 = 1.0; - var ptr_i32 : i32*; - var ptr_f64 : f64*; + var ptr_i32 : i32* = &n; + var ptr_f64 : f64* = &m; A(n, 0); A(m, 0); @@ -73,7 +73,9 @@ fn M() { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %m.var), !dbg !8 // CHECK:STDOUT: store double 1.000000e+00, ptr %m.var, align 8, !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !9 +// CHECK:STDOUT: store ptr %n.var, ptr %ptr_i32.var, align 8, !dbg !9 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !10 +// CHECK:STDOUT: store ptr %m.var, ptr %ptr_f64.var, align 8, !dbg !10 // CHECK:STDOUT: %.loc53_5 = load i32, ptr %n.var, align 4, !dbg !11 // CHECK:STDOUT: %A.call.loc53 = call i32 @_CA.Main.64ccbb8e5d9a0b8e(i32 %.loc53_5, i32 0), !dbg !12 // CHECK:STDOUT: %.loc54_5 = load double, ptr %m.var, align 8, !dbg !13 diff --git a/toolchain/lower/testdata/function/generic/call_recursive_mutual.carbon b/toolchain/lower/testdata/function/generic/call_recursive_mutual.carbon index cf6a59012582..77f0096795fa 100644 --- a/toolchain/lower/testdata/function/generic/call_recursive_mutual.carbon +++ b/toolchain/lower/testdata/function/generic/call_recursive_mutual.carbon @@ -32,8 +32,8 @@ fn G[T:! Core.Copy](x: T, count: i32) -> T { fn M() { var n: i32 = 0; var m: f64 = 1.0; - var ptr_i32 : i32*; - var ptr_f64 : f64*; + var ptr_i32 : i32* = &n; + var ptr_f64 : f64* = &m; F(n, 0); F(m, 0); @@ -56,7 +56,9 @@ fn M() { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %m.var), !dbg !8 // CHECK:STDOUT: store double 1.000000e+00, ptr %m.var, align 8, !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !9 +// CHECK:STDOUT: store ptr %n.var, ptr %ptr_i32.var, align 8, !dbg !9 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !10 +// CHECK:STDOUT: store ptr %m.var, ptr %ptr_f64.var, align 8, !dbg !10 // CHECK:STDOUT: %.loc38_5 = load i32, ptr %n.var, align 4, !dbg !11 // CHECK:STDOUT: %F.call.loc38 = call i32 @_CF.Main.64ccbb8e5d9a0b8e(i32 %.loc38_5, i32 0), !dbg !12 // CHECK:STDOUT: %.loc39_5 = load double, ptr %m.var, align 8, !dbg !13 diff --git a/toolchain/lower/testdata/function/generic/call_recursive_reorder.carbon b/toolchain/lower/testdata/function/generic/call_recursive_reorder.carbon index 11eb7eb408b5..2590cf79b497 100644 --- a/toolchain/lower/testdata/function/generic/call_recursive_reorder.carbon +++ b/toolchain/lower/testdata/function/generic/call_recursive_reorder.carbon @@ -20,9 +20,12 @@ fn F[T:! type, U:! type](x: T, y: U, count: i32) -> i32 { } fn M() { - var ptr_i32 : i32*; - var ptr_f64 : f64*; - var ptr_bool : bool*; + var n: i32 = 0; + var m: f64 = 1.0; + var b: bool = false; + var ptr_i32 : i32* = &n; + var ptr_f64 : f64* = &m; + var ptr_bool : bool* = &b; F(ptr_i32, ptr_bool, 0); F(ptr_f64, ptr_bool, 0); @@ -34,41 +37,53 @@ fn M() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CM.Main() #0 !dbg !4 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %ptr_i32.var = alloca ptr, align 8, !dbg !7 -// CHECK:STDOUT: %ptr_f64.var = alloca ptr, align 8, !dbg !8 -// CHECK:STDOUT: %ptr_bool.var = alloca ptr, align 8, !dbg !9 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !7 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !8 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_bool.var), !dbg !9 -// CHECK:STDOUT: %.loc27_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !10 -// CHECK:STDOUT: %.loc27_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !11 -// CHECK:STDOUT: %F.call.loc27 = call i32 @_CF.Main.2fe87eb83f5a4614(ptr %.loc27_5, ptr %.loc27_14, i32 0), !dbg !12 -// CHECK:STDOUT: %.loc28_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !13 -// CHECK:STDOUT: %.loc28_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !14 -// CHECK:STDOUT: %F.call.loc28 = call i32 @_CF.Main.2fe87eb83f5a4614(ptr %.loc28_5, ptr %.loc28_14, i32 0), !dbg !15 -// CHECK:STDOUT: ret void, !dbg !16 +// CHECK:STDOUT: %n.var = alloca i32, align 4, !dbg !7 +// CHECK:STDOUT: %m.var = alloca double, align 8, !dbg !8 +// CHECK:STDOUT: %b.var = alloca i1, align 1, !dbg !9 +// CHECK:STDOUT: %ptr_i32.var = alloca ptr, align 8, !dbg !10 +// CHECK:STDOUT: %ptr_f64.var = alloca ptr, align 8, !dbg !11 +// CHECK:STDOUT: %ptr_bool.var = alloca ptr, align 8, !dbg !12 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %n.var), !dbg !7 +// CHECK:STDOUT: store i32 0, ptr %n.var, align 4, !dbg !7 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %m.var), !dbg !8 +// CHECK:STDOUT: store double 1.000000e+00, ptr %m.var, align 8, !dbg !8 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %b.var), !dbg !9 +// CHECK:STDOUT: store i8 0, ptr %b.var, align 1, !dbg !9 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !10 +// CHECK:STDOUT: store ptr %n.var, ptr %ptr_i32.var, align 8, !dbg !10 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !11 +// CHECK:STDOUT: store ptr %m.var, ptr %ptr_f64.var, align 8, !dbg !11 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_bool.var), !dbg !12 +// CHECK:STDOUT: store ptr %b.var, ptr %ptr_bool.var, align 8, !dbg !12 +// CHECK:STDOUT: %.loc30_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !13 +// CHECK:STDOUT: %.loc30_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !14 +// CHECK:STDOUT: %F.call.loc30 = call i32 @_CF.Main.2fe87eb83f5a4614(ptr %.loc30_5, ptr %.loc30_14, i32 0), !dbg !15 +// CHECK:STDOUT: %.loc31_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !16 +// CHECK:STDOUT: %.loc31_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !17 +// CHECK:STDOUT: %F.call.loc31 = call i32 @_CF.Main.2fe87eb83f5a4614(ptr %.loc31_5, ptr %.loc31_14, i32 0), !dbg !18 +// CHECK:STDOUT: ret void, !dbg !19 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #1 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr i32 @_CF.Main.2fe87eb83f5a4614(ptr %x, ptr %y, i32 %count) #0 !dbg !17 { +// CHECK:STDOUT: define linkonce_odr i32 @_CF.Main.2fe87eb83f5a4614(ptr %x, ptr %y, i32 %count) #0 !dbg !20 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %Int.as.OrderedWith.impl.Greater.call = icmp sgt i32 %count, 2, !dbg !26 -// CHECK:STDOUT: br i1 %Int.as.OrderedWith.impl.Greater.call, label %if.then, label %if.else, !dbg !27 +// CHECK:STDOUT: %Int.as.OrderedWith.impl.Greater.call = icmp sgt i32 %count, 2, !dbg !29 +// CHECK:STDOUT: br i1 %Int.as.OrderedWith.impl.Greater.call, label %if.then, label %if.else, !dbg !30 // CHECK:STDOUT: // CHECK:STDOUT: if.then: ; preds = %entry -// CHECK:STDOUT: ret i32 %count, !dbg !28 +// CHECK:STDOUT: ret i32 %count, !dbg !31 // CHECK:STDOUT: // CHECK:STDOUT: if.else: ; preds = %entry -// CHECK:STDOUT: %Int.as.AddWith.impl.Op.call = add i32 %count, 1, !dbg !29 -// CHECK:STDOUT: %F.call = call i32 @_CF.Main.2fe87eb83f5a4614(ptr %y, ptr %x, i32 %Int.as.AddWith.impl.Op.call), !dbg !30 -// CHECK:STDOUT: ret i32 %F.call, !dbg !31 +// CHECK:STDOUT: %Int.as.AddWith.impl.Op.call = add i32 %count, 1, !dbg !32 +// CHECK:STDOUT: %F.call = call i32 @_CF.Main.2fe87eb83f5a4614(ptr %y, ptr %x, i32 %Int.as.AddWith.impl.Op.call), !dbg !33 +// CHECK:STDOUT: ret i32 %F.call, !dbg !34 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; uselistorder directives -// CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 2, 1, 0 } +// CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 5, 4, 3, 2, 1, 0 } // CHECK:STDOUT: uselistorder ptr @_CF.Main.2fe87eb83f5a4614, { 0, 2, 1 } // CHECK:STDOUT: // CHECK:STDOUT: attributes #0 = { nounwind } @@ -87,25 +102,28 @@ fn M() { // CHECK:STDOUT: !7 = !DILocation(line: 23, column: 3, scope: !4) // CHECK:STDOUT: !8 = !DILocation(line: 24, column: 3, scope: !4) // CHECK:STDOUT: !9 = !DILocation(line: 25, column: 3, scope: !4) -// CHECK:STDOUT: !10 = !DILocation(line: 27, column: 5, scope: !4) -// CHECK:STDOUT: !11 = !DILocation(line: 27, column: 14, scope: !4) -// CHECK:STDOUT: !12 = !DILocation(line: 27, column: 3, scope: !4) -// CHECK:STDOUT: !13 = !DILocation(line: 28, column: 5, scope: !4) -// CHECK:STDOUT: !14 = !DILocation(line: 28, column: 14, scope: !4) -// CHECK:STDOUT: !15 = !DILocation(line: 28, column: 3, scope: !4) -// CHECK:STDOUT: !16 = !DILocation(line: 22, column: 1, scope: !4) -// CHECK:STDOUT: !17 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.2fe87eb83f5a4614", scope: null, file: !3, line: 15, type: !18, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !22) -// CHECK:STDOUT: !18 = !DISubroutineType(types: !19) -// CHECK:STDOUT: !19 = !{!20, !21, !21, !20} -// CHECK:STDOUT: !20 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -// CHECK:STDOUT: !21 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 8) -// CHECK:STDOUT: !22 = !{!23, !24, !25} -// CHECK:STDOUT: !23 = !DILocalVariable(arg: 1, scope: !17, type: !21) -// CHECK:STDOUT: !24 = !DILocalVariable(arg: 2, scope: !17, type: !21) -// CHECK:STDOUT: !25 = !DILocalVariable(arg: 3, scope: !17, type: !20) -// CHECK:STDOUT: !26 = !DILocation(line: 16, column: 7, scope: !17) -// CHECK:STDOUT: !27 = !DILocation(line: 16, column: 6, scope: !17) -// CHECK:STDOUT: !28 = !DILocation(line: 17, column: 5, scope: !17) -// CHECK:STDOUT: !29 = !DILocation(line: 19, column: 18, scope: !17) -// CHECK:STDOUT: !30 = !DILocation(line: 19, column: 10, scope: !17) -// CHECK:STDOUT: !31 = !DILocation(line: 19, column: 3, scope: !17) +// CHECK:STDOUT: !10 = !DILocation(line: 26, column: 3, scope: !4) +// CHECK:STDOUT: !11 = !DILocation(line: 27, column: 3, scope: !4) +// CHECK:STDOUT: !12 = !DILocation(line: 28, column: 3, scope: !4) +// CHECK:STDOUT: !13 = !DILocation(line: 30, column: 5, scope: !4) +// CHECK:STDOUT: !14 = !DILocation(line: 30, column: 14, scope: !4) +// CHECK:STDOUT: !15 = !DILocation(line: 30, column: 3, scope: !4) +// CHECK:STDOUT: !16 = !DILocation(line: 31, column: 5, scope: !4) +// CHECK:STDOUT: !17 = !DILocation(line: 31, column: 14, scope: !4) +// CHECK:STDOUT: !18 = !DILocation(line: 31, column: 3, scope: !4) +// CHECK:STDOUT: !19 = !DILocation(line: 22, column: 1, scope: !4) +// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.2fe87eb83f5a4614", scope: null, file: !3, line: 15, type: !21, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !25) +// CHECK:STDOUT: !21 = !DISubroutineType(types: !22) +// CHECK:STDOUT: !22 = !{!23, !24, !24, !23} +// CHECK:STDOUT: !23 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) +// CHECK:STDOUT: !24 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 8) +// CHECK:STDOUT: !25 = !{!26, !27, !28} +// CHECK:STDOUT: !26 = !DILocalVariable(arg: 1, scope: !20, type: !24) +// CHECK:STDOUT: !27 = !DILocalVariable(arg: 2, scope: !20, type: !24) +// CHECK:STDOUT: !28 = !DILocalVariable(arg: 3, scope: !20, type: !23) +// CHECK:STDOUT: !29 = !DILocation(line: 16, column: 7, scope: !20) +// CHECK:STDOUT: !30 = !DILocation(line: 16, column: 6, scope: !20) +// CHECK:STDOUT: !31 = !DILocation(line: 17, column: 5, scope: !20) +// CHECK:STDOUT: !32 = !DILocation(line: 19, column: 18, scope: !20) +// CHECK:STDOUT: !33 = !DILocation(line: 19, column: 10, scope: !20) +// CHECK:STDOUT: !34 = !DILocation(line: 19, column: 3, scope: !20) diff --git a/toolchain/lower/testdata/function/generic/call_recursive_reorder_more.carbon b/toolchain/lower/testdata/function/generic/call_recursive_reorder_more.carbon index 61123b8fd762..536294c5d467 100644 --- a/toolchain/lower/testdata/function/generic/call_recursive_reorder_more.carbon +++ b/toolchain/lower/testdata/function/generic/call_recursive_reorder_more.carbon @@ -26,10 +26,10 @@ fn M() { var val_f64 : f64; var val_bool : bool; - var ptr_i16 : i16*; - var ptr_i32 : i32*; - var ptr_i64 : i64*; - var ptr_bool : bool*; + var ptr_i16 : i16* = &val_i16; + var ptr_i32 : i32* = &val_i32; + var ptr_i64 : i64* = &val_i64; + var ptr_bool : bool* = &val_bool; // Insert noise: non equivalent with the second set of calls. // (4*2 + 1 functions generated; first 3 coalesce with each other - self @@ -68,14 +68,23 @@ fn M() { // CHECK:STDOUT: %ptr_i64.var = alloca ptr, align 8, !dbg !14 // CHECK:STDOUT: %ptr_bool.var = alloca ptr, align 8, !dbg !15 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %val_i16.var), !dbg !7 +// CHECK:STDOUT: store i16 poison, ptr %val_i16.var, align 2, !dbg !7 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %val_i32.var), !dbg !8 +// CHECK:STDOUT: store i32 poison, ptr %val_i32.var, align 4, !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %val_i64.var), !dbg !9 +// CHECK:STDOUT: store i64 poison, ptr %val_i64.var, align 4, !dbg !9 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %val_f64.var), !dbg !10 +// CHECK:STDOUT: store double poison, ptr %val_f64.var, align 8, !dbg !10 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %val_bool.var), !dbg !11 +// CHECK:STDOUT: store i8 poison, ptr %val_bool.var, align 1, !dbg !11 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i16.var), !dbg !12 +// CHECK:STDOUT: store ptr %val_i16.var, ptr %ptr_i16.var, align 8, !dbg !12 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !13 +// CHECK:STDOUT: store ptr %val_i32.var, ptr %ptr_i32.var, align 8, !dbg !13 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i64.var), !dbg !14 +// CHECK:STDOUT: store ptr %val_i64.var, ptr %ptr_i64.var, align 8, !dbg !14 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_bool.var), !dbg !15 +// CHECK:STDOUT: store ptr %val_bool.var, ptr %ptr_bool.var, align 8, !dbg !15 // CHECK:STDOUT: %.loc38_5 = load i16, ptr %val_i16.var, align 2, !dbg !16 // CHECK:STDOUT: %.loc38_14 = load ptr, ptr %ptr_i32.var, align 8, !dbg !17 // CHECK:STDOUT: %.loc38_23 = load ptr, ptr %ptr_bool.var, align 8, !dbg !18 diff --git a/toolchain/lower/testdata/function/generic/call_recursive_sccs_deep.carbon b/toolchain/lower/testdata/function/generic/call_recursive_sccs_deep.carbon index b056f8cd5ecf..f0f7598e7bbc 100644 --- a/toolchain/lower/testdata/function/generic/call_recursive_sccs_deep.carbon +++ b/toolchain/lower/testdata/function/generic/call_recursive_sccs_deep.carbon @@ -73,8 +73,8 @@ fn G[T:! Core.Copy](x: T, count: i32) -> T { fn M() { var n: i32 = 0; var m: f64 = 1.0; - var ptr_i32 : i32*; - var ptr_f64 : f64*; + var ptr_i32 : i32* = &n; + var ptr_f64 : f64* = &m; A(n, 0); A(m, 0); @@ -99,7 +99,9 @@ fn M() { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %m.var), !dbg !8 // CHECK:STDOUT: store double 1.000000e+00, ptr %m.var, align 8, !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !9 +// CHECK:STDOUT: store ptr %n.var, ptr %ptr_i32.var, align 8, !dbg !9 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !10 +// CHECK:STDOUT: store ptr %m.var, ptr %ptr_f64.var, align 8, !dbg !10 // CHECK:STDOUT: %.loc79_5 = load i32, ptr %n.var, align 4, !dbg !11 // CHECK:STDOUT: %A.call.loc79 = call i32 @_CA.Main.64ccbb8e5d9a0b8e(i32 %.loc79_5, i32 0), !dbg !12 // CHECK:STDOUT: %.loc80_5 = load double, ptr %m.var, align 8, !dbg !13 diff --git a/toolchain/lower/testdata/function/generic/call_specific_in_class.carbon b/toolchain/lower/testdata/function/generic/call_specific_in_class.carbon index 202c5968df15..12546db01a25 100644 --- a/toolchain/lower/testdata/function/generic/call_specific_in_class.carbon +++ b/toolchain/lower/testdata/function/generic/call_specific_in_class.carbon @@ -59,12 +59,15 @@ fn M() { // CHECK:STDOUT: %var_f64.var = alloca double, align 8, !dbg !11 // CHECK:STDOUT: %_.var = alloca {}, align 8, !dbg !12 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !7 +// CHECK:STDOUT: store ptr poison, ptr %ptr_i32.var, align 8, !dbg !7 // CHECK:STDOUT: %.loc34_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !13 // CHECK:STDOUT: %F.call.loc34 = call ptr @_CF.Main.779b9c0f3b54a7f8(ptr %.loc34_5), !dbg !14 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !8 +// CHECK:STDOUT: store ptr poison, ptr %ptr_f64.var, align 8, !dbg !8 // CHECK:STDOUT: %.loc36_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !15 // CHECK:STDOUT: %F.call.loc36 = call ptr @_CF.Main.779b9c0f3b54a7f8(ptr %.loc36_5), !dbg !16 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i8.var), !dbg !9 +// CHECK:STDOUT: store ptr poison, ptr %ptr_i8.var, align 8, !dbg !9 // CHECK:STDOUT: %.loc38_5 = load ptr, ptr %ptr_i8.var, align 8, !dbg !17 // CHECK:STDOUT: %F.call.loc38 = call ptr @_CF.Main.779b9c0f3b54a7f8(ptr %.loc38_5), !dbg !18 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %var_i32.var), !dbg !10 diff --git a/toolchain/lower/testdata/function/generic/reverse_canonical.carbon b/toolchain/lower/testdata/function/generic/reverse_canonical.carbon index 6d140a8c1c46..4033aa127fe0 100644 --- a/toolchain/lower/testdata/function/generic/reverse_canonical.carbon +++ b/toolchain/lower/testdata/function/generic/reverse_canonical.carbon @@ -56,7 +56,9 @@ fn Main() { // CHECK:STDOUT: %x.var = alloca i1, align 1, !dbg !7 // CHECK:STDOUT: %y.var = alloca ptr, align 8, !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %x.var), !dbg !7 +// CHECK:STDOUT: store i8 poison, ptr %x.var, align 1, !dbg !7 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %y.var), !dbg !8 +// CHECK:STDOUT: store ptr poison, ptr %y.var, align 8, !dbg !8 // CHECK:STDOUT: %.loc47_9 = load i8, ptr %x.var, align 1, !dbg !9 // CHECK:STDOUT: %.loc47_91 = trunc i8 %.loc47_9 to i1, !dbg !9 // CHECK:STDOUT: %.loc47_12 = load i8, ptr %x.var, align 1, !dbg !10 @@ -74,6 +76,7 @@ fn Main() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %local_name.var = alloca ptr, align 8, !dbg !22 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local_name.var), !dbg !22 +// CHECK:STDOUT: store ptr poison, ptr %local_name.var, align 8, !dbg !22 // CHECK:STDOUT: %.loc23 = load ptr, ptr %local_name.var, align 8, !dbg !23 // CHECK:STDOUT: call void @_Csecond.Main.d7e5e45a4314338a(i1 %arg2, i1 %arg2, ptr %.loc23), !dbg !24 // CHECK:STDOUT: ret void, !dbg !25 @@ -84,6 +87,7 @@ fn Main() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %local_name.var = alloca ptr, align 8, !dbg !31 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local_name.var), !dbg !31 +// CHECK:STDOUT: store ptr poison, ptr %local_name.var, align 8, !dbg !31 // CHECK:STDOUT: call void @_Cfirst.Main.3beb1adb29385874(ptr %arg3, ptr %arg3, i1 %arg1), !dbg !32 // CHECK:STDOUT: %.loc30 = load ptr, ptr %local_name.var, align 8, !dbg !33 // CHECK:STDOUT: call void @_Cthird.Main.d7e5e45a4314338a(i1 %arg2, i1 %arg2, ptr %.loc30), !dbg !34 @@ -95,6 +99,7 @@ fn Main() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %local_name.var = alloca ptr, align 8, !dbg !41 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local_name.var), !dbg !41 +// CHECK:STDOUT: store ptr poison, ptr %local_name.var, align 8, !dbg !41 // CHECK:STDOUT: %.loc23 = load ptr, ptr %local_name.var, align 8, !dbg !42 // CHECK:STDOUT: call void @_Csecond.Main.8f47aef0a9da052b(ptr %arg2, ptr %arg2, ptr %.loc23), !dbg !43 // CHECK:STDOUT: ret void, !dbg !44 @@ -105,6 +110,7 @@ fn Main() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %local_name.var = alloca ptr, align 8, !dbg !50 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local_name.var), !dbg !50 +// CHECK:STDOUT: store ptr poison, ptr %local_name.var, align 8, !dbg !50 // CHECK:STDOUT: %.loc36_10 = load ptr, ptr %local_name.var, align 8, !dbg !51 // CHECK:STDOUT: %.loc36_22 = load ptr, ptr %local_name.var, align 8, !dbg !52 // CHECK:STDOUT: call void @_Cfourth.Main.0d9750e0ffa31ae6(ptr %.loc36_10, ptr %.loc36_22, i1 %arg1), !dbg !53 @@ -117,6 +123,7 @@ fn Main() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %local_name.var = alloca ptr, align 8, !dbg !61 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local_name.var), !dbg !61 +// CHECK:STDOUT: store ptr poison, ptr %local_name.var, align 8, !dbg !61 // CHECK:STDOUT: call void @_Cfirst.Main.8f47aef0a9da052b(ptr %arg3, ptr %arg3, ptr %arg1), !dbg !62 // CHECK:STDOUT: %.loc30 = load ptr, ptr %local_name.var, align 8, !dbg !63 // CHECK:STDOUT: call void @_Cthird.Main.8f47aef0a9da052b(ptr %arg2, ptr %arg2, ptr %.loc30), !dbg !64 @@ -134,6 +141,7 @@ fn Main() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %local_name.var = alloca ptr, align 8, !dbg !77 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local_name.var), !dbg !77 +// CHECK:STDOUT: store ptr poison, ptr %local_name.var, align 8, !dbg !77 // CHECK:STDOUT: %.loc23 = load ptr, ptr %local_name.var, align 8, !dbg !78 // CHECK:STDOUT: call void @_Csecond.Main.8f47aef0a9da052b(ptr %arg2, ptr %arg2, ptr %.loc23), !dbg !79 // CHECK:STDOUT: ret void, !dbg !80 @@ -144,6 +152,7 @@ fn Main() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %local_name.var = alloca ptr, align 8, !dbg !86 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local_name.var), !dbg !86 +// CHECK:STDOUT: store ptr poison, ptr %local_name.var, align 8, !dbg !86 // CHECK:STDOUT: %.loc36_10 = load ptr, ptr %local_name.var, align 8, !dbg !87 // CHECK:STDOUT: %.loc36_22 = load ptr, ptr %local_name.var, align 8, !dbg !88 // CHECK:STDOUT: call void @_Cfourth.Main.c950b7c9c726f508(ptr %.loc36_10, ptr %.loc36_22, ptr %arg1), !dbg !89 diff --git a/toolchain/lower/testdata/function/generic/self_canonical.carbon b/toolchain/lower/testdata/function/generic/self_canonical.carbon index 1fa83c1ecd53..0909c043ee22 100644 --- a/toolchain/lower/testdata/function/generic/self_canonical.carbon +++ b/toolchain/lower/testdata/function/generic/self_canonical.carbon @@ -2,7 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/destroy.carbon +// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/convert.carbon // AUTOUPDATE // TIP: To test this file alone, run: // TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/function/generic/self_canonical.carbon @@ -90,6 +90,7 @@ fn Main_method_no_template () { // CHECK:STDOUT: entry: // CHECK:STDOUT: %local1.var = alloca ptr, align 8, !dbg !7 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local1.var), !dbg !7 +// CHECK:STDOUT: store ptr poison, ptr %local1.var, align 8, !dbg !7 // CHECK:STDOUT: %.loc82 = load ptr, ptr %local1.var, align 8, !dbg !8 // CHECK:STDOUT: call void @_Cfirst_function.Main.cf543a2f19840c22(ptr %.loc82), !dbg !9 // CHECK:STDOUT: ret void, !dbg !10 @@ -104,7 +105,9 @@ fn Main_method_no_template () { // CHECK:STDOUT: %local1.var = alloca ptr, align 8, !dbg !17 // CHECK:STDOUT: %local2.var = alloca ptr, align 8, !dbg !18 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local1.var), !dbg !17 +// CHECK:STDOUT: store ptr poison, ptr %local1.var, align 8, !dbg !17 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local2.var), !dbg !18 +// CHECK:STDOUT: store ptr poison, ptr %local2.var, align 8, !dbg !18 // CHECK:STDOUT: %.loc53 = load ptr, ptr %local1.var, align 8, !dbg !19 // CHECK:STDOUT: call void @_Cfirst_function.Main.cf543a2f19840c22(ptr %.loc53), !dbg !20 // CHECK:STDOUT: %.loc54 = load ptr, ptr %local2.var, align 8, !dbg !21 @@ -118,7 +121,9 @@ fn Main_method_no_template () { // CHECK:STDOUT: %local1.var = alloca ptr, align 8, !dbg !27 // CHECK:STDOUT: %local2.var = alloca ptr, align 8, !dbg !28 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local1.var), !dbg !27 +// CHECK:STDOUT: store ptr poison, ptr %local1.var, align 8, !dbg !27 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local2.var), !dbg !28 +// CHECK:STDOUT: store ptr poison, ptr %local2.var, align 8, !dbg !28 // CHECK:STDOUT: %.loc61_19 = load ptr, ptr %local2.var, align 8, !dbg !29 // CHECK:STDOUT: %.loc61_27 = load ptr, ptr %local1.var, align 8, !dbg !30 // CHECK:STDOUT: call void @_Csecond_function.Main.fa07ebc2c86fcc7a(ptr %.loc61_19, ptr %.loc61_27, ptr %arg), !dbg !31 @@ -132,8 +137,11 @@ fn Main_method_no_template () { // CHECK:STDOUT: %local2.var = alloca ptr, align 8, !dbg !41 // CHECK:STDOUT: %local3.var = alloca ptr, align 8, !dbg !42 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local1.var), !dbg !40 +// CHECK:STDOUT: store ptr poison, ptr %local1.var, align 8, !dbg !40 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local2.var), !dbg !41 +// CHECK:STDOUT: store ptr poison, ptr %local2.var, align 8, !dbg !41 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local3.var), !dbg !42 +// CHECK:STDOUT: store ptr poison, ptr %local3.var, align 8, !dbg !42 // CHECK:STDOUT: %.loc75_25 = load ptr, ptr %local3.var, align 8, !dbg !43 // CHECK:STDOUT: %.loc75_33 = load ptr, ptr %local2.var, align 8, !dbg !44 // CHECK:STDOUT: call void @_Csecond_function.Main.fa07ebc2c86fcc7a(ptr %arg3, ptr %.loc75_25, ptr %.loc75_33), !dbg !45 @@ -148,7 +156,9 @@ fn Main_method_no_template () { // CHECK:STDOUT: %local1.var = alloca ptr, align 8, !dbg !54 // CHECK:STDOUT: %local2.var = alloca ptr, align 8, !dbg !55 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local1.var), !dbg !54 +// CHECK:STDOUT: store ptr poison, ptr %local1.var, align 8, !dbg !54 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %local2.var), !dbg !55 +// CHECK:STDOUT: store ptr poison, ptr %local2.var, align 8, !dbg !55 // CHECK:STDOUT: %.loc39 = load ptr, ptr %local2.var, align 8, !dbg !56 // CHECK:STDOUT: call void @_Cthird_function.Main.4704114ae40540d8(ptr %arg1, ptr %arg2, ptr %.loc39), !dbg !57 // CHECK:STDOUT: %.loc40 = load ptr, ptr %local1.var, align 8, !dbg !58 diff --git a/toolchain/lower/testdata/global/decl.carbon b/toolchain/lower/testdata/global/decl.carbon index ab46e8f1c577..bacfbd22670f 100644 --- a/toolchain/lower/testdata/global/decl.carbon +++ b/toolchain/lower/testdata/global/decl.carbon @@ -15,6 +15,16 @@ var a: i32; // CHECK:STDOUT: source_filename = "decl.carbon" // CHECK:STDOUT: // CHECK:STDOUT: @_Ca.Main = global i32 0 +// CHECK:STDOUT: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 0, ptr @_C__global_init.Main, ptr null }] +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define internal void @_C__global_init.Main() #0 !dbg !4 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: store i32 poison, ptr @_Ca.Main, align 4, !dbg !7 +// CHECK:STDOUT: ret void, !dbg !8 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: attributes #0 = { nounwind } // CHECK:STDOUT: // CHECK:STDOUT: !llvm.module.flags = !{!0, !1} // CHECK:STDOUT: !llvm.dbg.cu = !{!2} @@ -23,3 +33,8 @@ var a: i32; // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3} // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug) // CHECK:STDOUT: !3 = !DIFile(filename: "decl.carbon", directory: "") +// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "__global_init", linkageName: "_C__global_init.Main", scope: null, file: !3, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !5 = !DISubroutineType(types: !6) +// CHECK:STDOUT: !6 = !{null} +// CHECK:STDOUT: !7 = !DILocation(line: 12, column: 1, scope: !4) +// CHECK:STDOUT: !8 = !DILocation(line: 0, scope: !4) diff --git a/toolchain/lower/testdata/impl/import_facet.carbon b/toolchain/lower/testdata/impl/import_facet.carbon index baaf95de0aac..01f742352412 100644 --- a/toolchain/lower/testdata/impl/import_facet.carbon +++ b/toolchain/lower/testdata/impl/import_facet.carbon @@ -16,7 +16,7 @@ // --- a.carbon library "[[@TEST_NAME]]"; -class C(T:! Core.Copy & Core.Destroy) { +class C(T:! Core.Copy & Core.UnformedInit & Core.Destroy) { fn GetC[unused self: Self]() -> T { var value: T; return value; @@ -28,7 +28,7 @@ library "[[@TEST_NAME]]"; export import library "a"; interface I { - let T:! Core.Copy & Core.Destroy; + let T:! Core.Copy & Core.UnformedInit & Core.Destroy; fn GetI[unused self: Self]() -> C(T); } @@ -85,7 +85,7 @@ fn F(d: D(i32)) -> i32* { // CHECK:STDOUT: ; ModuleID = 'd.carbon' // CHECK:STDOUT: source_filename = "d.carbon" // CHECK:STDOUT: -// CHECK:STDOUT: @C.val.9f9.anon = internal constant {} zeroinitializer +// CHECK:STDOUT: @C.val.7d8.anon = internal constant {} zeroinitializer // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define ptr @_CF.Main(ptr %d) #0 !dbg !4 { @@ -93,7 +93,7 @@ fn F(d: D(i32)) -> i32* { // CHECK:STDOUT: %.loc5_21.1.temp = alloca {}, align 8, !dbg !10 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc5_21.1.temp), !dbg !10 // CHECK:STDOUT: call void @"_CGetI.D.eb057aa32837c84e.Main:I.Main.b88d1103f417c6d4"(ptr %.loc5_21.1.temp, ptr %d), !dbg !10 -// CHECK:STDOUT: %C.GetC.call = call ptr @_CGetC.C.Main.acef76c949f320af(ptr %.loc5_21.1.temp), !dbg !10 +// CHECK:STDOUT: %C.GetC.call = call ptr @_CGetC.C.Main.65ad70c00874dfd2(ptr %.loc5_21.1.temp), !dbg !10 // CHECK:STDOUT: ret ptr %C.GetC.call, !dbg !11 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -102,14 +102,15 @@ fn F(d: D(i32)) -> i32* { // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define linkonce_odr void @"_CGetI.D.eb057aa32837c84e.Main:I.Main.b88d1103f417c6d4"(ptr sret({}) %return, ptr %self) #0 !dbg !12 { -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %return, ptr align 1 @C.val.9f9.anon, i64 0, i1 false), !dbg !16 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %return, ptr align 1 @C.val.7d8.anon, i64 0, i1 false), !dbg !16 // CHECK:STDOUT: ret void, !dbg !16 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr ptr @_CGetC.C.Main.acef76c949f320af(ptr %self) #0 !dbg !17 { +// CHECK:STDOUT: define linkonce_odr ptr @_CGetC.C.Main.65ad70c00874dfd2(ptr %self) #0 !dbg !17 { // CHECK:STDOUT: %1 = alloca ptr, align 8, !dbg !21 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %1), !dbg !21 +// CHECK:STDOUT: store ptr poison, ptr %1, align 8, !dbg !21 // CHECK:STDOUT: %2 = load ptr, ptr %1, align 8, !dbg !22 // CHECK:STDOUT: ret ptr %2, !dbg !23 // CHECK:STDOUT: } @@ -141,7 +142,7 @@ fn F(d: D(i32)) -> i32* { // CHECK:STDOUT: !14 = !{!15} // CHECK:STDOUT: !15 = !DILocalVariable(arg: 1, scope: !12, type: !7) // CHECK:STDOUT: !16 = !DILocation(line: 7, column: 7, scope: !12) -// CHECK:STDOUT: !17 = distinct !DISubprogram(name: "GetC", linkageName: "_CGetC.C.Main.acef76c949f320af", scope: null, file: !18, line: 4, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !19) +// CHECK:STDOUT: !17 = distinct !DISubprogram(name: "GetC", linkageName: "_CGetC.C.Main.65ad70c00874dfd2", scope: null, file: !18, line: 4, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !19) // CHECK:STDOUT: !18 = !DIFile(filename: "a.carbon", directory: "") // CHECK:STDOUT: !19 = !{!20} // CHECK:STDOUT: !20 = !DILocalVariable(arg: 1, scope: !17, type: !7) diff --git a/toolchain/lower/testdata/interop/cpp/nullptr.carbon b/toolchain/lower/testdata/interop/cpp/nullptr.carbon index 529203c28b6a..89d8cf5d86e5 100644 --- a/toolchain/lower/testdata/interop/cpp/nullptr.carbon +++ b/toolchain/lower/testdata/interop/cpp/nullptr.carbon @@ -224,14 +224,14 @@ fn ConvertNullptrConstant() -> Core.Optional(i32*) { // CHECK:STDOUT: !42 = !DILocation(line: 32, column: 3, scope: !40) // CHECK:STDOUT: !43 = distinct !DISubprogram(name: "ConvertNullptrConstant", linkageName: "_CConvertNullptrConstant.Main", scope: null, file: !6, line: 35, type: !25, spFlags: DISPFlagDefinition, unit: !5) // CHECK:STDOUT: !44 = !DILocation(line: 36, column: 3, scope: !43) -// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.NullptrT.CppCompat.Core:ImplicitAs.83dbfcd16e56a769.Core.b88d1103f417c6d4", scope: null, file: !46, line: 46, type: !47, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !49) +// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.NullptrT.CppCompat.Core:ImplicitAs.83dbfcd16e56a769.Core.b88d1103f417c6d4", scope: null, file: !46, line: 51, type: !47, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !49) // CHECK:STDOUT: !46 = !DIFile(filename: "{{.*}}/prelude/types/cpp/nullptr.carbon", directory: "") // CHECK:STDOUT: !47 = !DISubroutineType(types: !48) // CHECK:STDOUT: !48 = !{!27, !27} // CHECK:STDOUT: !49 = !{!50} // CHECK:STDOUT: !50 = !DILocalVariable(arg: 1, scope: !45, type: !27) -// CHECK:STDOUT: !51 = !DILocation(line: 47, column: 14, scope: !45) -// CHECK:STDOUT: !52 = !DILocation(line: 47, column: 7, scope: !45) -// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.95809cda2a4fffc7", scope: null, file: !54, line: 26, type: !25, spFlags: DISPFlagDefinition, unit: !5) +// CHECK:STDOUT: !51 = !DILocation(line: 52, column: 14, scope: !45) +// CHECK:STDOUT: !52 = !DILocation(line: 52, column: 7, scope: !45) +// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.95809cda2a4fffc7", scope: null, file: !54, line: 27, type: !25, spFlags: DISPFlagDefinition, unit: !5) // CHECK:STDOUT: !54 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "") -// CHECK:STDOUT: !55 = !DILocation(line: 27, column: 5, scope: !53) +// CHECK:STDOUT: !55 = !DILocation(line: 28, column: 5, scope: !53) diff --git a/toolchain/lower/testdata/interop/cpp/parameters.carbon b/toolchain/lower/testdata/interop/cpp/parameters.carbon index a557dc1b0c01..dff86c631414 100644 --- a/toolchain/lower/testdata/interop/cpp/parameters.carbon +++ b/toolchain/lower/testdata/interop/cpp/parameters.carbon @@ -114,6 +114,7 @@ fn PassValueExpr(y: Cpp.Y) { // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: // CHECK:STDOUT: @_Cc.Main = global i16 0 +// CHECK:STDOUT: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 0, ptr @_C__global_init.Main, ptr null }] // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable // CHECK:STDOUT: define dso_local void @_Z11pass_signedasil.carbon_thunk(ptr noundef %0, ptr noundef %1, i32 noundef %2, i64 noundef %3) #0 { @@ -224,6 +225,13 @@ fn PassValueExpr(y: Cpp.Y) { // CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #3 // CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define internal void @_C__global_init.Main() #2 !dbg !48 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: store i16 poison, ptr @_Cc.Main, align 2, !dbg !49 +// CHECK:STDOUT: ret void, !dbg !50 +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: ; uselistorder directives // CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 7, 6, 5, 4, 3, 2, 1, 0 } // CHECK:STDOUT: @@ -284,6 +292,9 @@ fn PassValueExpr(y: Cpp.Y) { // CHECK:STDOUT: !45 = !DILocation(line: 19, column: 3, scope: !31) // CHECK:STDOUT: !46 = !DILocation(line: 20, column: 3, scope: !31) // CHECK:STDOUT: !47 = !DILocation(line: 16, column: 1, scope: !31) +// CHECK:STDOUT: !48 = distinct !DISubprogram(name: "__global_init", linkageName: "_C__global_init.Main", scope: null, file: !6, type: !22, spFlags: DISPFlagDefinition, unit: !5) +// CHECK:STDOUT: !49 = !DILocation(line: 14, column: 1, scope: !48) +// CHECK:STDOUT: !50 = !DILocation(line: 0, scope: !48) // CHECK:STDOUT: ; ModuleID = 'import_struct.carbon' // CHECK:STDOUT: source_filename = "import_struct.carbon" // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" diff --git a/toolchain/lower/testdata/interop/cpp/pointer.carbon b/toolchain/lower/testdata/interop/cpp/pointer.carbon index 004fbd28f4d2..4e19b9c734b8 100644 --- a/toolchain/lower/testdata/interop/cpp/pointer.carbon +++ b/toolchain/lower/testdata/interop/cpp/pointer.carbon @@ -296,6 +296,7 @@ fn ReturnPtrWithThunk() -> Core.Optional(Cpp.C*) { // CHECK:STDOUT: define linkonce_odr ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.f53db17714b9f655"(ptr %self) #2 !dbg !63 { // CHECK:STDOUT: %1 = alloca ptr, align 8, !dbg !66 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %1), !dbg !66 +// CHECK:STDOUT: store ptr poison, ptr %1, align 8, !dbg !66 // CHECK:STDOUT: store ptr %self, ptr %1, align 8, !dbg !67 // CHECK:STDOUT: %2 = load ptr, ptr %1, align 8, !dbg !68 // CHECK:STDOUT: ret ptr %2, !dbg !69 @@ -359,28 +360,28 @@ fn ReturnPtrWithThunk() -> Core.Optional(Cpp.C*) { // CHECK:STDOUT: !42 = distinct !DISubprogram(name: "ReturnPtrWithThunk", linkageName: "_CReturnPtrWithThunk.Main", scope: null, file: !6, line: 38, type: !28, spFlags: DISPFlagDefinition, unit: !5) // CHECK:STDOUT: !43 = !DILocation(line: 39, column: 10, scope: !42) // CHECK:STDOUT: !44 = !DILocation(line: 39, column: 3, scope: !42) -// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.e5cf8fcbb4feaae2:ImplicitAs.0f95c9e18c91e00a.Core.e76fd6d2be138e4a", scope: null, file: !46, line: 93, type: !47, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !49) +// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.e5cf8fcbb4feaae2:ImplicitAs.0f95c9e18c91e00a.Core.e76fd6d2be138e4a", scope: null, file: !46, line: 96, type: !47, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !49) // CHECK:STDOUT: !46 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "") // CHECK:STDOUT: !47 = !DISubroutineType(types: !48) // CHECK:STDOUT: !48 = !{!17, !17} // CHECK:STDOUT: !49 = !{!50} // CHECK:STDOUT: !50 = !DILocalVariable(arg: 1, scope: !45, type: !17) -// CHECK:STDOUT: !51 = !DILocation(line: 94, column: 12, scope: !45) -// CHECK:STDOUT: !52 = !DILocation(line: 94, column: 5, scope: !45) -// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.90961d7b1ce4f089:OptionalAs.0e326e799dad0c64.Core.8f431b36581f9e63", scope: null, file: !46, line: 68, type: !47, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !54) +// CHECK:STDOUT: !51 = !DILocation(line: 97, column: 12, scope: !45) +// CHECK:STDOUT: !52 = !DILocation(line: 97, column: 5, scope: !45) +// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.90961d7b1ce4f089:OptionalAs.0e326e799dad0c64.Core.8f431b36581f9e63", scope: null, file: !46, line: 71, type: !47, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !54) // CHECK:STDOUT: !54 = !{!55} // CHECK:STDOUT: !55 = !DILocalVariable(arg: 1, scope: !53, type: !17) -// CHECK:STDOUT: !56 = !DILocation(line: 69, column: 12, scope: !53) -// CHECK:STDOUT: !57 = !DILocation(line: 69, column: 5, scope: !53) -// CHECK:STDOUT: !58 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.8f431b36581f9e63", scope: null, file: !46, line: 29, type: !47, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !59) +// CHECK:STDOUT: !56 = !DILocation(line: 72, column: 12, scope: !53) +// CHECK:STDOUT: !57 = !DILocation(line: 72, column: 5, scope: !53) +// CHECK:STDOUT: !58 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.8f431b36581f9e63", scope: null, file: !46, line: 30, type: !47, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !59) // CHECK:STDOUT: !59 = !{!60} // CHECK:STDOUT: !60 = !DILocalVariable(arg: 1, scope: !58, type: !17) -// CHECK:STDOUT: !61 = !DILocation(line: 30, column: 12, scope: !58) -// CHECK:STDOUT: !62 = !DILocation(line: 30, column: 5, scope: !58) -// CHECK:STDOUT: !63 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.e8f8f92d3d08d149:OptionalStorage.Core.f53db17714b9f655", scope: null, file: !46, line: 138, type: !47, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !64) +// CHECK:STDOUT: !61 = !DILocation(line: 31, column: 12, scope: !58) +// CHECK:STDOUT: !62 = !DILocation(line: 31, column: 5, scope: !58) +// CHECK:STDOUT: !63 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.e8f8f92d3d08d149:OptionalStorage.Core.f53db17714b9f655", scope: null, file: !46, line: 150, type: !47, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !64) // CHECK:STDOUT: !64 = !{!65} // CHECK:STDOUT: !65 = !DILocalVariable(arg: 1, scope: !63, type: !17) -// CHECK:STDOUT: !66 = !DILocation(line: 139, column: 14, scope: !63) -// CHECK:STDOUT: !67 = !DILocation(line: 140, column: 5, scope: !63) -// CHECK:STDOUT: !68 = !DILocation(line: 139, column: 18, scope: !63) -// CHECK:STDOUT: !69 = !DILocation(line: 141, column: 5, scope: !63) +// CHECK:STDOUT: !66 = !DILocation(line: 151, column: 14, scope: !63) +// CHECK:STDOUT: !67 = !DILocation(line: 153, column: 5, scope: !63) +// CHECK:STDOUT: !68 = !DILocation(line: 151, column: 18, scope: !63) +// CHECK:STDOUT: !69 = !DILocation(line: 154, column: 5, scope: !63) diff --git a/toolchain/lower/testdata/interop/cpp/reference.carbon b/toolchain/lower/testdata/interop/cpp/reference.carbon index 6453621f56d3..c1478ff34eb8 100644 --- a/toolchain/lower/testdata/interop/cpp/reference.carbon +++ b/toolchain/lower/testdata/interop/cpp/reference.carbon @@ -198,6 +198,7 @@ fn GetRefs() { // CHECK:STDOUT: call void @_Z9TakeCRRefO1C.carbon_thunk(ptr %.loc19_18.2.temp), !dbg !25 // CHECK:STDOUT: call void @_Z13TakeConstCRefRK1C.carbon_thunk(ptr %c.var), !dbg !26 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %n.var), !dbg !21 +// CHECK:STDOUT: store i32 poison, ptr %n.var, align 4, !dbg !21 // CHECK:STDOUT: call void @_Z10TakeIntRefRi(ptr %n.var), !dbg !27 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc24_22.3.temp), !dbg !22 // CHECK:STDOUT: store i32 42, ptr %.loc24_22.3.temp, align 4, !dbg !22 @@ -365,6 +366,7 @@ fn GetRefs() { // CHECK:STDOUT: call void @_Z9TakeCRRefRK1C10ForceThunk.carbon_thunk1(ptr %.loc20_18.2.temp), !dbg !27 // CHECK:STDOUT: call void @_Z13TakeConstCRefRK1C10ForceThunk.carbon_thunk1(ptr %c.var), !dbg !28 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %n.var), !dbg !23 +// CHECK:STDOUT: store i32 poison, ptr %n.var, align 4, !dbg !23 // CHECK:STDOUT: call void @_Z10TakeIntRefRi10ForceThunk.carbon_thunk1(ptr %n.var), !dbg !29 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc25_22.3.temp), !dbg !24 // CHECK:STDOUT: store i32 42, ptr %.loc25_22.3.temp, align 4, !dbg !24 diff --git a/toolchain/lower/testdata/interop/cpp/void.carbon b/toolchain/lower/testdata/interop/cpp/void.carbon index eda7eb9e13c7..4021e258a7d5 100644 --- a/toolchain/lower/testdata/interop/cpp/void.carbon +++ b/toolchain/lower/testdata/interop/cpp/void.carbon @@ -182,6 +182,7 @@ fn ConvertFromConstVoidPtr(p: const Cpp.void*) -> const i32* { // CHECK:STDOUT: define linkonce_odr ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.a3238f3d1f6ba299"(ptr %self) #0 !dbg !88 { // CHECK:STDOUT: %1 = alloca ptr, align 8, !dbg !91 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %1), !dbg !91 +// CHECK:STDOUT: store ptr poison, ptr %1, align 8, !dbg !91 // CHECK:STDOUT: store ptr %self, ptr %1, align 8, !dbg !92 // CHECK:STDOUT: %2 = load ptr, ptr %1, align 8, !dbg !93 // CHECK:STDOUT: ret ptr %2, !dbg !94 @@ -191,6 +192,7 @@ fn ConvertFromConstVoidPtr(p: const Cpp.void*) -> const i32* { // CHECK:STDOUT: define linkonce_odr ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.2e8a3baa837dcd9f"(ptr %self) #0 !dbg !95 { // CHECK:STDOUT: %1 = alloca ptr, align 8, !dbg !98 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %1), !dbg !98 +// CHECK:STDOUT: store ptr poison, ptr %1, align 8, !dbg !98 // CHECK:STDOUT: store ptr %self, ptr %1, align 8, !dbg !99 // CHECK:STDOUT: %2 = load ptr, ptr %1, align 8, !dbg !100 // CHECK:STDOUT: ret ptr %2, !dbg !101 @@ -248,70 +250,70 @@ fn ConvertFromConstVoidPtr(p: const Cpp.void*) -> const i32* { // CHECK:STDOUT: !35 = !DILocation(line: 19, column: 27, scope: !32) // CHECK:STDOUT: !36 = !DILocation(line: 19, column: 3, scope: !32) // CHECK:STDOUT: !37 = !DILocation(line: 18, column: 1, scope: !32) -// CHECK:STDOUT: !38 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.e5cf8fcbb4feaae2:ImplicitAs.0f95c9e18c91e00a.Core.66983884551336cb", scope: null, file: !39, line: 93, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !42) +// CHECK:STDOUT: !38 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.e5cf8fcbb4feaae2:ImplicitAs.0f95c9e18c91e00a.Core.66983884551336cb", scope: null, file: !39, line: 96, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !42) // CHECK:STDOUT: !39 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "") // CHECK:STDOUT: !40 = !DISubroutineType(types: !41) // CHECK:STDOUT: !41 = !{!14, !14} // CHECK:STDOUT: !42 = !{!43} // CHECK:STDOUT: !43 = !DILocalVariable(arg: 1, scope: !38, type: !14) -// CHECK:STDOUT: !44 = !DILocation(line: 94, column: 12, scope: !38) -// CHECK:STDOUT: !45 = !DILocation(line: 94, column: 5, scope: !38) -// CHECK:STDOUT: !46 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.e5cf8fcbb4feaae2:ImplicitAs.0f95c9e18c91e00a.Core.295aa3526801a9d4", scope: null, file: !39, line: 93, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !47) +// CHECK:STDOUT: !44 = !DILocation(line: 97, column: 12, scope: !38) +// CHECK:STDOUT: !45 = !DILocation(line: 97, column: 5, scope: !38) +// CHECK:STDOUT: !46 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.e5cf8fcbb4feaae2:ImplicitAs.0f95c9e18c91e00a.Core.295aa3526801a9d4", scope: null, file: !39, line: 96, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !47) // CHECK:STDOUT: !47 = !{!48} // CHECK:STDOUT: !48 = !DILocalVariable(arg: 1, scope: !46, type: !14) -// CHECK:STDOUT: !49 = !DILocation(line: 94, column: 12, scope: !46) -// CHECK:STDOUT: !50 = !DILocation(line: 94, column: 5, scope: !46) -// CHECK:STDOUT: !51 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.e5cf8fcbb4feaae2:ImplicitAs.0f95c9e18c91e00a.Core.e995c7ea1c3d1cc3", scope: null, file: !39, line: 93, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !52) +// CHECK:STDOUT: !49 = !DILocation(line: 97, column: 12, scope: !46) +// CHECK:STDOUT: !50 = !DILocation(line: 97, column: 5, scope: !46) +// CHECK:STDOUT: !51 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.e5cf8fcbb4feaae2:ImplicitAs.0f95c9e18c91e00a.Core.e995c7ea1c3d1cc3", scope: null, file: !39, line: 96, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !52) // CHECK:STDOUT: !52 = !{!53} // CHECK:STDOUT: !53 = !DILocalVariable(arg: 1, scope: !51, type: !14) -// CHECK:STDOUT: !54 = !DILocation(line: 94, column: 12, scope: !51) -// CHECK:STDOUT: !55 = !DILocation(line: 94, column: 5, scope: !51) -// CHECK:STDOUT: !56 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.90961d7b1ce4f089:OptionalAs.0e326e799dad0c64.Core.7bed839a0b822504", scope: null, file: !39, line: 68, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !57) +// CHECK:STDOUT: !54 = !DILocation(line: 97, column: 12, scope: !51) +// CHECK:STDOUT: !55 = !DILocation(line: 97, column: 5, scope: !51) +// CHECK:STDOUT: !56 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.90961d7b1ce4f089:OptionalAs.0e326e799dad0c64.Core.7bed839a0b822504", scope: null, file: !39, line: 71, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !57) // CHECK:STDOUT: !57 = !{!58} // CHECK:STDOUT: !58 = !DILocalVariable(arg: 1, scope: !56, type: !14) -// CHECK:STDOUT: !59 = !DILocation(line: 69, column: 12, scope: !56) -// CHECK:STDOUT: !60 = !DILocation(line: 69, column: 5, scope: !56) -// CHECK:STDOUT: !61 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.3667eb502d1ddfa9:OptionalAs.c7a50af9bdd61b43.Core.57bd8d0c2213b1aa", scope: null, file: !39, line: 75, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !62) +// CHECK:STDOUT: !59 = !DILocation(line: 72, column: 12, scope: !56) +// CHECK:STDOUT: !60 = !DILocation(line: 72, column: 5, scope: !56) +// CHECK:STDOUT: !61 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.3667eb502d1ddfa9:OptionalAs.c7a50af9bdd61b43.Core.57bd8d0c2213b1aa", scope: null, file: !39, line: 78, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !62) // CHECK:STDOUT: !62 = !{!63} // CHECK:STDOUT: !63 = !DILocalVariable(arg: 1, scope: !61, type: !14) -// CHECK:STDOUT: !64 = !DILocation(line: 76, column: 29, scope: !61) -// CHECK:STDOUT: !65 = !DILocation(line: 76, column: 12, scope: !61) -// CHECK:STDOUT: !66 = !DILocation(line: 76, column: 5, scope: !61) -// CHECK:STDOUT: !67 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.3667eb502d1ddfa9:OptionalAs.c7a50af9bdd61b43.Core.02dd0be934e1c38a", scope: null, file: !39, line: 75, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !68) +// CHECK:STDOUT: !64 = !DILocation(line: 79, column: 29, scope: !61) +// CHECK:STDOUT: !65 = !DILocation(line: 79, column: 12, scope: !61) +// CHECK:STDOUT: !66 = !DILocation(line: 79, column: 5, scope: !61) +// CHECK:STDOUT: !67 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.3667eb502d1ddfa9:OptionalAs.c7a50af9bdd61b43.Core.02dd0be934e1c38a", scope: null, file: !39, line: 78, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !68) // CHECK:STDOUT: !68 = !{!69} // CHECK:STDOUT: !69 = !DILocalVariable(arg: 1, scope: !67, type: !14) -// CHECK:STDOUT: !70 = !DILocation(line: 76, column: 29, scope: !67) -// CHECK:STDOUT: !71 = !DILocation(line: 76, column: 12, scope: !67) -// CHECK:STDOUT: !72 = !DILocation(line: 76, column: 5, scope: !67) -// CHECK:STDOUT: !73 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.7bed839a0b822504", scope: null, file: !39, line: 29, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !74) +// CHECK:STDOUT: !70 = !DILocation(line: 79, column: 29, scope: !67) +// CHECK:STDOUT: !71 = !DILocation(line: 79, column: 12, scope: !67) +// CHECK:STDOUT: !72 = !DILocation(line: 79, column: 5, scope: !67) +// CHECK:STDOUT: !73 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.7bed839a0b822504", scope: null, file: !39, line: 30, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !74) // CHECK:STDOUT: !74 = !{!75} // CHECK:STDOUT: !75 = !DILocalVariable(arg: 1, scope: !73, type: !14) -// CHECK:STDOUT: !76 = !DILocation(line: 30, column: 12, scope: !73) -// CHECK:STDOUT: !77 = !DILocation(line: 30, column: 5, scope: !73) +// CHECK:STDOUT: !76 = !DILocation(line: 31, column: 12, scope: !73) +// CHECK:STDOUT: !77 = !DILocation(line: 31, column: 5, scope: !73) // CHECK:STDOUT: !78 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert:thunk.e8f8f92d3d08d149:ImplicitAs.ffd58aeb29886b72.Core.b88d1103f417c6d4", scope: null, file: !79, line: 40, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !80) // CHECK:STDOUT: !79 = !DIFile(filename: "{{.*}}/prelude/types/cpp/void.carbon", directory: "") // CHECK:STDOUT: !80 = !{!81} // CHECK:STDOUT: !81 = !DILocalVariable(arg: 1, scope: !78, type: !14) // CHECK:STDOUT: !82 = !DILocation(line: 40, column: 3, scope: !78) -// CHECK:STDOUT: !83 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.9544e72a46e24ed6", scope: null, file: !39, line: 29, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !84) +// CHECK:STDOUT: !83 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.9544e72a46e24ed6", scope: null, file: !39, line: 30, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !84) // CHECK:STDOUT: !84 = !{!85} // CHECK:STDOUT: !85 = !DILocalVariable(arg: 1, scope: !83, type: !14) -// CHECK:STDOUT: !86 = !DILocation(line: 30, column: 12, scope: !83) -// CHECK:STDOUT: !87 = !DILocation(line: 30, column: 5, scope: !83) -// CHECK:STDOUT: !88 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.e8f8f92d3d08d149:OptionalStorage.Core.a3238f3d1f6ba299", scope: null, file: !39, line: 138, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !89) +// CHECK:STDOUT: !86 = !DILocation(line: 31, column: 12, scope: !83) +// CHECK:STDOUT: !87 = !DILocation(line: 31, column: 5, scope: !83) +// CHECK:STDOUT: !88 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.e8f8f92d3d08d149:OptionalStorage.Core.a3238f3d1f6ba299", scope: null, file: !39, line: 150, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !89) // CHECK:STDOUT: !89 = !{!90} // CHECK:STDOUT: !90 = !DILocalVariable(arg: 1, scope: !88, type: !14) -// CHECK:STDOUT: !91 = !DILocation(line: 139, column: 14, scope: !88) -// CHECK:STDOUT: !92 = !DILocation(line: 140, column: 5, scope: !88) -// CHECK:STDOUT: !93 = !DILocation(line: 139, column: 18, scope: !88) -// CHECK:STDOUT: !94 = !DILocation(line: 141, column: 5, scope: !88) -// CHECK:STDOUT: !95 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.e8f8f92d3d08d149:OptionalStorage.Core.2e8a3baa837dcd9f", scope: null, file: !39, line: 138, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !96) +// CHECK:STDOUT: !91 = !DILocation(line: 151, column: 14, scope: !88) +// CHECK:STDOUT: !92 = !DILocation(line: 153, column: 5, scope: !88) +// CHECK:STDOUT: !93 = !DILocation(line: 151, column: 18, scope: !88) +// CHECK:STDOUT: !94 = !DILocation(line: 154, column: 5, scope: !88) +// CHECK:STDOUT: !95 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.e8f8f92d3d08d149:OptionalStorage.Core.2e8a3baa837dcd9f", scope: null, file: !39, line: 150, type: !40, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !96) // CHECK:STDOUT: !96 = !{!97} // CHECK:STDOUT: !97 = !DILocalVariable(arg: 1, scope: !95, type: !14) -// CHECK:STDOUT: !98 = !DILocation(line: 139, column: 14, scope: !95) -// CHECK:STDOUT: !99 = !DILocation(line: 140, column: 5, scope: !95) -// CHECK:STDOUT: !100 = !DILocation(line: 139, column: 18, scope: !95) -// CHECK:STDOUT: !101 = !DILocation(line: 141, column: 5, scope: !95) +// CHECK:STDOUT: !98 = !DILocation(line: 151, column: 14, scope: !95) +// CHECK:STDOUT: !99 = !DILocation(line: 153, column: 5, scope: !95) +// CHECK:STDOUT: !100 = !DILocation(line: 151, column: 18, scope: !95) +// CHECK:STDOUT: !101 = !DILocation(line: 154, column: 5, scope: !95) // CHECK:STDOUT: ; ModuleID = 'receive.carbon' // CHECK:STDOUT: source_filename = "receive.carbon" // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" diff --git a/toolchain/lower/testdata/operators/increment.carbon b/toolchain/lower/testdata/operators/increment.carbon index b78a78955b3f..fb5bee168527 100644 --- a/toolchain/lower/testdata/operators/increment.carbon +++ b/toolchain/lower/testdata/operators/increment.carbon @@ -78,31 +78,31 @@ fn IncrSigned() { // CHECK:STDOUT: !7 = !DILocation(line: 5, column: 3, scope: !4) // CHECK:STDOUT: !8 = !DILocation(line: 6, column: 3, scope: !4) // CHECK:STDOUT: !9 = !DILocation(line: 4, column: 1, scope: !4) -// CHECK:STDOUT: !10 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !11, line: 360, type: !12, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !15) +// CHECK:STDOUT: !10 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Int.9452f4c51951679b.Core:Inc.Core.be1e879c1ad406d8", scope: null, file: !11, line: 363, type: !12, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !15) // CHECK:STDOUT: !11 = !DIFile(filename: "{{.*}}/prelude/types/int.carbon", directory: "") // CHECK:STDOUT: !12 = !DISubroutineType(types: !13) // CHECK:STDOUT: !13 = !{null, !14} // CHECK:STDOUT: !14 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) // CHECK:STDOUT: !15 = !{!16} // CHECK:STDOUT: !16 = !DILocalVariable(arg: 1, scope: !10, type: !14) -// CHECK:STDOUT: !17 = !DILocation(line: 362, column: 5, scope: !10) -// CHECK:STDOUT: !18 = !DILocation(line: 360, column: 3, scope: !10) -// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !11, line: 296, type: !20, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !22) +// CHECK:STDOUT: !17 = !DILocation(line: 365, column: 5, scope: !10) +// CHECK:STDOUT: !18 = !DILocation(line: 363, column: 3, scope: !10) +// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "Op", linkageName: "_COp:thunk.Int.9452f4c51951679b.Core:AddAssignWith.5375cfcbca6d9e35.Core.57ee91777b6354a8", scope: null, file: !11, line: 299, type: !20, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !22) // CHECK:STDOUT: !20 = !DISubroutineType(types: !21) // CHECK:STDOUT: !21 = !{null, !14, !14} // CHECK:STDOUT: !22 = !{!23, !24} // CHECK:STDOUT: !23 = !DILocalVariable(arg: 1, scope: !19, type: !14) // CHECK:STDOUT: !24 = !DILocalVariable(arg: 2, scope: !19, type: !14) // CHECK:STDOUT: !25 = !DILocation(line: 4294967295, scope: !19) -// CHECK:STDOUT: !26 = !DILocation(line: 296, column: 3, scope: !19) -// CHECK:STDOUT: !27 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.628184612c80324d", scope: null, file: !11, line: 59, type: !28, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !30) +// CHECK:STDOUT: !26 = !DILocation(line: 299, column: 3, scope: !19) +// CHECK:STDOUT: !27 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.628184612c80324d", scope: null, file: !11, line: 62, type: !28, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !30) // CHECK:STDOUT: !28 = !DISubroutineType(types: !29) // CHECK:STDOUT: !29 = !{!14, !14} // CHECK:STDOUT: !30 = !{!31} // CHECK:STDOUT: !31 = !DILocalVariable(arg: 1, scope: !27, type: !14) -// CHECK:STDOUT: !32 = !DILocation(line: 61, column: 17, scope: !27) -// CHECK:STDOUT: !33 = !DILocation(line: 61, column: 5, scope: !27) -// CHECK:STDOUT: !34 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !11, line: 54, type: !28, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !35) +// CHECK:STDOUT: !32 = !DILocation(line: 64, column: 17, scope: !27) +// CHECK:STDOUT: !33 = !DILocation(line: 64, column: 5, scope: !27) +// CHECK:STDOUT: !34 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !11, line: 57, type: !28, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !35) // CHECK:STDOUT: !35 = !{!36} // CHECK:STDOUT: !36 = !DILocalVariable(arg: 1, scope: !34, type: !14) -// CHECK:STDOUT: !37 = !DILocation(line: 54, column: 36, scope: !34) +// CHECK:STDOUT: !37 = !DILocation(line: 57, column: 36, scope: !34) diff --git a/toolchain/lower/testdata/primitives/int_types.carbon b/toolchain/lower/testdata/primitives/int_types.carbon index 2b2d6c133a9b..4601f6aad9e9 100644 --- a/toolchain/lower/testdata/primitives/int_types.carbon +++ b/toolchain/lower/testdata/primitives/int_types.carbon @@ -321,74 +321,74 @@ fn ImplicitWidenUnsignedCustom(a: Core.UInt(4)) -> Core.UInt(5) { return a; } // CHECK:STDOUT: !39 = !{!40} // CHECK:STDOUT: !40 = !DILocalVariable(arg: 1, scope: !34, type: !38) // CHECK:STDOUT: !41 = !DILocation(line: 8, column: 67, scope: !34) -// CHECK:STDOUT: !42 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.aa7228341bdcca99", scope: null, file: !43, line: 59, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !44) +// CHECK:STDOUT: !42 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.aa7228341bdcca99", scope: null, file: !43, line: 62, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !44) // CHECK:STDOUT: !43 = !DIFile(filename: "{{.*}}/prelude/types/int.carbon", directory: "") // CHECK:STDOUT: !44 = !{!45} // CHECK:STDOUT: !45 = !DILocalVariable(arg: 1, scope: !42, type: !8) -// CHECK:STDOUT: !46 = !DILocation(line: 61, column: 17, scope: !42) -// CHECK:STDOUT: !47 = !DILocation(line: 61, column: 12, scope: !42) -// CHECK:STDOUT: !48 = !DILocation(line: 61, column: 5, scope: !42) -// CHECK:STDOUT: !49 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.UInt.9452f4c51951679b.Core:ImplicitAs.952fa4f2c764f083.Core.0e306488ea9f63ef", scope: null, file: !50, line: 83, type: !13, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !51) +// CHECK:STDOUT: !46 = !DILocation(line: 64, column: 17, scope: !42) +// CHECK:STDOUT: !47 = !DILocation(line: 64, column: 12, scope: !42) +// CHECK:STDOUT: !48 = !DILocation(line: 64, column: 5, scope: !42) +// CHECK:STDOUT: !49 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.UInt.9452f4c51951679b.Core:ImplicitAs.952fa4f2c764f083.Core.0e306488ea9f63ef", scope: null, file: !50, line: 86, type: !13, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !51) // CHECK:STDOUT: !50 = !DIFile(filename: "{{.*}}/prelude/types/uint.carbon", directory: "") // CHECK:STDOUT: !51 = !{!52} // CHECK:STDOUT: !52 = !DILocalVariable(arg: 1, scope: !49, type: !16) -// CHECK:STDOUT: !53 = !DILocation(line: 84, column: 12, scope: !49) -// CHECK:STDOUT: !54 = !DILocation(line: 84, column: 5, scope: !49) -// CHECK:STDOUT: !55 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.UInt.9452f4c51951679b.Core:ImplicitAs.952fa4f2c764f083.Core.0237a74cabc89c74", scope: null, file: !50, line: 83, type: !21, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !56) +// CHECK:STDOUT: !53 = !DILocation(line: 87, column: 12, scope: !49) +// CHECK:STDOUT: !54 = !DILocation(line: 87, column: 5, scope: !49) +// CHECK:STDOUT: !55 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.UInt.9452f4c51951679b.Core:ImplicitAs.952fa4f2c764f083.Core.0237a74cabc89c74", scope: null, file: !50, line: 86, type: !21, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !56) // CHECK:STDOUT: !56 = !{!57} // CHECK:STDOUT: !57 = !DILocalVariable(arg: 1, scope: !55, type: !16) -// CHECK:STDOUT: !58 = !DILocation(line: 84, column: 12, scope: !55) -// CHECK:STDOUT: !59 = !DILocation(line: 84, column: 5, scope: !55) -// CHECK:STDOUT: !60 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.61459d64876d7c49", scope: null, file: !43, line: 59, type: !27, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !61) +// CHECK:STDOUT: !58 = !DILocation(line: 87, column: 12, scope: !55) +// CHECK:STDOUT: !59 = !DILocation(line: 87, column: 5, scope: !55) +// CHECK:STDOUT: !60 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.61459d64876d7c49", scope: null, file: !43, line: 62, type: !27, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !61) // CHECK:STDOUT: !61 = !{!62} // CHECK:STDOUT: !62 = !DILocalVariable(arg: 1, scope: !60, type: !30) -// CHECK:STDOUT: !63 = !DILocation(line: 61, column: 17, scope: !60) -// CHECK:STDOUT: !64 = !DILocation(line: 61, column: 12, scope: !60) -// CHECK:STDOUT: !65 = !DILocation(line: 61, column: 5, scope: !60) -// CHECK:STDOUT: !66 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.UInt.9452f4c51951679b.Core:ImplicitAs.952fa4f2c764f083.Core.d1cbb2cbeb4d860b", scope: null, file: !50, line: 83, type: !35, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !67) +// CHECK:STDOUT: !63 = !DILocation(line: 64, column: 17, scope: !60) +// CHECK:STDOUT: !64 = !DILocation(line: 64, column: 12, scope: !60) +// CHECK:STDOUT: !65 = !DILocation(line: 64, column: 5, scope: !60) +// CHECK:STDOUT: !66 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.UInt.9452f4c51951679b.Core:ImplicitAs.952fa4f2c764f083.Core.d1cbb2cbeb4d860b", scope: null, file: !50, line: 86, type: !35, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !67) // CHECK:STDOUT: !67 = !{!68} // CHECK:STDOUT: !68 = !DILocalVariable(arg: 1, scope: !66, type: !38) -// CHECK:STDOUT: !69 = !DILocation(line: 84, column: 12, scope: !66) -// CHECK:STDOUT: !70 = !DILocation(line: 84, column: 5, scope: !66) -// CHECK:STDOUT: !71 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.ca1ac10d3fc7c1a8", scope: null, file: !43, line: 54, type: !72, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !74) +// CHECK:STDOUT: !69 = !DILocation(line: 87, column: 12, scope: !66) +// CHECK:STDOUT: !70 = !DILocation(line: 87, column: 5, scope: !66) +// CHECK:STDOUT: !71 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.ca1ac10d3fc7c1a8", scope: null, file: !43, line: 57, type: !72, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !74) // CHECK:STDOUT: !72 = !DISubroutineType(types: !73) // CHECK:STDOUT: !73 = !{!8, !8} // CHECK:STDOUT: !74 = !{!75} // CHECK:STDOUT: !75 = !DILocalVariable(arg: 1, scope: !71, type: !8) -// CHECK:STDOUT: !76 = !DILocation(line: 54, column: 36, scope: !71) -// CHECK:STDOUT: !77 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.UInt.9452f4c51951679b.Core:FromUInt.382a8acefd0525fe.Core.081daf9d9b61e05a", scope: null, file: !50, line: 67, type: !13, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !78) +// CHECK:STDOUT: !76 = !DILocation(line: 57, column: 36, scope: !71) +// CHECK:STDOUT: !77 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.UInt.9452f4c51951679b.Core:FromUInt.382a8acefd0525fe.Core.081daf9d9b61e05a", scope: null, file: !50, line: 70, type: !13, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !78) // CHECK:STDOUT: !78 = !{!79} // CHECK:STDOUT: !79 = !DILocalVariable(arg: 1, scope: !77, type: !16) -// CHECK:STDOUT: !80 = !DILocation(line: 69, column: 17, scope: !77) -// CHECK:STDOUT: !81 = !DILocation(line: 69, column: 12, scope: !77) -// CHECK:STDOUT: !82 = !DILocation(line: 69, column: 5, scope: !77) -// CHECK:STDOUT: !83 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.Int.9452f4c51951679b.Core:FromUInt.a15ed48781b6c2b7.Core.069b661f6a62a7bd", scope: null, file: !50, line: 75, type: !21, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !84) +// CHECK:STDOUT: !80 = !DILocation(line: 72, column: 17, scope: !77) +// CHECK:STDOUT: !81 = !DILocation(line: 72, column: 12, scope: !77) +// CHECK:STDOUT: !82 = !DILocation(line: 72, column: 5, scope: !77) +// CHECK:STDOUT: !83 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.Int.9452f4c51951679b.Core:FromUInt.a15ed48781b6c2b7.Core.069b661f6a62a7bd", scope: null, file: !50, line: 78, type: !21, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !84) // CHECK:STDOUT: !84 = !{!85} // CHECK:STDOUT: !85 = !DILocalVariable(arg: 1, scope: !83, type: !16) -// CHECK:STDOUT: !86 = !DILocation(line: 77, column: 17, scope: !83) -// CHECK:STDOUT: !87 = !DILocation(line: 77, column: 12, scope: !83) -// CHECK:STDOUT: !88 = !DILocation(line: 77, column: 5, scope: !83) -// CHECK:STDOUT: !89 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.044c7d430ddd4fd6", scope: null, file: !43, line: 54, type: !90, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !92) +// CHECK:STDOUT: !86 = !DILocation(line: 80, column: 17, scope: !83) +// CHECK:STDOUT: !87 = !DILocation(line: 80, column: 12, scope: !83) +// CHECK:STDOUT: !88 = !DILocation(line: 80, column: 5, scope: !83) +// CHECK:STDOUT: !89 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.044c7d430ddd4fd6", scope: null, file: !43, line: 57, type: !90, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !92) // CHECK:STDOUT: !90 = !DISubroutineType(types: !91) // CHECK:STDOUT: !91 = !{!30, !30} // CHECK:STDOUT: !92 = !{!93} // CHECK:STDOUT: !93 = !DILocalVariable(arg: 1, scope: !89, type: !30) -// CHECK:STDOUT: !94 = !DILocation(line: 54, column: 36, scope: !89) -// CHECK:STDOUT: !95 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.UInt.9452f4c51951679b.Core:FromUInt.382a8acefd0525fe.Core.b0c274f0050b1ce4", scope: null, file: !50, line: 67, type: !35, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !96) +// CHECK:STDOUT: !94 = !DILocation(line: 57, column: 36, scope: !89) +// CHECK:STDOUT: !95 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.UInt.9452f4c51951679b.Core:FromUInt.382a8acefd0525fe.Core.b0c274f0050b1ce4", scope: null, file: !50, line: 70, type: !35, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !96) // CHECK:STDOUT: !96 = !{!97} // CHECK:STDOUT: !97 = !DILocalVariable(arg: 1, scope: !95, type: !38) -// CHECK:STDOUT: !98 = !DILocation(line: 69, column: 17, scope: !95) -// CHECK:STDOUT: !99 = !DILocation(line: 69, column: 12, scope: !95) -// CHECK:STDOUT: !100 = !DILocation(line: 69, column: 5, scope: !95) -// CHECK:STDOUT: !101 = distinct !DISubprogram(name: "AsUInt", linkageName: "_CAsUInt.UInt.9452f4c51951679b.Core:AnyUInt.Core.ca1ac10d3fc7c1a8", scope: null, file: !50, line: 55, type: !102, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !104) +// CHECK:STDOUT: !98 = !DILocation(line: 72, column: 17, scope: !95) +// CHECK:STDOUT: !99 = !DILocation(line: 72, column: 12, scope: !95) +// CHECK:STDOUT: !100 = !DILocation(line: 72, column: 5, scope: !95) +// CHECK:STDOUT: !101 = distinct !DISubprogram(name: "AsUInt", linkageName: "_CAsUInt.UInt.9452f4c51951679b.Core:AnyUInt.Core.ca1ac10d3fc7c1a8", scope: null, file: !50, line: 58, type: !102, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !104) // CHECK:STDOUT: !102 = !DISubroutineType(types: !103) // CHECK:STDOUT: !103 = !{!16, !16} // CHECK:STDOUT: !104 = !{!105} // CHECK:STDOUT: !105 = !DILocalVariable(arg: 1, scope: !101, type: !16) -// CHECK:STDOUT: !106 = !DILocation(line: 55, column: 37, scope: !101) -// CHECK:STDOUT: !107 = distinct !DISubprogram(name: "AsUInt", linkageName: "_CAsUInt.UInt.9452f4c51951679b.Core:AnyUInt.Core.044c7d430ddd4fd6", scope: null, file: !50, line: 55, type: !108, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !110) +// CHECK:STDOUT: !106 = !DILocation(line: 58, column: 37, scope: !101) +// CHECK:STDOUT: !107 = distinct !DISubprogram(name: "AsUInt", linkageName: "_CAsUInt.UInt.9452f4c51951679b.Core:AnyUInt.Core.044c7d430ddd4fd6", scope: null, file: !50, line: 58, type: !108, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !110) // CHECK:STDOUT: !108 = !DISubroutineType(types: !109) // CHECK:STDOUT: !109 = !{!38, !38} // CHECK:STDOUT: !110 = !{!111} // CHECK:STDOUT: !111 = !DILocalVariable(arg: 1, scope: !107, type: !38) -// CHECK:STDOUT: !112 = !DILocation(line: 55, column: 37, scope: !107) +// CHECK:STDOUT: !112 = !DILocation(line: 58, column: 37, scope: !107) diff --git a/toolchain/lower/testdata/primitives/optional.carbon b/toolchain/lower/testdata/primitives/optional.carbon index a369a33287e6..f4ad1a413d18 100644 --- a/toolchain/lower/testdata/primitives/optional.carbon +++ b/toolchain/lower/testdata/primitives/optional.carbon @@ -282,40 +282,40 @@ fn AddOrRemoveConst(a: i32, b: const i32) { // CHECK:STDOUT: !30 = !DILocation(line: 30, column: 3, scope: !17) // CHECK:STDOUT: !31 = !DILocation(line: 31, column: 3, scope: !17) // CHECK:STDOUT: !32 = !DILocation(line: 23, column: 1, scope: !17) -// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.03e3348579103d79", scope: null, file: !34, line: 32, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !35) +// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.03e3348579103d79", scope: null, file: !34, line: 33, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !35) // CHECK:STDOUT: !34 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "") // CHECK:STDOUT: !35 = !{!36} // CHECK:STDOUT: !36 = !DILocalVariable(arg: 1, scope: !33, type: !7) -// CHECK:STDOUT: !37 = !DILocation(line: 33, column: 12, scope: !33) -// CHECK:STDOUT: !38 = !DILocation(line: 33, column: 5, scope: !33) -// CHECK:STDOUT: !39 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.03e3348579103d79", scope: null, file: !34, line: 35, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !40) +// CHECK:STDOUT: !37 = !DILocation(line: 34, column: 12, scope: !33) +// CHECK:STDOUT: !38 = !DILocation(line: 34, column: 5, scope: !33) +// CHECK:STDOUT: !39 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.03e3348579103d79", scope: null, file: !34, line: 36, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !40) // CHECK:STDOUT: !40 = !{!41} // CHECK:STDOUT: !41 = !DILocalVariable(arg: 1, scope: !39, type: !7) -// CHECK:STDOUT: !42 = !DILocation(line: 36, column: 12, scope: !39) -// CHECK:STDOUT: !43 = !DILocation(line: 36, column: 5, scope: !39) -// CHECK:STDOUT: !44 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.e5cf8fcbb4feaae2:ImplicitAs.0f95c9e18c91e00a.Core.6b1f19368d09e579", scope: null, file: !34, line: 93, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !47) +// CHECK:STDOUT: !42 = !DILocation(line: 37, column: 12, scope: !39) +// CHECK:STDOUT: !43 = !DILocation(line: 37, column: 5, scope: !39) +// CHECK:STDOUT: !44 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.e5cf8fcbb4feaae2:ImplicitAs.0f95c9e18c91e00a.Core.6b1f19368d09e579", scope: null, file: !34, line: 96, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !47) // CHECK:STDOUT: !45 = !DISubroutineType(types: !46) // CHECK:STDOUT: !46 = !{!7, !20} // CHECK:STDOUT: !47 = !{!48} // CHECK:STDOUT: !48 = !DILocalVariable(arg: 1, scope: !44, type: !20) -// CHECK:STDOUT: !49 = !DILocation(line: 94, column: 12, scope: !44) -// CHECK:STDOUT: !50 = !DILocation(line: 94, column: 5, scope: !44) -// CHECK:STDOUT: !51 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.30ced37eb1e63547", scope: null, file: !34, line: 26, type: !52, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !49 = !DILocation(line: 97, column: 12, scope: !44) +// CHECK:STDOUT: !50 = !DILocation(line: 97, column: 5, scope: !44) +// CHECK:STDOUT: !51 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.30ced37eb1e63547", scope: null, file: !34, line: 27, type: !52, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !52 = !DISubroutineType(types: !53) // CHECK:STDOUT: !53 = !{!7} -// CHECK:STDOUT: !54 = !DILocation(line: 27, column: 12, scope: !51) -// CHECK:STDOUT: !55 = !DILocation(line: 27, column: 5, scope: !51) +// CHECK:STDOUT: !54 = !DILocation(line: 28, column: 12, scope: !51) +// CHECK:STDOUT: !55 = !DILocation(line: 28, column: 5, scope: !51) // CHECK:STDOUT: !56 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.a44fce96e16342e7:ImplicitAs.ad22d1bbc0605210.Core.77b263a5fd240ddf", scope: null, file: !57, line: 40, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !58) // CHECK:STDOUT: !57 = !DIFile(filename: "{{.*}}/prelude/operators/as.carbon", directory: "") // CHECK:STDOUT: !58 = !{!59} // CHECK:STDOUT: !59 = !DILocalVariable(arg: 1, scope: !56, type: !20) // CHECK:STDOUT: !60 = !DILocation(line: 40, column: 45, scope: !56) // CHECK:STDOUT: !61 = !DILocation(line: 40, column: 38, scope: !56) -// CHECK:STDOUT: !62 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.e5cf8fcbb4feaae2:ImplicitAs.0f95c9e18c91e00a.Core.787d589b54a95071", scope: null, file: !34, line: 93, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !63) +// CHECK:STDOUT: !62 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.e5cf8fcbb4feaae2:ImplicitAs.0f95c9e18c91e00a.Core.787d589b54a95071", scope: null, file: !34, line: 96, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !63) // CHECK:STDOUT: !63 = !{!64} // CHECK:STDOUT: !64 = !DILocalVariable(arg: 1, scope: !62, type: !20) -// CHECK:STDOUT: !65 = !DILocation(line: 94, column: 12, scope: !62) -// CHECK:STDOUT: !66 = !DILocation(line: 94, column: 5, scope: !62) +// CHECK:STDOUT: !65 = !DILocation(line: 97, column: 12, scope: !62) +// CHECK:STDOUT: !66 = !DILocation(line: 97, column: 5, scope: !62) // CHECK:STDOUT: !67 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.a44fce96e16342e7:ImplicitAs.ad22d1bbc0605210.Core.25fb32d66f981ccd", scope: null, file: !57, line: 40, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !68) // CHECK:STDOUT: !68 = !{!69} // CHECK:STDOUT: !69 = !DILocalVariable(arg: 1, scope: !67, type: !20) @@ -341,70 +341,70 @@ fn AddOrRemoveConst(a: i32, b: const i32) { // CHECK:STDOUT: !89 = !DILocalVariable(arg: 1, scope: !87, type: !20) // CHECK:STDOUT: !90 = !DILocation(line: 44, column: 45, scope: !87) // CHECK:STDOUT: !91 = !DILocation(line: 44, column: 38, scope: !87) -// CHECK:STDOUT: !92 = distinct !DISubprogram(name: "Has", linkageName: "_CHas.e8f8f92d3d08d149:OptionalStorage.Core.b88d1103f417c6d4", scope: null, file: !34, line: 143, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !93) +// CHECK:STDOUT: !92 = distinct !DISubprogram(name: "Has", linkageName: "_CHas.e8f8f92d3d08d149:OptionalStorage.Core.b88d1103f417c6d4", scope: null, file: !34, line: 156, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !93) // CHECK:STDOUT: !93 = !{!94} // CHECK:STDOUT: !94 = !DILocalVariable(arg: 1, scope: !92, type: !7) -// CHECK:STDOUT: !95 = !DILocation(line: 144, column: 16, scope: !92) -// CHECK:STDOUT: !96 = !DILocation(line: 144, column: 12, scope: !92) -// CHECK:STDOUT: !97 = !DILocation(line: 144, column: 5, scope: !92) -// CHECK:STDOUT: !98 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.e8f8f92d3d08d149:OptionalStorage.Core.b88d1103f417c6d4", scope: null, file: !34, line: 146, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !99) +// CHECK:STDOUT: !95 = !DILocation(line: 157, column: 16, scope: !92) +// CHECK:STDOUT: !96 = !DILocation(line: 157, column: 12, scope: !92) +// CHECK:STDOUT: !97 = !DILocation(line: 157, column: 5, scope: !92) +// CHECK:STDOUT: !98 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.e8f8f92d3d08d149:OptionalStorage.Core.b88d1103f417c6d4", scope: null, file: !34, line: 159, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !99) // CHECK:STDOUT: !99 = !{!100} // CHECK:STDOUT: !100 = !DILocalVariable(arg: 1, scope: !98, type: !7) -// CHECK:STDOUT: !101 = !DILocation(line: 147, column: 5, scope: !98) -// CHECK:STDOUT: !102 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.90961d7b1ce4f089:OptionalAs.0e326e799dad0c64.Core.30ced37eb1e63547", scope: null, file: !34, line: 68, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !103) +// CHECK:STDOUT: !101 = !DILocation(line: 160, column: 5, scope: !98) +// CHECK:STDOUT: !102 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.90961d7b1ce4f089:OptionalAs.0e326e799dad0c64.Core.30ced37eb1e63547", scope: null, file: !34, line: 71, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !103) // CHECK:STDOUT: !103 = !{!104} // CHECK:STDOUT: !104 = !DILocalVariable(arg: 1, scope: !102, type: !20) -// CHECK:STDOUT: !105 = !DILocation(line: 69, column: 12, scope: !102) -// CHECK:STDOUT: !106 = !DILocation(line: 69, column: 5, scope: !102) -// CHECK:STDOUT: !107 = distinct !DISubprogram(name: "None", linkageName: "_CNone.3e8267224c5dc9c2:OptionalStorage.Core.bfb441135f07cbe1", scope: null, file: !34, line: 110, type: !52, spFlags: DISPFlagDefinition, unit: !2) -// CHECK:STDOUT: !108 = !DILocation(line: 112, column: 5, scope: !107) -// CHECK:STDOUT: !109 = !DILocation(line: 113, column: 5, scope: !107) -// CHECK:STDOUT: !110 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.3667eb502d1ddfa9:OptionalAs.c7a50af9bdd61b43.Core.5d35ad54738af8e4", scope: null, file: !34, line: 75, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !111) +// CHECK:STDOUT: !105 = !DILocation(line: 72, column: 12, scope: !102) +// CHECK:STDOUT: !106 = !DILocation(line: 72, column: 5, scope: !102) +// CHECK:STDOUT: !107 = distinct !DISubprogram(name: "None", linkageName: "_CNone.3e8267224c5dc9c2:OptionalStorage.Core.bfb441135f07cbe1", scope: null, file: !34, line: 116, type: !52, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !108 = !DILocation(line: 119, column: 5, scope: !107) +// CHECK:STDOUT: !109 = !DILocation(line: 120, column: 5, scope: !107) +// CHECK:STDOUT: !110 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.3667eb502d1ddfa9:OptionalAs.c7a50af9bdd61b43.Core.5d35ad54738af8e4", scope: null, file: !34, line: 78, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !111) // CHECK:STDOUT: !111 = !{!112} // CHECK:STDOUT: !112 = !DILocalVariable(arg: 1, scope: !110, type: !20) -// CHECK:STDOUT: !113 = !DILocation(line: 76, column: 29, scope: !110) -// CHECK:STDOUT: !114 = !DILocation(line: 76, column: 12, scope: !110) -// CHECK:STDOUT: !115 = !DILocation(line: 76, column: 5, scope: !110) -// CHECK:STDOUT: !116 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.30ced37eb1e63547", scope: null, file: !34, line: 29, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !117) +// CHECK:STDOUT: !113 = !DILocation(line: 79, column: 29, scope: !110) +// CHECK:STDOUT: !114 = !DILocation(line: 79, column: 12, scope: !110) +// CHECK:STDOUT: !115 = !DILocation(line: 79, column: 5, scope: !110) +// CHECK:STDOUT: !116 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.30ced37eb1e63547", scope: null, file: !34, line: 30, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !117) // CHECK:STDOUT: !117 = !{!118} // CHECK:STDOUT: !118 = !DILocalVariable(arg: 1, scope: !116, type: !20) -// CHECK:STDOUT: !119 = !DILocation(line: 30, column: 12, scope: !116) -// CHECK:STDOUT: !120 = !DILocation(line: 30, column: 5, scope: !116) +// CHECK:STDOUT: !119 = !DILocation(line: 31, column: 12, scope: !116) +// CHECK:STDOUT: !120 = !DILocation(line: 31, column: 5, scope: !116) // CHECK:STDOUT: !121 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.a44fce96e16342e7:ImplicitAs.ad22d1bbc0605210.Core.90a4f5ca3e06badd", scope: null, file: !57, line: 40, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !122) // CHECK:STDOUT: !122 = !{!123} // CHECK:STDOUT: !123 = !DILocalVariable(arg: 1, scope: !121, type: !20) // CHECK:STDOUT: !124 = !DILocation(line: 40, column: 45, scope: !121) // CHECK:STDOUT: !125 = !DILocation(line: 40, column: 38, scope: !121) -// CHECK:STDOUT: !126 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.b0246d3dd29c9210", scope: null, file: !34, line: 29, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !127) +// CHECK:STDOUT: !126 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.b0246d3dd29c9210", scope: null, file: !34, line: 30, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !127) // CHECK:STDOUT: !127 = !{!128} // CHECK:STDOUT: !128 = !DILocalVariable(arg: 1, scope: !126, type: !20) -// CHECK:STDOUT: !129 = !DILocation(line: 30, column: 12, scope: !126) -// CHECK:STDOUT: !130 = !DILocation(line: 30, column: 5, scope: !126) -// CHECK:STDOUT: !131 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.3e8267224c5dc9c2:OptionalStorage.Core.bfb441135f07cbe1", scope: null, file: !34, line: 115, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !132) +// CHECK:STDOUT: !129 = !DILocation(line: 31, column: 12, scope: !126) +// CHECK:STDOUT: !130 = !DILocation(line: 31, column: 5, scope: !126) +// CHECK:STDOUT: !131 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.3e8267224c5dc9c2:OptionalStorage.Core.bfb441135f07cbe1", scope: null, file: !34, line: 122, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !132) // CHECK:STDOUT: !132 = !{!133} // CHECK:STDOUT: !133 = !DILocalVariable(arg: 1, scope: !131, type: !20) -// CHECK:STDOUT: !134 = !DILocation(line: 119, column: 5, scope: !131) -// CHECK:STDOUT: !135 = !DILocation(line: 120, column: 5, scope: !131) -// CHECK:STDOUT: !136 = !DILocation(line: 121, column: 5, scope: !131) -// CHECK:STDOUT: !137 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.628184612c80324d", scope: null, file: !138, line: 59, type: !139, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !141) +// CHECK:STDOUT: !134 = !DILocation(line: 128, column: 5, scope: !131) +// CHECK:STDOUT: !135 = !DILocation(line: 129, column: 5, scope: !131) +// CHECK:STDOUT: !136 = !DILocation(line: 130, column: 5, scope: !131) +// CHECK:STDOUT: !137 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.272fc3e88346d0d9:ImplicitAs.d993a5132e000405.Core.628184612c80324d", scope: null, file: !138, line: 62, type: !139, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !141) // CHECK:STDOUT: !138 = !DIFile(filename: "{{.*}}/prelude/types/int.carbon", directory: "") // CHECK:STDOUT: !139 = !DISubroutineType(types: !140) // CHECK:STDOUT: !140 = !{!20, !20} // CHECK:STDOUT: !141 = !{!142} // CHECK:STDOUT: !142 = !DILocalVariable(arg: 1, scope: !137, type: !20) -// CHECK:STDOUT: !143 = !DILocation(line: 61, column: 17, scope: !137) -// CHECK:STDOUT: !144 = !DILocation(line: 61, column: 5, scope: !137) -// CHECK:STDOUT: !145 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.3e8267224c5dc9c2:OptionalStorage.Core.5325ffa2b57e13bd", scope: null, file: !34, line: 115, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !146) +// CHECK:STDOUT: !143 = !DILocation(line: 64, column: 17, scope: !137) +// CHECK:STDOUT: !144 = !DILocation(line: 64, column: 5, scope: !137) +// CHECK:STDOUT: !145 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.3e8267224c5dc9c2:OptionalStorage.Core.5325ffa2b57e13bd", scope: null, file: !34, line: 122, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !146) // CHECK:STDOUT: !146 = !{!147} // CHECK:STDOUT: !147 = !DILocalVariable(arg: 1, scope: !145, type: !20) -// CHECK:STDOUT: !148 = !DILocation(line: 119, column: 5, scope: !145) -// CHECK:STDOUT: !149 = !DILocation(line: 119, column: 28, scope: !145) -// CHECK:STDOUT: !150 = !DILocation(line: 120, column: 5, scope: !145) -// CHECK:STDOUT: !151 = !DILocation(line: 121, column: 5, scope: !145) -// CHECK:STDOUT: !152 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !138, line: 54, type: !139, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !153) +// CHECK:STDOUT: !148 = !DILocation(line: 128, column: 5, scope: !145) +// CHECK:STDOUT: !149 = !DILocation(line: 128, column: 28, scope: !145) +// CHECK:STDOUT: !150 = !DILocation(line: 129, column: 5, scope: !145) +// CHECK:STDOUT: !151 = !DILocation(line: 130, column: 5, scope: !145) +// CHECK:STDOUT: !152 = distinct !DISubprogram(name: "AsInt", linkageName: "_CAsInt.Int.9452f4c51951679b.Core:AnyInt.Core.be1e879c1ad406d8", scope: null, file: !138, line: 57, type: !139, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !153) // CHECK:STDOUT: !153 = !{!154} // CHECK:STDOUT: !154 = !DILocalVariable(arg: 1, scope: !152, type: !20) -// CHECK:STDOUT: !155 = !DILocation(line: 54, column: 36, scope: !152) +// CHECK:STDOUT: !155 = !DILocation(line: 57, column: 36, scope: !152) // CHECK:STDOUT: !156 = distinct !DISubprogram(name: "Op", linkageName: "_COp.34e7a685d3648824:Copy.Core.64ccbb8e5d9a0b8e", scope: null, file: !157, line: 19, type: !45, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !158) // CHECK:STDOUT: !157 = !DIFile(filename: "{{.*}}/prelude/copy.carbon", directory: "") // CHECK:STDOUT: !158 = !{!159} diff --git a/toolchain/lower/testdata/var/uninitialized.carbon b/toolchain/lower/testdata/var/uninitialized.carbon new file mode 100644 index 000000000000..82576130c989 --- /dev/null +++ b/toolchain/lower/testdata/var/uninitialized.carbon @@ -0,0 +1,72 @@ +// 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 +// +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/var/uninitialized.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/lower/testdata/var/uninitialized.carbon + +fn Run() { + var unused a: i32; + var unused b: f64; + var unused c: (); + var unused d: {}; + var unused e: bool; + var unused f: i32*; +} + +// CHECK:STDOUT: ; ModuleID = 'uninitialized.carbon' +// CHECK:STDOUT: source_filename = "uninitialized.carbon" +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define void @main() #0 !dbg !4 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %a.var = alloca i32, align 4, !dbg !7 +// CHECK:STDOUT: %b.var = alloca double, align 8, !dbg !8 +// CHECK:STDOUT: %c.var = alloca {}, align 8, !dbg !9 +// CHECK:STDOUT: %d.var = alloca {}, align 8, !dbg !10 +// CHECK:STDOUT: %e.var = alloca i1, align 1, !dbg !11 +// CHECK:STDOUT: %f.var = alloca ptr, align 8, !dbg !12 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %a.var), !dbg !7 +// CHECK:STDOUT: store i32 poison, ptr %a.var, align 4, !dbg !7 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %b.var), !dbg !8 +// CHECK:STDOUT: store double poison, ptr %b.var, align 8, !dbg !8 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !9 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %d.var), !dbg !10 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %e.var), !dbg !11 +// CHECK:STDOUT: store i8 poison, ptr %e.var, align 1, !dbg !11 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %f.var), !dbg !12 +// CHECK:STDOUT: store ptr poison, ptr %f.var, align 8, !dbg !12 +// CHECK:STDOUT: ret void, !dbg !13 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) +// CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #1 +// CHECK:STDOUT: +// CHECK:STDOUT: ; uselistorder directives +// CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 5, 4, 3, 2, 1, 0 } +// CHECK:STDOUT: +// CHECK:STDOUT: attributes #0 = { nounwind } +// CHECK:STDOUT: attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } +// CHECK:STDOUT: +// CHECK:STDOUT: !llvm.module.flags = !{!0, !1} +// CHECK:STDOUT: !llvm.dbg.cu = !{!2} +// CHECK:STDOUT: +// CHECK:STDOUT: !0 = !{i32 7, !"Dwarf Version", i32 5} +// CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3} +// CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug) +// CHECK:STDOUT: !3 = !DIFile(filename: "uninitialized.carbon", directory: "") +// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !5 = !DISubroutineType(types: !6) +// CHECK:STDOUT: !6 = !{null} +// CHECK:STDOUT: !7 = !DILocation(line: 14, column: 3, scope: !4) +// CHECK:STDOUT: !8 = !DILocation(line: 15, column: 3, scope: !4) +// CHECK:STDOUT: !9 = !DILocation(line: 16, column: 3, scope: !4) +// CHECK:STDOUT: !10 = !DILocation(line: 17, column: 3, scope: !4) +// CHECK:STDOUT: !11 = !DILocation(line: 18, column: 3, scope: !4) +// CHECK:STDOUT: !12 = !DILocation(line: 19, column: 3, scope: !4) +// CHECK:STDOUT: !13 = !DILocation(line: 13, column: 1, scope: !4) diff --git a/toolchain/sem_ir/builtin_function_kind.cpp b/toolchain/sem_ir/builtin_function_kind.cpp index 91702a443c0b..aa42e2370b4a 100644 --- a/toolchain/sem_ir/builtin_function_kind.cpp +++ b/toolchain/sem_ir/builtin_function_kind.cpp @@ -400,6 +400,9 @@ constexpr BuiltinInfo None = {"", nullptr}; constexpr BuiltinInfo NoOp = {"no_op", ValidateNoOpSignature}; +constexpr BuiltinInfo MakeUninitialized = {"make_uninitialized", + ValidateSignatureAnyType>}; + constexpr BuiltinInfo PrimitiveCopy = { "primitive_copy", ValidateSignaturePrimitiveCopyParamT>}; diff --git a/toolchain/sem_ir/builtin_function_kind.def b/toolchain/sem_ir/builtin_function_kind.def index c0e86781f092..711b9d971b84 100644 --- a/toolchain/sem_ir/builtin_function_kind.def +++ b/toolchain/sem_ir/builtin_function_kind.def @@ -22,6 +22,9 @@ CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(None) // A no-op function definition; calls should be elided when lowering. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(NoOp) +// A no-op factory function. +CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(MakeUninitialized) + // A primitive copy for types whose value and initializing representation are // the same. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PrimitiveCopy) diff --git a/toolchain/testing/testdata/min_prelude/parts/as.carbon b/toolchain/testing/testdata/min_prelude/parts/as.carbon index 5a05ffd4b7ee..b840549b9c99 100644 --- a/toolchain/testing/testdata/min_prelude/parts/as.carbon +++ b/toolchain/testing/testdata/min_prelude/parts/as.carbon @@ -2,6 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // +// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/parts/default.carbon // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/parts/destroy.carbon // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/parts/form.carbon @@ -9,6 +10,7 @@ package Core library "prelude/parts/as"; +export import library "prelude/parts/default"; export import library "prelude/parts/destroy"; export import library "prelude/parts/form"; diff --git a/toolchain/testing/testdata/min_prelude/parts/default.carbon b/toolchain/testing/testdata/min_prelude/parts/default.carbon new file mode 100644 index 000000000000..9ce2383d9423 --- /dev/null +++ b/toolchain/testing/testdata/min_prelude/parts/default.carbon @@ -0,0 +1,15 @@ +// 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 + +// --- min_prelude/parts/default.carbon + +package Core library "prelude/parts/default"; + +interface DefaultOrUnformed { fn Op() -> Self; } + +// In tests, just allow any type to be default-initialized as a no-op. +// TODO: This is a hack to allow existing tests to contiue working. +impl forall [T:! type] T as DefaultOrUnformed { + fn Op() -> Self = "make_uninitialized"; +} diff --git a/toolchain/testing/testdata/min_prelude/parts/optional.carbon b/toolchain/testing/testdata/min_prelude/parts/optional.carbon index 5339171ca53f..0b5f4995ead6 100644 --- a/toolchain/testing/testdata/min_prelude/parts/optional.carbon +++ b/toolchain/testing/testdata/min_prelude/parts/optional.carbon @@ -4,6 +4,7 @@ // // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/parts/bool.carbon // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/parts/copy.carbon +// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/parts/default.carbon // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/parts/destroy.carbon // --- min_prelude/parts/optional.carbon @@ -12,6 +13,7 @@ package Core library "prelude/parts/optional"; import library "prelude/parts/bool"; import library "prelude/parts/copy"; +import library "prelude/parts/default"; import library "prelude/parts/destroy"; class Optional(T:! Copy) {