Fix mangling collision for C++ class template specializations (#7269)

Carbon-side thunks (for example the `Copy`/`Destroy` witness thunks
generated for imported C++ types) are mangled by Carbon, and their names
incorporate a fingerprint of the involved types. The instruction
fingerprinter identifies a class only by its name and parent scope,
which is sufficient for Carbon classes but not for imported C++ classes:
different specializations of one class template (and other cases such as
types in anonymous namespaces) share a Carbon name and parent scope. As
a result, the thunks for two distinct specializations could mangle to
the same name, producing a single LLVM function with two definitions and
failing `verifyModule` during lowering.

When fingerprinting a class imported from C++, also include the Clang
mangled name of its type.

Test: toolchain/lower/testdata/interop/cpp/thunks.carbon gains a split
with two specializations of one class template, each requiring a thunk;
their thunks now get distinct mangled names instead of colliding.

Assisted-by: Claude Code

---------

Co-authored-by: Christopher Di Bella <cjdb.ns@gmail.com>
This commit is contained in:
Chandler Carruth
2026-05-30 08:13:00 +00:00
committed by GitHub
co-authored by Christopher Di Bella
parent 3ef128ac91
commit 8a59f2a76b
64 changed files with 4762 additions and 4330 deletions
@@ -603,7 +603,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.dbb: type = ptr_type %C [concrete]
// CHECK:STDOUT: %ptr.3a8: 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: }
@@ -629,7 +629,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %c.ref: %C = name_ref c, %c
// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref
// CHECK:STDOUT: %addr: %ptr.dbb = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.3a8 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -678,7 +678,7 @@ fn F() {
// CHECK:STDOUT: %make.cpp_overload_set.type: type = cpp_overload_set_type @make.cpp_overload_set [concrete]
// CHECK:STDOUT: %make.cpp_overload_set.value: %make.cpp_overload_set.type = cpp_overload_set_value @make.cpp_overload_set [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %ptr.dbb: type = ptr_type %C [concrete]
// CHECK:STDOUT: %ptr.3a8: type = ptr_type %C [concrete]
// CHECK:STDOUT: %make__carbon_thunk.type: type = fn_type @make__carbon_thunk [concrete]
// CHECK:STDOUT: %make__carbon_thunk: %make__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete]
@@ -712,11 +712,11 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref.loc8_11: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %make.ref: %make.cpp_overload_set.type = name_ref make, imports.%make.cpp_overload_set.value [concrete = constants.%make.cpp_overload_set.value]
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %addr.loc8_20: %ptr.dbb = addr_of %_.var
// CHECK:STDOUT: %addr.loc8_20: %ptr.3a8 = addr_of %_.var
// CHECK:STDOUT: %make__carbon_thunk.call: init %empty_tuple.type = call imports.%make__carbon_thunk.decl(%addr.loc8_20)
// CHECK:STDOUT: %.loc8: init %C to %_.var = mark_in_place_init %make__carbon_thunk.call
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %addr.loc8_21: %ptr.dbb = addr_of %_.var
// CHECK:STDOUT: %addr.loc8_21: %ptr.3a8 = addr_of %_.var
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_21)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -728,7 +728,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.dbb: type = ptr_type %C [concrete]
// CHECK:STDOUT: %ptr.3a8: 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: }
@@ -754,7 +754,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %c.ref: %C = name_ref c, %c
// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref
// CHECK:STDOUT: %addr: %ptr.dbb = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.3a8 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -766,7 +766,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.dbb: type = ptr_type %C [concrete]
// CHECK:STDOUT: %ptr.3a8: 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: }
@@ -792,7 +792,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %c.ref: %C = name_ref c, %c
// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref
// CHECK:STDOUT: %addr: %ptr.dbb = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.3a8 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -801,11 +801,11 @@ fn F() {
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %pattern_type.8ab: type = pattern_type %C [concrete]
// CHECK:STDOUT: %pattern_type.908: type = pattern_type %C [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.d15: type = ptr_type %C [concrete]
// CHECK:STDOUT: %ptr.58d: 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]
@@ -816,9 +816,9 @@ fn F() {
// CHECK:STDOUT: %C.Op.type: type = fn_type @C.Op [concrete]
// CHECK:STDOUT: %C.Op: %C.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.3d0: <witness> = custom_witness (%C.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.8ae: %Default.type = facet_value %C, (%custom_witness.3d0) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.a4e: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.8ae) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %C, (%DefaultOrUnformed.impl_witness.a4e) [concrete]
// CHECK:STDOUT: %Default.facet.a4a: %Default.type = facet_value %C, (%custom_witness.3d0) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.736: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.a4a) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %C, (%DefaultOrUnformed.impl_witness.736) [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: }
@@ -850,14 +850,14 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %c.ref: %C = name_ref c, %c
// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref
// CHECK:STDOUT: %addr: %ptr.d15 = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.58d = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: %pattern_type.8ab = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.8ab = var_pattern %x.patt [concrete]
// CHECK:STDOUT: %x.patt: %pattern_type.908 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.908 = var_pattern %x.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x.var: ref %C = var %x.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%C, (constants.%DefaultOrUnformed.impl_witness.a4e) [concrete = constants.%DefaultOrUnformed.facet]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%C, (constants.%DefaultOrUnformed.impl_witness.736) [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]
@@ -883,7 +883,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.4c9: type = ptr_type %C [concrete]
// CHECK:STDOUT: %ptr.b51: 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: }
@@ -918,7 +918,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %c.ref: %C = name_ref c, %c
// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref
// CHECK:STDOUT: %addr: %ptr.4c9 = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.b51 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -931,10 +931,10 @@ fn F() {
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.714: type = ptr_type %C [concrete]
// CHECK:STDOUT: %ptr.010: 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: %pattern_type.194: type = pattern_type %O [concrete]
// CHECK:STDOUT: %pattern_type.554: type = pattern_type %O [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
// CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete]
// CHECK:STDOUT: %T.4ca: %Default.type = symbolic_binding T, 0 [symbolic]
@@ -943,9 +943,9 @@ fn F() {
// CHECK:STDOUT: %O.Op.type: type = fn_type @O.Op [concrete]
// CHECK:STDOUT: %O.Op: %O.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.213: <witness> = custom_witness (%O.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.15f: %Default.type = facet_value %O, (%custom_witness.213) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.424: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.15f) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %O, (%DefaultOrUnformed.impl_witness.424) [concrete]
// CHECK:STDOUT: %Default.facet.478: %Default.type = facet_value %O, (%custom_witness.213) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.1cc: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.478) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %O, (%DefaultOrUnformed.impl_witness.1cc) [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: }
@@ -973,14 +973,14 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %c.ref: %C = name_ref c, %c
// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref
// CHECK:STDOUT: %addr: %ptr.714 = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.010 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: %pattern_type.194 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.194 = var_pattern %x.patt [concrete]
// CHECK:STDOUT: %x.patt: %pattern_type.554 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.554 = var_pattern %x.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x.var: ref %O = var %x.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.424) [concrete = constants.%DefaultOrUnformed.facet]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.1cc) [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]
@@ -1009,7 +1009,7 @@ fn F() {
// CHECK:STDOUT: %C.bar: %C.bar.type = struct_value () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.dbb: type = ptr_type %C [concrete]
// CHECK:STDOUT: %ptr.3a8: 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: }
@@ -1041,7 +1041,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %c.ref: %C = name_ref c, %c
// CHECK:STDOUT: %.loc9: ref %C = value_as_ref %c.ref
// CHECK:STDOUT: %addr: %ptr.dbb = addr_of %.loc9
// CHECK:STDOUT: %addr: %ptr.3a8 = addr_of %.loc9
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -1053,7 +1053,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.dbb: type = ptr_type %C [concrete]
// CHECK:STDOUT: %ptr.3a8: 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: %C.bar.cpp_overload_set.type: type = cpp_overload_set_type @C.bar.cpp_overload_set [concrete]
@@ -1085,7 +1085,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %c.ref: %C = name_ref c, %c
// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref
// CHECK:STDOUT: %addr: %ptr.dbb = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.3a8 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: %Cpp.ref.loc9: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc9: type = name_ref C, imports.%C.decl [concrete = constants.%C]
@@ -1173,7 +1173,7 @@ fn F() {
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %ptr.dbb: type = ptr_type %C [concrete]
// CHECK:STDOUT: %ptr.3a8: 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: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete]
@@ -1198,7 +1198,7 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %.loc8_11.1: ref %C = temporary_storage
// CHECK:STDOUT: %addr: %ptr.dbb = addr_of %.loc8_11.1
// CHECK:STDOUT: %addr: %ptr.3a8 = addr_of %.loc8_11.1
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: %.loc8_11.2: init %C to %.loc8_11.1 = mark_in_place_init %foo__carbon_thunk.call
// CHECK:STDOUT: %.loc8_11.3: ref %C = temporary %.loc8_11.1, %.loc8_11.2
@@ -181,10 +181,10 @@ fn Call() {
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %X: type = class_type @X [concrete]
// CHECK:STDOUT: %X.val: %X = struct_value () [concrete]
// CHECK:STDOUT: %.0ed: ref %X = temporary invalid, %X.val [concrete]
// CHECK:STDOUT: %.4e8: ref %X = temporary invalid, %X.val [concrete]
// CHECK:STDOUT: %X.B.cpp_overload_set.type: type = cpp_overload_set_type @X.B.cpp_overload_set [concrete]
// CHECK:STDOUT: %X.B.cpp_overload_set.value: %X.B.cpp_overload_set.type = cpp_overload_set_value @X.B.cpp_overload_set [concrete]
// CHECK:STDOUT: %bound_method.599: <bound method> = bound_method %.0ed, %X.B.cpp_overload_set.value [concrete]
// CHECK:STDOUT: %bound_method.7cd: <bound method> = bound_method %.4e8, %X.B.cpp_overload_set.value [concrete]
// CHECK:STDOUT: %X.B.type: type = fn_type @X.B [concrete]
// CHECK:STDOUT: %X.B: %X.B.type = struct_value () [concrete]
// CHECK:STDOUT: %X.C.cpp_overload_set.type: type = cpp_overload_set_type @X.C.cpp_overload_set [concrete]
@@ -193,8 +193,8 @@ fn Call() {
// CHECK:STDOUT: %X.C: %X.C.type = struct_value () [concrete]
// CHECK:STDOUT: %X.D.cpp_overload_set.type: type = cpp_overload_set_type @X.D.cpp_overload_set [concrete]
// CHECK:STDOUT: %X.D.cpp_overload_set.value: %X.D.cpp_overload_set.type = cpp_overload_set_value @X.D.cpp_overload_set [concrete]
// CHECK:STDOUT: %bound_method.db4: <bound method> = bound_method %.0ed, %X.D.cpp_overload_set.value [concrete]
// CHECK:STDOUT: %ptr.62d: type = ptr_type %X [concrete]
// CHECK:STDOUT: %bound_method.954: <bound method> = bound_method %.4e8, %X.D.cpp_overload_set.value [concrete]
// CHECK:STDOUT: %ptr.d14: type = ptr_type %X [concrete]
// CHECK:STDOUT: %D__carbon_thunk.type: type = fn_type @D__carbon_thunk [concrete]
// CHECK:STDOUT: %D__carbon_thunk: %D__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %X.cpp_destructor.type: type = fn_type @X.cpp_destructor [concrete]
@@ -333,9 +333,9 @@ fn Call() {
// CHECK:STDOUT: %.loc10_5.2: ref %X = temporary_storage
// CHECK:STDOUT: %.loc10_5.3: init %X to %.loc10_5.2 = class_init () [concrete = constants.%X.val]
// CHECK:STDOUT: %.loc10_7.1: init %X = converted %.loc10_5.1, %.loc10_5.3 [concrete = constants.%X.val]
// CHECK:STDOUT: %.loc10_7.2: ref %X = temporary %.loc10_5.2, %.loc10_7.1 [concrete = constants.%.0ed]
// CHECK:STDOUT: %.loc10_7.2: ref %X = temporary %.loc10_5.2, %.loc10_7.1 [concrete = constants.%.4e8]
// CHECK:STDOUT: %B.ref: %X.B.cpp_overload_set.type = name_ref B, imports.%X.B.cpp_overload_set.value [concrete = constants.%X.B.cpp_overload_set.value]
// CHECK:STDOUT: %bound_method.loc10_16: <bound method> = bound_method %.loc10_7.2, %B.ref [concrete = constants.%bound_method.599]
// CHECK:STDOUT: %bound_method.loc10_16: <bound method> = bound_method %.loc10_7.2, %B.ref [concrete = constants.%bound_method.7cd]
// CHECK:STDOUT: %int_1.loc10: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
// CHECK:STDOUT: %int_2.loc10: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc]
// CHECK:STDOUT: %.loc10_7.3: %X = acquire_value %.loc10_7.2 [concrete = constants.%X.val]
@@ -380,9 +380,9 @@ fn Call() {
// CHECK:STDOUT: %.loc12_5.2: ref %X = temporary_storage
// CHECK:STDOUT: %.loc12_5.3: init %X to %.loc12_5.2 = class_init () [concrete = constants.%X.val]
// CHECK:STDOUT: %.loc12_7.1: init %X = converted %.loc12_5.1, %.loc12_5.3 [concrete = constants.%X.val]
// CHECK:STDOUT: %.loc12_7.2: ref %X = temporary %.loc12_5.2, %.loc12_7.1 [concrete = constants.%.0ed]
// CHECK:STDOUT: %.loc12_7.2: ref %X = temporary %.loc12_5.2, %.loc12_7.1 [concrete = constants.%.4e8]
// CHECK:STDOUT: %D.ref: %X.D.cpp_overload_set.type = name_ref D, imports.%X.D.cpp_overload_set.value [concrete = constants.%X.D.cpp_overload_set.value]
// CHECK:STDOUT: %bound_method.loc12_16: <bound method> = bound_method %.loc12_7.2, %D.ref [concrete = constants.%bound_method.db4]
// CHECK:STDOUT: %bound_method.loc12_16: <bound method> = bound_method %.loc12_7.2, %D.ref [concrete = constants.%bound_method.954]
// CHECK:STDOUT: %int_1.loc12: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
// CHECK:STDOUT: %int_2.loc12: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc]
// CHECK:STDOUT: %.loc12_7.3: %X = acquire_value %.loc12_7.2 [concrete = constants.%X.val]
@@ -401,7 +401,7 @@ fn Call() {
// CHECK:STDOUT: %.loc12_22.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc12_22 [concrete = constants.%int_2.4ff]
// CHECK:STDOUT: %.loc12_22.2: %i32 = converted %int_2.loc12, %.loc12_22.1 [concrete = constants.%int_2.4ff]
// CHECK:STDOUT: %.loc12_7.4: ref %X = value_as_ref %.loc12_7.3
// CHECK:STDOUT: %addr: %ptr.62d = addr_of %.loc12_7.4
// CHECK:STDOUT: %addr: %ptr.d14 = addr_of %.loc12_7.4
// CHECK:STDOUT: %D__carbon_thunk.call: init %empty_tuple.type = call imports.%D__carbon_thunk.decl(%addr, %.loc12_19.2, %.loc12_22.2)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %Op.ref.loc12: %X.cpp_destructor.type = name_ref Op, imports.%X.cpp_destructor.decl [concrete = constants.%X.cpp_destructor]
@@ -460,11 +460,11 @@ fn Call() {
// CHECK:STDOUT: %X: type = class_type @X [concrete]
// CHECK:STDOUT: %complete_type.357: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %X.val: %X = struct_value () [concrete]
// CHECK:STDOUT: %.0ed: ref %X = temporary invalid, %X.val [concrete]
// CHECK:STDOUT: %.4e8: ref %X = temporary invalid, %X.val [concrete]
// CHECK:STDOUT: %X.B.cpp_overload_set.type: type = cpp_overload_set_type @X.B.cpp_overload_set [concrete]
// CHECK:STDOUT: %X.B.cpp_overload_set.value: %X.B.cpp_overload_set.type = cpp_overload_set_value @X.B.cpp_overload_set [concrete]
// CHECK:STDOUT: %bound_method.599: <bound method> = bound_method %.0ed, %X.B.cpp_overload_set.value [concrete]
// CHECK:STDOUT: %pattern_type.b56: type = pattern_type %X [concrete]
// CHECK:STDOUT: %bound_method.7cd: <bound method> = bound_method %.4e8, %X.B.cpp_overload_set.value [concrete]
// CHECK:STDOUT: %pattern_type.bd3: type = pattern_type %X [concrete]
// CHECK:STDOUT: %B__carbon_thunk.type: type = fn_type @B__carbon_thunk [concrete]
// CHECK:STDOUT: %B__carbon_thunk: %B__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %X.C.cpp_overload_set.type: type = cpp_overload_set_type @X.C.cpp_overload_set [concrete]
@@ -473,9 +473,9 @@ fn Call() {
// CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %X.D.cpp_overload_set.type: type = cpp_overload_set_type @X.D.cpp_overload_set [concrete]
// CHECK:STDOUT: %X.D.cpp_overload_set.value: %X.D.cpp_overload_set.type = cpp_overload_set_value @X.D.cpp_overload_set [concrete]
// CHECK:STDOUT: %bound_method.db4: <bound method> = bound_method %.0ed, %X.D.cpp_overload_set.value [concrete]
// CHECK:STDOUT: %ptr.62d: type = ptr_type %X [concrete]
// CHECK:STDOUT: %pattern_type.9c5: type = pattern_type %ptr.62d [concrete]
// CHECK:STDOUT: %bound_method.954: <bound method> = bound_method %.4e8, %X.D.cpp_overload_set.value [concrete]
// CHECK:STDOUT: %ptr.d14: type = ptr_type %X [concrete]
// CHECK:STDOUT: %pattern_type.74f: type = pattern_type %ptr.d14 [concrete]
// CHECK:STDOUT: %D__carbon_thunk.type: type = fn_type @D__carbon_thunk [concrete]
// CHECK:STDOUT: %D__carbon_thunk: %D__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete]
@@ -485,7 +485,7 @@ fn Call() {
// CHECK:STDOUT: %X.cpp_destructor.type: type = fn_type @X.cpp_destructor [concrete]
// CHECK:STDOUT: %X.cpp_destructor: %X.cpp_destructor.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.cc4: <witness> = custom_witness (), @Destroy [concrete]
// CHECK:STDOUT: %Destroy.facet.19f: %Destroy.type = facet_value %X, (%custom_witness.cc4) [concrete]
// CHECK:STDOUT: %Destroy.facet.226: %Destroy.type = facet_value %X, (%custom_witness.cc4) [concrete]
// CHECK:STDOUT: %X.Op.type: type = fn_type @X.Op [concrete]
// CHECK:STDOUT: %X.Op: %X.Op.type = struct_value () [concrete]
// CHECK:STDOUT: }
@@ -592,8 +592,8 @@ fn Call() {
// CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {}
// CHECK:STDOUT: %X.B.cpp_overload_set.value: %X.B.cpp_overload_set.type = cpp_overload_set_value @X.B.cpp_overload_set [concrete = constants.%X.B.cpp_overload_set.value]
// CHECK:STDOUT: %B__carbon_thunk.decl: %B__carbon_thunk.type = fn_decl @B__carbon_thunk [concrete = constants.%B__carbon_thunk] {
// CHECK:STDOUT: %this.param_patt: %pattern_type.b56 = value_param_pattern [concrete]
// CHECK:STDOUT: %this.patt: %pattern_type.b56 = at_binding_pattern this, %this.param_patt [concrete]
// CHECK:STDOUT: %this.param_patt: %pattern_type.bd3 = value_param_pattern [concrete]
// CHECK:STDOUT: %this.patt: %pattern_type.bd3 = at_binding_pattern this, %this.param_patt [concrete]
// CHECK:STDOUT: %a.param_patt: %pattern_type.c6b = value_param_pattern [concrete]
// CHECK:STDOUT: %a.patt: %pattern_type.c6b = at_binding_pattern a, %a.param_patt [concrete]
// CHECK:STDOUT: } {
@@ -622,13 +622,13 @@ fn Call() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %X.D.cpp_overload_set.value: %X.D.cpp_overload_set.type = cpp_overload_set_value @X.D.cpp_overload_set [concrete = constants.%X.D.cpp_overload_set.value]
// CHECK:STDOUT: %D__carbon_thunk.decl: %D__carbon_thunk.type = fn_decl @D__carbon_thunk [concrete = constants.%D__carbon_thunk] {
// CHECK:STDOUT: %_.param_patt: %pattern_type.9c5 = value_param_pattern [concrete]
// CHECK:STDOUT: %_.patt: %pattern_type.9c5 = at_binding_pattern _, %_.param_patt [concrete]
// CHECK:STDOUT: %_.param_patt: %pattern_type.74f = value_param_pattern [concrete]
// CHECK:STDOUT: %_.patt: %pattern_type.74f = at_binding_pattern _, %_.param_patt [concrete]
// CHECK:STDOUT: %a.param_patt: %pattern_type.c6b = value_param_pattern [concrete]
// CHECK:STDOUT: %a.patt: %pattern_type.c6b = at_binding_pattern a, %a.param_patt [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %_.param: %ptr.62d = value_param call_param0
// CHECK:STDOUT: %_: %ptr.62d = value_binding _, %_.param
// CHECK:STDOUT: %_.param: %ptr.d14 = value_param call_param0
// CHECK:STDOUT: %_: %ptr.d14 = value_binding _, %_.param
// CHECK:STDOUT: %a.param: %i32 = value_param call_param1
// CHECK:STDOUT: %.1: type = splice_block %i32.2 [concrete = constants.%i32] {
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
@@ -640,8 +640,8 @@ fn Call() {
// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
// CHECK:STDOUT: %Destroy.WithSelf.Op.decl: %Destroy.WithSelf.Op.type.12b = fn_decl @Destroy.WithSelf.Op [symbolic = @Destroy.WithSelf.%Destroy.WithSelf.Op (constants.%Destroy.WithSelf.Op.73c)] {} {}
// CHECK:STDOUT: %X.cpp_destructor.decl: %X.cpp_destructor.type = fn_decl @X.cpp_destructor [concrete = constants.%X.cpp_destructor] {
// CHECK:STDOUT: %self.param_patt: %pattern_type.b56 = ref_param_pattern [concrete]
// CHECK:STDOUT: %self.patt: %pattern_type.b56 = at_binding_pattern self, %self.param_patt [concrete]
// CHECK:STDOUT: %self.param_patt: %pattern_type.bd3 = ref_param_pattern [concrete]
// CHECK:STDOUT: %self.patt: %pattern_type.bd3 = at_binding_pattern self, %self.param_patt [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: ref %X = ref_param call_param0
// CHECK:STDOUT: %self: ref %X = ref_binding self, %self.param
@@ -753,9 +753,9 @@ fn Call() {
// CHECK:STDOUT: %.loc11_5.2: ref %X = temporary_storage
// CHECK:STDOUT: %.loc11_5.3: init %X to %.loc11_5.2 = class_init () [concrete = constants.%X.val]
// CHECK:STDOUT: %.loc11_7.1: init %X = converted %.loc11_5.1, %.loc11_5.3 [concrete = constants.%X.val]
// CHECK:STDOUT: %.loc11_7.2: ref %X = temporary %.loc11_5.2, %.loc11_7.1 [concrete = constants.%.0ed]
// CHECK:STDOUT: %.loc11_7.2: ref %X = temporary %.loc11_5.2, %.loc11_7.1 [concrete = constants.%.4e8]
// CHECK:STDOUT: %B.ref: %X.B.cpp_overload_set.type = name_ref B, imports.%X.B.cpp_overload_set.value [concrete = constants.%X.B.cpp_overload_set.value]
// CHECK:STDOUT: %bound_method.loc11_16: <bound method> = bound_method %.loc11_7.2, %B.ref [concrete = constants.%bound_method.599]
// CHECK:STDOUT: %bound_method.loc11_16: <bound method> = bound_method %.loc11_7.2, %B.ref [concrete = constants.%bound_method.7cd]
// CHECK:STDOUT: %int_1.loc11: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
// CHECK:STDOUT: %.loc11_7.3: %X = acquire_value %.loc11_7.2 [concrete = constants.%X.val]
// CHECK:STDOUT: %impl.elem0.loc11: %.205 = impl_witness_access constants.%ImplicitAs.impl_witness.fb6, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e6b]
@@ -784,9 +784,9 @@ fn Call() {
// CHECK:STDOUT: %.loc13_5.2: ref %X = temporary_storage
// CHECK:STDOUT: %.loc13_5.3: init %X to %.loc13_5.2 = class_init () [concrete = constants.%X.val]
// CHECK:STDOUT: %.loc13_7.1: init %X = converted %.loc13_5.1, %.loc13_5.3 [concrete = constants.%X.val]
// CHECK:STDOUT: %.loc13_7.2: ref %X = temporary %.loc13_5.2, %.loc13_7.1 [concrete = constants.%.0ed]
// CHECK:STDOUT: %.loc13_7.2: ref %X = temporary %.loc13_5.2, %.loc13_7.1 [concrete = constants.%.4e8]
// CHECK:STDOUT: %D.ref: %X.D.cpp_overload_set.type = name_ref D, imports.%X.D.cpp_overload_set.value [concrete = constants.%X.D.cpp_overload_set.value]
// CHECK:STDOUT: %bound_method.loc13_16: <bound method> = bound_method %.loc13_7.2, %D.ref [concrete = constants.%bound_method.db4]
// CHECK:STDOUT: %bound_method.loc13_16: <bound method> = bound_method %.loc13_7.2, %D.ref [concrete = constants.%bound_method.954]
// CHECK:STDOUT: %int_1.loc13: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
// CHECK:STDOUT: %.loc13_7.3: %X = acquire_value %.loc13_7.2 [concrete = constants.%X.val]
// CHECK:STDOUT: %impl.elem0.loc13: %.205 = impl_witness_access constants.%ImplicitAs.impl_witness.fb6, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e6b]
@@ -797,11 +797,11 @@ fn Call() {
// CHECK:STDOUT: %.loc13_19.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc13 [concrete = constants.%int_1.d5e]
// CHECK:STDOUT: %.loc13_19.2: %i32 = converted %int_1.loc13, %.loc13_19.1 [concrete = constants.%int_1.d5e]
// CHECK:STDOUT: %.loc13_7.4: ref %X = value_as_ref %.loc13_7.3
// CHECK:STDOUT: %addr: %ptr.62d = addr_of %.loc13_7.4
// CHECK:STDOUT: %addr: %ptr.d14 = addr_of %.loc13_7.4
// CHECK:STDOUT: %D__carbon_thunk.call: init %empty_tuple.type = call imports.%D__carbon_thunk.decl(%addr, %.loc13_19.2)
// CHECK:STDOUT: %X.Op.decl: %X.Op.type = fn_decl @X.Op [concrete = constants.%X.Op] {
// CHECK:STDOUT: %self.param_patt: %pattern_type.b56 = ref_param_pattern [concrete]
// CHECK:STDOUT: %self.patt: %pattern_type.b56 = at_binding_pattern self, %self.param_patt [concrete]
// CHECK:STDOUT: %self.param_patt: %pattern_type.bd3 = ref_param_pattern [concrete]
// CHECK:STDOUT: %self.patt: %pattern_type.bd3 = at_binding_pattern self, %self.param_patt [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: ref %X = ref_param call_param0
// CHECK:STDOUT: %self: ref %X = ref_binding self, %self.param
@@ -833,11 +833,11 @@ fn Call() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @X.D(%self.param: %X, %a.param: %i32);
// CHECK:STDOUT:
// CHECK:STDOUT: fn @D__carbon_thunk(%_.param: %ptr.62d, %a.param: %i32);
// CHECK:STDOUT: fn @D__carbon_thunk(%_.param: %ptr.d14, %a.param: %i32);
// CHECK:STDOUT:
// CHECK:STDOUT: fn @X.cpp_destructor(%self.param: ref %X) = "no_op";
// CHECK:STDOUT:
// CHECK:STDOUT: fn @X.Op(%self.param: ref %X) [thunk imports.%X.cpp_destructor.decl for imports.%Destroy.WithSelf.Op.decl, @Destroy.WithSelf.Op(constants.%Destroy.facet.19f)] {
// CHECK:STDOUT: fn @X.Op(%self.param: ref %X) [thunk imports.%X.cpp_destructor.decl for imports.%Destroy.WithSelf.Op.decl, @Destroy.WithSelf.Op(constants.%Destroy.facet.226)] {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %Op.ref: %X.cpp_destructor.type = name_ref Op, imports.%X.cpp_destructor.decl [concrete = constants.%X.cpp_destructor]
// CHECK:STDOUT: %X.cpp_destructor.bound: <bound method> = bound_method %self.param, %Op.ref
@@ -857,15 +857,15 @@ fn Call() {
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %X: type = class_type @X [concrete]
// CHECK:STDOUT: %X.val: %X = struct_value () [concrete]
// CHECK:STDOUT: %.0ed: ref %X = temporary invalid, %X.val [concrete]
// CHECK:STDOUT: %.4e8: ref %X = temporary invalid, %X.val [concrete]
// CHECK:STDOUT: %X.B.cpp_overload_set.type: type = cpp_overload_set_type @X.B.cpp_overload_set [concrete]
// CHECK:STDOUT: %X.B.cpp_overload_set.value: %X.B.cpp_overload_set.type = cpp_overload_set_value @X.B.cpp_overload_set [concrete]
// CHECK:STDOUT: %bound_method.599: <bound method> = bound_method %.0ed, %X.B.cpp_overload_set.value [concrete]
// CHECK:STDOUT: %bound_method.7cd: <bound method> = bound_method %.4e8, %X.B.cpp_overload_set.value [concrete]
// CHECK:STDOUT: %X.C.cpp_overload_set.type: type = cpp_overload_set_type @X.C.cpp_overload_set [concrete]
// CHECK:STDOUT: %X.C.cpp_overload_set.value: %X.C.cpp_overload_set.type = cpp_overload_set_value @X.C.cpp_overload_set [concrete]
// CHECK:STDOUT: %X.D.cpp_overload_set.type: type = cpp_overload_set_type @X.D.cpp_overload_set [concrete]
// CHECK:STDOUT: %X.D.cpp_overload_set.value: %X.D.cpp_overload_set.type = cpp_overload_set_value @X.D.cpp_overload_set [concrete]
// CHECK:STDOUT: %bound_method.db4: <bound method> = bound_method %.0ed, %X.D.cpp_overload_set.value [concrete]
// CHECK:STDOUT: %bound_method.954: <bound method> = bound_method %.4e8, %X.D.cpp_overload_set.value [concrete]
// CHECK:STDOUT: %X.cpp_destructor.type: type = fn_type @X.cpp_destructor [concrete]
// CHECK:STDOUT: %X.cpp_destructor: %X.cpp_destructor.type = struct_value () [concrete]
// CHECK:STDOUT: }
@@ -908,9 +908,9 @@ fn Call() {
// CHECK:STDOUT: %.loc56_5.2: ref %X = temporary_storage
// CHECK:STDOUT: %.loc56_5.3: init %X to %.loc56_5.2 = class_init () [concrete = constants.%X.val]
// CHECK:STDOUT: %.loc56_7.1: init %X = converted %.loc56_5.1, %.loc56_5.3 [concrete = constants.%X.val]
// CHECK:STDOUT: %.loc56_7.2: ref %X = temporary %.loc56_5.2, %.loc56_7.1 [concrete = constants.%.0ed]
// CHECK:STDOUT: %.loc56_7.2: ref %X = temporary %.loc56_5.2, %.loc56_7.1 [concrete = constants.%.4e8]
// CHECK:STDOUT: %B.ref: %X.B.cpp_overload_set.type = name_ref B, imports.%X.B.cpp_overload_set.value [concrete = constants.%X.B.cpp_overload_set.value]
// CHECK:STDOUT: %bound_method.loc56: <bound method> = bound_method %.loc56_7.2, %B.ref [concrete = constants.%bound_method.599]
// CHECK:STDOUT: %bound_method.loc56: <bound method> = bound_method %.loc56_7.2, %B.ref [concrete = constants.%bound_method.7cd]
// CHECK:STDOUT: %Cpp.ref.loc66: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %X.ref.loc66: type = name_ref X, imports.%X.decl [concrete = constants.%X]
// CHECK:STDOUT: %C.ref: %X.C.cpp_overload_set.type = name_ref C, imports.%X.C.cpp_overload_set.value [concrete = constants.%X.C.cpp_overload_set.value]
@@ -920,9 +920,9 @@ fn Call() {
// CHECK:STDOUT: %.loc76_5.2: ref %X = temporary_storage
// CHECK:STDOUT: %.loc76_5.3: init %X to %.loc76_5.2 = class_init () [concrete = constants.%X.val]
// CHECK:STDOUT: %.loc76_7.1: init %X = converted %.loc76_5.1, %.loc76_5.3 [concrete = constants.%X.val]
// CHECK:STDOUT: %.loc76_7.2: ref %X = temporary %.loc76_5.2, %.loc76_7.1 [concrete = constants.%.0ed]
// CHECK:STDOUT: %.loc76_7.2: ref %X = temporary %.loc76_5.2, %.loc76_7.1 [concrete = constants.%.4e8]
// CHECK:STDOUT: %D.ref: %X.D.cpp_overload_set.type = name_ref D, imports.%X.D.cpp_overload_set.value [concrete = constants.%X.D.cpp_overload_set.value]
// CHECK:STDOUT: %bound_method.loc76: <bound method> = bound_method %.loc76_7.2, %D.ref [concrete = constants.%bound_method.db4]
// CHECK:STDOUT: %bound_method.loc76: <bound method> = bound_method %.loc76_7.2, %D.ref [concrete = constants.%bound_method.954]
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %Op.ref.loc76: %X.cpp_destructor.type = name_ref Op, imports.%X.cpp_destructor.decl [concrete = constants.%X.cpp_destructor]
// CHECK:STDOUT: %Op.ref.loc56: %X.cpp_destructor.type = name_ref Op, imports.%X.cpp_destructor.decl [concrete = constants.%X.cpp_destructor]
@@ -210,7 +210,7 @@ fn MyF(a: Cpp.X, b: Cpp.X) -> Cpp.X {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %X: type = class_type @X [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %ptr.62d: type = ptr_type %X [concrete]
// CHECK:STDOUT: %ptr.d14: type = ptr_type %X [concrete]
// CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete]
// CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: }
@@ -229,10 +229,10 @@ fn MyF(a: Cpp.X, b: Cpp.X) -> Cpp.X {
// CHECK:STDOUT: %b.ref: %X = name_ref b, %b
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %.loc11_10: ref %X = value_as_ref %a.ref
// CHECK:STDOUT: %addr.loc11_12.1: %ptr.62d = addr_of %.loc11_10
// CHECK:STDOUT: %addr.loc11_12.1: %ptr.d14 = addr_of %.loc11_10
// CHECK:STDOUT: %.loc11_14: ref %X = value_as_ref %b.ref
// CHECK:STDOUT: %addr.loc11_12.2: %ptr.62d = addr_of %.loc11_14
// CHECK:STDOUT: %addr.loc11_12.3: %ptr.62d = addr_of %.loc9_34.1
// CHECK:STDOUT: %addr.loc11_12.2: %ptr.d14 = addr_of %.loc11_14
// CHECK:STDOUT: %addr.loc11_12.3: %ptr.d14 = addr_of %.loc9_34.1
// CHECK:STDOUT: %operator_Plus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc11_12.1, %addr.loc11_12.2, %addr.loc11_12.3)
// CHECK:STDOUT: %.loc11_12: init %X to %.loc9_34.1 = mark_in_place_init %operator_Plus__carbon_thunk.call
// CHECK:STDOUT: return %.loc11_12 to %return.param
@@ -2401,13 +2401,13 @@ fn F() {
// CHECK:STDOUT: %PassNoFields.cpp_overload_set.type: type = cpp_overload_set_type @PassNoFields.cpp_overload_set [concrete]
// CHECK:STDOUT: %PassNoFields.cpp_overload_set.value: %PassNoFields.cpp_overload_set.type = cpp_overload_set_value @PassNoFields.cpp_overload_set [concrete]
// CHECK:STDOUT: %NoFields: type = class_type @NoFields [concrete]
// CHECK:STDOUT: %ptr.110: type = ptr_type %NoFields [concrete]
// CHECK:STDOUT: %pattern_type.c78: type = pattern_type %ptr.110 [concrete]
// CHECK:STDOUT: %ptr.e71: type = ptr_type %NoFields [concrete]
// CHECK:STDOUT: %pattern_type.730: type = pattern_type %ptr.e71 [concrete]
// CHECK:STDOUT: %PassNoFields__carbon_thunk.type: type = fn_type @PassNoFields__carbon_thunk [concrete]
// CHECK:STDOUT: %PassNoFields__carbon_thunk: %PassNoFields__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %NoFields.val: %NoFields = struct_value () [concrete]
// CHECK:STDOUT: %.adc: ref %NoFields = temporary invalid, %NoFields.val [concrete]
// CHECK:STDOUT: %.759: ref %NoFields = temporary invalid, %NoFields.val [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]
@@ -2425,11 +2425,11 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %PassNoFields.cpp_overload_set.value: %PassNoFields.cpp_overload_set.type = cpp_overload_set_value @PassNoFields.cpp_overload_set [concrete = constants.%PassNoFields.cpp_overload_set.value]
// CHECK:STDOUT: %PassNoFields__carbon_thunk.decl: %PassNoFields__carbon_thunk.type = fn_decl @PassNoFields__carbon_thunk [concrete = constants.%PassNoFields__carbon_thunk] {
// CHECK:STDOUT: %s.param_patt: %pattern_type.c78 = value_param_pattern [concrete]
// CHECK:STDOUT: %s.patt: %pattern_type.c78 = at_binding_pattern s, %s.param_patt [concrete]
// CHECK:STDOUT: %s.param_patt: %pattern_type.730 = value_param_pattern [concrete]
// CHECK:STDOUT: %s.patt: %pattern_type.730 = at_binding_pattern s, %s.param_patt [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %s.param: %ptr.110 = value_param call_param0
// CHECK:STDOUT: %s: %ptr.110 = value_binding s, %s.param
// CHECK:STDOUT: %s.param: %ptr.e71 = value_param call_param0
// CHECK:STDOUT: %s: %ptr.e71 = value_binding s, %s.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
// CHECK:STDOUT: }
@@ -2495,10 +2495,10 @@ fn F() {
// CHECK:STDOUT: %.loc9_21.2: ref %NoFields = temporary_storage
// CHECK:STDOUT: %.loc9_21.3: init %NoFields to %.loc9_21.2 = class_init () [concrete = constants.%NoFields.val]
// CHECK:STDOUT: %.loc9_21.4: init %NoFields = converted %.loc9_21.1, %.loc9_21.3 [concrete = constants.%NoFields.val]
// CHECK:STDOUT: %.loc9_21.5: ref %NoFields = temporary %.loc9_21.2, %.loc9_21.4 [concrete = constants.%.adc]
// CHECK:STDOUT: %.loc9_21.5: ref %NoFields = temporary %.loc9_21.2, %.loc9_21.4 [concrete = constants.%.759]
// CHECK:STDOUT: %.loc9_21.6: %NoFields = acquire_value %.loc9_21.5 [concrete = constants.%NoFields.val]
// CHECK:STDOUT: %.loc9_21.7: ref %NoFields = value_as_ref %.loc9_21.6
// CHECK:STDOUT: %addr.loc9: %ptr.110 = addr_of %.loc9_21.7
// CHECK:STDOUT: %addr.loc9: %ptr.e71 = addr_of %.loc9_21.7
// CHECK:STDOUT: %PassNoFields__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%PassNoFields__carbon_thunk.decl(%addr.loc9)
// CHECK:STDOUT: %Cpp.ref.loc11: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassNoFields.ref.loc11: %PassNoFields.cpp_overload_set.type = name_ref PassNoFields, imports.%PassNoFields.cpp_overload_set.value [concrete = constants.%PassNoFields.cpp_overload_set.value]
@@ -2506,10 +2506,10 @@ fn F() {
// CHECK:STDOUT: %.loc11_20.1: ref %NoFields = temporary_storage
// CHECK:STDOUT: %.loc11_20.2: init %NoFields to %.loc11_20.1 = class_init () [concrete = constants.%NoFields.val]
// CHECK:STDOUT: %.loc11_20.3: init %NoFields = converted %value.ref, %.loc11_20.2 [concrete = constants.%NoFields.val]
// CHECK:STDOUT: %.loc11_20.4: ref %NoFields = temporary %.loc11_20.1, %.loc11_20.3 [concrete = constants.%.adc]
// CHECK:STDOUT: %.loc11_20.4: ref %NoFields = temporary %.loc11_20.1, %.loc11_20.3 [concrete = constants.%.759]
// CHECK:STDOUT: %.loc11_20.5: %NoFields = acquire_value %.loc11_20.4 [concrete = constants.%NoFields.val]
// CHECK:STDOUT: %.loc11_20.6: ref %NoFields = value_as_ref %.loc11_20.5
// CHECK:STDOUT: %addr.loc11: %ptr.110 = addr_of %.loc11_20.6
// CHECK:STDOUT: %addr.loc11: %ptr.e71 = addr_of %.loc11_20.6
// CHECK:STDOUT: %PassNoFields__carbon_thunk.call.loc11: init %empty_tuple.type = call imports.%PassNoFields__carbon_thunk.decl(%addr.loc11)
// CHECK:STDOUT: %Cpp.ref.loc13: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassNoFields.ref.loc13: %PassNoFields.cpp_overload_set.type = name_ref PassNoFields, imports.%PassNoFields.cpp_overload_set.value [concrete = constants.%PassNoFields.cpp_overload_set.value]
@@ -2517,10 +2517,10 @@ fn F() {
// CHECK:STDOUT: %.loc13_20.1: ref %NoFields = temporary_storage
// CHECK:STDOUT: %.loc13_20.2: init %NoFields to %.loc13_20.1 = class_init () [concrete = constants.%NoFields.val]
// CHECK:STDOUT: %.loc13_20.3: init %NoFields = converted %reference.ref, %.loc13_20.2 [concrete = constants.%NoFields.val]
// CHECK:STDOUT: %.loc13_20.4: ref %NoFields = temporary %.loc13_20.1, %.loc13_20.3 [concrete = constants.%.adc]
// CHECK:STDOUT: %.loc13_20.4: ref %NoFields = temporary %.loc13_20.1, %.loc13_20.3 [concrete = constants.%.759]
// CHECK:STDOUT: %.loc13_20.5: %NoFields = acquire_value %.loc13_20.4 [concrete = constants.%NoFields.val]
// CHECK:STDOUT: %.loc13_20.6: ref %NoFields = value_as_ref %.loc13_20.5
// CHECK:STDOUT: %addr.loc13: %ptr.110 = addr_of %.loc13_20.6
// CHECK:STDOUT: %addr.loc13: %ptr.e71 = addr_of %.loc13_20.6
// CHECK:STDOUT: %PassNoFields__carbon_thunk.call.loc13: init %empty_tuple.type = call imports.%PassNoFields__carbon_thunk.decl(%addr.loc13)
// CHECK:STDOUT: %Cpp.ref.loc15: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassNoFields.ref.loc15: %PassNoFields.cpp_overload_set.type = name_ref PassNoFields, imports.%PassNoFields.cpp_overload_set.value [concrete = constants.%PassNoFields.cpp_overload_set.value]
@@ -2531,10 +2531,10 @@ fn F() {
// CHECK:STDOUT: %.loc15_30.3: ref %NoFields = temporary_storage
// CHECK:STDOUT: %.loc15_30.4: init %NoFields to %.loc15_30.3 = class_init () [concrete = constants.%NoFields.val]
// CHECK:STDOUT: %.loc15_30.5: init %NoFields = converted %MakeEmpty.call, %.loc15_30.4 [concrete = constants.%NoFields.val]
// CHECK:STDOUT: %.loc15_30.6: ref %NoFields = temporary %.loc15_30.3, %.loc15_30.5 [concrete = constants.%.adc]
// CHECK:STDOUT: %.loc15_30.6: ref %NoFields = temporary %.loc15_30.3, %.loc15_30.5 [concrete = constants.%.759]
// CHECK:STDOUT: %.loc15_30.7: %NoFields = acquire_value %.loc15_30.6 [concrete = constants.%NoFields.val]
// CHECK:STDOUT: %.loc15_30.8: ref %NoFields = value_as_ref %.loc15_30.7
// CHECK:STDOUT: %addr.loc15: %ptr.110 = addr_of %.loc15_30.8
// CHECK:STDOUT: %addr.loc15: %ptr.e71 = addr_of %.loc15_30.8
// CHECK:STDOUT: %PassNoFields__carbon_thunk.call.loc15: init %empty_tuple.type = call imports.%PassNoFields__carbon_thunk.decl(%addr.loc15)
// CHECK:STDOUT: %Destroy.Op.bound: <bound method> = bound_method %.loc15_30.2, constants.%Destroy.Op
// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc15_30.2)
@@ -2543,7 +2543,7 @@ fn F() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @PassNoFields(%s.param: %NoFields);
// CHECK:STDOUT:
// CHECK:STDOUT: fn @PassNoFields__carbon_thunk(%s.param: %ptr.110);
// CHECK:STDOUT: fn @PassNoFields__carbon_thunk(%s.param: %ptr.e71);
// CHECK:STDOUT:
// CHECK:STDOUT: fn @NoFields.cpp_destructor(%self.param: ref %NoFields) = "no_op";
// CHECK:STDOUT:
@@ -2571,12 +2571,12 @@ fn F() {
// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete]
// CHECK:STDOUT: %struct_type.a.b.c.90d: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral, .c: Core.IntLiteral} [concrete]
// CHECK:STDOUT: %struct.ec0: %struct_type.a.b.c.90d = struct_value (%int_1, %int_2, %int_3) [concrete]
// CHECK:STDOUT: %ThreeFields.541: type = class_type @ThreeFields.1 [concrete]
// CHECK:STDOUT: %ptr.494: type = ptr_type %ThreeFields.541 [concrete]
// CHECK:STDOUT: %pattern_type.d31: type = pattern_type %ptr.494 [concrete]
// CHECK:STDOUT: %ThreeFields.559: type = class_type @ThreeFields.1 [concrete]
// CHECK:STDOUT: %ptr.f54: type = ptr_type %ThreeFields.559 [concrete]
// CHECK:STDOUT: %pattern_type.905: type = pattern_type %ptr.f54 [concrete]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.type: type = fn_type @PassThreeFields__carbon_thunk [concrete]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk: %PassThreeFields__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %ThreeFields.elem: type = unbound_element_type %ThreeFields.541, %i32 [concrete]
// CHECK:STDOUT: %ThreeFields.elem: type = unbound_element_type %ThreeFields.559, %i32 [concrete]
// CHECK:STDOUT: %.16c: type = custom_layout_type {size=12, align=4, .a@0: %i32, .b@4: %i32, .c@8: %i32} [concrete]
// CHECK:STDOUT: %complete_type.143: <witness> = complete_type_witness %.16c [concrete]
// CHECK:STDOUT: %ImplicitAs.type.649: type = generic_interface_type @ImplicitAs [concrete]
@@ -2599,11 +2599,11 @@ fn F() {
// CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic]
// CHECK:STDOUT: %PassThreeFields.cpp_overload_set.value: %PassThreeFields.cpp_overload_set.type = cpp_overload_set_value @PassThreeFields.cpp_overload_set [concrete = constants.%PassThreeFields.cpp_overload_set.value]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.decl: %PassThreeFields__carbon_thunk.type = fn_decl @PassThreeFields__carbon_thunk [concrete = constants.%PassThreeFields__carbon_thunk] {
// CHECK:STDOUT: %t.param_patt: %pattern_type.d31 = value_param_pattern [concrete]
// CHECK:STDOUT: %t.patt: %pattern_type.d31 = at_binding_pattern t, %t.param_patt [concrete]
// CHECK:STDOUT: %t.param_patt: %pattern_type.905 = value_param_pattern [concrete]
// CHECK:STDOUT: %t.patt: %pattern_type.905 = at_binding_pattern t, %t.param_patt [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %t.param: %ptr.494 = value_param call_param0
// CHECK:STDOUT: %t: %ptr.494 = value_binding t, %t.param
// CHECK:STDOUT: %t.param: %ptr.f54 = value_param call_param0
// CHECK:STDOUT: %t: %ptr.f54 = value_binding t, %t.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.649 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic]
// CHECK:STDOUT: }
@@ -2687,28 +2687,28 @@ fn F() {
// CHECK:STDOUT: %int_2.loc20: Core.IntLiteral = int_value 2 [concrete = constants.%int_2]
// CHECK:STDOUT: %int_3.loc20: Core.IntLiteral = int_value 3 [concrete = constants.%int_3]
// CHECK:STDOUT: %.loc20_46.1: %struct_type.a.b.c.90d = struct_literal (%int_1.loc20, %int_2.loc20, %int_3.loc20) [concrete = constants.%struct.ec0]
// CHECK:STDOUT: %.loc20_46.2: %ThreeFields.541 = converted %.loc20_46.1, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc20: %ptr.494 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %.loc20_46.2: %ThreeFields.559 = converted %.loc20_46.1, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc20: %ptr.f54 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.call.loc20: init %empty_tuple.type = call imports.%PassThreeFields__carbon_thunk.decl(%addr.loc20)
// CHECK:STDOUT: %Cpp.ref.loc33: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassThreeFields.ref.loc33: %PassThreeFields.cpp_overload_set.type = name_ref PassThreeFields, imports.%PassThreeFields.cpp_overload_set.value [concrete = constants.%PassThreeFields.cpp_overload_set.value]
// CHECK:STDOUT: %value.ref: %struct_type.a.b.c.e24 = name_ref value, %value
// CHECK:STDOUT: %.loc33: %ThreeFields.541 = converted %value.ref, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc33: %ptr.494 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %.loc33: %ThreeFields.559 = converted %value.ref, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc33: %ptr.f54 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.call.loc33: init %empty_tuple.type = call imports.%PassThreeFields__carbon_thunk.decl(%addr.loc33)
// CHECK:STDOUT: %Cpp.ref.loc46: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassThreeFields.ref.loc46: %PassThreeFields.cpp_overload_set.type = name_ref PassThreeFields, imports.%PassThreeFields.cpp_overload_set.value [concrete = constants.%PassThreeFields.cpp_overload_set.value]
// CHECK:STDOUT: %reference.ref: ref %struct_type.a.b.c.e24 = name_ref reference, %reference
// CHECK:STDOUT: %.loc46: %ThreeFields.541 = converted %reference.ref, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc46: %ptr.494 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %.loc46: %ThreeFields.559 = converted %reference.ref, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc46: %ptr.f54 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.call.loc46: init %empty_tuple.type = call imports.%PassThreeFields__carbon_thunk.decl(%addr.loc46)
// CHECK:STDOUT: %Cpp.ref.loc59: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassThreeFields.ref.loc59: %PassThreeFields.cpp_overload_set.type = name_ref PassThreeFields, imports.%PassThreeFields.cpp_overload_set.value [concrete = constants.%PassThreeFields.cpp_overload_set.value]
// CHECK:STDOUT: %MakeThreeFields.ref: %MakeThreeFields.type = name_ref MakeThreeFields, file.%MakeThreeFields.decl [concrete = constants.%MakeThreeFields]
// CHECK:STDOUT: %.loc59_39.1: ref %struct_type.a.b.c.e24 = temporary_storage
// CHECK:STDOUT: %MakeThreeFields.call: init %struct_type.a.b.c.e24 to %.loc59_39.1 = call %MakeThreeFields.ref()
// CHECK:STDOUT: %.loc59_39.2: %ThreeFields.541 = converted %MakeThreeFields.call, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc59: %ptr.494 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %.loc59_39.2: %ThreeFields.559 = converted %MakeThreeFields.call, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc59: %ptr.f54 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.call.loc59: init %empty_tuple.type = call imports.%PassThreeFields__carbon_thunk.decl(%addr.loc59)
// CHECK:STDOUT: %Cpp.ref.loc72: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassThreeFields.ref.loc72: %PassThreeFields.cpp_overload_set.type = name_ref PassThreeFields, imports.%PassThreeFields.cpp_overload_set.value [concrete = constants.%PassThreeFields.cpp_overload_set.value]
@@ -2716,15 +2716,15 @@ fn F() {
// CHECK:STDOUT: %int_2.loc72: Core.IntLiteral = int_value 2 [concrete = constants.%int_2]
// CHECK:STDOUT: %int_3.loc72: Core.IntLiteral = int_value 3 [concrete = constants.%int_3]
// CHECK:STDOUT: %.loc72_46.1: %struct_type.b.c.a = struct_literal (%int_1.loc72, %int_2.loc72, %int_3.loc72) [concrete = constants.%struct.d34]
// CHECK:STDOUT: %.loc72_46.2: %ThreeFields.541 = converted %.loc72_46.1, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc72: %ptr.494 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %.loc72_46.2: %ThreeFields.559 = converted %.loc72_46.1, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc72: %ptr.f54 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.call.loc72: init %empty_tuple.type = call imports.%PassThreeFields__carbon_thunk.decl(%addr.loc72)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: fn @PassThreeFields(%t.param: %ThreeFields.541);
// CHECK:STDOUT: fn @PassThreeFields(%t.param: %ThreeFields.559);
// CHECK:STDOUT:
// CHECK:STDOUT: fn @PassThreeFields__carbon_thunk(%t.param: %ptr.494);
// CHECK:STDOUT: fn @PassThreeFields__carbon_thunk(%t.param: %ptr.f54);
// CHECK:STDOUT:
// CHECK:STDOUT: --- fail_struct_init_field_mismatch.carbon
// CHECK:STDOUT:
@@ -2846,8 +2846,8 @@ fn F() {
// CHECK:STDOUT: %PassNoFields.cpp_overload_set.type: type = cpp_overload_set_type @PassNoFields.cpp_overload_set [concrete]
// CHECK:STDOUT: %PassNoFields.cpp_overload_set.value: %PassNoFields.cpp_overload_set.type = cpp_overload_set_value @PassNoFields.cpp_overload_set [concrete]
// CHECK:STDOUT: %NoFields: type = class_type @NoFields [concrete]
// CHECK:STDOUT: %ptr.110: type = ptr_type %NoFields [concrete]
// CHECK:STDOUT: %pattern_type.c78: type = pattern_type %ptr.110 [concrete]
// CHECK:STDOUT: %ptr.e71: type = ptr_type %NoFields [concrete]
// CHECK:STDOUT: %pattern_type.730: type = pattern_type %ptr.e71 [concrete]
// CHECK:STDOUT: %PassNoFields__carbon_thunk.type: type = fn_type @PassNoFields__carbon_thunk [concrete]
// CHECK:STDOUT: %PassNoFields__carbon_thunk: %PassNoFields__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
@@ -2874,12 +2874,12 @@ fn F() {
// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete]
// CHECK:STDOUT: %tuple.type.37f: type = tuple_type (Core.IntLiteral, Core.IntLiteral, Core.IntLiteral) [concrete]
// CHECK:STDOUT: %tuple.2d5: %tuple.type.37f = tuple_value (%int_1, %int_2, %int_3) [concrete]
// CHECK:STDOUT: %ThreeFields.541: type = class_type @ThreeFields.1 [concrete]
// CHECK:STDOUT: %ptr.494: type = ptr_type %ThreeFields.541 [concrete]
// CHECK:STDOUT: %pattern_type.d31: type = pattern_type %ptr.494 [concrete]
// CHECK:STDOUT: %ThreeFields.559: type = class_type @ThreeFields.1 [concrete]
// CHECK:STDOUT: %ptr.f54: type = ptr_type %ThreeFields.559 [concrete]
// CHECK:STDOUT: %pattern_type.905: type = pattern_type %ptr.f54 [concrete]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.type: type = fn_type @PassThreeFields__carbon_thunk [concrete]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk: %PassThreeFields__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %ThreeFields.elem: type = unbound_element_type %ThreeFields.541, %i32 [concrete]
// CHECK:STDOUT: %ThreeFields.elem: type = unbound_element_type %ThreeFields.559, %i32 [concrete]
// CHECK:STDOUT: %.16c: type = custom_layout_type {size=12, align=4, .a@0: %i32, .b@4: %i32, .c@8: %i32} [concrete]
// CHECK:STDOUT: %complete_type.143: <witness> = complete_type_witness %.16c [concrete]
// CHECK:STDOUT: }
@@ -2898,21 +2898,21 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %PassNoFields.cpp_overload_set.value: %PassNoFields.cpp_overload_set.type = cpp_overload_set_value @PassNoFields.cpp_overload_set [concrete = constants.%PassNoFields.cpp_overload_set.value]
// CHECK:STDOUT: %PassNoFields__carbon_thunk.decl: %PassNoFields__carbon_thunk.type = fn_decl @PassNoFields__carbon_thunk [concrete = constants.%PassNoFields__carbon_thunk] {
// CHECK:STDOUT: %s.param_patt: %pattern_type.c78 = value_param_pattern [concrete]
// CHECK:STDOUT: %s.patt: %pattern_type.c78 = at_binding_pattern s, %s.param_patt [concrete]
// CHECK:STDOUT: %s.param_patt: %pattern_type.730 = value_param_pattern [concrete]
// CHECK:STDOUT: %s.patt: %pattern_type.730 = at_binding_pattern s, %s.param_patt [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %s.param: %ptr.110 = value_param call_param0
// CHECK:STDOUT: %s: %ptr.110 = value_binding s, %s.param
// CHECK:STDOUT: %s.param: %ptr.e71 = value_param call_param0
// CHECK:STDOUT: %s: %ptr.e71 = value_binding s, %s.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.649 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic]
// CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic]
// CHECK:STDOUT: %PassThreeFields.cpp_overload_set.value: %PassThreeFields.cpp_overload_set.type = cpp_overload_set_value @PassThreeFields.cpp_overload_set [concrete = constants.%PassThreeFields.cpp_overload_set.value]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.decl: %PassThreeFields__carbon_thunk.type = fn_decl @PassThreeFields__carbon_thunk [concrete = constants.%PassThreeFields__carbon_thunk] {
// CHECK:STDOUT: %t.param_patt: %pattern_type.d31 = value_param_pattern [concrete]
// CHECK:STDOUT: %t.patt: %pattern_type.d31 = at_binding_pattern t, %t.param_patt [concrete]
// CHECK:STDOUT: %t.param_patt: %pattern_type.905 = value_param_pattern [concrete]
// CHECK:STDOUT: %t.patt: %pattern_type.905 = at_binding_pattern t, %t.param_patt [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %t.param: %ptr.494 = value_param call_param0
// CHECK:STDOUT: %t: %ptr.494 = value_binding t, %t.param
// CHECK:STDOUT: %t.param: %ptr.f54 = value_param call_param0
// CHECK:STDOUT: %t: %ptr.f54 = value_binding t, %t.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -3036,33 +3036,33 @@ fn F() {
// CHECK:STDOUT: %PassNoFields.ref.loc23: %PassNoFields.cpp_overload_set.type = name_ref PassNoFields, imports.%PassNoFields.cpp_overload_set.value [concrete = constants.%PassNoFields.cpp_overload_set.value]
// CHECK:STDOUT: %.loc23_21.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple]
// CHECK:STDOUT: %.loc23_21.2: %NoFields = converted %.loc23_21.1, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc23: %ptr.110 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc23: %ptr.e71 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassNoFields__carbon_thunk.call.loc23: init %empty_tuple.type = call imports.%PassNoFields__carbon_thunk.decl(%addr.loc23)
// CHECK:STDOUT: %Cpp.ref.loc36: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassNoFields.ref.loc36: %PassNoFields.cpp_overload_set.type = name_ref PassNoFields, imports.%PassNoFields.cpp_overload_set.value [concrete = constants.%PassNoFields.cpp_overload_set.value]
// CHECK:STDOUT: %value.ref: %empty_tuple.type = name_ref value, %value
// CHECK:STDOUT: %.loc36: %NoFields = converted %value.ref, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc36: %ptr.110 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc36: %ptr.e71 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassNoFields__carbon_thunk.call.loc36: init %empty_tuple.type = call imports.%PassNoFields__carbon_thunk.decl(%addr.loc36)
// CHECK:STDOUT: %Cpp.ref.loc49: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassNoFields.ref.loc49: %PassNoFields.cpp_overload_set.type = name_ref PassNoFields, imports.%PassNoFields.cpp_overload_set.value [concrete = constants.%PassNoFields.cpp_overload_set.value]
// CHECK:STDOUT: %reference.ref: ref %empty_tuple.type = name_ref reference, %reference
// CHECK:STDOUT: %.loc49: %NoFields = converted %reference.ref, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc49: %ptr.110 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc49: %ptr.e71 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassNoFields__carbon_thunk.call.loc49: init %empty_tuple.type = call imports.%PassNoFields__carbon_thunk.decl(%addr.loc49)
// CHECK:STDOUT: %Cpp.ref.loc62: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassNoFields.ref.loc62: %PassNoFields.cpp_overload_set.type = name_ref PassNoFields, imports.%PassNoFields.cpp_overload_set.value [concrete = constants.%PassNoFields.cpp_overload_set.value]
// CHECK:STDOUT: %MakeEmpty.ref: %MakeEmpty.type = name_ref MakeEmpty, file.%MakeEmpty.decl [concrete = constants.%MakeEmpty]
// CHECK:STDOUT: %MakeEmpty.call: init %empty_tuple.type = call %MakeEmpty.ref()
// CHECK:STDOUT: %.loc62: %NoFields = converted %MakeEmpty.call, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc62: %ptr.110 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc62: %ptr.e71 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassNoFields__carbon_thunk.call.loc62: init %empty_tuple.type = call imports.%PassNoFields__carbon_thunk.decl(%addr.loc62)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: fn @PassNoFields(%s.param: %NoFields);
// CHECK:STDOUT:
// CHECK:STDOUT: fn @PassNoFields__carbon_thunk(%s.param: %ptr.110);
// CHECK:STDOUT: fn @PassNoFields__carbon_thunk(%s.param: %ptr.e71);
// CHECK:STDOUT:
// CHECK:STDOUT: fn @MakeThreeFields() -> out %return.param: %tuple.type.a64;
// CHECK:STDOUT:
@@ -3074,35 +3074,35 @@ fn F() {
// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2]
// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3]
// CHECK:STDOUT: %.loc79_31.1: %tuple.type.37f = tuple_literal (%int_1, %int_2, %int_3) [concrete = constants.%tuple.2d5]
// CHECK:STDOUT: %.loc79_31.2: %ThreeFields.541 = converted %.loc79_31.1, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc79: %ptr.494 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %.loc79_31.2: %ThreeFields.559 = converted %.loc79_31.1, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc79: %ptr.f54 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.call.loc79: init %empty_tuple.type = call imports.%PassThreeFields__carbon_thunk.decl(%addr.loc79)
// CHECK:STDOUT: %Cpp.ref.loc92: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassThreeFields.ref.loc92: %PassThreeFields.cpp_overload_set.type = name_ref PassThreeFields, imports.%PassThreeFields.cpp_overload_set.value [concrete = constants.%PassThreeFields.cpp_overload_set.value]
// CHECK:STDOUT: %value.ref: %tuple.type.a64 = name_ref value, %value
// CHECK:STDOUT: %.loc92: %ThreeFields.541 = converted %value.ref, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc92: %ptr.494 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %.loc92: %ThreeFields.559 = converted %value.ref, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc92: %ptr.f54 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.call.loc92: init %empty_tuple.type = call imports.%PassThreeFields__carbon_thunk.decl(%addr.loc92)
// CHECK:STDOUT: %Cpp.ref.loc105: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassThreeFields.ref.loc105: %PassThreeFields.cpp_overload_set.type = name_ref PassThreeFields, imports.%PassThreeFields.cpp_overload_set.value [concrete = constants.%PassThreeFields.cpp_overload_set.value]
// CHECK:STDOUT: %reference.ref: ref %tuple.type.a64 = name_ref reference, %reference
// CHECK:STDOUT: %.loc105: %ThreeFields.541 = converted %reference.ref, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc105: %ptr.494 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %.loc105: %ThreeFields.559 = converted %reference.ref, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc105: %ptr.f54 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.call.loc105: init %empty_tuple.type = call imports.%PassThreeFields__carbon_thunk.decl(%addr.loc105)
// CHECK:STDOUT: %Cpp.ref.loc118: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %PassThreeFields.ref.loc118: %PassThreeFields.cpp_overload_set.type = name_ref PassThreeFields, imports.%PassThreeFields.cpp_overload_set.value [concrete = constants.%PassThreeFields.cpp_overload_set.value]
// CHECK:STDOUT: %MakeThreeFields.ref: %MakeThreeFields.type = name_ref MakeThreeFields, file.%MakeThreeFields.decl [concrete = constants.%MakeThreeFields]
// CHECK:STDOUT: %.loc118_39.1: ref %tuple.type.a64 = temporary_storage
// CHECK:STDOUT: %MakeThreeFields.call: init %tuple.type.a64 to %.loc118_39.1 = call %MakeThreeFields.ref()
// CHECK:STDOUT: %.loc118_39.2: %ThreeFields.541 = converted %MakeThreeFields.call, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc118: %ptr.494 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %.loc118_39.2: %ThreeFields.559 = converted %MakeThreeFields.call, <error> [concrete = <error>]
// CHECK:STDOUT: %addr.loc118: %ptr.f54 = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %PassThreeFields__carbon_thunk.call.loc118: init %empty_tuple.type = call imports.%PassThreeFields__carbon_thunk.decl(%addr.loc118)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: fn @PassThreeFields(%t.param: %ThreeFields.541);
// CHECK:STDOUT: fn @PassThreeFields(%t.param: %ThreeFields.559);
// CHECK:STDOUT:
// CHECK:STDOUT: fn @PassThreeFields__carbon_thunk(%t.param: %ptr.494);
// CHECK:STDOUT: fn @PassThreeFields__carbon_thunk(%t.param: %ptr.f54);
// CHECK:STDOUT:
// CHECK:STDOUT: --- fail_int_from_struct.carbon
// CHECK:STDOUT:
@@ -3333,19 +3333,19 @@ fn F() {
// CHECK:STDOUT: %struct_type.a.n.988: type = struct_type {.a: %struct_type.x.y, .n: Core.IntLiteral} [concrete]
// CHECK:STDOUT: %struct.516: %struct_type.a.n.988 = struct_value (%struct.004, %int_3) [concrete]
// CHECK:STDOUT: %B: type = class_type @B [concrete]
// CHECK:STDOUT: %ptr.13d: type = ptr_type %B [concrete]
// CHECK:STDOUT: %pattern_type.dd8: type = pattern_type %ptr.13d [concrete]
// CHECK:STDOUT: %ptr.fab: type = ptr_type %B [concrete]
// CHECK:STDOUT: %pattern_type.857: type = pattern_type %ptr.fab [concrete]
// CHECK:STDOUT: %TakeB__carbon_thunk.type: type = fn_type @TakeB__carbon_thunk [concrete]
// CHECK:STDOUT: %TakeB__carbon_thunk: %TakeB__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %A: type = class_type @A [concrete]
// CHECK:STDOUT: %B.elem.802: type = unbound_element_type %B, %A [concrete]
// CHECK:STDOUT: %B.elem.8d0: type = unbound_element_type %B, %A [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]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %B.elem.12f: type = unbound_element_type %B, %i32 [concrete]
// CHECK:STDOUT: %.949: type = custom_layout_type {size=12, align=4, .a@0: %A, .n@8: %i32} [concrete]
// CHECK:STDOUT: %complete_type.02b: <witness> = complete_type_witness %.949 [concrete]
// CHECK:STDOUT: %B.elem.9b6: type = unbound_element_type %B, %i32 [concrete]
// CHECK:STDOUT: %.309: type = custom_layout_type {size=12, align=4, .a@0: %A, .n@8: %i32} [concrete]
// CHECK:STDOUT: %complete_type.f92: <witness> = complete_type_witness %.309 [concrete]
// CHECK:STDOUT: %A.elem: type = unbound_element_type %A, %i32 [concrete]
// CHECK:STDOUT: %.4d7: type = custom_layout_type {size=8, align=4, .x@0: %i32, .y@4: %i32} [concrete]
// CHECK:STDOUT: %complete_type.76b: <witness> = complete_type_witness %.4d7 [concrete]
@@ -3366,11 +3366,11 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %TakeB.cpp_overload_set.value: %TakeB.cpp_overload_set.type = cpp_overload_set_value @TakeB.cpp_overload_set [concrete = constants.%TakeB.cpp_overload_set.value]
// CHECK:STDOUT: %TakeB__carbon_thunk.decl: %TakeB__carbon_thunk.type = fn_decl @TakeB__carbon_thunk [concrete = constants.%TakeB__carbon_thunk] {
// CHECK:STDOUT: %_.param_patt: %pattern_type.dd8 = value_param_pattern [concrete]
// CHECK:STDOUT: %_.patt: %pattern_type.dd8 = at_binding_pattern _, %_.param_patt [concrete]
// CHECK:STDOUT: %_.param_patt: %pattern_type.857 = value_param_pattern [concrete]
// CHECK:STDOUT: %_.patt: %pattern_type.857 = at_binding_pattern _, %_.param_patt [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %_.param: %ptr.13d = value_param call_param0
// CHECK:STDOUT: %_: %ptr.13d = value_binding _, %_.param
// CHECK:STDOUT: %_.param: %ptr.fab = value_param call_param0
// CHECK:STDOUT: %_: %ptr.fab = value_binding _, %_.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic]
// CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.649 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic]
@@ -3390,13 +3390,13 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: class @B {
// CHECK:STDOUT: %.1: %B.elem.802 = field_decl a, element0 [concrete]
// CHECK:STDOUT: %.1: %B.elem.8d0 = field_decl a, element0 [concrete]
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
// CHECK:STDOUT: %i32.1: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
// CHECK:STDOUT: %i32.2: type = type_literal %i32.1 [concrete = constants.%i32]
// CHECK:STDOUT: %.2: %B.elem.12f = field_decl n, element1 [concrete]
// CHECK:STDOUT: %.3: type = custom_layout_type {size=12, align=4, .a@0: %A, .n@8: %i32} [concrete = constants.%.949]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %.3 [concrete = constants.%complete_type.02b]
// CHECK:STDOUT: %.2: %B.elem.9b6 = field_decl n, element1 [concrete]
// CHECK:STDOUT: %.3: type = custom_layout_type {size=12, align=4, .a@0: %A, .n@8: %i32} [concrete = constants.%.309]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %.3 [concrete = constants.%complete_type.f92]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
@@ -3430,14 +3430,14 @@ fn F() {
// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3]
// CHECK:STDOUT: %.loc18_43.1: %struct_type.a.n.988 = struct_literal (%.loc18_34, %int_3) [concrete = constants.%struct.516]
// CHECK:STDOUT: %.loc18_43.2: %B = converted %.loc18_43.1, <error> [concrete = <error>]
// CHECK:STDOUT: %addr: %ptr.13d = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %addr: %ptr.fab = addr_of <error> [concrete = <error>]
// CHECK:STDOUT: %TakeB__carbon_thunk.call: init %empty_tuple.type = call imports.%TakeB__carbon_thunk.decl(%addr)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: fn @TakeB(%_.param: %B);
// CHECK:STDOUT:
// CHECK:STDOUT: fn @TakeB__carbon_thunk(%_.param: %ptr.13d);
// CHECK:STDOUT: fn @TakeB__carbon_thunk(%_.param: %ptr.fab);
// CHECK:STDOUT:
// CHECK:STDOUT: --- fail_import_upsizing_rejected.carbon
// CHECK:STDOUT:
File diff suppressed because it is too large Load Diff
@@ -60,16 +60,16 @@ fn F() {
// CHECK:STDOUT: %int_42.bc5: %i32 = int_value 42 [concrete]
// CHECK:STDOUT: %S: type = class_type @S [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %pattern_type.c0c: type = pattern_type %S [concrete]
// CHECK:STDOUT: %pattern_type.b2d: type = pattern_type %S [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %S.val: %S = struct_value () [concrete]
// CHECK:STDOUT: %TakesConstS.cpp_overload_set.type: type = cpp_overload_set_type @TakesConstS.cpp_overload_set [concrete]
// CHECK:STDOUT: %TakesConstS.cpp_overload_set.value: %TakesConstS.cpp_overload_set.type = cpp_overload_set_value @TakesConstS.cpp_overload_set [concrete]
// CHECK:STDOUT: %const: type = const_type %S [concrete]
// CHECK:STDOUT: %ptr.8ef: type = ptr_type %const [concrete]
// CHECK:STDOUT: %ptr.26e: type = ptr_type %const [concrete]
// CHECK:STDOUT: %TakesConstS__carbon_thunk.type: type = fn_type @TakesConstS__carbon_thunk [concrete]
// CHECK:STDOUT: %TakesConstS__carbon_thunk: %TakesConstS__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %ptr.9e9: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.055: type = ptr_type %S [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: }
@@ -112,8 +112,8 @@ fn F() {
// CHECK:STDOUT: %.loc8_21.2: %i32 = converted %int_42, %.loc8_21.1 [concrete = constants.%int_42.bc5]
// CHECK:STDOUT: %TakesConstInt.call: init %empty_tuple.type = call imports.%TakesConstInt.decl(%.loc8_21.2)
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %s.patt: %pattern_type.c0c = ref_binding_pattern s [concrete]
// CHECK:STDOUT: %s.var_patt: %pattern_type.c0c = var_pattern %s.patt [concrete]
// CHECK:STDOUT: %s.patt: %pattern_type.b2d = ref_binding_pattern s [concrete]
// CHECK:STDOUT: %s.var_patt: %pattern_type.b2d = var_pattern %s.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %s.var: ref %S = var %s.var_patt
// CHECK:STDOUT: %.loc10_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct]
@@ -130,9 +130,9 @@ fn F() {
// CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s
// CHECK:STDOUT: %.loc11_19.1: %S = acquire_value %s.ref
// CHECK:STDOUT: %.loc11_19.2: ref %S = value_as_ref %.loc11_19.1
// CHECK:STDOUT: %addr: %ptr.9e9 = addr_of %.loc11_19.2
// CHECK:STDOUT: %.loc11_20.1: %ptr.8ef = as_compatible %addr
// CHECK:STDOUT: %.loc11_20.2: %ptr.8ef = converted %addr, %.loc11_20.1
// CHECK:STDOUT: %addr: %ptr.055 = addr_of %.loc11_19.2
// CHECK:STDOUT: %.loc11_20.1: %ptr.26e = as_compatible %addr
// CHECK:STDOUT: %.loc11_20.2: %ptr.26e = converted %addr, %.loc11_20.1
// CHECK:STDOUT: %TakesConstS__carbon_thunk.call: init %empty_tuple.type = call imports.%TakesConstS__carbon_thunk.decl(%.loc11_20.2)
// CHECK:STDOUT: %S.cpp_destructor.bound: <bound method> = bound_method %s.var, constants.%S.cpp_destructor
// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%s.var)
@@ -488,7 +488,7 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %S: type = class_type @S [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %pattern_type.c0c: type = pattern_type %S [concrete]
// CHECK:STDOUT: %pattern_type.b2d: type = pattern_type %S [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %S.val: %S = struct_value () [concrete]
// CHECK:STDOUT: %TakesLValue.cpp_overload_set.type: type = cpp_overload_set_type @TakesLValue.cpp_overload_set [concrete]
@@ -517,8 +517,8 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %s.patt: %pattern_type.c0c = ref_binding_pattern s [concrete]
// CHECK:STDOUT: %s.var_patt: %pattern_type.c0c = var_pattern %s.patt [concrete]
// CHECK:STDOUT: %s.patt: %pattern_type.b2d = ref_binding_pattern s [concrete]
// CHECK:STDOUT: %s.var_patt: %pattern_type.b2d = var_pattern %s.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %s.var: ref %S = var %s.var_patt
// CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct]
@@ -545,7 +545,7 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %S: type = class_type @S [concrete]
// CHECK:STDOUT: %pattern_type.c0c: type = pattern_type %S [concrete]
// CHECK:STDOUT: %pattern_type.b2d: type = pattern_type %S [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
// CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete]
// CHECK:STDOUT: %T.4ca: %Default.type = symbolic_binding T, 0 [symbolic]
@@ -554,20 +554,20 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %S.Op.type: type = fn_type @S.Op [concrete]
// CHECK:STDOUT: %S.Op: %S.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.2132a4.1: <witness> = custom_witness (%S.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.d49: %Default.type = facet_value %S, (%custom_witness.2132a4.1) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.a62: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.d49) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.0f7: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.a62) [concrete]
// CHECK:STDOUT: %Default.facet.f36: %Default.type = facet_value %S, (%custom_witness.2132a4.1) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.fc0: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.f36) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.1d7: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.fc0) [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.051: type = class_type @T [concrete]
// CHECK:STDOUT: %pattern_type.1a9: type = pattern_type %T.051 [concrete]
// CHECK:STDOUT: %T.3b5: type = class_type @T [concrete]
// CHECK:STDOUT: %pattern_type.471: type = pattern_type %T.3b5 [concrete]
// CHECK:STDOUT: %T.Op.type: type = fn_type @T.Op [concrete]
// CHECK:STDOUT: %T.Op: %T.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.2132a4.2: <witness> = custom_witness (%T.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.5bf: %Default.type = facet_value %T.051, (%custom_witness.2132a4.2) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6b5: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.5bf) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.ace: %DefaultOrUnformed.type = facet_value %T.051, (%DefaultOrUnformed.impl_witness.6b5) [concrete]
// CHECK:STDOUT: %Default.facet.80c: %Default.type = facet_value %T.3b5, (%custom_witness.2132a4.2) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.756: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.80c) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.5e6: %DefaultOrUnformed.type = facet_value %T.3b5, (%DefaultOrUnformed.impl_witness.756) [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]
@@ -585,18 +585,18 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %Core.import_ref.dfa: @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op.type (%T.as_type.as.DefaultOrUnformed.impl.Op.type.47c) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op (constants.%T.as_type.as.DefaultOrUnformed.impl.Op.25a)]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.b72 = impl_witness_table (%Core.import_ref.dfa), @T.as_type.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.051] {} {}
// CHECK:STDOUT: %T.decl: type = class_decl @T [concrete = constants.%T.3b5] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %v.patt: %pattern_type.c0c = ref_binding_pattern v [concrete]
// CHECK:STDOUT: %v.var_patt: %pattern_type.c0c = var_pattern %v.patt [concrete]
// CHECK:STDOUT: %v.patt: %pattern_type.b2d = ref_binding_pattern v [concrete]
// CHECK:STDOUT: %v.var_patt: %pattern_type.b2d = var_pattern %v.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %v.var: ref %S = var %v.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.a62) [concrete = constants.%DefaultOrUnformed.facet.0f7]
// CHECK:STDOUT: %.loc8_15.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.0f7]
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.fc0) [concrete = constants.%DefaultOrUnformed.facet.1d7]
// CHECK:STDOUT: %.loc8_15.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.1d7]
// 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>
@@ -609,7 +609,7 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: }
// CHECK:STDOUT: %v: ref %S = ref_binding v, %v.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %s.patt: %pattern_type.c0c = value_binding_pattern s [concrete]
// CHECK:STDOUT: %s.patt: %pattern_type.b2d = value_binding_pattern s [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %v.ref: ref %S = name_ref v, %v
// CHECK:STDOUT: %.loc9_13: type = splice_block %S.ref.loc9 [concrete = constants.%S] {
@@ -630,33 +630,33 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %.loc28_21.1: %const = as_compatible %s.ref.loc28
// CHECK:STDOUT: %.loc28_21.2: %const = converted %s.ref.loc28, %.loc28_21.1
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %t.patt: %pattern_type.1a9 = ref_binding_pattern t [concrete]
// CHECK:STDOUT: %t.var_patt: %pattern_type.1a9 = var_pattern %t.patt [concrete]
// CHECK:STDOUT: %t.patt: %pattern_type.471 = ref_binding_pattern t [concrete]
// CHECK:STDOUT: %t.var_patt: %pattern_type.471 = var_pattern %t.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %t.var: ref %T.051 = var %t.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc30: %DefaultOrUnformed.type = facet_value constants.%T.051, (constants.%DefaultOrUnformed.impl_witness.6b5) [concrete = constants.%DefaultOrUnformed.facet.ace]
// CHECK:STDOUT: %.loc30_15.1: %DefaultOrUnformed.type = converted constants.%T.051, %DefaultOrUnformed.facet.loc30 [concrete = constants.%DefaultOrUnformed.facet.ace]
// CHECK:STDOUT: %as_type.loc30: type = facet_access_type %.loc30_15.1 [concrete = constants.%T.051]
// CHECK:STDOUT: %.loc30_15.2: type = converted %.loc30_15.1, %as_type.loc30 [concrete = constants.%T.051]
// CHECK:STDOUT: %t.var: ref %T.3b5 = var %t.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc30: %DefaultOrUnformed.type = facet_value constants.%T.3b5, (constants.%DefaultOrUnformed.impl_witness.756) [concrete = constants.%DefaultOrUnformed.facet.5e6]
// CHECK:STDOUT: %.loc30_15.1: %DefaultOrUnformed.type = converted constants.%T.3b5, %DefaultOrUnformed.facet.loc30 [concrete = constants.%DefaultOrUnformed.facet.5e6]
// CHECK:STDOUT: %as_type.loc30: type = facet_access_type %.loc30_15.1 [concrete = constants.%T.3b5]
// CHECK:STDOUT: %.loc30_15.2: type = converted %.loc30_15.1, %as_type.loc30 [concrete = constants.%T.3b5]
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %.loc30_3: ref %T.051 = splice_block %t.var {}
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc30: init %T.051 to %.loc30_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.2()
// CHECK:STDOUT: %.loc30_3: ref %T.3b5 = splice_block %t.var {}
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc30: init %T.3b5 to %.loc30_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.2()
// CHECK:STDOUT: assign %t.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc30
// CHECK:STDOUT: %.loc30_13: type = splice_block %T.ref [concrete = constants.%T.051] {
// CHECK:STDOUT: %.loc30_13: type = splice_block %T.ref [concrete = constants.%T.3b5] {
// 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.051]
// CHECK:STDOUT: %T.ref: type = name_ref T, imports.%T.decl [concrete = constants.%T.3b5]
// CHECK:STDOUT: }
// CHECK:STDOUT: %t: ref %T.051 = ref_binding t, %t.var
// CHECK:STDOUT: %t: ref %T.3b5 = 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.051 = name_ref t, %t
// CHECK:STDOUT: %t.ref: ref %T.3b5 = name_ref t, %t
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %u.patt: %pattern_type.c0c = ref_binding_pattern u [concrete]
// CHECK:STDOUT: %u.var_patt: %pattern_type.c0c = var_pattern %u.patt [concrete]
// CHECK:STDOUT: %u.patt: %pattern_type.b2d = ref_binding_pattern u [concrete]
// CHECK:STDOUT: %u.var_patt: %pattern_type.b2d = var_pattern %u.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %u.var: ref %S = var %u.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc41: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.a62) [concrete = constants.%DefaultOrUnformed.facet.0f7]
// CHECK:STDOUT: %.loc41_15.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet.loc41 [concrete = constants.%DefaultOrUnformed.facet.0f7]
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc41: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.fc0) [concrete = constants.%DefaultOrUnformed.facet.1d7]
// CHECK:STDOUT: %.loc41_15.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet.loc41 [concrete = constants.%DefaultOrUnformed.facet.1d7]
// 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>
@@ -695,7 +695,7 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %S: type = class_type @S [concrete]
// CHECK:STDOUT: %S.val: %S = struct_value () [concrete]
// CHECK:STDOUT: %ptr.9e9: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.055: type = ptr_type %S [concrete]
// CHECK:STDOUT: %TakesRValue__carbon_thunk.type: type = fn_type @TakesRValue__carbon_thunk [concrete]
// CHECK:STDOUT: %TakesRValue__carbon_thunk: %TakesRValue__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: }
@@ -726,7 +726,7 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %.loc8_20.2: init %S to %_.var = class_init () [concrete = constants.%S.val]
// CHECK:STDOUT: %.loc8_22: init %S = converted %.loc8_20.1, %.loc8_20.2 [concrete = constants.%S.val]
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %addr: %ptr.9e9 = addr_of %_.var
// CHECK:STDOUT: %addr: %ptr.055 = addr_of %_.var
// CHECK:STDOUT: %TakesRValue__carbon_thunk.call: init %empty_tuple.type = call imports.%TakesRValue__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -737,7 +737,7 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %S: type = class_type @S [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %pattern_type.c0c: type = pattern_type %S [concrete]
// CHECK:STDOUT: %pattern_type.b2d: type = pattern_type %S [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
// CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete]
// CHECK:STDOUT: %T.4ca: %Default.type = symbolic_binding T, 0 [symbolic]
@@ -746,23 +746,23 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %S.Op.type: type = fn_type @S.Op [concrete]
// CHECK:STDOUT: %S.Op: %S.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.2132a4.1: <witness> = custom_witness (%S.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.d49: %Default.type = facet_value %S, (%custom_witness.2132a4.1) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.a62: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.d49) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.0f7: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.a62) [concrete]
// CHECK:STDOUT: %Default.facet.f36: %Default.type = facet_value %S, (%custom_witness.2132a4.1) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.fc0: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.f36) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.1d7: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.fc0) [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.051: type = class_type @T [concrete]
// CHECK:STDOUT: %pattern_type.1a9: type = pattern_type %T.051 [concrete]
// CHECK:STDOUT: %T.3b5: type = class_type @T [concrete]
// CHECK:STDOUT: %pattern_type.471: type = pattern_type %T.3b5 [concrete]
// CHECK:STDOUT: %T.Op.type: type = fn_type @T.Op [concrete]
// CHECK:STDOUT: %T.Op: %T.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.2132a4.2: <witness> = custom_witness (%T.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.5bf: %Default.type = facet_value %T.051, (%custom_witness.2132a4.2) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6b5: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.5bf) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.ace: %DefaultOrUnformed.type = facet_value %T.051, (%DefaultOrUnformed.impl_witness.6b5) [concrete]
// CHECK:STDOUT: %Default.facet.80c: %Default.type = facet_value %T.3b5, (%custom_witness.2132a4.2) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.756: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.80c) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.5e6: %DefaultOrUnformed.type = facet_value %T.3b5, (%DefaultOrUnformed.impl_witness.756) [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]
// CHECK:STDOUT: %empty_struct.d45: %const = struct_value () [concrete]
// CHECK:STDOUT: %empty_struct.418: %const = struct_value () [concrete]
// CHECK:STDOUT: %T.cpp_destructor.type: type = fn_type @T.cpp_destructor [concrete]
// CHECK:STDOUT: %T.cpp_destructor: %T.cpp_destructor.type = struct_value () [concrete]
// CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete]
@@ -780,18 +780,18 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %Core.import_ref.dfa: @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op.type (%T.as_type.as.DefaultOrUnformed.impl.Op.type.47c) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op (constants.%T.as_type.as.DefaultOrUnformed.impl.Op.25a)]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.b72 = impl_witness_table (%Core.import_ref.dfa), @T.as_type.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.051] {} {}
// CHECK:STDOUT: %T.decl: type = class_decl @T [concrete = constants.%T.3b5] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %s.patt: %pattern_type.c0c = ref_binding_pattern s [concrete]
// CHECK:STDOUT: %s.var_patt: %pattern_type.c0c = var_pattern %s.patt [concrete]
// CHECK:STDOUT: %s.patt: %pattern_type.b2d = ref_binding_pattern s [concrete]
// CHECK:STDOUT: %s.var_patt: %pattern_type.b2d = var_pattern %s.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %s.var: ref %S = var %s.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.a62) [concrete = constants.%DefaultOrUnformed.facet.0f7]
// CHECK:STDOUT: %.loc8_15.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.0f7]
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.fc0) [concrete = constants.%DefaultOrUnformed.facet.1d7]
// CHECK:STDOUT: %.loc8_15.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.1d7]
// 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>
@@ -807,26 +807,26 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %TakesRValue.ref.loc17: %TakesRValue.cpp_overload_set.type = name_ref TakesRValue, imports.%TakesRValue.cpp_overload_set.value [concrete = constants.%TakesRValue.cpp_overload_set.value]
// CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %t.patt: %pattern_type.1a9 = ref_binding_pattern t [concrete]
// CHECK:STDOUT: %t.var_patt: %pattern_type.1a9 = var_pattern %t.patt [concrete]
// CHECK:STDOUT: %t.patt: %pattern_type.471 = ref_binding_pattern t [concrete]
// CHECK:STDOUT: %t.var_patt: %pattern_type.471 = var_pattern %t.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %t.var: ref %T.051 = var %t.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc19: %DefaultOrUnformed.type = facet_value constants.%T.051, (constants.%DefaultOrUnformed.impl_witness.6b5) [concrete = constants.%DefaultOrUnformed.facet.ace]
// CHECK:STDOUT: %.loc19_15.1: %DefaultOrUnformed.type = converted constants.%T.051, %DefaultOrUnformed.facet.loc19 [concrete = constants.%DefaultOrUnformed.facet.ace]
// CHECK:STDOUT: %as_type.loc19: type = facet_access_type %.loc19_15.1 [concrete = constants.%T.051]
// CHECK:STDOUT: %.loc19_15.2: type = converted %.loc19_15.1, %as_type.loc19 [concrete = constants.%T.051]
// CHECK:STDOUT: %t.var: ref %T.3b5 = var %t.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc19: %DefaultOrUnformed.type = facet_value constants.%T.3b5, (constants.%DefaultOrUnformed.impl_witness.756) [concrete = constants.%DefaultOrUnformed.facet.5e6]
// CHECK:STDOUT: %.loc19_15.1: %DefaultOrUnformed.type = converted constants.%T.3b5, %DefaultOrUnformed.facet.loc19 [concrete = constants.%DefaultOrUnformed.facet.5e6]
// CHECK:STDOUT: %as_type.loc19: type = facet_access_type %.loc19_15.1 [concrete = constants.%T.3b5]
// CHECK:STDOUT: %.loc19_15.2: type = converted %.loc19_15.1, %as_type.loc19 [concrete = constants.%T.3b5]
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %.loc19_3: ref %T.051 = splice_block %t.var {}
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc19: init %T.051 to %.loc19_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.2()
// CHECK:STDOUT: %.loc19_3: ref %T.3b5 = splice_block %t.var {}
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc19: init %T.3b5 to %.loc19_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.2()
// CHECK:STDOUT: assign %t.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc19
// CHECK:STDOUT: %.loc19_13: type = splice_block %T.ref [concrete = constants.%T.051] {
// CHECK:STDOUT: %.loc19_13: type = splice_block %T.ref [concrete = constants.%T.3b5] {
// 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.051]
// CHECK:STDOUT: %T.ref: type = name_ref T, imports.%T.decl [concrete = constants.%T.3b5]
// CHECK:STDOUT: }
// CHECK:STDOUT: %t: ref %T.051 = ref_binding t, %t.var
// CHECK:STDOUT: %t: ref %T.3b5 = 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.051 = name_ref t, %t
// CHECK:STDOUT: %t.ref: ref %T.3b5 = 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]
@@ -838,8 +838,8 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %Cpp.ref.loc38_42: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %S.ref.loc38_45: type = name_ref S, imports.%S.decl [concrete = constants.%S]
// CHECK:STDOUT: %const: type = const_type %S.ref.loc38_45 [concrete = constants.%const]
// CHECK:STDOUT: %.loc38_33.1: init %const = as_compatible %.loc38_23 [concrete = constants.%empty_struct.d45]
// CHECK:STDOUT: %.loc38_33.2: init %const = converted %.loc38_23, %.loc38_33.1 [concrete = constants.%empty_struct.d45]
// CHECK:STDOUT: %.loc38_33.1: init %const = as_compatible %.loc38_23 [concrete = constants.%empty_struct.418]
// CHECK:STDOUT: %.loc38_33.2: init %const = converted %.loc38_23, %.loc38_33.1 [concrete = constants.%empty_struct.418]
// CHECK:STDOUT: %T.cpp_destructor.bound: <bound method> = bound_method %t.var, constants.%T.cpp_destructor
// CHECK:STDOUT: %T.cpp_destructor.call: init %empty_tuple.type = call %T.cpp_destructor.bound(%t.var)
// CHECK:STDOUT: %S.cpp_destructor.bound: <bound method> = bound_method %s.var, constants.%S.cpp_destructor
@@ -853,16 +853,16 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %S: type = class_type @S [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %pattern_type.c0c: type = pattern_type %S [concrete]
// CHECK:STDOUT: %pattern_type.b2d: type = pattern_type %S [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %S.val: %S = struct_value () [concrete]
// CHECK:STDOUT: %TakesConstLValue.cpp_overload_set.type: type = cpp_overload_set_type @TakesConstLValue.cpp_overload_set [concrete]
// CHECK:STDOUT: %TakesConstLValue.cpp_overload_set.value: %TakesConstLValue.cpp_overload_set.type = cpp_overload_set_value @TakesConstLValue.cpp_overload_set [concrete]
// CHECK:STDOUT: %const: type = const_type %S [concrete]
// CHECK:STDOUT: %ptr.8ef: type = ptr_type %const [concrete]
// CHECK:STDOUT: %ptr.26e: type = ptr_type %const [concrete]
// CHECK:STDOUT: %TakesConstLValue__carbon_thunk.type: type = fn_type @TakesConstLValue__carbon_thunk [concrete]
// CHECK:STDOUT: %TakesConstLValue__carbon_thunk: %TakesConstLValue__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %ptr.9e9: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.055: type = ptr_type %S [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: }
@@ -885,8 +885,8 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %s.patt: %pattern_type.c0c = ref_binding_pattern s [concrete]
// CHECK:STDOUT: %s.var_patt: %pattern_type.c0c = var_pattern %s.patt [concrete]
// CHECK:STDOUT: %s.patt: %pattern_type.b2d = ref_binding_pattern s [concrete]
// CHECK:STDOUT: %s.var_patt: %pattern_type.b2d = var_pattern %s.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %s.var: ref %S = var %s.var_patt
// CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct]
@@ -910,18 +910,18 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %.loc9_26.4: ref %S = converted %.loc9_26.2, %.loc9_26.3
// CHECK:STDOUT: %.loc9_26.5: %S = acquire_value %.loc9_26.4
// CHECK:STDOUT: %.loc9_26.6: ref %S = value_as_ref %.loc9_26.5
// CHECK:STDOUT: %addr.loc9: %ptr.9e9 = addr_of %.loc9_26.6
// CHECK:STDOUT: %.loc9_40.1: %ptr.8ef = as_compatible %addr.loc9
// CHECK:STDOUT: %.loc9_40.2: %ptr.8ef = converted %addr.loc9, %.loc9_40.1
// CHECK:STDOUT: %addr.loc9: %ptr.055 = addr_of %.loc9_26.6
// CHECK:STDOUT: %.loc9_40.1: %ptr.26e = as_compatible %addr.loc9
// CHECK:STDOUT: %.loc9_40.2: %ptr.26e = converted %addr.loc9, %.loc9_40.1
// CHECK:STDOUT: %TakesConstLValue__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%TakesConstLValue__carbon_thunk.decl(%.loc9_40.2)
// CHECK:STDOUT: %Cpp.ref.loc11: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %TakesConstLValue.ref.loc11: %TakesConstLValue.cpp_overload_set.type = name_ref TakesConstLValue, imports.%TakesConstLValue.cpp_overload_set.value [concrete = constants.%TakesConstLValue.cpp_overload_set.value]
// CHECK:STDOUT: %s.ref.loc11: ref %S = name_ref s, %s
// CHECK:STDOUT: %.loc11_24.1: %S = acquire_value %s.ref.loc11
// CHECK:STDOUT: %.loc11_24.2: ref %S = value_as_ref %.loc11_24.1
// CHECK:STDOUT: %addr.loc11: %ptr.9e9 = addr_of %.loc11_24.2
// CHECK:STDOUT: %.loc11_25.1: %ptr.8ef = as_compatible %addr.loc11
// CHECK:STDOUT: %.loc11_25.2: %ptr.8ef = converted %addr.loc11, %.loc11_25.1
// CHECK:STDOUT: %addr.loc11: %ptr.055 = addr_of %.loc11_24.2
// CHECK:STDOUT: %.loc11_25.1: %ptr.26e = as_compatible %addr.loc11
// CHECK:STDOUT: %.loc11_25.2: %ptr.26e = converted %addr.loc11, %.loc11_25.1
// CHECK:STDOUT: %TakesConstLValue__carbon_thunk.call.loc11: init %empty_tuple.type = call imports.%TakesConstLValue__carbon_thunk.decl(%.loc11_25.2)
// CHECK:STDOUT: %S.cpp_destructor.bound: <bound method> = bound_method %s.var, constants.%S.cpp_destructor
// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%s.var)
@@ -934,17 +934,17 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %S: type = class_type @S [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %pattern_type.c0c: type = pattern_type %S [concrete]
// CHECK:STDOUT: %pattern_type.b2d: type = pattern_type %S [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %S.val: %S = struct_value () [concrete]
// CHECK:STDOUT: %.585: ref %S = temporary invalid, %S.val [concrete]
// CHECK:STDOUT: %.f11: ref %S = temporary invalid, %S.val [concrete]
// CHECK:STDOUT: %TakesConstLValue.cpp_overload_set.type: type = cpp_overload_set_type @TakesConstLValue.cpp_overload_set [concrete]
// CHECK:STDOUT: %TakesConstLValue.cpp_overload_set.value: %TakesConstLValue.cpp_overload_set.type = cpp_overload_set_value @TakesConstLValue.cpp_overload_set [concrete]
// CHECK:STDOUT: %const: type = const_type %S [concrete]
// CHECK:STDOUT: %ptr.8ef: type = ptr_type %const [concrete]
// CHECK:STDOUT: %ptr.26e: type = ptr_type %const [concrete]
// CHECK:STDOUT: %TakesConstLValue__carbon_thunk.type: type = fn_type @TakesConstLValue__carbon_thunk [concrete]
// CHECK:STDOUT: %TakesConstLValue__carbon_thunk: %TakesConstLValue__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %ptr.9e9: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.055: type = ptr_type %S [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -965,7 +965,7 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %s.patt: %pattern_type.c0c = value_binding_pattern s [concrete]
// CHECK:STDOUT: %s.patt: %pattern_type.b2d = value_binding_pattern s [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct]
// CHECK:STDOUT: %.loc8_13: type = splice_block %S.ref.loc8 [concrete = constants.%S] {
@@ -975,16 +975,16 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %.loc8_19.2: ref %S = temporary_storage
// CHECK:STDOUT: %.loc8_19.3: init %S to %.loc8_19.2 = class_init () [concrete = constants.%S.val]
// CHECK:STDOUT: %.loc8_19.4: init %S = converted %.loc8_19.1, %.loc8_19.3 [concrete = constants.%S.val]
// CHECK:STDOUT: %.loc8_19.5: ref %S = temporary %.loc8_19.2, %.loc8_19.4 [concrete = constants.%.585]
// CHECK:STDOUT: %.loc8_19.5: ref %S = temporary %.loc8_19.2, %.loc8_19.4 [concrete = constants.%.f11]
// CHECK:STDOUT: %.loc8_19.6: %S = acquire_value %.loc8_19.5 [concrete = constants.%S.val]
// CHECK:STDOUT: %s: %S = value_binding s, %.loc8_19.6
// CHECK:STDOUT: %Cpp.ref.loc9: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %TakesConstLValue.ref.loc9: %TakesConstLValue.cpp_overload_set.type = name_ref TakesConstLValue, imports.%TakesConstLValue.cpp_overload_set.value [concrete = constants.%TakesConstLValue.cpp_overload_set.value]
// CHECK:STDOUT: %s.ref.loc9: %S = name_ref s, %s
// CHECK:STDOUT: %.loc9_24: ref %S = value_as_ref %s.ref.loc9
// CHECK:STDOUT: %addr.loc9: %ptr.9e9 = addr_of %.loc9_24
// CHECK:STDOUT: %.loc9_25.1: %ptr.8ef = as_compatible %addr.loc9
// CHECK:STDOUT: %.loc9_25.2: %ptr.8ef = converted %addr.loc9, %.loc9_25.1
// CHECK:STDOUT: %addr.loc9: %ptr.055 = addr_of %.loc9_24
// CHECK:STDOUT: %.loc9_25.1: %ptr.26e = as_compatible %addr.loc9
// CHECK:STDOUT: %.loc9_25.2: %ptr.26e = converted %addr.loc9, %.loc9_25.1
// CHECK:STDOUT: %TakesConstLValue__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%TakesConstLValue__carbon_thunk.decl(%.loc9_25.2)
// CHECK:STDOUT: %Cpp.ref.loc11_3: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %TakesConstLValue.ref.loc11: %TakesConstLValue.cpp_overload_set.type = name_ref TakesConstLValue, imports.%TakesConstLValue.cpp_overload_set.value [concrete = constants.%TakesConstLValue.cpp_overload_set.value]
@@ -997,9 +997,9 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %.loc11_26.3: %S = as_compatible %.loc11_26.2
// CHECK:STDOUT: %.loc11_26.4: %S = converted %.loc11_26.2, %.loc11_26.3
// CHECK:STDOUT: %.loc11_26.5: ref %S = value_as_ref %.loc11_26.4
// CHECK:STDOUT: %addr.loc11: %ptr.9e9 = addr_of %.loc11_26.5
// CHECK:STDOUT: %.loc11_40.1: %ptr.8ef = as_compatible %addr.loc11
// CHECK:STDOUT: %.loc11_40.2: %ptr.8ef = converted %addr.loc11, %.loc11_40.1
// CHECK:STDOUT: %addr.loc11: %ptr.055 = addr_of %.loc11_26.5
// CHECK:STDOUT: %.loc11_40.1: %ptr.26e = as_compatible %addr.loc11
// CHECK:STDOUT: %.loc11_40.2: %ptr.26e = converted %addr.loc11, %.loc11_40.1
// CHECK:STDOUT: %TakesConstLValue__carbon_thunk.call.loc11: init %empty_tuple.type = call imports.%TakesConstLValue__carbon_thunk.decl(%.loc11_40.2)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -1012,10 +1012,10 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %TakesConstRValue.cpp_overload_set.type: type = cpp_overload_set_type @TakesConstRValue.cpp_overload_set [concrete]
// CHECK:STDOUT: %TakesConstRValue.cpp_overload_set.value: %TakesConstRValue.cpp_overload_set.type = cpp_overload_set_value @TakesConstRValue.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.8ef: type = ptr_type %const [concrete]
// CHECK:STDOUT: %ptr.26e: type = ptr_type %const [concrete]
// CHECK:STDOUT: %TakesConstRValue__carbon_thunk.type: type = fn_type @TakesConstRValue__carbon_thunk [concrete]
// CHECK:STDOUT: %TakesConstRValue__carbon_thunk: %TakesConstRValue__carbon_thunk.type = struct_value () [concrete]
// CHECK:STDOUT: %ptr.9e9: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.055: type = ptr_type %S [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -1039,9 +1039,9 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %TakesConstRValue.ref.loc8: %TakesConstRValue.cpp_overload_set.type = name_ref TakesConstRValue, imports.%TakesConstRValue.cpp_overload_set.value [concrete = constants.%TakesConstRValue.cpp_overload_set.value]
// CHECK:STDOUT: %v.ref: %S = name_ref v, %v
// CHECK:STDOUT: %.loc8_24: ref %S = value_as_ref %v.ref
// CHECK:STDOUT: %addr.loc8: %ptr.9e9 = addr_of %.loc8_24
// CHECK:STDOUT: %.loc8_25.1: %ptr.8ef = as_compatible %addr.loc8
// CHECK:STDOUT: %.loc8_25.2: %ptr.8ef = converted %addr.loc8, %.loc8_25.1
// CHECK:STDOUT: %addr.loc8: %ptr.055 = addr_of %.loc8_24
// CHECK:STDOUT: %.loc8_25.1: %ptr.26e = as_compatible %addr.loc8
// CHECK:STDOUT: %.loc8_25.2: %ptr.26e = converted %addr.loc8, %.loc8_25.1
// CHECK:STDOUT: %TakesConstRValue__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%TakesConstRValue__carbon_thunk.decl(%.loc8_25.2)
// CHECK:STDOUT: %Cpp.ref.loc9: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %TakesConstRValue.ref.loc9: %TakesConstRValue.cpp_overload_set.type = name_ref TakesConstRValue, imports.%TakesConstRValue.cpp_overload_set.value [concrete = constants.%TakesConstRValue.cpp_overload_set.value]
@@ -1049,9 +1049,9 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %.loc9_24.1: %S = as_compatible %cv.ref
// CHECK:STDOUT: %.loc9_24.2: %S = converted %cv.ref, %.loc9_24.1
// CHECK:STDOUT: %.loc9_24.3: ref %S = value_as_ref %.loc9_24.2
// CHECK:STDOUT: %addr.loc9: %ptr.9e9 = addr_of %.loc9_24.3
// CHECK:STDOUT: %.loc9_26.1: %ptr.8ef = as_compatible %addr.loc9
// CHECK:STDOUT: %.loc9_26.2: %ptr.8ef = converted %addr.loc9, %.loc9_26.1
// CHECK:STDOUT: %addr.loc9: %ptr.055 = addr_of %.loc9_24.3
// CHECK:STDOUT: %.loc9_26.1: %ptr.26e = as_compatible %addr.loc9
// CHECK:STDOUT: %.loc9_26.2: %ptr.26e = converted %addr.loc9, %.loc9_26.1
// CHECK:STDOUT: %TakesConstRValue__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%TakesConstRValue__carbon_thunk.decl(%.loc9_26.2)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -1061,7 +1061,7 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %S: type = class_type @S [concrete]
// CHECK:STDOUT: %pattern_type.c0c: type = pattern_type %S [concrete]
// CHECK:STDOUT: %pattern_type.b2d: type = pattern_type %S [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
// CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete]
// CHECK:STDOUT: %T.4ca: %Default.type = symbolic_binding T, 0 [symbolic]
@@ -1070,19 +1070,19 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %S.Op.type: type = fn_type @S.Op [concrete]
// CHECK:STDOUT: %S.Op: %S.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.2132a4.1: <witness> = custom_witness (%S.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.d49: %Default.type = facet_value %S, (%custom_witness.2132a4.1) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.a62: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.d49) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.0f7: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.a62) [concrete]
// CHECK:STDOUT: %Default.facet.f36: %Default.type = facet_value %S, (%custom_witness.2132a4.1) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.fc0: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.f36) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.1d7: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.fc0) [concrete]
// CHECK:STDOUT: %TakesConstRValue.cpp_overload_set.type: type = cpp_overload_set_type @TakesConstRValue.cpp_overload_set [concrete]
// CHECK:STDOUT: %TakesConstRValue.cpp_overload_set.value: %TakesConstRValue.cpp_overload_set.type = cpp_overload_set_value @TakesConstRValue.cpp_overload_set [concrete]
// CHECK:STDOUT: %T.051: type = class_type @T [concrete]
// CHECK:STDOUT: %pattern_type.1a9: type = pattern_type %T.051 [concrete]
// CHECK:STDOUT: %T.3b5: type = class_type @T [concrete]
// CHECK:STDOUT: %pattern_type.471: type = pattern_type %T.3b5 [concrete]
// CHECK:STDOUT: %T.Op.type: type = fn_type @T.Op [concrete]
// CHECK:STDOUT: %T.Op: %T.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.2132a4.2: <witness> = custom_witness (%T.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.5bf: %Default.type = facet_value %T.051, (%custom_witness.2132a4.2) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6b5: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.5bf) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.ace: %DefaultOrUnformed.type = facet_value %T.051, (%DefaultOrUnformed.impl_witness.6b5) [concrete]
// CHECK:STDOUT: %Default.facet.80c: %Default.type = facet_value %T.3b5, (%custom_witness.2132a4.2) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.756: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.80c) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.5e6: %DefaultOrUnformed.type = facet_value %T.3b5, (%DefaultOrUnformed.impl_witness.756) [concrete]
// CHECK:STDOUT: %T.cpp_destructor.type: type = fn_type @T.cpp_destructor [concrete]
// CHECK:STDOUT: %T.cpp_destructor: %T.cpp_destructor.type = struct_value () [concrete]
// CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete]
@@ -1100,18 +1100,18 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %Core.import_ref.dfa: @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op.type (%T.as_type.as.DefaultOrUnformed.impl.Op.type.47c) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op (constants.%T.as_type.as.DefaultOrUnformed.impl.Op.25a)]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.b72 = impl_witness_table (%Core.import_ref.dfa), @T.as_type.as.DefaultOrUnformed.impl [concrete]
// CHECK:STDOUT: %TakesConstRValue.cpp_overload_set.value: %TakesConstRValue.cpp_overload_set.type = cpp_overload_set_value @TakesConstRValue.cpp_overload_set [concrete = constants.%TakesConstRValue.cpp_overload_set.value]
// CHECK:STDOUT: %T.decl: type = class_decl @T [concrete = constants.%T.051] {} {}
// CHECK:STDOUT: %T.decl: type = class_decl @T [concrete = constants.%T.3b5] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %s.patt: %pattern_type.c0c = ref_binding_pattern s [concrete]
// CHECK:STDOUT: %s.var_patt: %pattern_type.c0c = var_pattern %s.patt [concrete]
// CHECK:STDOUT: %s.patt: %pattern_type.b2d = ref_binding_pattern s [concrete]
// CHECK:STDOUT: %s.var_patt: %pattern_type.b2d = var_pattern %s.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %s.var: ref %S = var %s.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.a62) [concrete = constants.%DefaultOrUnformed.facet.0f7]
// CHECK:STDOUT: %.loc8_15.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.0f7]
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.fc0) [concrete = constants.%DefaultOrUnformed.facet.1d7]
// CHECK:STDOUT: %.loc8_15.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.1d7]
// 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>
@@ -1127,26 +1127,26 @@ fn PassConstRef(ref x: const X) {
// CHECK:STDOUT: %TakesConstRValue.ref.loc17: %TakesConstRValue.cpp_overload_set.type = name_ref TakesConstRValue, imports.%TakesConstRValue.cpp_overload_set.value [concrete = constants.%TakesConstRValue.cpp_overload_set.value]
// CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %t.patt: %pattern_type.1a9 = ref_binding_pattern t [concrete]
// CHECK:STDOUT: %t.var_patt: %pattern_type.1a9 = var_pattern %t.patt [concrete]
// CHECK:STDOUT: %t.patt: %pattern_type.471 = ref_binding_pattern t [concrete]
// CHECK:STDOUT: %t.var_patt: %pattern_type.471 = var_pattern %t.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %t.var: ref %T.051 = var %t.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc19: %DefaultOrUnformed.type = facet_value constants.%T.051, (constants.%DefaultOrUnformed.impl_witness.6b5) [concrete = constants.%DefaultOrUnformed.facet.ace]
// CHECK:STDOUT: %.loc19_15.1: %DefaultOrUnformed.type = converted constants.%T.051, %DefaultOrUnformed.facet.loc19 [concrete = constants.%DefaultOrUnformed.facet.ace]
// CHECK:STDOUT: %as_type.loc19: type = facet_access_type %.loc19_15.1 [concrete = constants.%T.051]
// CHECK:STDOUT: %.loc19_15.2: type = converted %.loc19_15.1, %as_type.loc19 [concrete = constants.%T.051]
// CHECK:STDOUT: %t.var: ref %T.3b5 = var %t.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc19: %DefaultOrUnformed.type = facet_value constants.%T.3b5, (constants.%DefaultOrUnformed.impl_witness.756) [concrete = constants.%DefaultOrUnformed.facet.5e6]
// CHECK:STDOUT: %.loc19_15.1: %DefaultOrUnformed.type = converted constants.%T.3b5, %DefaultOrUnformed.facet.loc19 [concrete = constants.%DefaultOrUnformed.facet.5e6]
// CHECK:STDOUT: %as_type.loc19: type = facet_access_type %.loc19_15.1 [concrete = constants.%T.3b5]
// CHECK:STDOUT: %.loc19_15.2: type = converted %.loc19_15.1, %as_type.loc19 [concrete = constants.%T.3b5]
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %.loc19_3: ref %T.051 = splice_block %t.var {}
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc19: init %T.051 to %.loc19_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.2()
// CHECK:STDOUT: %.loc19_3: ref %T.3b5 = splice_block %t.var {}
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc19: init %T.3b5 to %.loc19_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.2()
// CHECK:STDOUT: assign %t.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc19
// CHECK:STDOUT: %.loc19_13: type = splice_block %T.ref [concrete = constants.%T.051] {
// CHECK:STDOUT: %.loc19_13: type = splice_block %T.ref [concrete = constants.%T.3b5] {
// 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.051]
// CHECK:STDOUT: %T.ref: type = name_ref T, imports.%T.decl [concrete = constants.%T.3b5]
// CHECK:STDOUT: }
// CHECK:STDOUT: %t: ref %T.051 = ref_binding t, %t.var
// CHECK:STDOUT: %t: ref %T.3b5 = ref_binding t, %t.var
// CHECK:STDOUT: %Cpp.ref.loc28: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %TakesConstRValue.ref.loc28: %TakesConstRValue.cpp_overload_set.type = name_ref TakesConstRValue, imports.%TakesConstRValue.cpp_overload_set.value [concrete = constants.%TakesConstRValue.cpp_overload_set.value]
// CHECK:STDOUT: %t.ref: ref %T.051 = name_ref t, %t
// CHECK:STDOUT: %t.ref: ref %T.3b5 = name_ref t, %t
// CHECK:STDOUT: %T.cpp_destructor.bound: <bound method> = bound_method %t.var, constants.%T.cpp_destructor
// CHECK:STDOUT: %T.cpp_destructor.call: init %empty_tuple.type = call %T.cpp_destructor.bound(%t.var)
// CHECK:STDOUT: %S.cpp_destructor.bound: <bound method> = bound_method %s.var, constants.%S.cpp_destructor
@@ -498,7 +498,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.9e9: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.055: 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: }
@@ -524,7 +524,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %s.ref: %S = name_ref s, %s
// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref
// CHECK:STDOUT: %addr: %ptr.9e9 = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.055 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -571,7 +571,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.9e9: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.055: 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: }
@@ -597,7 +597,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %s.ref: %S = name_ref s, %s
// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref
// CHECK:STDOUT: %addr: %ptr.9e9 = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.055 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -609,7 +609,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.9e9: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.055: 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: }
@@ -635,7 +635,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %s.ref: %S = name_ref s, %s
// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref
// CHECK:STDOUT: %addr: %ptr.9e9 = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.055 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -644,11 +644,11 @@ fn F() {
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %S: type = class_type @S [concrete]
// CHECK:STDOUT: %pattern_type.d11: type = pattern_type %S [concrete]
// CHECK:STDOUT: %pattern_type.158: type = pattern_type %S [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.87a: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.da2: 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]
@@ -659,9 +659,9 @@ fn F() {
// CHECK:STDOUT: %S.Op.type: type = fn_type @S.Op [concrete]
// CHECK:STDOUT: %S.Op: %S.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.3d0: <witness> = custom_witness (%S.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.ced: %Default.type = facet_value %S, (%custom_witness.3d0) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.982: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.ced) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.982) [concrete]
// CHECK:STDOUT: %Default.facet.6c2: %Default.type = facet_value %S, (%custom_witness.3d0) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.0fd: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.6c2) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.0fd) [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: }
@@ -693,14 +693,14 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %s.ref: %S = name_ref s, %s
// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref
// CHECK:STDOUT: %addr: %ptr.87a = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.da2 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: %pattern_type.d11 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.d11 = var_pattern %x.patt [concrete]
// CHECK:STDOUT: %x.patt: %pattern_type.158 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.158 = var_pattern %x.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x.var: ref %S = var %x.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.982) [concrete = constants.%DefaultOrUnformed.facet]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.0fd) [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]
@@ -726,7 +726,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.b4e: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.da6: 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: }
@@ -761,7 +761,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %s.ref: %S = name_ref s, %s
// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref
// CHECK:STDOUT: %addr: %ptr.b4e = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.da6 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -774,10 +774,10 @@ fn F() {
// CHECK:STDOUT: %S: type = class_type @S [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.a32: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.8f4: 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: %pattern_type.194: type = pattern_type %O [concrete]
// CHECK:STDOUT: %pattern_type.554: type = pattern_type %O [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
// CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete]
// CHECK:STDOUT: %T.4ca: %Default.type = symbolic_binding T, 0 [symbolic]
@@ -786,9 +786,9 @@ fn F() {
// CHECK:STDOUT: %O.Op.type: type = fn_type @O.Op [concrete]
// CHECK:STDOUT: %O.Op: %O.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.213: <witness> = custom_witness (%O.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.15f: %Default.type = facet_value %O, (%custom_witness.213) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.424: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.15f) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %O, (%DefaultOrUnformed.impl_witness.424) [concrete]
// CHECK:STDOUT: %Default.facet.478: %Default.type = facet_value %O, (%custom_witness.213) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.1cc: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.478) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %O, (%DefaultOrUnformed.impl_witness.1cc) [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: }
@@ -816,14 +816,14 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %s.ref: %S = name_ref s, %s
// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref
// CHECK:STDOUT: %addr: %ptr.a32 = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.8f4 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: %pattern_type.194 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.194 = var_pattern %x.patt [concrete]
// CHECK:STDOUT: %x.patt: %pattern_type.554 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.554 = var_pattern %x.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x.var: ref %O = var %x.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.424) [concrete = constants.%DefaultOrUnformed.facet]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.1cc) [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]
@@ -852,7 +852,7 @@ fn F() {
// CHECK:STDOUT: %S.bar: %S.bar.type = struct_value () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.9e9: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.055: 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: }
@@ -884,7 +884,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %s.ref: %S = name_ref s, %s
// CHECK:STDOUT: %.loc9: ref %S = value_as_ref %s.ref
// CHECK:STDOUT: %addr: %ptr.9e9 = addr_of %.loc9
// CHECK:STDOUT: %addr: %ptr.055 = addr_of %.loc9
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -896,7 +896,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.9e9: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.055: 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: %S.bar.cpp_overload_set.type: type = cpp_overload_set_type @S.bar.cpp_overload_set [concrete]
@@ -928,7 +928,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %s.ref: %S = name_ref s, %s
// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref
// CHECK:STDOUT: %addr: %ptr.9e9 = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.055 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: %Cpp.ref.loc9: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %S.ref.loc9: type = name_ref S, imports.%S.decl [concrete = constants.%S]
@@ -1016,7 +1016,7 @@ fn F() {
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %S: type = class_type @S [concrete]
// CHECK:STDOUT: %ptr.9e9: type = ptr_type %S [concrete]
// CHECK:STDOUT: %ptr.055: 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: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete]
@@ -1041,7 +1041,7 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %.loc8_11.1: ref %S = temporary_storage
// CHECK:STDOUT: %addr: %ptr.9e9 = addr_of %.loc8_11.1
// CHECK:STDOUT: %addr: %ptr.055 = addr_of %.loc8_11.1
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: %.loc8_11.2: init %S to %.loc8_11.1 = mark_in_place_init %foo__carbon_thunk.call
// CHECK:STDOUT: %.loc8_11.3: ref %S = temporary %.loc8_11.1, %.loc8_11.2
@@ -458,7 +458,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.72b: type = ptr_type %U [concrete]
// CHECK:STDOUT: %ptr.b3b: 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: }
@@ -484,7 +484,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %u.ref: %U = name_ref u, %u
// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref
// CHECK:STDOUT: %addr: %ptr.72b = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.b3b = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -496,7 +496,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.72b: type = ptr_type %U [concrete]
// CHECK:STDOUT: %ptr.b3b: 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: }
@@ -522,7 +522,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %u.ref: %U = name_ref u, %u
// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref
// CHECK:STDOUT: %addr: %ptr.72b = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.b3b = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -534,7 +534,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.72b: type = ptr_type %U [concrete]
// CHECK:STDOUT: %ptr.b3b: 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: }
@@ -560,7 +560,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %u.ref: %U = name_ref u, %u
// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref
// CHECK:STDOUT: %addr: %ptr.72b = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.b3b = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -569,11 +569,11 @@ fn F() {
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %U: type = class_type @U [concrete]
// CHECK:STDOUT: %pattern_type.162: type = pattern_type %U [concrete]
// CHECK:STDOUT: %pattern_type.769: type = pattern_type %U [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.c47: type = ptr_type %U [concrete]
// CHECK:STDOUT: %ptr.987: 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]
@@ -584,9 +584,9 @@ fn F() {
// CHECK:STDOUT: %U.Op.type: type = fn_type @U.Op [concrete]
// CHECK:STDOUT: %U.Op: %U.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.3d0: <witness> = custom_witness (%U.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.c27: %Default.type = facet_value %U, (%custom_witness.3d0) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.f55: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.c27) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %U, (%DefaultOrUnformed.impl_witness.f55) [concrete]
// CHECK:STDOUT: %Default.facet.f66: %Default.type = facet_value %U, (%custom_witness.3d0) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.9ec: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.f66) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %U, (%DefaultOrUnformed.impl_witness.9ec) [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: }
@@ -618,14 +618,14 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %u.ref: %U = name_ref u, %u
// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref
// CHECK:STDOUT: %addr: %ptr.c47 = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.987 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: %pattern_type.162 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.162 = var_pattern %x.patt [concrete]
// CHECK:STDOUT: %x.patt: %pattern_type.769 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.769 = var_pattern %x.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x.var: ref %U = var %x.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%U, (constants.%DefaultOrUnformed.impl_witness.f55) [concrete = constants.%DefaultOrUnformed.facet]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%U, (constants.%DefaultOrUnformed.impl_witness.9ec) [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]
@@ -651,7 +651,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.9be: type = ptr_type %U [concrete]
// CHECK:STDOUT: %ptr.ff3: 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: }
@@ -686,7 +686,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %u.ref: %U = name_ref u, %u
// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref
// CHECK:STDOUT: %addr: %ptr.9be = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.ff3 = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -699,10 +699,10 @@ fn F() {
// CHECK:STDOUT: %U: type = class_type @U [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.676: type = ptr_type %U [concrete]
// CHECK:STDOUT: %ptr.5aa: 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: %pattern_type.194: type = pattern_type %O [concrete]
// CHECK:STDOUT: %pattern_type.554: type = pattern_type %O [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
// CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete]
// CHECK:STDOUT: %T.4ca: %Default.type = symbolic_binding T, 0 [symbolic]
@@ -711,9 +711,9 @@ fn F() {
// CHECK:STDOUT: %O.Op.type: type = fn_type @O.Op [concrete]
// CHECK:STDOUT: %O.Op: %O.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.213: <witness> = custom_witness (%O.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.15f: %Default.type = facet_value %O, (%custom_witness.213) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.424: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.15f) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %O, (%DefaultOrUnformed.impl_witness.424) [concrete]
// CHECK:STDOUT: %Default.facet.478: %Default.type = facet_value %O, (%custom_witness.213) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.1cc: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.478) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %O, (%DefaultOrUnformed.impl_witness.1cc) [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: }
@@ -741,14 +741,14 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %u.ref: %U = name_ref u, %u
// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref
// CHECK:STDOUT: %addr: %ptr.676 = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.5aa = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: %pattern_type.194 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.194 = var_pattern %x.patt [concrete]
// CHECK:STDOUT: %x.patt: %pattern_type.554 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.554 = var_pattern %x.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x.var: ref %O = var %x.var_patt
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.424) [concrete = constants.%DefaultOrUnformed.facet]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.1cc) [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]
@@ -777,7 +777,7 @@ fn F() {
// CHECK:STDOUT: %U.bar: %U.bar.type = struct_value () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.72b: type = ptr_type %U [concrete]
// CHECK:STDOUT: %ptr.b3b: 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: }
@@ -809,7 +809,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %u.ref: %U = name_ref u, %u
// CHECK:STDOUT: %.loc9: ref %U = value_as_ref %u.ref
// CHECK:STDOUT: %addr: %ptr.72b = addr_of %.loc9
// CHECK:STDOUT: %addr: %ptr.b3b = addr_of %.loc9
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -821,7 +821,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.72b: type = ptr_type %U [concrete]
// CHECK:STDOUT: %ptr.b3b: 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: %U.bar.cpp_overload_set.type: type = cpp_overload_set_type @U.bar.cpp_overload_set [concrete]
@@ -853,7 +853,7 @@ fn F() {
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %u.ref: %U = name_ref u, %u
// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref
// CHECK:STDOUT: %addr: %ptr.72b = addr_of %.loc8
// CHECK:STDOUT: %addr: %ptr.b3b = addr_of %.loc8
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: %Cpp.ref.loc9: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %U.ref.loc9: type = name_ref U, imports.%U.decl [concrete = constants.%U]
@@ -941,7 +941,7 @@ fn F() {
// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete]
// CHECK:STDOUT: %U: type = class_type @U [concrete]
// CHECK:STDOUT: %ptr.72b: type = ptr_type %U [concrete]
// CHECK:STDOUT: %ptr.b3b: 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: %U.cpp_destructor.type: type = fn_type @U.cpp_destructor [concrete]
@@ -966,7 +966,7 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value]
// CHECK:STDOUT: %.loc8_11.1: ref %U = temporary_storage
// CHECK:STDOUT: %addr: %ptr.72b = addr_of %.loc8_11.1
// CHECK:STDOUT: %addr: %ptr.b3b = addr_of %.loc8_11.1
// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr)
// CHECK:STDOUT: %.loc8_11.2: init %U to %.loc8_11.1 = mark_in_place_init %foo__carbon_thunk.call
// CHECK:STDOUT: %.loc8_11.3: ref %U = temporary %.loc8_11.1, %.loc8_11.2