mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
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:
co-authored by
Christopher Di Bella
parent
3ef128ac91
commit
8a59f2a76b
@@ -39,16 +39,16 @@ var a2: Cpp.Second(Cpp.B, Cpp.A) = Cpp.A.A();
|
||||
// CHECK:STDOUT: %First.template: %First.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %A: type = class_type @A [concrete]
|
||||
// CHECK:STDOUT: %B: type = class_type @B [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.b54: type = pattern_type %A [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.aa6: type = pattern_type %A [concrete]
|
||||
// CHECK:STDOUT: %A.A.cpp_overload_set.type: type = cpp_overload_set_type @A.A.cpp_overload_set [concrete]
|
||||
// CHECK:STDOUT: %A.A.cpp_overload_set.value: %A.A.cpp_overload_set.type = cpp_overload_set_value @A.A.cpp_overload_set [concrete]
|
||||
// CHECK:STDOUT: %ptr.bce: type = ptr_type %A [concrete]
|
||||
// CHECK:STDOUT: %ptr.9f7: type = ptr_type %A [concrete]
|
||||
// CHECK:STDOUT: %A__carbon_thunk.type: type = fn_type @A__carbon_thunk [concrete]
|
||||
// CHECK:STDOUT: %A__carbon_thunk: %A__carbon_thunk.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.676: type = pattern_type %B [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.bbe: type = pattern_type %B [concrete]
|
||||
// CHECK:STDOUT: %B.B.cpp_overload_set.type: type = cpp_overload_set_type @B.B.cpp_overload_set [concrete]
|
||||
// CHECK:STDOUT: %B.B.cpp_overload_set.value: %B.B.cpp_overload_set.type = cpp_overload_set_value @B.B.cpp_overload_set [concrete]
|
||||
// CHECK:STDOUT: %ptr.13d: type = ptr_type %B [concrete]
|
||||
// CHECK:STDOUT: %ptr.fab: type = ptr_type %B [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: %Second.type: type = cpp_type_template_type Second [concrete]
|
||||
@@ -83,26 +83,26 @@ var a2: Cpp.Second(Cpp.B, Cpp.A) = Cpp.A.A();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %a1.patt: %pattern_type.b54 = ref_binding_pattern a1 [concrete]
|
||||
// CHECK:STDOUT: %a1.var_patt: %pattern_type.b54 = var_pattern %a1.patt [concrete]
|
||||
// CHECK:STDOUT: %a1.patt: %pattern_type.aa6 = ref_binding_pattern a1 [concrete]
|
||||
// CHECK:STDOUT: %a1.var_patt: %pattern_type.aa6 = var_pattern %a1.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a1.var: ref %A = var %a1.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a1: ref %A = ref_binding a1, %a1.var [concrete = %a1.var]
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %b1.patt: %pattern_type.676 = ref_binding_pattern b1 [concrete]
|
||||
// CHECK:STDOUT: %b1.var_patt: %pattern_type.676 = var_pattern %b1.patt [concrete]
|
||||
// CHECK:STDOUT: %b1.patt: %pattern_type.bbe = ref_binding_pattern b1 [concrete]
|
||||
// CHECK:STDOUT: %b1.var_patt: %pattern_type.bbe = var_pattern %b1.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %b1.var: ref %B = var %b1.var_patt [concrete]
|
||||
// CHECK:STDOUT: %b1: ref %B = ref_binding b1, %b1.var [concrete = %b1.var]
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %b2.patt: %pattern_type.676 = ref_binding_pattern b2 [concrete]
|
||||
// CHECK:STDOUT: %b2.var_patt: %pattern_type.676 = var_pattern %b2.patt [concrete]
|
||||
// CHECK:STDOUT: %b2.patt: %pattern_type.bbe = ref_binding_pattern b2 [concrete]
|
||||
// CHECK:STDOUT: %b2.var_patt: %pattern_type.bbe = var_pattern %b2.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %b2.var: ref %B = var %b2.var_patt [concrete]
|
||||
// CHECK:STDOUT: %b2: ref %B = ref_binding b2, %b2.var [concrete = %b2.var]
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %a2.patt: %pattern_type.b54 = ref_binding_pattern a2 [concrete]
|
||||
// CHECK:STDOUT: %a2.var_patt: %pattern_type.b54 = var_pattern %a2.patt [concrete]
|
||||
// CHECK:STDOUT: %a2.patt: %pattern_type.aa6 = ref_binding_pattern a2 [concrete]
|
||||
// CHECK:STDOUT: %a2.var_patt: %pattern_type.aa6 = var_pattern %a2.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a2.var: ref %A = var %a2.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a2: ref %A = ref_binding a2, %a2.var [concrete = %a2.var]
|
||||
@@ -114,7 +114,7 @@ var a2: Cpp.Second(Cpp.B, Cpp.A) = Cpp.A.A();
|
||||
// CHECK:STDOUT: %A.ref.loc7_38: type = name_ref A, imports.%A.decl [concrete = constants.%A]
|
||||
// CHECK:STDOUT: %A.ref.loc7_40: %A.A.cpp_overload_set.type = name_ref A, imports.%A.A.cpp_overload_set.value [concrete = constants.%A.A.cpp_overload_set.value]
|
||||
// CHECK:STDOUT: %.loc7_1: ref %A = splice_block file.%a1.var [concrete = file.%a1.var] {}
|
||||
// CHECK:STDOUT: %addr.loc7: %ptr.bce = addr_of %.loc7_1
|
||||
// CHECK:STDOUT: %addr.loc7: %ptr.9f7 = addr_of %.loc7_1
|
||||
// CHECK:STDOUT: %A__carbon_thunk.call.loc7: init %empty_tuple.type = call imports.%A__carbon_thunk.decl(%addr.loc7)
|
||||
// CHECK:STDOUT: %.loc7_43: init %A to %.loc7_1 = mark_in_place_init %A__carbon_thunk.call.loc7
|
||||
// CHECK:STDOUT: assign file.%a1.var, %.loc7_43
|
||||
@@ -122,7 +122,7 @@ var a2: Cpp.Second(Cpp.B, Cpp.A) = Cpp.A.A();
|
||||
// CHECK:STDOUT: %B.ref.loc8_38: type = name_ref B, imports.%B.decl [concrete = constants.%B]
|
||||
// CHECK:STDOUT: %B.ref.loc8_40: %B.B.cpp_overload_set.type = name_ref B, imports.%B.B.cpp_overload_set.value [concrete = constants.%B.B.cpp_overload_set.value]
|
||||
// CHECK:STDOUT: %.loc8_1: ref %B = splice_block file.%b1.var [concrete = file.%b1.var] {}
|
||||
// CHECK:STDOUT: %addr.loc8: %ptr.13d = addr_of %.loc8_1
|
||||
// CHECK:STDOUT: %addr.loc8: %ptr.fab = addr_of %.loc8_1
|
||||
// CHECK:STDOUT: %B__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%B__carbon_thunk.decl(%addr.loc8)
|
||||
// CHECK:STDOUT: %.loc8_43: init %B to %.loc8_1 = mark_in_place_init %B__carbon_thunk.call.loc8
|
||||
// CHECK:STDOUT: assign file.%b1.var, %.loc8_43
|
||||
@@ -130,7 +130,7 @@ var a2: Cpp.Second(Cpp.B, Cpp.A) = Cpp.A.A();
|
||||
// CHECK:STDOUT: %B.ref.loc9_39: type = name_ref B, imports.%B.decl [concrete = constants.%B]
|
||||
// CHECK:STDOUT: %B.ref.loc9_41: %B.B.cpp_overload_set.type = name_ref B, imports.%B.B.cpp_overload_set.value [concrete = constants.%B.B.cpp_overload_set.value]
|
||||
// CHECK:STDOUT: %.loc9_1: ref %B = splice_block file.%b2.var [concrete = file.%b2.var] {}
|
||||
// CHECK:STDOUT: %addr.loc9: %ptr.13d = addr_of %.loc9_1
|
||||
// CHECK:STDOUT: %addr.loc9: %ptr.fab = addr_of %.loc9_1
|
||||
// CHECK:STDOUT: %B__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%B__carbon_thunk.decl(%addr.loc9)
|
||||
// CHECK:STDOUT: %.loc9_44: init %B to %.loc9_1 = mark_in_place_init %B__carbon_thunk.call.loc9
|
||||
// CHECK:STDOUT: assign file.%b2.var, %.loc9_44
|
||||
@@ -138,7 +138,7 @@ var a2: Cpp.Second(Cpp.B, Cpp.A) = Cpp.A.A();
|
||||
// CHECK:STDOUT: %A.ref.loc10_39: type = name_ref A, imports.%A.decl [concrete = constants.%A]
|
||||
// CHECK:STDOUT: %A.ref.loc10_41: %A.A.cpp_overload_set.type = name_ref A, imports.%A.A.cpp_overload_set.value [concrete = constants.%A.A.cpp_overload_set.value]
|
||||
// CHECK:STDOUT: %.loc10_1: ref %A = splice_block file.%a2.var [concrete = file.%a2.var] {}
|
||||
// CHECK:STDOUT: %addr.loc10: %ptr.bce = addr_of %.loc10_1
|
||||
// CHECK:STDOUT: %addr.loc10: %ptr.9f7 = addr_of %.loc10_1
|
||||
// CHECK:STDOUT: %A__carbon_thunk.call.loc10: init %empty_tuple.type = call imports.%A__carbon_thunk.decl(%addr.loc10)
|
||||
// CHECK:STDOUT: %.loc10_44: init %A to %.loc10_1 = mark_in_place_init %A__carbon_thunk.call.loc10
|
||||
// CHECK:STDOUT: assign file.%a2.var, %.loc10_44
|
||||
|
||||
@@ -122,7 +122,7 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.3df: type = pattern_type %TwoTypes [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.bc0: type = pattern_type %TwoTypes [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]
|
||||
@@ -131,9 +131,9 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT: %TwoTypes.Op.type: type = fn_type @TwoTypes.Op [concrete]
|
||||
// CHECK:STDOUT: %TwoTypes.Op: %TwoTypes.Op.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %custom_witness.213: <witness> = custom_witness (%TwoTypes.Op), @Default [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.ba6: %Default.type = facet_value %TwoTypes, (%custom_witness.213) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.462: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.ba6) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTypes, (%DefaultOrUnformed.impl_witness.462) [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.f94: %Default.type = facet_value %TwoTypes, (%custom_witness.213) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.b65: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.f94) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTypes, (%DefaultOrUnformed.impl_witness.b65) [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -143,8 +143,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.3df = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.3df = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.bc0 = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.bc0 = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x.var: ref %TwoTypes = var %x.var_patt [concrete]
|
||||
// CHECK:STDOUT: %x: ref %TwoTypes = ref_binding x, %x.var [concrete = %x.var]
|
||||
@@ -152,7 +152,7 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @__global_init() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTypes, (constants.%DefaultOrUnformed.impl_witness.462) [concrete = constants.%DefaultOrUnformed.facet]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTypes, (constants.%DefaultOrUnformed.impl_witness.b65) [concrete = constants.%DefaultOrUnformed.facet]
|
||||
// CHECK:STDOUT: %.loc7_34.1: %DefaultOrUnformed.type = converted constants.%TwoTypes, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet]
|
||||
// CHECK:STDOUT: %as_type: type = facet_access_type %.loc7_34.1 [concrete = constants.%TwoTypes]
|
||||
// CHECK:STDOUT: %.loc7_34.2: type = converted %.loc7_34.1, %as_type [concrete = constants.%TwoTypes]
|
||||
@@ -166,8 +166,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT: --- pack.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %TypePack.ef9a30.1: type = class_type @TypePack.1 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.9115dc.1: type = pattern_type %TypePack.ef9a30.1 [concrete]
|
||||
// CHECK:STDOUT: %TypePack.894: type = class_type @TypePack.1 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.c42: type = pattern_type %TypePack.894 [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]
|
||||
@@ -176,33 +176,33 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT: %TypePack.Op.type.43d658.1: type = fn_type @TypePack.Op.1 [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.cc70d5.1: %TypePack.Op.type.43d658.1 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %custom_witness.2132a4.1: <witness> = custom_witness (%TypePack.Op.cc70d5.1), @Default [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.5ed9a2.1: %Default.type = facet_value %TypePack.ef9a30.1, (%custom_witness.2132a4.1) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.bf0e48.1: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.5ed9a2.1) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.86aa39.1: %DefaultOrUnformed.type = facet_value %TypePack.ef9a30.1, (%DefaultOrUnformed.impl_witness.bf0e48.1) [concrete]
|
||||
// CHECK:STDOUT: %TypePack.ef9a30.2: type = class_type @TypePack.2 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.9115dc.2: type = pattern_type %TypePack.ef9a30.2 [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.bef: %Default.type = facet_value %TypePack.894, (%custom_witness.2132a4.1) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.967: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.bef) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.dc4: %DefaultOrUnformed.type = facet_value %TypePack.894, (%DefaultOrUnformed.impl_witness.967) [concrete]
|
||||
// CHECK:STDOUT: %TypePack.5b2: type = class_type @TypePack.2 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.891: type = pattern_type %TypePack.5b2 [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.type.43d658.2: type = fn_type @TypePack.Op.2 [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.cc70d5.2: %TypePack.Op.type.43d658.2 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %custom_witness.2132a4.2: <witness> = custom_witness (%TypePack.Op.cc70d5.2), @Default [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.5ed9a2.2: %Default.type = facet_value %TypePack.ef9a30.2, (%custom_witness.2132a4.2) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.bf0e48.2: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.5ed9a2.2) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.86aa39.2: %DefaultOrUnformed.type = facet_value %TypePack.ef9a30.2, (%DefaultOrUnformed.impl_witness.bf0e48.2) [concrete]
|
||||
// CHECK:STDOUT: %TypePack.ef9a30.3: type = class_type @TypePack.3 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.9115dc.3: type = pattern_type %TypePack.ef9a30.3 [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.598: %Default.type = facet_value %TypePack.5b2, (%custom_witness.2132a4.2) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.f8d: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.598) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.28c: %DefaultOrUnformed.type = facet_value %TypePack.5b2, (%DefaultOrUnformed.impl_witness.f8d) [concrete]
|
||||
// CHECK:STDOUT: %TypePack.93d: type = class_type @TypePack.3 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.fce: type = pattern_type %TypePack.93d [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.type.43d658.3: type = fn_type @TypePack.Op.3 [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.cc70d5.3: %TypePack.Op.type.43d658.3 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %custom_witness.2132a4.3: <witness> = custom_witness (%TypePack.Op.cc70d5.3), @Default [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.5ed9a2.3: %Default.type = facet_value %TypePack.ef9a30.3, (%custom_witness.2132a4.3) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.bf0e48.3: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.5ed9a2.3) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.86aa39.3: %DefaultOrUnformed.type = facet_value %TypePack.ef9a30.3, (%DefaultOrUnformed.impl_witness.bf0e48.3) [concrete]
|
||||
// CHECK:STDOUT: %TypePack.ef9a30.4: type = class_type @TypePack.4 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.9115dc.4: type = pattern_type %TypePack.ef9a30.4 [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.37a: %Default.type = facet_value %TypePack.93d, (%custom_witness.2132a4.3) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.d66: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.37a) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.092: %DefaultOrUnformed.type = facet_value %TypePack.93d, (%DefaultOrUnformed.impl_witness.d66) [concrete]
|
||||
// CHECK:STDOUT: %TypePack.51e: type = class_type @TypePack.4 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.f1d: type = pattern_type %TypePack.51e [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.type.43d658.4: type = fn_type @TypePack.Op.4 [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.cc70d5.4: %TypePack.Op.type.43d658.4 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %custom_witness.2132a4.4: <witness> = custom_witness (%TypePack.Op.cc70d5.4), @Default [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.5ed9a2.4: %Default.type = facet_value %TypePack.ef9a30.4, (%custom_witness.2132a4.4) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.bf0e48.4: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.5ed9a2.4) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.86aa39.4: %DefaultOrUnformed.type = facet_value %TypePack.ef9a30.4, (%DefaultOrUnformed.impl_witness.bf0e48.4) [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.fb9: %Default.type = facet_value %TypePack.51e, (%custom_witness.2132a4.4) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.dd3: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.fb9) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.1d3: %DefaultOrUnformed.type = facet_value %TypePack.51e, (%DefaultOrUnformed.impl_witness.dd3) [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -212,64 +212,64 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %a0.patt: %pattern_type.9115dc.1 = ref_binding_pattern a0 [concrete]
|
||||
// CHECK:STDOUT: %a0.var_patt: %pattern_type.9115dc.1 = var_pattern %a0.patt [concrete]
|
||||
// CHECK:STDOUT: %a0.patt: %pattern_type.c42 = ref_binding_pattern a0 [concrete]
|
||||
// CHECK:STDOUT: %a0.var_patt: %pattern_type.c42 = var_pattern %a0.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a0.var: ref %TypePack.ef9a30.1 = var %a0.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a0: ref %TypePack.ef9a30.1 = ref_binding a0, %a0.var [concrete = %a0.var]
|
||||
// CHECK:STDOUT: %a0.var: ref %TypePack.894 = var %a0.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a0: ref %TypePack.894 = ref_binding a0, %a0.var [concrete = %a0.var]
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %a1.patt: %pattern_type.9115dc.2 = ref_binding_pattern a1 [concrete]
|
||||
// CHECK:STDOUT: %a1.var_patt: %pattern_type.9115dc.2 = var_pattern %a1.patt [concrete]
|
||||
// CHECK:STDOUT: %a1.patt: %pattern_type.891 = ref_binding_pattern a1 [concrete]
|
||||
// CHECK:STDOUT: %a1.var_patt: %pattern_type.891 = var_pattern %a1.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a1.var: ref %TypePack.ef9a30.2 = var %a1.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a1: ref %TypePack.ef9a30.2 = ref_binding a1, %a1.var [concrete = %a1.var]
|
||||
// CHECK:STDOUT: %a1.var: ref %TypePack.5b2 = var %a1.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a1: ref %TypePack.5b2 = ref_binding a1, %a1.var [concrete = %a1.var]
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %a2.patt: %pattern_type.9115dc.3 = ref_binding_pattern a2 [concrete]
|
||||
// CHECK:STDOUT: %a2.var_patt: %pattern_type.9115dc.3 = var_pattern %a2.patt [concrete]
|
||||
// CHECK:STDOUT: %a2.patt: %pattern_type.fce = ref_binding_pattern a2 [concrete]
|
||||
// CHECK:STDOUT: %a2.var_patt: %pattern_type.fce = var_pattern %a2.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a2.var: ref %TypePack.ef9a30.3 = var %a2.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a2: ref %TypePack.ef9a30.3 = ref_binding a2, %a2.var [concrete = %a2.var]
|
||||
// CHECK:STDOUT: %a2.var: ref %TypePack.93d = var %a2.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a2: ref %TypePack.93d = ref_binding a2, %a2.var [concrete = %a2.var]
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %a3.patt: %pattern_type.9115dc.4 = ref_binding_pattern a3 [concrete]
|
||||
// CHECK:STDOUT: %a3.var_patt: %pattern_type.9115dc.4 = var_pattern %a3.patt [concrete]
|
||||
// CHECK:STDOUT: %a3.patt: %pattern_type.f1d = ref_binding_pattern a3 [concrete]
|
||||
// CHECK:STDOUT: %a3.var_patt: %pattern_type.f1d = var_pattern %a3.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a3.var: ref %TypePack.ef9a30.4 = var %a3.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a3: ref %TypePack.ef9a30.4 = ref_binding a3, %a3.var [concrete = %a3.var]
|
||||
// CHECK:STDOUT: %a3.var: ref %TypePack.51e = var %a3.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a3: ref %TypePack.51e = ref_binding a3, %a3.var [concrete = %a3.var]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @__global_init() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc7: %DefaultOrUnformed.type = facet_value constants.%TypePack.ef9a30.1, (constants.%DefaultOrUnformed.impl_witness.bf0e48.1) [concrete = constants.%DefaultOrUnformed.facet.86aa39.1]
|
||||
// CHECK:STDOUT: %.loc7_23.1: %DefaultOrUnformed.type = converted constants.%TypePack.ef9a30.1, %DefaultOrUnformed.facet.loc7 [concrete = constants.%DefaultOrUnformed.facet.86aa39.1]
|
||||
// CHECK:STDOUT: %as_type.loc7: type = facet_access_type %.loc7_23.1 [concrete = constants.%TypePack.ef9a30.1]
|
||||
// CHECK:STDOUT: %.loc7_23.2: type = converted %.loc7_23.1, %as_type.loc7 [concrete = constants.%TypePack.ef9a30.1]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc7: %DefaultOrUnformed.type = facet_value constants.%TypePack.894, (constants.%DefaultOrUnformed.impl_witness.967) [concrete = constants.%DefaultOrUnformed.facet.dc4]
|
||||
// CHECK:STDOUT: %.loc7_23.1: %DefaultOrUnformed.type = converted constants.%TypePack.894, %DefaultOrUnformed.facet.loc7 [concrete = constants.%DefaultOrUnformed.facet.dc4]
|
||||
// CHECK:STDOUT: %as_type.loc7: type = facet_access_type %.loc7_23.1 [concrete = constants.%TypePack.894]
|
||||
// CHECK:STDOUT: %.loc7_23.2: type = converted %.loc7_23.1, %as_type.loc7 [concrete = constants.%TypePack.894]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.loc7_1: ref %TypePack.ef9a30.1 = splice_block file.%a0.var [concrete = file.%a0.var] {}
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc7: init %TypePack.ef9a30.1 to %.loc7_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.1()
|
||||
// CHECK:STDOUT: %.loc7_1: ref %TypePack.894 = splice_block file.%a0.var [concrete = file.%a0.var] {}
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc7: init %TypePack.894 to %.loc7_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.1()
|
||||
// CHECK:STDOUT: assign file.%a0.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc7
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%TypePack.ef9a30.2, (constants.%DefaultOrUnformed.impl_witness.bf0e48.2) [concrete = constants.%DefaultOrUnformed.facet.86aa39.2]
|
||||
// CHECK:STDOUT: %.loc8_28.1: %DefaultOrUnformed.type = converted constants.%TypePack.ef9a30.2, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.86aa39.2]
|
||||
// CHECK:STDOUT: %as_type.loc8: type = facet_access_type %.loc8_28.1 [concrete = constants.%TypePack.ef9a30.2]
|
||||
// CHECK:STDOUT: %.loc8_28.2: type = converted %.loc8_28.1, %as_type.loc8 [concrete = constants.%TypePack.ef9a30.2]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%TypePack.5b2, (constants.%DefaultOrUnformed.impl_witness.f8d) [concrete = constants.%DefaultOrUnformed.facet.28c]
|
||||
// CHECK:STDOUT: %.loc8_28.1: %DefaultOrUnformed.type = converted constants.%TypePack.5b2, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.28c]
|
||||
// CHECK:STDOUT: %as_type.loc8: type = facet_access_type %.loc8_28.1 [concrete = constants.%TypePack.5b2]
|
||||
// CHECK:STDOUT: %.loc8_28.2: type = converted %.loc8_28.1, %as_type.loc8 [concrete = constants.%TypePack.5b2]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.loc8_1: ref %TypePack.ef9a30.2 = splice_block file.%a1.var [concrete = file.%a1.var] {}
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc8: init %TypePack.ef9a30.2 to %.loc8_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.2()
|
||||
// CHECK:STDOUT: %.loc8_1: ref %TypePack.5b2 = splice_block file.%a1.var [concrete = file.%a1.var] {}
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc8: init %TypePack.5b2 to %.loc8_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.2()
|
||||
// CHECK:STDOUT: assign file.%a1.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc8
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc9: %DefaultOrUnformed.type = facet_value constants.%TypePack.ef9a30.3, (constants.%DefaultOrUnformed.impl_witness.bf0e48.3) [concrete = constants.%DefaultOrUnformed.facet.86aa39.3]
|
||||
// CHECK:STDOUT: %.loc9_35.1: %DefaultOrUnformed.type = converted constants.%TypePack.ef9a30.3, %DefaultOrUnformed.facet.loc9 [concrete = constants.%DefaultOrUnformed.facet.86aa39.3]
|
||||
// CHECK:STDOUT: %as_type.loc9: type = facet_access_type %.loc9_35.1 [concrete = constants.%TypePack.ef9a30.3]
|
||||
// CHECK:STDOUT: %.loc9_35.2: type = converted %.loc9_35.1, %as_type.loc9 [concrete = constants.%TypePack.ef9a30.3]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc9: %DefaultOrUnformed.type = facet_value constants.%TypePack.93d, (constants.%DefaultOrUnformed.impl_witness.d66) [concrete = constants.%DefaultOrUnformed.facet.092]
|
||||
// CHECK:STDOUT: %.loc9_35.1: %DefaultOrUnformed.type = converted constants.%TypePack.93d, %DefaultOrUnformed.facet.loc9 [concrete = constants.%DefaultOrUnformed.facet.092]
|
||||
// CHECK:STDOUT: %as_type.loc9: type = facet_access_type %.loc9_35.1 [concrete = constants.%TypePack.93d]
|
||||
// CHECK:STDOUT: %.loc9_35.2: type = converted %.loc9_35.1, %as_type.loc9 [concrete = constants.%TypePack.93d]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.loc9_1: ref %TypePack.ef9a30.3 = splice_block file.%a2.var [concrete = file.%a2.var] {}
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc9: init %TypePack.ef9a30.3 to %.loc9_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.3()
|
||||
// CHECK:STDOUT: %.loc9_1: ref %TypePack.93d = splice_block file.%a2.var [concrete = file.%a2.var] {}
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc9: init %TypePack.93d to %.loc9_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.3()
|
||||
// CHECK:STDOUT: assign file.%a2.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc9
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc10: %DefaultOrUnformed.type = facet_value constants.%TypePack.ef9a30.4, (constants.%DefaultOrUnformed.impl_witness.bf0e48.4) [concrete = constants.%DefaultOrUnformed.facet.86aa39.4]
|
||||
// CHECK:STDOUT: %.loc10_42.1: %DefaultOrUnformed.type = converted constants.%TypePack.ef9a30.4, %DefaultOrUnformed.facet.loc10 [concrete = constants.%DefaultOrUnformed.facet.86aa39.4]
|
||||
// CHECK:STDOUT: %as_type.loc10: type = facet_access_type %.loc10_42.1 [concrete = constants.%TypePack.ef9a30.4]
|
||||
// CHECK:STDOUT: %.loc10_42.2: type = converted %.loc10_42.1, %as_type.loc10 [concrete = constants.%TypePack.ef9a30.4]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc10: %DefaultOrUnformed.type = facet_value constants.%TypePack.51e, (constants.%DefaultOrUnformed.impl_witness.dd3) [concrete = constants.%DefaultOrUnformed.facet.1d3]
|
||||
// CHECK:STDOUT: %.loc10_42.1: %DefaultOrUnformed.type = converted constants.%TypePack.51e, %DefaultOrUnformed.facet.loc10 [concrete = constants.%DefaultOrUnformed.facet.1d3]
|
||||
// CHECK:STDOUT: %as_type.loc10: type = facet_access_type %.loc10_42.1 [concrete = constants.%TypePack.51e]
|
||||
// CHECK:STDOUT: %.loc10_42.2: type = converted %.loc10_42.1, %as_type.loc10 [concrete = constants.%TypePack.51e]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.loc10_1: ref %TypePack.ef9a30.4 = splice_block file.%a3.var [concrete = file.%a3.var] {}
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc10: init %TypePack.ef9a30.4 to %.loc10_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.4()
|
||||
// CHECK:STDOUT: %.loc10_1: ref %TypePack.51e = splice_block file.%a3.var [concrete = file.%a3.var] {}
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc10: init %TypePack.51e to %.loc10_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.4()
|
||||
// CHECK:STDOUT: assign file.%a3.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc10
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
@@ -36,7 +36,7 @@ var a: Cpp.A = Cpp.X(Cpp.A, Cpp.B).f({} as Cpp.B);
|
||||
// CHECK:STDOUT: %A: type = class_type @A [concrete]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
|
||||
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.b54: type = pattern_type %A [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.aa6: type = pattern_type %A [concrete]
|
||||
// CHECK:STDOUT: %X.type: type = cpp_type_template_type X [concrete]
|
||||
// CHECK:STDOUT: %X.template: %X.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %B: type = class_type @B [concrete]
|
||||
@@ -44,11 +44,11 @@ var a: Cpp.A = Cpp.X(Cpp.A, Cpp.B).f({} as Cpp.B);
|
||||
// CHECK:STDOUT: %X.f.cpp_overload_set.value: %X.f.cpp_overload_set.type = cpp_overload_set_value @X.f.cpp_overload_set [concrete]
|
||||
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %B.val: %B = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %ptr.13d: type = ptr_type %B [concrete]
|
||||
// CHECK:STDOUT: %ptr.bce: type = ptr_type %A [concrete]
|
||||
// CHECK:STDOUT: %ptr.fab: type = ptr_type %B [concrete]
|
||||
// CHECK:STDOUT: %ptr.9f7: type = ptr_type %A [concrete]
|
||||
// CHECK:STDOUT: %f__carbon_thunk.type: type = fn_type @f__carbon_thunk [concrete]
|
||||
// CHECK:STDOUT: %f__carbon_thunk: %f__carbon_thunk.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.dae: ref %B = temporary invalid, %B.val [concrete]
|
||||
// CHECK:STDOUT: %.f11: ref %B = temporary invalid, %B.val [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -71,8 +71,8 @@ var a: Cpp.A = Cpp.X(Cpp.A, Cpp.B).f({} as Cpp.B);
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %a.patt: %pattern_type.b54 = ref_binding_pattern a [concrete]
|
||||
// CHECK:STDOUT: %a.var_patt: %pattern_type.b54 = var_pattern %a.patt [concrete]
|
||||
// CHECK:STDOUT: %a.patt: %pattern_type.aa6 = ref_binding_pattern a [concrete]
|
||||
// CHECK:STDOUT: %a.var_patt: %pattern_type.aa6 = var_pattern %a.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a.var: ref %A = var %a.var_patt [concrete]
|
||||
// CHECK:STDOUT: %.loc7: type = splice_block %A.ref [concrete = constants.%A] {
|
||||
@@ -98,11 +98,11 @@ var a: Cpp.A = Cpp.X(Cpp.A, Cpp.B).f({} as Cpp.B);
|
||||
// CHECK:STDOUT: %.loc7_39.3: init %B to %.loc7_39.2 = class_init () [concrete = constants.%B.val]
|
||||
// CHECK:STDOUT: %.loc7_41.1: init %B = converted %.loc7_39.1, %.loc7_39.3 [concrete = constants.%B.val]
|
||||
// CHECK:STDOUT: %.loc7_1: ref %A = splice_block file.%a.var [concrete = file.%a.var] {}
|
||||
// CHECK:STDOUT: %.loc7_41.2: ref %B = temporary %.loc7_39.2, %.loc7_41.1 [concrete = constants.%.dae]
|
||||
// CHECK:STDOUT: %.loc7_41.2: ref %B = temporary %.loc7_39.2, %.loc7_41.1 [concrete = constants.%.f11]
|
||||
// CHECK:STDOUT: %.loc7_41.3: %B = acquire_value %.loc7_41.2 [concrete = constants.%B.val]
|
||||
// CHECK:STDOUT: %.loc7_41.4: ref %B = value_as_ref %.loc7_41.3
|
||||
// CHECK:STDOUT: %addr.loc7_49.1: %ptr.13d = addr_of %.loc7_41.4
|
||||
// CHECK:STDOUT: %addr.loc7_49.2: %ptr.bce = addr_of %.loc7_1
|
||||
// CHECK:STDOUT: %addr.loc7_49.1: %ptr.fab = addr_of %.loc7_41.4
|
||||
// CHECK:STDOUT: %addr.loc7_49.2: %ptr.9f7 = addr_of %.loc7_1
|
||||
// CHECK:STDOUT: %f__carbon_thunk.call: init %empty_tuple.type = call imports.%f__carbon_thunk.decl(%addr.loc7_49.1, %addr.loc7_49.2)
|
||||
// CHECK:STDOUT: %.loc7_49: init %A to %.loc7_1 = mark_in_place_init %f__carbon_thunk.call
|
||||
// CHECK:STDOUT: assign file.%a.var, %.loc7_49
|
||||
|
||||
@@ -183,15 +183,15 @@ fn G() -> i32 {
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %TwoNonType: type = class_type @TwoNonType [concrete]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.7f0: type = pattern_type %TwoNonType [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.69d: type = pattern_type %TwoNonType [concrete]
|
||||
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %TwoNonType.val: %TwoNonType = struct_value () [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.7f0 = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.7f0 = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.69d = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.69d = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x.var: ref %TwoNonType = var %x.var_patt [concrete]
|
||||
// CHECK:STDOUT: %x: ref %TwoNonType = ref_binding x, %x.var [concrete = %x.var]
|
||||
@@ -215,18 +215,18 @@ fn G() -> i32 {
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
|
||||
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.c6b: type = pattern_type %i32 [concrete]
|
||||
// CHECK:STDOUT: %DependentNonType.f1e65a.1: type = class_type @DependentNonType.1 [concrete]
|
||||
// CHECK:STDOUT: %DependentNonType.c38: type = class_type @DependentNonType.1 [concrete]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.844c90.1: type = pattern_type %DependentNonType.f1e65a.1 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.b08: type = pattern_type %DependentNonType.c38 [concrete]
|
||||
// CHECK:STDOUT: %MakeDependentNonType123.cpp_overload_set.type: type = cpp_overload_set_type @MakeDependentNonType123.cpp_overload_set [concrete]
|
||||
// CHECK:STDOUT: %MakeDependentNonType123.cpp_overload_set.value: %MakeDependentNonType123.cpp_overload_set.type = cpp_overload_set_value @MakeDependentNonType123.cpp_overload_set [concrete]
|
||||
// CHECK:STDOUT: %ptr.89d: type = ptr_type %DependentNonType.f1e65a.1 [concrete]
|
||||
// CHECK:STDOUT: %ptr.38c: type = ptr_type %DependentNonType.c38 [concrete]
|
||||
// CHECK:STDOUT: %MakeDependentNonType123__carbon_thunk.type: type = fn_type @MakeDependentNonType123__carbon_thunk [concrete]
|
||||
// CHECK:STDOUT: %MakeDependentNonType123__carbon_thunk: %MakeDependentNonType123__carbon_thunk.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %DependentNonType.f1e65a.2: type = class_type @DependentNonType.2 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.844c90.2: type = pattern_type %DependentNonType.f1e65a.2 [concrete]
|
||||
// CHECK:STDOUT: %DependentNonType.930: type = class_type @DependentNonType.2 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.544: type = pattern_type %DependentNonType.930 [concrete]
|
||||
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %DependentNonType.val: %DependentNonType.f1e65a.2 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %DependentNonType.val: %DependentNonType.930 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -250,31 +250,31 @@ fn G() -> i32 {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.844c90.1 = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.844c90.1 = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.b08 = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.b08 = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x.var: ref %DependentNonType.f1e65a.1 = var %x.var_patt [concrete]
|
||||
// CHECK:STDOUT: %x: ref %DependentNonType.f1e65a.1 = ref_binding x, %x.var [concrete = %x.var]
|
||||
// CHECK:STDOUT: %x.var: ref %DependentNonType.c38 = var %x.var_patt [concrete]
|
||||
// CHECK:STDOUT: %x: ref %DependentNonType.c38 = ref_binding x, %x.var [concrete = %x.var]
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %y.patt: %pattern_type.844c90.2 = ref_binding_pattern y [concrete]
|
||||
// CHECK:STDOUT: %y.var_patt: %pattern_type.844c90.2 = var_pattern %y.patt [concrete]
|
||||
// CHECK:STDOUT: %y.patt: %pattern_type.544 = ref_binding_pattern y [concrete]
|
||||
// CHECK:STDOUT: %y.var_patt: %pattern_type.544 = var_pattern %y.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %y.var: ref %DependentNonType.f1e65a.2 = var %y.var_patt [concrete]
|
||||
// CHECK:STDOUT: %y: ref %DependentNonType.f1e65a.2 = ref_binding y, %y.var [concrete = %y.var]
|
||||
// CHECK:STDOUT: %y.var: ref %DependentNonType.930 = var %y.var_patt [concrete]
|
||||
// CHECK:STDOUT: %y: ref %DependentNonType.930 = ref_binding y, %y.var [concrete = %y.var]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @__global_init() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %MakeDependentNonType123.ref: %MakeDependentNonType123.cpp_overload_set.type = name_ref MakeDependentNonType123, imports.%MakeDependentNonType123.cpp_overload_set.value [concrete = constants.%MakeDependentNonType123.cpp_overload_set.value]
|
||||
// CHECK:STDOUT: %.loc7_1: ref %DependentNonType.f1e65a.1 = splice_block file.%x.var [concrete = file.%x.var] {}
|
||||
// CHECK:STDOUT: %addr: %ptr.89d = addr_of %.loc7_1
|
||||
// CHECK:STDOUT: %.loc7_1: ref %DependentNonType.c38 = splice_block file.%x.var [concrete = file.%x.var] {}
|
||||
// CHECK:STDOUT: %addr: %ptr.38c = addr_of %.loc7_1
|
||||
// CHECK:STDOUT: %MakeDependentNonType123__carbon_thunk.call: init %empty_tuple.type = call imports.%MakeDependentNonType123__carbon_thunk.decl(%addr)
|
||||
// CHECK:STDOUT: %.loc7_69: init %DependentNonType.f1e65a.1 to %.loc7_1 = mark_in_place_init %MakeDependentNonType123__carbon_thunk.call
|
||||
// CHECK:STDOUT: %.loc7_69: init %DependentNonType.c38 to %.loc7_1 = mark_in_place_init %MakeDependentNonType123__carbon_thunk.call
|
||||
// CHECK:STDOUT: assign file.%x.var, %.loc7_69
|
||||
// CHECK:STDOUT: %.loc8_54.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct]
|
||||
// CHECK:STDOUT: %.loc8_54.2: init %DependentNonType.f1e65a.2 to file.%y.var = class_init () [concrete = constants.%DependentNonType.val]
|
||||
// CHECK:STDOUT: %.loc8_1: init %DependentNonType.f1e65a.2 = converted %.loc8_54.1, %.loc8_54.2 [concrete = constants.%DependentNonType.val]
|
||||
// CHECK:STDOUT: %.loc8_54.2: init %DependentNonType.930 to file.%y.var = class_init () [concrete = constants.%DependentNonType.val]
|
||||
// CHECK:STDOUT: %.loc8_1: init %DependentNonType.930 = converted %.loc8_54.1, %.loc8_54.2 [concrete = constants.%DependentNonType.val]
|
||||
// CHECK:STDOUT: assign file.%y.var, %.loc8_1
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
+7
-7
@@ -84,7 +84,7 @@ var x: Cpp.TwoTemplates(Cpp.A, true);
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %TwoTemplates: type = class_type @TwoTemplates [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.4dd: type = pattern_type %TwoTemplates [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.681: type = pattern_type %TwoTemplates [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]
|
||||
@@ -93,9 +93,9 @@ var x: Cpp.TwoTemplates(Cpp.A, true);
|
||||
// CHECK:STDOUT: %TwoTemplates.Op.type: type = fn_type @TwoTemplates.Op [concrete]
|
||||
// CHECK:STDOUT: %TwoTemplates.Op: %TwoTemplates.Op.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %custom_witness.213: <witness> = custom_witness (%TwoTemplates.Op), @Default [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.335: %Default.type = facet_value %TwoTemplates, (%custom_witness.213) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.d13: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.335) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTemplates, (%DefaultOrUnformed.impl_witness.d13) [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.1b5: %Default.type = facet_value %TwoTemplates, (%custom_witness.213) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.36d: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.1b5) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTemplates, (%DefaultOrUnformed.impl_witness.36d) [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -105,8 +105,8 @@ var x: Cpp.TwoTemplates(Cpp.A, true);
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.4dd = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.4dd = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.681 = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.681 = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x.var: ref %TwoTemplates = var %x.var_patt [concrete]
|
||||
// CHECK:STDOUT: %x: ref %TwoTemplates = ref_binding x, %x.var [concrete = %x.var]
|
||||
@@ -114,7 +114,7 @@ var x: Cpp.TwoTemplates(Cpp.A, true);
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @__global_init() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTemplates, (constants.%DefaultOrUnformed.impl_witness.d13) [concrete = constants.%DefaultOrUnformed.facet]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTemplates, (constants.%DefaultOrUnformed.impl_witness.36d) [concrete = constants.%DefaultOrUnformed.facet]
|
||||
// CHECK:STDOUT: %.loc7_38.1: %DefaultOrUnformed.type = converted constants.%TwoTemplates, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet]
|
||||
// CHECK:STDOUT: %as_type: type = facet_access_type %.loc7_38.1 [concrete = constants.%TwoTemplates]
|
||||
// CHECK:STDOUT: %.loc7_38.2: type = converted %.loc7_38.1, %as_type [concrete = constants.%TwoTemplates]
|
||||
|
||||
+14
-14
@@ -68,7 +68,7 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.3df: type = pattern_type %TwoTypes [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.bc0: type = pattern_type %TwoTypes [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]
|
||||
@@ -77,9 +77,9 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT: %TwoTypes.Op.type: type = fn_type @TwoTypes.Op [concrete]
|
||||
// CHECK:STDOUT: %TwoTypes.Op: %TwoTypes.Op.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %custom_witness.213: <witness> = custom_witness (%TwoTypes.Op), @Default [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.ba6: %Default.type = facet_value %TwoTypes, (%custom_witness.213) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.462: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.ba6) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTypes, (%DefaultOrUnformed.impl_witness.462) [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.f94: %Default.type = facet_value %TwoTypes, (%custom_witness.213) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.b65: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.f94) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTypes, (%DefaultOrUnformed.impl_witness.b65) [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -89,8 +89,8 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.3df = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.3df = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.bc0 = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.bc0 = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x.var: ref %TwoTypes = var %x.var_patt [concrete]
|
||||
// CHECK:STDOUT: %x: ref %TwoTypes = ref_binding x, %x.var [concrete = %x.var]
|
||||
@@ -98,7 +98,7 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @__global_init() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTypes, (constants.%DefaultOrUnformed.impl_witness.462) [concrete = constants.%DefaultOrUnformed.facet]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTypes, (constants.%DefaultOrUnformed.impl_witness.b65) [concrete = constants.%DefaultOrUnformed.facet]
|
||||
// CHECK:STDOUT: %.loc7_34.1: %DefaultOrUnformed.type = converted constants.%TwoTypes, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet]
|
||||
// CHECK:STDOUT: %as_type: type = facet_access_type %.loc7_34.1 [concrete = constants.%TwoTypes]
|
||||
// CHECK:STDOUT: %.loc7_34.2: type = converted %.loc7_34.1, %as_type [concrete = constants.%TwoTypes]
|
||||
@@ -113,7 +113,7 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.3df: type = pattern_type %TwoTypes [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.6c8: type = pattern_type %TwoTypes [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]
|
||||
@@ -122,9 +122,9 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT: %TwoTypes.Op.type: type = fn_type @TwoTypes.Op [concrete]
|
||||
// CHECK:STDOUT: %TwoTypes.Op: %TwoTypes.Op.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %custom_witness.213: <witness> = custom_witness (%TwoTypes.Op), @Default [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.ba6: %Default.type = facet_value %TwoTypes, (%custom_witness.213) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.462: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.ba6) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTypes, (%DefaultOrUnformed.impl_witness.462) [concrete]
|
||||
// CHECK:STDOUT: %Default.facet.f74: %Default.type = facet_value %TwoTypes, (%custom_witness.213) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.7ac: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.b72, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.f74) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTypes, (%DefaultOrUnformed.impl_witness.7ac) [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -134,8 +134,8 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.3df = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.3df = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.6c8 = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.6c8 = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x.var: ref %TwoTypes = var %x.var_patt [concrete]
|
||||
// CHECK:STDOUT: %x: ref %TwoTypes = ref_binding x, %x.var [concrete = %x.var]
|
||||
@@ -143,7 +143,7 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @__global_init() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTypes, (constants.%DefaultOrUnformed.impl_witness.462) [concrete = constants.%DefaultOrUnformed.facet]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTypes, (constants.%DefaultOrUnformed.impl_witness.7ac) [concrete = constants.%DefaultOrUnformed.facet]
|
||||
// CHECK:STDOUT: %.loc7_32.1: %DefaultOrUnformed.type = converted constants.%TwoTypes, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet]
|
||||
// CHECK:STDOUT: %as_type: type = facet_access_type %.loc7_32.1 [concrete = constants.%TwoTypes]
|
||||
// CHECK:STDOUT: %.loc7_32.2: type = converted %.loc7_32.1, %as_type [concrete = constants.%TwoTypes]
|
||||
|
||||
@@ -38,22 +38,22 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B);
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %A: type = class_type @A [concrete]
|
||||
// CHECK:STDOUT: %ptr.bce: type = ptr_type %A [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.d1f: type = pattern_type %ptr.bce [concrete]
|
||||
// CHECK:STDOUT: %ptr.9f7: type = ptr_type %A [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.008: type = pattern_type %ptr.9f7 [concrete]
|
||||
// CHECK:STDOUT: %var.type.674: type = cpp_type_template_type r#var [concrete]
|
||||
// CHECK:STDOUT: %var.template.164: %var.type.674 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.b54: type = pattern_type %A [concrete]
|
||||
// CHECK:STDOUT: %addr.b03: %ptr.bce = addr_of imports.%var.var.389 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.aa6: type = pattern_type %A [concrete]
|
||||
// CHECK:STDOUT: %addr.b69: %ptr.9f7 = addr_of imports.%var.var.f74 [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: %pattern_type.676: type = pattern_type %B [concrete]
|
||||
// CHECK:STDOUT: %addr.dd0: %ptr.13d = addr_of imports.%var.var.c8c [concrete]
|
||||
// CHECK:STDOUT: %ptr.fab: type = ptr_type %B [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.857: type = pattern_type %ptr.fab [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.bbe: type = pattern_type %B [concrete]
|
||||
// CHECK:STDOUT: %addr.e81: %ptr.fab = addr_of imports.%var.var.15d [concrete]
|
||||
// CHECK:STDOUT: %Wrap: type = class_type @Wrap [concrete]
|
||||
// CHECK:STDOUT: %var.type.726: type = cpp_type_template_type r#var [concrete]
|
||||
// CHECK:STDOUT: %var.template.093: %var.type.726 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %addr.9d1: %ptr.bce = addr_of imports.%var.var.71c [concrete]
|
||||
// CHECK:STDOUT: %addr.03a: %ptr.13d = addr_of imports.%var.var.74b [concrete]
|
||||
// CHECK:STDOUT: %addr.4d5: %ptr.9f7 = addr_of imports.%var.var.e2c [concrete]
|
||||
// CHECK:STDOUT: %addr.fa2: %ptr.fab = addr_of imports.%var.var.ded [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -66,60 +66,60 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {}
|
||||
// CHECK:STDOUT: %var.template.164: %var.type.674 = struct_value () [concrete = constants.%var.template.164]
|
||||
// CHECK:STDOUT: %var.patt.d0f: %pattern_type.b54 = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.26b: %pattern_type.b54 = var_pattern %var.patt.d0f [concrete]
|
||||
// CHECK:STDOUT: %var.var.389: ref %A = var %var.var_patt.26b [concrete]
|
||||
// CHECK:STDOUT: %var.patt.17e: %pattern_type.aa6 = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.619: %pattern_type.aa6 = var_pattern %var.patt.17e [concrete]
|
||||
// CHECK:STDOUT: %var.var.f74: ref %A = var %var.var_patt.619 [concrete]
|
||||
// CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {}
|
||||
// CHECK:STDOUT: %var.patt.d82: %pattern_type.676 = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.857: %pattern_type.676 = var_pattern %var.patt.d82 [concrete]
|
||||
// CHECK:STDOUT: %var.var.c8c: ref %B = var %var.var_patt.857 [concrete]
|
||||
// CHECK:STDOUT: %var.patt.ece: %pattern_type.bbe = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.891: %pattern_type.bbe = var_pattern %var.patt.ece [concrete]
|
||||
// CHECK:STDOUT: %var.var.15d: ref %B = var %var.var_patt.891 [concrete]
|
||||
// CHECK:STDOUT: %Wrap.decl: type = class_decl @Wrap [concrete = constants.%Wrap] {} {}
|
||||
// CHECK:STDOUT: %var.template.093: %var.type.726 = struct_value () [concrete = constants.%var.template.093]
|
||||
// CHECK:STDOUT: %var.patt.fbd: %pattern_type.b54 = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.4df: %pattern_type.b54 = var_pattern %var.patt.fbd [concrete]
|
||||
// CHECK:STDOUT: %var.var.71c: ref %A = var %var.var_patt.4df [concrete]
|
||||
// CHECK:STDOUT: %var.patt.e9b: %pattern_type.676 = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.0e0: %pattern_type.676 = var_pattern %var.patt.e9b [concrete]
|
||||
// CHECK:STDOUT: %var.var.74b: ref %B = var %var.var_patt.0e0 [concrete]
|
||||
// CHECK:STDOUT: %var.patt.bf9: %pattern_type.aa6 = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.a11: %pattern_type.aa6 = var_pattern %var.patt.bf9 [concrete]
|
||||
// CHECK:STDOUT: %var.var.e2c: ref %A = var %var.var_patt.a11 [concrete]
|
||||
// CHECK:STDOUT: %var.patt.7c6: %pattern_type.bbe = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.005: %pattern_type.bbe = var_pattern %var.patt.7c6 [concrete]
|
||||
// CHECK:STDOUT: %var.var.ded: ref %B = var %var.var_patt.005 [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %pa.patt: %pattern_type.d1f = value_binding_pattern pa [concrete]
|
||||
// CHECK:STDOUT: %pa.patt: %pattern_type.008 = value_binding_pattern pa [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.bce] {
|
||||
// CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.9f7] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc7: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %A.ref.loc7: type = name_ref A, imports.%A.decl [concrete = constants.%A]
|
||||
// CHECK:STDOUT: %ptr.loc7: type = ptr_type %A.ref.loc7 [concrete = constants.%ptr.bce]
|
||||
// CHECK:STDOUT: %ptr.loc7: type = ptr_type %A.ref.loc7 [concrete = constants.%ptr.9f7]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %pa: %ptr.bce = value_binding pa, @__global_init.%addr.loc7
|
||||
// CHECK:STDOUT: %pa: %ptr.9f7 = value_binding pa, @__global_init.%addr.loc7
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %pb.patt: %pattern_type.dd8 = value_binding_pattern pb [concrete]
|
||||
// CHECK:STDOUT: %pb.patt: %pattern_type.857 = value_binding_pattern pb [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc8: type = splice_block %ptr.loc8 [concrete = constants.%ptr.13d] {
|
||||
// CHECK:STDOUT: %.loc8: type = splice_block %ptr.loc8 [concrete = constants.%ptr.fab] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc8: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %B.ref.loc8: type = name_ref B, imports.%B.decl [concrete = constants.%B]
|
||||
// CHECK:STDOUT: %ptr.loc8: type = ptr_type %B.ref.loc8 [concrete = constants.%ptr.13d]
|
||||
// CHECK:STDOUT: %ptr.loc8: type = ptr_type %B.ref.loc8 [concrete = constants.%ptr.fab]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %pb: %ptr.13d = value_binding pb, @__global_init.%addr.loc8
|
||||
// CHECK:STDOUT: %pb: %ptr.fab = value_binding pb, @__global_init.%addr.loc8
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %pwa.patt: %pattern_type.d1f = value_binding_pattern pwa [concrete]
|
||||
// CHECK:STDOUT: %pwa.patt: %pattern_type.008 = value_binding_pattern pwa [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc9: type = splice_block %ptr.loc9 [concrete = constants.%ptr.bce] {
|
||||
// CHECK:STDOUT: %.loc9: type = splice_block %ptr.loc9 [concrete = constants.%ptr.9f7] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc9: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %A.ref.loc9: type = name_ref A, imports.%A.decl [concrete = constants.%A]
|
||||
// CHECK:STDOUT: %ptr.loc9: type = ptr_type %A.ref.loc9 [concrete = constants.%ptr.bce]
|
||||
// CHECK:STDOUT: %ptr.loc9: type = ptr_type %A.ref.loc9 [concrete = constants.%ptr.9f7]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %pwa: %ptr.bce = value_binding pwa, @__global_init.%addr.loc9
|
||||
// CHECK:STDOUT: %pwa: %ptr.9f7 = value_binding pwa, @__global_init.%addr.loc9
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %pwb.patt: %pattern_type.dd8 = value_binding_pattern pwb [concrete]
|
||||
// CHECK:STDOUT: %pwb.patt: %pattern_type.857 = value_binding_pattern pwb [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc10: type = splice_block %ptr.loc10 [concrete = constants.%ptr.13d] {
|
||||
// CHECK:STDOUT: %.loc10: type = splice_block %ptr.loc10 [concrete = constants.%ptr.fab] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc10: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %B.ref.loc10: type = name_ref B, imports.%B.decl [concrete = constants.%B]
|
||||
// CHECK:STDOUT: %ptr.loc10: type = ptr_type %B.ref.loc10 [concrete = constants.%ptr.13d]
|
||||
// CHECK:STDOUT: %ptr.loc10: type = ptr_type %B.ref.loc10 [concrete = constants.%ptr.fab]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %pwb: %ptr.13d = value_binding pwb, @__global_init.%addr.loc10
|
||||
// CHECK:STDOUT: %pwb: %ptr.fab = value_binding pwb, @__global_init.%addr.loc10
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @__global_init() {
|
||||
@@ -128,24 +128,24 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B);
|
||||
// CHECK:STDOUT: %var.ref.loc7: %var.type.674 = name_ref r#var, imports.%var.template.164 [concrete = constants.%var.template.164]
|
||||
// CHECK:STDOUT: %Cpp.ref.loc7_29: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %A.ref.loc7: type = name_ref A, imports.%A.decl [concrete = constants.%A]
|
||||
// CHECK:STDOUT: %addr.loc7: %ptr.bce = addr_of imports.%var.var.389 [concrete = constants.%addr.b03]
|
||||
// CHECK:STDOUT: %addr.loc7: %ptr.9f7 = addr_of imports.%var.var.f74 [concrete = constants.%addr.b69]
|
||||
// CHECK:STDOUT: %Cpp.ref.loc8_19: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %var.ref.loc8: %var.type.674 = name_ref r#var, imports.%var.template.164 [concrete = constants.%var.template.164]
|
||||
// CHECK:STDOUT: %Cpp.ref.loc8_29: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %B.ref.loc8: type = name_ref B, imports.%B.decl [concrete = constants.%B]
|
||||
// CHECK:STDOUT: %addr.loc8: %ptr.13d = addr_of imports.%var.var.c8c [concrete = constants.%addr.dd0]
|
||||
// CHECK:STDOUT: %addr.loc8: %ptr.fab = addr_of imports.%var.var.15d [concrete = constants.%addr.e81]
|
||||
// CHECK:STDOUT: %Cpp.ref.loc9_20: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %Wrap.ref.loc9: type = name_ref Wrap, imports.%Wrap.decl [concrete = constants.%Wrap]
|
||||
// CHECK:STDOUT: %var.ref.loc9: %var.type.726 = name_ref r#var, imports.%var.template.093 [concrete = constants.%var.template.093]
|
||||
// CHECK:STDOUT: %Cpp.ref.loc9_35: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %A.ref.loc9: type = name_ref A, imports.%A.decl [concrete = constants.%A]
|
||||
// CHECK:STDOUT: %addr.loc9: %ptr.bce = addr_of imports.%var.var.71c [concrete = constants.%addr.9d1]
|
||||
// CHECK:STDOUT: %addr.loc9: %ptr.9f7 = addr_of imports.%var.var.e2c [concrete = constants.%addr.4d5]
|
||||
// CHECK:STDOUT: %Cpp.ref.loc10_20: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %Wrap.ref.loc10: type = name_ref Wrap, imports.%Wrap.decl [concrete = constants.%Wrap]
|
||||
// CHECK:STDOUT: %var.ref.loc10: %var.type.726 = name_ref r#var, imports.%var.template.093 [concrete = constants.%var.template.093]
|
||||
// CHECK:STDOUT: %Cpp.ref.loc10_35: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %B.ref.loc10: type = name_ref B, imports.%B.decl [concrete = constants.%B]
|
||||
// CHECK:STDOUT: %addr.loc10: %ptr.13d = addr_of imports.%var.var.74b [concrete = constants.%addr.03a]
|
||||
// CHECK:STDOUT: %addr.loc10: %ptr.fab = addr_of imports.%var.var.ded [concrete = constants.%addr.fa2]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
Reference in New Issue
Block a user