Selaa lähdekoodia

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 <gromer@google.com>
Richard Smith 1 kuukausi sitten
vanhempi
sitoutus
ce50f181f1
100 muutettua tiedostoa jossa 4339 lisäystä ja 2851 poistoa
  1. 1 0
      core/prelude.carbon
  2. 54 0
      core/prelude/default.carbon
  3. 3 0
      core/prelude/types/char.carbon
  4. 6 0
      core/prelude/types/cpp/int.carbon
  5. 9 2
      core/prelude/types/cpp/nullptr.carbon
  6. 3 0
      core/prelude/types/float.carbon
  7. 3 0
      core/prelude/types/int.carbon
  8. 3 0
      core/prelude/types/maybe_unformed.carbon
  9. 18 5
      core/prelude/types/optional.carbon
  10. 3 0
      core/prelude/types/string.carbon
  11. 3 0
      core/prelude/types/uint.carbon
  12. 2 0
      examples/advent2024/day10_common.carbon
  13. 2 0
      examples/advent2024/day10_part1.carbon
  14. 2 0
      examples/advent2024/day10_part2.carbon
  15. 2 0
      examples/advent2024/day11_part2.carbon
  16. 4 0
      examples/advent2024/day12_common.carbon
  17. 2 0
      examples/advent2024/day13_common.carbon
  18. 2 0
      examples/advent2024/day14_common.carbon
  19. 2 0
      examples/advent2024/day15_common.carbon
  20. 2 0
      examples/advent2024/day4_common.carbon
  21. 4 0
      examples/advent2024/day5_common.carbon
  22. 2 0
      examples/advent2024/day6_common.carbon
  23. 2 0
      examples/advent2024/day7_common.carbon
  24. 2 0
      examples/advent2024/day8_common.carbon
  25. 2 0
      examples/advent2024/day9_common.carbon
  26. 3 2
      examples/interop/cpp/socket.carbon
  27. 2 0
      examples/sieve.carbon
  28. 1 0
      toolchain/check/core_identifier.def
  29. 1 0
      toolchain/check/eval.cpp
  30. 68 17
      toolchain/check/handle_let_and_var.cpp
  31. 133 16
      toolchain/check/testdata/alias/import.carbon
  32. 30 0
      toolchain/check/testdata/array/basics.carbon
  33. 3 0
      toolchain/check/testdata/as/maybe_unformed.carbon
  34. 7 3
      toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon
  35. 18 10
      toolchain/check/testdata/basics/duplicate_name_same_line.carbon
  36. 2129 2128
      toolchain/check/testdata/basics/raw_sem_ir/one_file.carbon
  37. 5 0
      toolchain/check/testdata/builtins/float/make_type.carbon
  38. 26 18
      toolchain/check/testdata/builtins/maybe_unformed/make_type.carbon
  39. 1 0
      toolchain/check/testdata/class/abstract/abstract.carbon
  40. 30 0
      toolchain/check/testdata/class/abstract/fail_abstract_in_struct.carbon
  41. 5 0
      toolchain/check/testdata/class/abstract/fail_abstract_in_tuple.carbon
  42. 63 13
      toolchain/check/testdata/class/destroy_calls.carbon
  43. 21 0
      toolchain/check/testdata/class/field/field_access.carbon
  44. 21 0
      toolchain/check/testdata/class/field/field_access_in_value.carbon
  45. 56 0
      toolchain/check/testdata/class/generic/call.carbon
  46. 41 0
      toolchain/check/testdata/class/generic/stringify.carbon
  47. 20 1
      toolchain/check/testdata/class/import.carbon
  48. 23 3
      toolchain/check/testdata/class/import_member_cycle.carbon
  49. 30 5
      toolchain/check/testdata/class/import_struct_cycle.carbon
  50. 22 1
      toolchain/check/testdata/class/method/method.carbon
  51. 21 0
      toolchain/check/testdata/class/method/static_method.carbon
  52. 66 1
      toolchain/check/testdata/class/nested.carbon
  53. 22 1
      toolchain/check/testdata/class/nested_name.carbon
  54. 21 2
      toolchain/check/testdata/class/self/raw_self_type.carbon
  55. 22 2
      toolchain/check/testdata/class/self/self_type.carbon
  56. 101 9
      toolchain/check/testdata/eval/aggregates.carbon
  57. 1 1
      toolchain/check/testdata/eval/call.carbon
  58. 26 0
      toolchain/check/testdata/function/builtin/call.carbon
  59. 26 0
      toolchain/check/testdata/function/builtin/method.carbon
  60. 19 0
      toolchain/check/testdata/function/call/ref.carbon
  61. 4 113
      toolchain/check/testdata/function/definition/fail_local_decl.carbon
  62. 51 6
      toolchain/check/testdata/function/generic/resolve_used.carbon
  63. 31 6
      toolchain/check/testdata/function/generic/type_param.carbon
  64. 2 2
      toolchain/check/testdata/generic/call_basic_depth.carbon
  65. 94 144
      toolchain/check/testdata/generic/complete_type.carbon
  66. 17 17
      toolchain/check/testdata/generic/extend_type_completion.carbon
  67. 27 4
      toolchain/check/testdata/global/basics.carbon
  68. 40 15
      toolchain/check/testdata/interface/as_type_of_type.carbon
  69. 1 0
      toolchain/check/testdata/interface/fail_member_lookup.carbon
  70. 30 2
      toolchain/check/testdata/interface/generic_method.carbon
  71. 28 3
      toolchain/check/testdata/interface/import.carbon
  72. 17 1
      toolchain/check/testdata/interop/cpp/builtins.carbon
  73. 34 2
      toolchain/check/testdata/interop/cpp/function/class.carbon
  74. 64 18
      toolchain/check/testdata/interop/cpp/function/decayed_param.carbon
  75. 79 19
      toolchain/check/testdata/interop/cpp/function/reference.carbon
  76. 34 2
      toolchain/check/testdata/interop/cpp/function/struct.carbon
  77. 34 2
      toolchain/check/testdata/interop/cpp/function/union.carbon
  78. 1 0
      toolchain/check/testdata/interop/cpp/import.carbon
  79. 81 3
      toolchain/check/testdata/interop/cpp/template/argument_count.carbon
  80. 27 8
      toolchain/check/testdata/interop/cpp/template/non_type_param.carbon
  81. 33 3
      toolchain/check/testdata/interop/cpp/template/template_template_param.carbon
  82. 51 3
      toolchain/check/testdata/interop/cpp/template/type_param.carbon
  83. 1 0
      toolchain/check/testdata/let/generic_import.carbon
  84. 4 4
      toolchain/check/testdata/named_constraint/invalid_members.carbon
  85. 22 1
      toolchain/check/testdata/namespace/merging_with_indirections.carbon
  86. 4 0
      toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon
  87. 20 0
      toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon
  88. 25 0
      toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon
  89. 9 0
      toolchain/check/testdata/packages/fail_import_type_error.carbon
  90. 12 0
      toolchain/check/testdata/packages/missing_prelude.carbon
  91. 3 2
      toolchain/check/testdata/patterns/tuple.carbon
  92. 7 0
      toolchain/check/testdata/pointer/fail_deref_type.carbon
  93. 150 0
      toolchain/check/testdata/primitives/type_literals.carbon
  94. 1 0
      toolchain/check/testdata/struct/fail_nested_incomplete.carbon
  95. 6 0
      toolchain/check/testdata/struct/fail_value_as_type.carbon
  96. 22 10
      toolchain/check/testdata/tuple/tuple_pattern.carbon
  97. 0 70
      toolchain/check/testdata/var/decl.carbon
  98. 0 74
      toolchain/check/testdata/var/decl_with_init.carbon
  99. 50 4
      toolchain/check/testdata/var/export_name.carbon
  100. 1 73
      toolchain/check/testdata/var/fail_lookup_outside_scope.carbon

+ 1 - 0
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";

+ 54 - 0
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";
+}

+ 3 - 0
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";
 }

+ 6 - 0
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 {

+ 9 - 2
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 {}

+ 3 - 0
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 {

+ 3 - 0
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 {

+ 3 - 0
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 {}

+ 18 - 5
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;
   }

+ 3 - 0
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";
 }

+ 3 - 0
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 {

+ 2 - 0
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)) {

+ 2 - 0
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;

+ 2 - 0
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)) {

+ 2 - 0
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)) {

+ 4 - 0
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)) {

+ 2 - 0
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+"

+ 2 - 0
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=");

+ 2 - 0
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;

+ 2 - 0
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.

+ 4 - 0
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;

+ 2 - 0
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;
 

+ 2 - 0
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;

+ 2 - 0
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)) {

+ 2 - 0
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;

+ 3 - 2
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`.

+ 2 - 0
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)) {

+ 1 - 0
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)

+ 1 - 0
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:

+ 68 - 17
toolchain/check/handle_let_and_var.cpp

@@ -4,14 +4,18 @@
 
 #include <optional>
 
+#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 <const Lex::TokenKind& IntroducerTokenKind,
           const Parse::NodeKind& IntroducerNodeKind,
           const Parse::NodeKind& InitializerNodeKind>
-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<InitializerNodeKind>();
-    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<SemIR::InterfaceWithSelfDecl>();
@@ -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<Lex::TokenKind::Let, Parse::NodeKind::LetIntroducer,
-                 Parse::NodeKind::LetInitializer>(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<Lex::TokenKind::Let,
-                 Parse::NodeKind::AssociatedConstantIntroducer,
-                 Parse::NodeKind::AssociatedConstantInitializer>(context);
+  auto decl_info = HandleDecl<Lex::TokenKind::Let,
+                              Parse::NodeKind::AssociatedConstantIntroducer,
+                              Parse::NodeKind::AssociatedConstantInitializer>(
+      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<Lex::TokenKind::Var, Parse::NodeKind::VariableIntroducer,
-                 Parse::NodeKind::VariableInitializer>(context);
+                 Parse::NodeKind::VariableInitializer>(context, node_id);
 
   LimitModifiersOnDecl(
       context, decl_info.introducer,

+ 133 - 16
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: <witness> = complete_type_witness %empty_struct_type [concrete]
+// CHECK:STDOUT:   %complete_type.357: <witness> = 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: <witness> = 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> = 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> = 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> = 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: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
+// CHECK:STDOUT:   %complete_type: <witness> = 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> = 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: <witness> = complete_type_witness %empty_struct_type [concrete]
+// CHECK:STDOUT:   %complete_type.357: <witness> = 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: <witness> = 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> = 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: <witness> = import_ref Main//class1, loc4_10, loaded [concrete = constants.%complete_type]
+// CHECK:STDOUT:   %Core.ece: <namespace> = 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: <witness> = 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 <none>
 // 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> = 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: <witness> = complete_type_witness %empty_struct_type [concrete]
+// CHECK:STDOUT:   %complete_type.357: <witness> = 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: <witness> = 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> = 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: <witness> = import_ref Main//class2, inst{{[0-9A-F]+}} [indirect], loaded [concrete = constants.%complete_type]
+// CHECK:STDOUT:   %Core: <namespace> = 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: <witness> = 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> = 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 <none>
 // 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> = 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> = 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> = 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> = 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> = 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 <none>
 // 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> = 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> = 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 <none>
 // CHECK:STDOUT:   name_binding_decl {
 // CHECK:STDOUT:     %c.patt: %pattern_type = ref_binding_pattern c [concrete]

+ 30 - 0
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:   <elided>
 // 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: <witness> = 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: <witness> = 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:   <elided>
+// 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:   <elided>
+// 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]

+ 3 - 0
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> = 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:

+ 7 - 3
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]

+ 18 - 10
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:   <elided>
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.done:
-// CHECK:STDOUT:   %Destroy.Op.bound.loc18_32: <bound method> = 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> = 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> = 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:   <elided>

+ 2129 - 2128
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<none>, is_export: false}
 // CHECK:STDOUT:     'import_ir(Cpp)':  {decl_id: inst<none>, 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<none>, 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<none>, 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<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000001: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000002: {name: name2, parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000003: {name: name3, parent_scope: name_scope58000001, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000004: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000005: {name: name4, parent_scope: name_scope58000003, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000006: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000007: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000008: {name: name(SelfValue), parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000009: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800000A: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800000B: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800000C: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800000D: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800000E: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800000F: {name: name(SelfValue), parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000010: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000011: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000012: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000013: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000014: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000015: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000016: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000017: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000018: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000019: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800001A: {name: name(SelfValue), parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800001B: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800001C: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800001D: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800001E: {name: name(SelfValue), parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800001F: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000020: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000021: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000022: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000023: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000024: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000025: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000026: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000027: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000028: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000029: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800002A: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800002B: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800002C: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800002D: {name: name(SelfValue), parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800002E: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800002F: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000030: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000031: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000032: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000033: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000034: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000035: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000036: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000037: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000038: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name58000039: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800003A: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800003B: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800003C: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800003D: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800003E: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
-// CHECK:STDOUT:     entity_name5800003F: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000000: {name: name(PeriodSelf), parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000001: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000002: {name: name2, parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000003: {name: name3, parent_scope: name_scope78000001, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000004: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000005: {name: name4, parent_scope: name_scope78000003, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000006: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000007: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000008: {name: name(SelfValue), parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000009: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800000A: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800000B: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800000C: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800000D: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800000E: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800000F: {name: name(SelfValue), parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000010: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000011: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000012: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000013: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000014: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000015: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000016: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000017: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000018: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000019: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800001A: {name: name(SelfValue), parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800001B: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800001C: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800001D: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800001E: {name: name(SelfValue), parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800001F: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000020: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000021: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000022: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000023: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000024: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000025: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000026: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000027: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000028: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000029: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800002A: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800002B: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800002C: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800002D: {name: name(SelfValue), parent_scope: name_scope<none>, index: -1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800002E: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800002F: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000030: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000031: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000032: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000033: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000034: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000035: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000036: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000037: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000038: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name78000039: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800003A: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800003B: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800003C: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800003D: {name: name6, parent_scope: name_scope<none>, index: 2, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800003E: {name: name5, parent_scope: name_scope<none>, index: 1, is_template: 0, is_unused: 0, form: constant<none>}
+// CHECK:STDOUT:     entity_name7800003F: {name: name1, parent_scope: name_scope<none>, index: 0, is_template: 0, is_unused: 0, form: constant<none>}
 // 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<none>}
-// 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<none>}
+// 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<none>}
-// 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<none>}
-// CHECK:STDOUT:     specific58000003: {generic: generic58000001, args: inst_block58000025, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// 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<none>}
-// CHECK:STDOUT:     specific58000007: {generic: generic58000004, args: inst_block58000028, decl_block_id: inst_block58000035, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific58000008: {generic: generic58000001, args: inst_block58000032, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific58000009: {generic: generic58000002, args: inst_block58000032, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific5800000A: {generic: generic58000003, args: inst_block58000038, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// 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<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific5800000D: {generic: generic58000006, args: inst_block58000016, decl_block_id: inst_block58000047, definition_block_id: inst_block<none>}
-// 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<none>}
-// CHECK:STDOUT:     specific58000011: {generic: generic58000008, args: inst_block5800004C, decl_block_id: inst_block5800005E, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific58000012: {generic: generic58000001, args: inst_block58000059, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific58000013: {generic: generic58000002, args: inst_block58000059, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific58000014: {generic: generic58000001, args: inst_block5800005B, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific58000015: {generic: generic58000002, args: inst_block5800005B, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific58000016: {generic: generic58000007, args: inst_block58000061, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// 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<none>}
-// CHECK:STDOUT:     specific5800001A: {generic: generic5800000A, args: inst_block58000069, decl_block_id: inst_block5800007D, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific5800001B: {generic: generic58000001, args: inst_block58000076, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific5800001C: {generic: generic58000002, args: inst_block58000076, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific5800001D: {generic: generic58000001, args: inst_block58000078, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific5800001E: {generic: generic58000002, args: inst_block58000078, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific5800001F: {generic: generic58000001, args: inst_block5800007A, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific58000020: {generic: generic58000002, args: inst_block5800007A, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific58000021: {generic: generic58000009, args: inst_block58000080, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific58000022: {generic: generic58000005, args: inst_block58000087, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
-// 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<none>, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific58000025: {generic: generic58000002, args: inst_block58000089, decl_block_id: inst_block5800008D, definition_block_id: inst_block<none>}
-// CHECK:STDOUT:     specific58000026: {generic: generic58000002, args: inst_block5800008C, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000000: {generic: generic78000000, args: inst_block78000016, decl_block_id: inst_block78000018, definition_block_id: inst_block<none>}
+// 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<none>}
+// CHECK:STDOUT:     specific78000003: {generic: generic78000001, args: inst_block78000025, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// 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<none>}
+// CHECK:STDOUT:     specific78000007: {generic: generic78000004, args: inst_block78000028, decl_block_id: inst_block78000035, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000008: {generic: generic78000001, args: inst_block78000032, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000009: {generic: generic78000002, args: inst_block78000032, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific7800000A: {generic: generic78000003, args: inst_block78000038, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// 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<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific7800000D: {generic: generic78000006, args: inst_block78000016, decl_block_id: inst_block78000047, definition_block_id: inst_block<none>}
+// 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<none>}
+// CHECK:STDOUT:     specific78000011: {generic: generic78000008, args: inst_block7800004C, decl_block_id: inst_block7800005E, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000012: {generic: generic78000001, args: inst_block78000059, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000013: {generic: generic78000002, args: inst_block78000059, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000014: {generic: generic78000001, args: inst_block7800005B, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000015: {generic: generic78000002, args: inst_block7800005B, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000016: {generic: generic78000007, args: inst_block78000061, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// 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<none>}
+// CHECK:STDOUT:     specific7800001A: {generic: generic7800000A, args: inst_block78000069, decl_block_id: inst_block7800007D, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific7800001B: {generic: generic78000001, args: inst_block78000076, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific7800001C: {generic: generic78000002, args: inst_block78000076, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific7800001D: {generic: generic78000001, args: inst_block78000078, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific7800001E: {generic: generic78000002, args: inst_block78000078, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific7800001F: {generic: generic78000001, args: inst_block7800007A, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000020: {generic: generic78000002, args: inst_block7800007A, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000021: {generic: generic78000009, args: inst_block78000080, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000022: {generic: generic78000005, args: inst_block78000087, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
+// 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<none>, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000025: {generic: generic78000002, args: inst_block78000089, decl_block_id: inst_block7800008D, definition_block_id: inst_block<none>}
+// CHECK:STDOUT:     specific78000026: {generic: generic78000002, args: inst_block7800008C, decl_block_id: inst_block<none>, definition_block_id: inst_block<none>}
 // CHECK:STDOUT:   specific_interfaces:
-// CHECK:STDOUT:     specific_interface58000000: {interface_id: interface58000000, specific_id: specific<none>}
+// CHECK:STDOUT:     specific_interface78000000: {interface_id: interface78000000, specific_id: specific<none>}
 // 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<none>, 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<none>, type: type(inst58000012)}
-// CHECK:STDOUT:     inst58000014:    {kind: SymbolicBinding, arg0: entity_name58000000, arg1: inst<none>, 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<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst58000018:    {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst58000019:    {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst<none>, 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<none>, 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<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000053:    {kind: ImportRefLoaded, arg0: import_ir_inst3, arg1: entity_name<none>, 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<none>, 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<none>, 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<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst58000061:    {kind: ImportRefLoaded, arg0: import_ir_instC, arg1: entity_name<none>, type: type(inst(FormType))}
-// CHECK:STDOUT:     inst58000062:    {kind: ImportRefLoaded, arg0: import_ir_instD, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000063:    {kind: SymbolicBinding, arg0: entity_name58000004, arg1: inst<none>, 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<none>, 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<none>}
-// CHECK:STDOUT:     inst5800006B:    {kind: AssociatedEntityType, arg0: interface58000000, arg1: specific<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst5800006C:    {kind: ImportRefLoaded, arg0: import_ir_inst16, arg1: entity_name<none>, 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<none>}
-// CHECK:STDOUT:     inst58000070:    {kind: ImplDecl, arg0: impl58000000, arg1: inst_block_empty}
-// CHECK:STDOUT:     inst58000071:    {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst<none>, 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<none>}
-// 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<none>, 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<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst58000081:    {kind: ImportRefLoaded, arg0: import_ir_inst21, arg1: entity_name<none>, type: type(inst(FormType))}
-// CHECK:STDOUT:     inst58000082:    {kind: ImportRefLoaded, arg0: import_ir_inst22, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000083:    {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst<none>, 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<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst5800009C:    {kind: ImportRefLoaded, arg0: import_ir_inst31, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst5800009D:    {kind: ImportRefLoaded, arg0: import_ir_inst32, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst5800009E:    {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst<none>, 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<none>}
-// CHECK:STDOUT:     inst580000A5:    {kind: ImplDecl, arg0: impl58000001, arg1: inst_block_empty}
-// CHECK:STDOUT:     inst580000A6:    {kind: ImportRefLoaded, arg0: import_ir_inst3B, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000A7:    {kind: ImportRefLoaded, arg0: import_ir_inst3C, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000A8:    {kind: ImportRefUnloaded, arg0: import_ir_inst3D, arg1: entity_name<none>}
-// CHECK:STDOUT:     inst580000A9:    {kind: ImplDecl, arg0: impl58000002, arg1: inst_block_empty}
-// CHECK:STDOUT:     inst580000AA:    {kind: ImportRefLoaded, arg0: import_ir_inst3F, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000AB:    {kind: ImportRefLoaded, arg0: import_ir_inst40, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000AC:    {kind: ImportRefUnloaded, arg0: import_ir_inst41, arg1: entity_name<none>}
-// CHECK:STDOUT:     inst580000AD:    {kind: ImplDecl, arg0: impl58000003, arg1: inst_block_empty}
-// CHECK:STDOUT:     inst580000AE:    {kind: ImportRefLoaded, arg0: import_ir_inst43, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000AF:    {kind: ImportRefLoaded, arg0: import_ir_inst44, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000B0:    {kind: ImportRefUnloaded, arg0: import_ir_inst45, arg1: entity_name<none>}
-// CHECK:STDOUT:     inst580000B1:    {kind: ImplDecl, arg0: impl58000004, arg1: inst_block_empty}
-// CHECK:STDOUT:     inst580000B2:    {kind: ImportRefLoaded, arg0: import_ir_inst47, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000B3:    {kind: ImportRefLoaded, arg0: import_ir_inst48, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000B4:    {kind: ImportRefLoaded, arg0: import_ir_inst49, arg1: entity_name<none>, 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<none>}
-// 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<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000BB:    {kind: ImportRefLoaded, arg0: import_ir_inst4F, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000BC:    {kind: ImportRefLoaded, arg0: import_ir_inst50, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000BD:    {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst<none>, 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<none>, 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<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000C9:    {kind: ImportRefLoaded, arg0: import_ir_inst5A, arg1: entity_name<none>, type: type(inst(FormType))}
-// CHECK:STDOUT:     inst580000CA:    {kind: ImportRefLoaded, arg0: import_ir_inst5B, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000CB:    {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst<none>, 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<none>}
-// CHECK:STDOUT:     inst580000D3:    {kind: ImplDecl, arg0: impl58000006, arg1: inst_block_empty}
-// CHECK:STDOUT:     inst580000D4:    {kind: ImportRefLoaded, arg0: import_ir_inst65, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000D5:    {kind: ImportRefLoaded, arg0: import_ir_inst66, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000D6:    {kind: ImportRefUnloaded, arg0: import_ir_inst67, arg1: entity_name<none>}
-// CHECK:STDOUT:     inst580000D7:    {kind: ImplDecl, arg0: impl58000007, arg1: inst_block_empty}
-// CHECK:STDOUT:     inst580000D8:    {kind: ImportRefLoaded, arg0: import_ir_inst69, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000D9:    {kind: ImportRefLoaded, arg0: import_ir_inst6A, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000DA:    {kind: ImportRefUnloaded, arg0: import_ir_inst6B, arg1: entity_name<none>}
-// CHECK:STDOUT:     inst580000DB:    {kind: ImplDecl, arg0: impl58000008, arg1: inst_block_empty}
-// CHECK:STDOUT:     inst580000DC:    {kind: SymbolicBinding, arg0: entity_name5800001C, arg1: inst<none>, 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<none>}
-// 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<none>, 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<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst580000EE:    {kind: ImportRefLoaded, arg0: import_ir_inst75, arg1: entity_name<none>, type: type(inst(FormType))}
-// CHECK:STDOUT:     inst580000EF:    {kind: ImportRefLoaded, arg0: import_ir_inst76, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst580000F0:    {kind: ImportRefLoaded, arg0: import_ir_inst77, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst580000F1:    {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst<none>, 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<none>, 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<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst58000112:    {kind: ImportRefLoaded, arg0: import_ir_inst8F, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst58000113:    {kind: ImportRefLoaded, arg0: import_ir_inst90, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000114:    {kind: ImportRefLoaded, arg0: import_ir_inst91, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000115:    {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000116:    {kind: SymbolicBinding, arg0: entity_name5800001C, arg1: inst<none>, 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<none>}
-// CHECK:STDOUT:     inst5800011F:    {kind: ImplDecl, arg0: impl58000009, arg1: inst_block_empty}
-// CHECK:STDOUT:     inst58000120:    {kind: SymbolicBinding, arg0: entity_name5800002B, arg1: inst<none>, 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<none>}
-// 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<none>, 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<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst58000132:    {kind: ImportRefLoaded, arg0: import_ir_instA5, arg1: entity_name<none>, type: type(inst(FormType))}
-// CHECK:STDOUT:     inst58000133:    {kind: ImportRefLoaded, arg0: import_ir_instA6, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000134:    {kind: ImportRefLoaded, arg0: import_ir_instA7, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000135:    {kind: ImportRefLoaded, arg0: import_ir_instA8, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000136:    {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst<none>, 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<none>, 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<none>, 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<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst58000160:    {kind: ImportRefLoaded, arg0: import_ir_instC9, arg1: entity_name<none>, type: type(TypeType)}
-// CHECK:STDOUT:     inst58000161:    {kind: ImportRefLoaded, arg0: import_ir_instCA, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000162:    {kind: ImportRefLoaded, arg0: import_ir_instCB, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000163:    {kind: ImportRefLoaded, arg0: import_ir_instCC, arg1: entity_name<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000164:    {kind: SymbolicBinding, arg0: entity_name58000001, arg1: inst<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000165:    {kind: SymbolicBinding, arg0: entity_name5800001C, arg1: inst<none>, type: type(inst58000050)}
-// CHECK:STDOUT:     inst58000166:    {kind: SymbolicBinding, arg0: entity_name5800002B, arg1: inst<none>, 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<none>, 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<none>, type: type(inst78000012)}
+// CHECK:STDOUT:     inst78000014:    {kind: SymbolicBinding, arg0: entity_name78000000, arg1: inst<none>, 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<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst78000018:    {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst78000019:    {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst<none>, 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<none>, 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<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000053:    {kind: ImportRefLoaded, arg0: import_ir_inst3, arg1: entity_name<none>, 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<none>, 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<none>, 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<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst78000061:    {kind: ImportRefLoaded, arg0: import_ir_instC, arg1: entity_name<none>, type: type(inst(FormType))}
+// CHECK:STDOUT:     inst78000062:    {kind: ImportRefLoaded, arg0: import_ir_instD, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000063:    {kind: SymbolicBinding, arg0: entity_name78000004, arg1: inst<none>, 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<none>, 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<none>}
+// CHECK:STDOUT:     inst7800006B:    {kind: AssociatedEntityType, arg0: interface78000000, arg1: specific<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst7800006C:    {kind: ImportRefLoaded, arg0: import_ir_inst16, arg1: entity_name<none>, 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<none>}
+// CHECK:STDOUT:     inst78000070:    {kind: ImplDecl, arg0: impl78000000, arg1: inst_block_empty}
+// CHECK:STDOUT:     inst78000071:    {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst<none>, 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<none>}
+// 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<none>, 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<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst78000081:    {kind: ImportRefLoaded, arg0: import_ir_inst21, arg1: entity_name<none>, type: type(inst(FormType))}
+// CHECK:STDOUT:     inst78000082:    {kind: ImportRefLoaded, arg0: import_ir_inst22, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000083:    {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst<none>, 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<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst7800009C:    {kind: ImportRefLoaded, arg0: import_ir_inst31, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst7800009D:    {kind: ImportRefLoaded, arg0: import_ir_inst32, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst7800009E:    {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst<none>, 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<none>}
+// CHECK:STDOUT:     inst780000A5:    {kind: ImplDecl, arg0: impl78000001, arg1: inst_block_empty}
+// CHECK:STDOUT:     inst780000A6:    {kind: ImportRefLoaded, arg0: import_ir_inst3B, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000A7:    {kind: ImportRefLoaded, arg0: import_ir_inst3C, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000A8:    {kind: ImportRefUnloaded, arg0: import_ir_inst3D, arg1: entity_name<none>}
+// CHECK:STDOUT:     inst780000A9:    {kind: ImplDecl, arg0: impl78000002, arg1: inst_block_empty}
+// CHECK:STDOUT:     inst780000AA:    {kind: ImportRefLoaded, arg0: import_ir_inst3F, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000AB:    {kind: ImportRefLoaded, arg0: import_ir_inst40, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000AC:    {kind: ImportRefUnloaded, arg0: import_ir_inst41, arg1: entity_name<none>}
+// CHECK:STDOUT:     inst780000AD:    {kind: ImplDecl, arg0: impl78000003, arg1: inst_block_empty}
+// CHECK:STDOUT:     inst780000AE:    {kind: ImportRefLoaded, arg0: import_ir_inst43, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000AF:    {kind: ImportRefLoaded, arg0: import_ir_inst44, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000B0:    {kind: ImportRefUnloaded, arg0: import_ir_inst45, arg1: entity_name<none>}
+// CHECK:STDOUT:     inst780000B1:    {kind: ImplDecl, arg0: impl78000004, arg1: inst_block_empty}
+// CHECK:STDOUT:     inst780000B2:    {kind: ImportRefLoaded, arg0: import_ir_inst47, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000B3:    {kind: ImportRefLoaded, arg0: import_ir_inst48, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000B4:    {kind: ImportRefLoaded, arg0: import_ir_inst49, arg1: entity_name<none>, 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<none>}
+// 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<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000BB:    {kind: ImportRefLoaded, arg0: import_ir_inst4F, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000BC:    {kind: ImportRefLoaded, arg0: import_ir_inst50, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000BD:    {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst<none>, 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<none>, 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<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000C9:    {kind: ImportRefLoaded, arg0: import_ir_inst5A, arg1: entity_name<none>, type: type(inst(FormType))}
+// CHECK:STDOUT:     inst780000CA:    {kind: ImportRefLoaded, arg0: import_ir_inst5B, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000CB:    {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst<none>, 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<none>}
+// CHECK:STDOUT:     inst780000D3:    {kind: ImplDecl, arg0: impl78000006, arg1: inst_block_empty}
+// CHECK:STDOUT:     inst780000D4:    {kind: ImportRefLoaded, arg0: import_ir_inst65, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000D5:    {kind: ImportRefLoaded, arg0: import_ir_inst66, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000D6:    {kind: ImportRefUnloaded, arg0: import_ir_inst67, arg1: entity_name<none>}
+// CHECK:STDOUT:     inst780000D7:    {kind: ImplDecl, arg0: impl78000007, arg1: inst_block_empty}
+// CHECK:STDOUT:     inst780000D8:    {kind: ImportRefLoaded, arg0: import_ir_inst69, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000D9:    {kind: ImportRefLoaded, arg0: import_ir_inst6A, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000DA:    {kind: ImportRefUnloaded, arg0: import_ir_inst6B, arg1: entity_name<none>}
+// CHECK:STDOUT:     inst780000DB:    {kind: ImplDecl, arg0: impl78000008, arg1: inst_block_empty}
+// CHECK:STDOUT:     inst780000DC:    {kind: SymbolicBinding, arg0: entity_name7800001C, arg1: inst<none>, 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<none>}
+// 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<none>, 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<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst780000EE:    {kind: ImportRefLoaded, arg0: import_ir_inst75, arg1: entity_name<none>, type: type(inst(FormType))}
+// CHECK:STDOUT:     inst780000EF:    {kind: ImportRefLoaded, arg0: import_ir_inst76, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst780000F0:    {kind: ImportRefLoaded, arg0: import_ir_inst77, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst780000F1:    {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst<none>, 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<none>, 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<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst78000112:    {kind: ImportRefLoaded, arg0: import_ir_inst8F, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst78000113:    {kind: ImportRefLoaded, arg0: import_ir_inst90, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000114:    {kind: ImportRefLoaded, arg0: import_ir_inst91, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000115:    {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000116:    {kind: SymbolicBinding, arg0: entity_name7800001C, arg1: inst<none>, 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<none>}
+// CHECK:STDOUT:     inst7800011F:    {kind: ImplDecl, arg0: impl78000009, arg1: inst_block_empty}
+// CHECK:STDOUT:     inst78000120:    {kind: SymbolicBinding, arg0: entity_name7800002B, arg1: inst<none>, 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<none>}
+// 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<none>, 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<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst78000132:    {kind: ImportRefLoaded, arg0: import_ir_instA5, arg1: entity_name<none>, type: type(inst(FormType))}
+// CHECK:STDOUT:     inst78000133:    {kind: ImportRefLoaded, arg0: import_ir_instA6, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000134:    {kind: ImportRefLoaded, arg0: import_ir_instA7, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000135:    {kind: ImportRefLoaded, arg0: import_ir_instA8, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000136:    {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst<none>, 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<none>, 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<none>, 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<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst78000160:    {kind: ImportRefLoaded, arg0: import_ir_instC9, arg1: entity_name<none>, type: type(TypeType)}
+// CHECK:STDOUT:     inst78000161:    {kind: ImportRefLoaded, arg0: import_ir_instCA, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000162:    {kind: ImportRefLoaded, arg0: import_ir_instCB, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000163:    {kind: ImportRefLoaded, arg0: import_ir_instCC, arg1: entity_name<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000164:    {kind: SymbolicBinding, arg0: entity_name78000001, arg1: inst<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000165:    {kind: SymbolicBinding, arg0: entity_name7800001C, arg1: inst<none>, type: type(inst78000050)}
+// CHECK:STDOUT:     inst78000166:    {kind: SymbolicBinding, arg0: entity_name7800002B, arg1: inst<none>, 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<none>, 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<none>
-// 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<none>
-// 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<none>
-// 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<none>
-// 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<none>
-// CHECK:STDOUT:       inst580000A5:    concrete_constant(inst580000A5)
-// CHECK:STDOUT:       inst580000A6:    concrete_constant(inst(BoolType))
-// CHECK:STDOUT:       inst580000A7:    concrete_constant(inst58000050)
-// CHECK:STDOUT:       inst580000A8:    constant<none>
-// CHECK:STDOUT:       inst580000A9:    concrete_constant(inst580000A9)
-// CHECK:STDOUT:       inst580000AA:    concrete_constant(inst(CharLiteralType))
-// CHECK:STDOUT:       inst580000AB:    concrete_constant(inst58000050)
-// CHECK:STDOUT:       inst580000AC:    constant<none>
-// CHECK:STDOUT:       inst580000AD:    concrete_constant(inst580000AD)
-// CHECK:STDOUT:       inst580000AE:    concrete_constant(inst(FloatLiteralType))
-// CHECK:STDOUT:       inst580000AF:    concrete_constant(inst58000050)
-// CHECK:STDOUT:       inst580000B0:    constant<none>
-// 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<none>
-// 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<none>
-// CHECK:STDOUT:       inst580000D3:    concrete_constant(inst580000D3)
-// CHECK:STDOUT:       inst580000D4:    concrete_constant(inst(TypeType))
-// CHECK:STDOUT:       inst580000D5:    concrete_constant(inst58000050)
-// CHECK:STDOUT:       inst580000D6:    constant<none>
-// CHECK:STDOUT:       inst580000D7:    concrete_constant(inst580000D7)
-// CHECK:STDOUT:       inst580000D8:    concrete_constant(inst58000026)
-// CHECK:STDOUT:       inst580000D9:    concrete_constant(inst58000050)
-// CHECK:STDOUT:       inst580000DA:    constant<none>
-// 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<none>
-// 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<none>
-// 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<none>
-// 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<none>
+// 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<none>
+// 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<none>
+// 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<none>
+// 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<none>
+// CHECK:STDOUT:       inst780000A5:    concrete_constant(inst780000A5)
+// CHECK:STDOUT:       inst780000A6:    concrete_constant(inst(BoolType))
+// CHECK:STDOUT:       inst780000A7:    concrete_constant(inst78000050)
+// CHECK:STDOUT:       inst780000A8:    constant<none>
+// CHECK:STDOUT:       inst780000A9:    concrete_constant(inst780000A9)
+// CHECK:STDOUT:       inst780000AA:    concrete_constant(inst(CharLiteralType))
+// CHECK:STDOUT:       inst780000AB:    concrete_constant(inst78000050)
+// CHECK:STDOUT:       inst780000AC:    constant<none>
+// CHECK:STDOUT:       inst780000AD:    concrete_constant(inst780000AD)
+// CHECK:STDOUT:       inst780000AE:    concrete_constant(inst(FloatLiteralType))
+// CHECK:STDOUT:       inst780000AF:    concrete_constant(inst78000050)
+// CHECK:STDOUT:       inst780000B0:    constant<none>
+// 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<none>
+// 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<none>
+// CHECK:STDOUT:       inst780000D3:    concrete_constant(inst780000D3)
+// CHECK:STDOUT:       inst780000D4:    concrete_constant(inst(TypeType))
+// CHECK:STDOUT:       inst780000D5:    concrete_constant(inst78000050)
+// CHECK:STDOUT:       inst780000D6:    constant<none>
+// CHECK:STDOUT:       inst780000D7:    concrete_constant(inst780000D7)
+// CHECK:STDOUT:       inst780000D8:    concrete_constant(inst78000026)
+// CHECK:STDOUT:       inst780000D9:    concrete_constant(inst78000050)
+// CHECK:STDOUT:       inst780000DA:    constant<none>
+// 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<none>
+// 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<none>
+// 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<none>
+// 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:            {}

+ 5 - 0
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:   <elided>
+// CHECK:STDOUT: }
+// CHECK:STDOUT:

+ 26 - 18
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:   }
-// 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:   %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: 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

+ 1 - 0
toolchain/check/testdata/class/abstract/abstract.carbon

@@ -322,6 +322,7 @@ fn CallReturnAbstract() {
 // CHECK:STDOUT:     %v.var_patt: <error> = var_pattern %v.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %v.var: ref <error> = var %v.var_patt [concrete = <error>]
+// CHECK:STDOUT:   assign %v.var, <error>
 // CHECK:STDOUT:   %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract]
 // CHECK:STDOUT:   %v: ref <error> = ref_binding v, <error> [concrete = <error>]
 // CHECK:STDOUT:   return

+ 30 - 0
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, <error>
+// 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, <error>
+// 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, <error>
+// 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, <error>
+// 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, <error>
+// CHECK:STDOUT:   return
+// CHECK:STDOUT: }
+// CHECK:STDOUT:

+ 5 - 0
toolchain/check/testdata/class/abstract/fail_abstract_in_tuple.carbon

@@ -233,6 +233,7 @@ fn Var5() {
 // CHECK:STDOUT:     %v.var_patt: <error> = var_pattern %v.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %v.var: ref <error> = var %v.var_patt [concrete = <error>]
+// CHECK:STDOUT:   assign %v.var, <error>
 // 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: <error> = var_pattern %v2.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %v2.var: ref <error> = var %v2.var_patt [concrete = <error>]
+// CHECK:STDOUT:   assign %v2.var, <error>
 // 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: <error> = var_pattern %v3.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %v3.var: ref <error> = var %v3.var_patt [concrete = <error>]
+// CHECK:STDOUT:   assign %v3.var, <error>
 // 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: <error> = var_pattern %v4.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %v4.var: ref <error> = var %v4.var_patt [concrete = <error>]
+// CHECK:STDOUT:   assign %v4.var, <error>
 // 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: <error> = var_pattern %v5.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %v5.var: ref <error> = var %v5.var_patt [concrete = <error>]
+// CHECK:STDOUT:   assign %v5.var, <error>
 // 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]

+ 63 - 13
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> = 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: <witness> = 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: <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 function> = 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: <witness> = 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: <witness> = 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: <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 function> = 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> = bound_method %v.var, %impl.elem0.loc7_3.1
 // CHECK:STDOUT:     %specific_impl_fn.loc7_3.1: <specific function> = 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> = 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: }

+ 21 - 0
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: <witness> = 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> = 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> = 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> = 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

+ 21 - 0
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: <witness> = 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> = 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> = 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> = 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

+ 56 - 0
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: <witness> = 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> = 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> = 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: <witness> = 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> = 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> = 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> = 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> = 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, <error>
+// 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, <error>
+// 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, <error>
+// 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

+ 41 - 0
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: <witness> = 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> = 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> = 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> = 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, <error> [concrete = <error>]
 // CHECK:STDOUT:   assign file.%w.var, <error>
@@ -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: <witness> = 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> = 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> = 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> = 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, <error> [concrete = <error>]
 // CHECK:STDOUT:   assign file.%w.var, <error>

+ 20 - 1
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: <witness> = 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> = 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> = 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> = 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:   }

+ 23 - 3
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: <witness> = complete_type_witness %struct_type.a [concrete]
+// CHECK:STDOUT:   %complete_type.e68: <witness> = 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: <witness> = 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> = 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> = 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: <witness> = import_ref Main//a, loc6_1, loaded [concrete = constants.%complete_type]
+// CHECK:STDOUT:   %Main.import_ref.4e3: <witness> = 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> = 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:   }

+ 30 - 5
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: <witness> = 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> = 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: <witness> = complete_type_witness %struct_type.c [concrete]
+// CHECK:STDOUT:   %complete_type.3fc: <witness> = complete_type_witness %struct_type.c [concrete]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: imports {
 // CHECK:STDOUT:   %Core: <namespace> = 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: <witness> = complete_type_witness constants.%struct_type.c [concrete = constants.%complete_type]
+// CHECK:STDOUT:   %complete_type: <witness> = 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> = 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 {

+ 22 - 1
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: <witness> = 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: <witness> = 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> = 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> = 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

+ 21 - 0
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: <witness> = 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> = 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> = 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> = 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

+ 66 - 1
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: <witness> = 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: <witness> = 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> = 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: <witness> = 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> = 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: <witness> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = bound_method %i.var, constants.%Destroy.Op.651ba6.1

+ 22 - 1
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: <witness> = 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: <witness> = 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> = 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> = 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> = 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:   }

+ 21 - 2
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: <witness> = 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: <witness> = 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> = 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: <witness> = 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> = 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> = 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:   }

+ 22 - 2
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: <witness> = 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: <witness> = 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> = 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: <witness> = 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> = 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> = 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

+ 101 - 9
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: <witness> = 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: <witness> = 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 function> = 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: <witness> = 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: <witness> = 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 function> = 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: <witness> = 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: <witness> = 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 function> = 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: <witness> = 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: <witness> = 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: <witness> = 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 function> = specific_impl_function %impl.elem0.82a, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.0c7) [symbolic]
 // CHECK:STDOUT:   %Destroy.lookup_impl_witness.f5c: <witness> = 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: <witness> = 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: <witness> = 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 function> = 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: <witness> = 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: <witness> = 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 function> = 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: <witness> = 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: <witness> = 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 function> = 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: <witness> = 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 function> = 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: <witness> = 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: <witness> = 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 function> = 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 function> = 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 function> = 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 function> = 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> = bound_method %w.var, %impl.elem0.loc8_3.1
 // CHECK:STDOUT:     %specific_impl_fn.loc8_3.1: <specific function> = 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> = 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 function> = 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> = 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> = bound_method %u.var, %impl.elem0.loc6_3.1
 // CHECK:STDOUT:     %specific_impl_fn.loc6_3.1: <specific function> = 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> = 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: <witness> = 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: <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 function> = 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: <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 function> = 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 function> = 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> = bound_method %k.var, %impl.elem0.loc14_3.1
 // CHECK:STDOUT:     %specific_impl_fn.loc14_3.1: <specific function> = 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> = bound_method %k.var, %specific_impl_fn.loc14_3.1

+ 1 - 1
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 `<cannot stringify inst5C00018B: {kind: Call, arg0: inst5C00003E, arg1: inst_block5C000091, type: type(TypeType)}>` 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 `<cannot stringify inst7C00018B: {kind: Call, arg0: inst7C00003E, arg1: inst_block7C000091, type: type(TypeType)}>` that does not implement that interface [MissingImplInMemberAccess]
   // CHECK:STDERR:   var unused v: F(X) = {};
   // CHECK:STDERR:   ^~~~~~~~~~~~~~~~~~
   // CHECK:STDERR:

+ 26 - 0
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: <witness> = 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> = 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> = 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> = 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:

+ 26 - 0
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: <witness> = 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> = 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> = 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

+ 19 - 0
toolchain/check/testdata/function/call/ref.carbon

@@ -190,10 +190,21 @@ fn G() {
 // CHECK:STDOUT:   %complete_type: <witness> = 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: <witness> = 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:   <elided>
+// 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

+ 4 - 113
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> = 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> = 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> = 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> = 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> = 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> = 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:

+ 51 - 6
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: <witness> = 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: <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 function> = 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: <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 function> = 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 function> = 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: <witness> = complete_type_witness <error> [concrete]
 // CHECK:STDOUT:   %pattern_type.47b: type = pattern_type %i0 [concrete]
+// CHECK:STDOUT:   %DefaultOrUnformed.impl_witness.879: <witness> = 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> = 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: <witness> = custom_witness (%Destroy.Op), @Destroy [concrete]
@@ -81,12 +100,16 @@ fn CallNegative() {
 // CHECK:STDOUT:   %Core: <namespace> = 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: <witness> = 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: <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 function> = 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: <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 function> = 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 function> = 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 function> = 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: <namespace> = 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> = bound_method %v.var, %impl.elem0.loc9_3.1
-// CHECK:STDOUT:     %specific_impl_fn.loc9_3.1: <specific function> = 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 function> = 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> = 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

+ 31 - 6
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: <witness> = 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: <witness> = 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: <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 function> = 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: <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 function> = 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 function> = specific_impl_function %impl.elem0.b55, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: imports {
 // CHECK:STDOUT:   %Core: <namespace> = 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: <witness> = 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: <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 function> = 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: <witness> = 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: <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 function> = 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 function> = 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 function> = 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> = bound_method %p.var, %impl.elem0.loc16_3.1
-// CHECK:STDOUT:     %specific_impl_fn.loc16_3.1: <specific function> = 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 function> = 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> = 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

+ 2 - 2
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);

+ 94 - 144
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: <witness> = 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: <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 function> = 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> = specific_function %F, @F(%B) [concrete]
 // CHECK:STDOUT:   %empty_struct_type: type = struct_type {} [concrete]
 // CHECK:STDOUT:   %complete_type.357: <witness> = complete_type_witness %empty_struct_type [concrete]
-// CHECK:STDOUT:   %ptr.27c: type = ptr_type %B [concrete]
 // CHECK:STDOUT:   %complete_type.04a: <witness> = 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: <witness> = 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> = 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: <witness> = 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: <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 function> = 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:
-// CHECK:STDOUT:   fn() {
+// CHECK:STDOUT:   %require_complete: <witness> = require_complete_type %ptr.loc6_20.1 [symbolic = %require_complete (constants.%require_complete)]
+// CHECK:STDOUT:
+// 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> = bound_method %v.var, %impl.elem0.loc7_3.1
-// CHECK:STDOUT:     %specific_impl_fn.loc7_3.1: <specific function> = 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> = 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> = 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: <witness> = require_complete_type %ptr.e8f [symbolic]
-// CHECK:STDOUT:   %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic]
 // CHECK:STDOUT:   %require_complete.944: <witness> = 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: <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 function> = 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> = specific_function %F, @F(%B) [concrete]
-// CHECK:STDOUT:   %ptr.27c: type = ptr_type %B [concrete]
 // CHECK:STDOUT:   %complete_type: <witness> = 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: <witness> = 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> = 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: <witness> = 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: <witness> = 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: <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 function> = 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:
-// CHECK:STDOUT:   fn() {
+// CHECK:STDOUT:   %require_complete.loc6: <witness> = require_complete_type %ptr.loc6_20.1 [symbolic = %require_complete.loc6 (constants.%require_complete.ef1)]
+// CHECK:STDOUT:   %require_complete.loc7: <witness> = 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(%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> = bound_method %p.var, %impl.elem0.loc7_3.1
-// CHECK:STDOUT:     %specific_impl_fn.loc7_3.1: <specific function> = 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> = 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> = 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 => <error>
-// 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 => <error>
+// CHECK:STDOUT:   %pattern_type.loc7 => constants.%pattern_type.1f4
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 17 - 17
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)) {}

+ 27 - 4
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: <witness> = 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:   <elided>
+// 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:   <elided>
+// CHECK:STDOUT: }
+// CHECK:STDOUT:
 // CHECK:STDOUT: --- simple_init.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: constants {

+ 40 - 15
toolchain/check/testdata/interface/as_type_of_type.carbon

@@ -35,29 +35,39 @@ fn F(T:! Empty) {
 // CHECK:STDOUT:   %type: type = facet_type <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: <witness> = require_complete_type %ptr [symbolic]
+// CHECK:STDOUT:   %require_complete.315: <witness> = 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: <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 function> = 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: <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 function> = 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 function> = specific_impl_function %impl.elem0.b68, @Destroy.WithSelf.Op(%Destroy.facet) [symbolic]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: imports {
 // CHECK:STDOUT:   %Core: <namespace> = 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: <witness> = require_complete_type %ptr.loc22_18.2 [symbolic = %require_complete (constants.%require_complete)]
+// CHECK:STDOUT:   %require_complete: <witness> = 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: <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 function> = 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: <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 function> = 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 function> = 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 function> = 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> = bound_method %x.var, %impl.elem0.loc22_3.1
-// CHECK:STDOUT:     %specific_impl_fn.loc22_3.1: <specific function> = 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 function> = 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> = 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:

+ 1 - 0
toolchain/check/testdata/interface/fail_member_lookup.carbon

@@ -154,6 +154,7 @@ fn G(U:! Different) -> U.(Interface.T);
 // CHECK:STDOUT:     %v.var_patt: <error> = var_pattern %v.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %v.var: ref <error> = var %v.var_patt [concrete = <error>]
+// CHECK:STDOUT:   assign %v.var, <error>
 // CHECK:STDOUT:   %.1: <error> = splice_block <error> [concrete = <error>] {
 // 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]

+ 30 - 2
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: <witness> = 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> = 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> = 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> = 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> = 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)]

+ 28 - 3
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: <witness> = 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> = 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> = 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> = 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) {}

+ 17 - 1
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: <witness> = 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:   <elided>
+// 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: <namespace> = 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:   }

+ 34 - 2
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: <witness> = 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:     <elided>
 // 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:   <elided>
+// 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: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
 // CHECK:STDOUT:     %N.ref.loc10: <namespace> = 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: <witness> = 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:     <elided>
 // 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:   <elided>
+// 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: <namespace> = 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:   }

+ 64 - 18
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: <witness> = 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: <witness> = 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: <witness> = 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: <witness> = 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: <witness> = 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:   <elided>
+// 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: <namespace> = 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> = 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: <witness> = 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: <witness> = 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: <witness> = 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:   <elided>
+// 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: <namespace> = 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> = bound_method %int_0, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound]
@@ -347,5 +393,5 @@ fn F() {
 // CHECK:STDOUT:   <elided>
 // 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:

+ 79 - 19
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: <witness> = 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: <witness> = 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:   <elided>
+// 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: <namespace> = 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:   <elided>
+// 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: <namespace> = 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: <namespace> = 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:   <elided>
+// 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: <namespace> = 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: <witness> = 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: <witness> = 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:   <elided>
+// 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: <namespace> = 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:   <elided>
+// 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: <namespace> = 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: <namespace> = 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: <namespace> = 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]

+ 34 - 2
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: <witness> = 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:     <elided>
 // 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:   <elided>
+// 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: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
 // CHECK:STDOUT:     %N.ref.loc10: <namespace> = 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: <witness> = 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:     <elided>
 // 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:   <elided>
+// 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: <namespace> = 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:   }

+ 34 - 2
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: <witness> = 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:     <elided>
 // 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:   <elided>
+// 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: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
 // CHECK:STDOUT:     %N.ref.loc10: <namespace> = 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: <witness> = 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:     <elided>
 // 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:   <elided>
+// 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: <namespace> = 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:   }

+ 1 - 0
toolchain/check/testdata/interop/cpp/import.carbon

@@ -165,6 +165,7 @@ fn F() {
 // CHECK:STDOUT:     %x.var_patt: <error> = var_pattern %x.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %x.var: ref <error> = var %x.var_patt [concrete = <error>]
+// CHECK:STDOUT:   assign %x.var, <error>
 // CHECK:STDOUT:   %MyStructAlias.ref: type = name_ref MyStructAlias, imports.%Main.MyStructAlias [concrete = <error>]
 // CHECK:STDOUT:   %x: ref <error> = ref_binding x, <error> [concrete = <error>]
 // CHECK:STDOUT:   %x.ref: ref <error> = name_ref x, %x [concrete = <error>]

+ 81 - 3
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: <witness> = 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:   <elided>
+// 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:   <elided>
+// 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: <witness> = 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: <witness> = 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: <witness> = 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: <witness> = 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:   <elided>
+// 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:   <elided>
+// 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:   <elided>
+// 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:   <elided>
+// 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:   <elided>
+// CHECK:STDOUT: }
+// CHECK:STDOUT:

+ 27 - 8
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:   <elided>
+// 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:   <elided>
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 33 - 3
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: <witness> = 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:   <elided>
+// 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:   <elided>
+// 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 <error> = ref_binding x, <error> [concrete = <error>]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
+// CHECK:STDOUT: fn @__global_init() {
+// CHECK:STDOUT: !entry:
+// CHECK:STDOUT:   assign file.%x.var, <error>
+// CHECK:STDOUT:   <elided>
+// CHECK:STDOUT: }
+// CHECK:STDOUT:

+ 51 - 3
toolchain/check/testdata/interop/cpp/template/type_param.carbon

@@ -68,23 +68,58 @@ 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:   %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: <witness> = 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:   <elided>
+// 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:   <elided>
+// 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: <witness> = 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 +131,16 @@ 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_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:   <elided>
+// 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:   <elided>
+// CHECK:STDOUT: }
+// CHECK:STDOUT:

+ 1 - 0
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, <error>
 // CHECK:STDOUT:   %a.ref: ref <error> = name_ref a, file.%a [concrete = <error>]
 // CHECK:STDOUT:   %.loc13: ref <error> = deref <error> [concrete = <error>]
 // CHECK:STDOUT:   assign file.%b.var, <error>

+ 4 - 4
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: () = ();
 }

+ 22 - 1
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: <witness> = 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: <witness> = 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> = 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> = 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> = 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: <namespace> = name_ref Other, imports.%Other [concrete = imports.%Other]
 // CHECK:STDOUT:     %NS1.ref: <namespace> = name_ref NS1, imports.%NS1.f3d [concrete = imports.%NS1.f3d]
 // CHECK:STDOUT:     %A.ref: type = name_ref A, imports.%Other.A [concrete = constants.%A]

+ 4 - 0
toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon

@@ -97,6 +97,7 @@ fn KnownValueButNonConstantCondition(x: bool) {
 // CHECK:STDOUT:     %a.var_patt: <error> = var_pattern %a.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %a.var: ref <error> = var %a.var_patt [concrete = <error>]
+// CHECK:STDOUT:   assign %a.var, <error>
 // CHECK:STDOUT:   br !.loc9_20
 // CHECK:STDOUT:
 // CHECK:STDOUT: !.loc9_20:
@@ -132,6 +133,7 @@ fn KnownValueButNonConstantCondition(x: bool) {
 // CHECK:STDOUT:     %b.var_patt: <error> = var_pattern %b.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %b.var: ref <error> = var %b.var_patt [concrete = <error>]
+// CHECK:STDOUT:   assign %b.var, <error>
 // CHECK:STDOUT:   br !.loc14_20
 // CHECK:STDOUT:
 // CHECK:STDOUT: !.loc14_20:
@@ -215,6 +217,7 @@ fn KnownValueButNonConstantCondition(x: bool) {
 // CHECK:STDOUT:     %c.var_patt: <error> = var_pattern %c.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %c.var: ref <error> = var %c.var_patt [concrete = <error>]
+// CHECK:STDOUT:   assign %c.var, <error>
 // CHECK:STDOUT:   br !.loc11_20
 // CHECK:STDOUT:
 // CHECK:STDOUT: !.loc11_20:
@@ -250,6 +253,7 @@ fn KnownValueButNonConstantCondition(x: bool) {
 // CHECK:STDOUT:     %d.var_patt: <error> = var_pattern %d.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %d.var: ref <error> = var %d.var_patt [concrete = <error>]
+// CHECK:STDOUT:   assign %d.var, <error>
 // CHECK:STDOUT:   br !.loc16_20
 // CHECK:STDOUT:
 // CHECK:STDOUT: !.loc16_20:

+ 20 - 0
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: <witness> = 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> = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5 [concrete]
 // CHECK:STDOUT:   %bound_method.fa7: <bound method> = 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: <witness> = 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> = 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> = bound_method %int_10.64f, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5 [concrete]
 // CHECK:STDOUT:   %bound_method.409: <bound method> = 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> = 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]

+ 25 - 0
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: <witness> = 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> = 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> = 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> = 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 {

+ 9 - 0
toolchain/check/testdata/packages/fail_import_type_error.carbon

@@ -106,6 +106,15 @@ var d: i32 = d_ref;
 // CHECK:STDOUT:   %d_ref: ref <error> = ref_binding d_ref, <error> [concrete = <error>]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
+// CHECK:STDOUT: fn @__global_init() {
+// CHECK:STDOUT: !entry:
+// CHECK:STDOUT:   assign file.%a_ref.var, <error>
+// CHECK:STDOUT:   assign file.%b_ref.var, <error>
+// CHECK:STDOUT:   assign file.%c_ref.var, <error>
+// CHECK:STDOUT:   assign file.%d_ref.var, <error>
+// CHECK:STDOUT:   return
+// CHECK:STDOUT: }
+// CHECK:STDOUT:
 // CHECK:STDOUT: --- implicit.impl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: constants {

+ 12 - 0
toolchain/check/testdata/packages/missing_prelude.carbon

@@ -139,6 +139,12 @@ let n: type = i32;
 // CHECK:STDOUT:   %n: ref <error> = ref_binding n, <error> [concrete = <error>]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
+// CHECK:STDOUT: fn @__global_init() {
+// CHECK:STDOUT: !entry:
+// CHECK:STDOUT:   assign file.%n.var, <error>
+// 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 <error> = ref_binding n, <error> [concrete = <error>]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
+// CHECK:STDOUT: fn @__global_init() {
+// CHECK:STDOUT: !entry:
+// CHECK:STDOUT:   assign file.%n.var, <error>
+// CHECK:STDOUT:   return
+// CHECK:STDOUT: }
+// CHECK:STDOUT:
 // CHECK:STDOUT: --- prelude_fake_int.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: constants {

+ 3 - 2
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:   <elided>
 // CHECK:STDOUT:   %t.ref: ref %tuple.type = name_ref t, file.%t [concrete = file.%t.var]
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }

+ 7 - 0
toolchain/check/testdata/pointer/fail_deref_type.carbon

@@ -74,3 +74,10 @@ var p2: i32->foo;
 // CHECK:STDOUT:   %p2: ref <error> = ref_binding p2, <error> [concrete = <error>]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
+// CHECK:STDOUT: fn @__global_init() {
+// CHECK:STDOUT: !entry:
+// CHECK:STDOUT:   assign file.%p.var, <error>
+// CHECK:STDOUT:   assign file.%p2.var, <error>
+// CHECK:STDOUT:   return
+// CHECK:STDOUT: }
+// CHECK:STDOUT:

+ 150 - 0
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: <witness> = 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: <witness> = 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: <witness> = 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: <witness> = 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:   <elided>
+// 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:   <elided>
+// 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:   <elided>
+// 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:   <elided>
+// 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:   <elided>
+// 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: <witness> = 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: <witness> = 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: <witness> = 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: <witness> = 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:   <elided>
+// 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:   <elided>
+// 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:   <elided>
+// 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:   <elided>
+// 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:   <elided>
+// 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: <witness> = 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: <witness> = 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: <witness> = 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: <witness> = 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:   <elided>
+// 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:   <elided>
+// 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:   <elided>
+// 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:   <elided>
+// 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:   <elided>
+// CHECK:STDOUT: }
+// CHECK:STDOUT:
 // CHECK:STDOUT: --- char.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: constants {

+ 1 - 0
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, <error>
 // CHECK:STDOUT:   %s.ref: ref <error> = name_ref s, file.%s [concrete = <error>]
 // CHECK:STDOUT:   %a.ref: <error> = name_ref a, <error> [concrete = <error>]
 // CHECK:STDOUT:   %addr: <error> = addr_of %a.ref [concrete = <error>]

+ 6 - 0
toolchain/check/testdata/struct/fail_value_as_type.carbon

@@ -59,3 +59,9 @@ var x: {.a = 1};
 // CHECK:STDOUT:   %x: ref <error> = ref_binding x, <error> [concrete = <error>]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
+// CHECK:STDOUT: fn @__global_init() {
+// CHECK:STDOUT: !entry:
+// CHECK:STDOUT:   assign file.%x.var, <error>
+// CHECK:STDOUT:   return
+// CHECK:STDOUT: }
+// CHECK:STDOUT:

+ 22 - 10
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]

+ 0 - 70
toolchain/check/testdata/var/decl.carbon

@@ -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> = 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> = 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> = 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:

+ 0 - 74
toolchain/check/testdata/var/decl_with_init.carbon

@@ -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> = 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> = 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> = 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:

+ 50 - 4
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: <witness> = 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> = 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> = 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> = 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> = 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> = 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> = namespace [concrete] {
 // CHECK:STDOUT:     .v = %v
+// CHECK:STDOUT:     .Core = imports.%Core
 // CHECK:STDOUT:   }
+// CHECK:STDOUT:   %Core.import = import Core
 // CHECK:STDOUT:   %default.import = import <none>
 // 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> = 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> = 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 <none>
 // CHECK:STDOUT:   name_binding_decl {
 // CHECK:STDOUT:     %w.patt: %pattern_type = ref_binding_pattern w [concrete]

+ 1 - 73
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> = 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> = namespace [concrete] {
-// CHECK:STDOUT:     .Core = imports.%Core
-// CHECK:STDOUT:     .Main = %Main.decl
-// CHECK:STDOUT:     .y = %y
-// CHECK:STDOUT:     .x = <poisoned>
-// 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> = 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: <error> = name_ref x, <error> [concrete = <error>]
-// CHECK:STDOUT:   assign file.%y.var, <error>
-// CHECK:STDOUT:   return
-// CHECK:STDOUT: }
-// CHECK:STDOUT:

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä