Fix cross-package signature mismatches. (#7232)

Fixes link failures when referencing a symbol involving a fingerprint
from a different package.

Previously we included the `Namespace`'s `import_id` as part of its
fingerprint, which caused local and imported namespaces to get different
fingerprints. We now store the `import_id` on the `NameScope` instead of
on the `Namespace` inst to avoid this problem.

Also, when we reach a package-level `NameScopeId`, consistently
fingerprint it as a (package name, library name) pair. Previously the
fingerprinting depended on whether it was imported or not, as an
imported `NameScopeId` had a parent scope (the current package). We need
to include the library name here so that private entities with the same
name in different libraries have different fingerprints.
This commit is contained in:
Richard Smith
2026-05-21 00:02:29 +00:00
committed by GitHub
parent 1231098c14
commit 05cc09daca
662 changed files with 51181 additions and 50920 deletions
@@ -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.9de: type = pattern_type %A [concrete]
// CHECK:STDOUT: %pattern_type.b54: 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.270: type = ptr_type %A [concrete]
// CHECK:STDOUT: %ptr.bce: 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.d0f: type = pattern_type %B [concrete]
// CHECK:STDOUT: %pattern_type.676: 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.a04: type = ptr_type %B [concrete]
// CHECK:STDOUT: %ptr.13d: 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.9de = ref_binding_pattern a1 [concrete]
// CHECK:STDOUT: %a1.var_patt: %pattern_type.9de = var_pattern %a1.patt [concrete]
// 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: }
// 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.d0f = ref_binding_pattern b1 [concrete]
// CHECK:STDOUT: %b1.var_patt: %pattern_type.d0f = var_pattern %b1.patt [concrete]
// 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: }
// 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.d0f = ref_binding_pattern b2 [concrete]
// CHECK:STDOUT: %b2.var_patt: %pattern_type.d0f = var_pattern %b2.patt [concrete]
// 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: }
// 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.9de = ref_binding_pattern a2 [concrete]
// CHECK:STDOUT: %a2.var_patt: %pattern_type.9de = var_pattern %a2.patt [concrete]
// 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: }
// 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.270 = addr_of %.loc7_1
// CHECK:STDOUT: %addr.loc7: %ptr.bce = 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.a04 = addr_of %.loc8_1
// CHECK:STDOUT: %addr.loc8: %ptr.13d = 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.a04 = addr_of %.loc9_1
// CHECK:STDOUT: %addr.loc9: %ptr.13d = 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.270 = addr_of %.loc10_1
// CHECK:STDOUT: %addr.loc10: %ptr.bce = 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,29 +122,29 @@ 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.2da: type = pattern_type %TwoTypes [concrete]
// CHECK:STDOUT: %pattern_type.3df: 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.50c: %Default.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.50c) [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.85d: %T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3 = struct_value () [symbolic]
// CHECK:STDOUT: %T.4ca: %Default.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.47c: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.4ca) [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.25a: %T.as_type.as.DefaultOrUnformed.impl.Op.type.47c = struct_value () [symbolic]
// 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.2e3: <witness> = custom_witness (%TwoTypes.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.c59: %Default.type = facet_value %TwoTypes, (%custom_witness.2e3) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.8ca: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.fc3, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.c59) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTypes, (%DefaultOrUnformed.impl_witness.8ca) [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: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
// CHECK:STDOUT: %Core.import_ref.653: @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op.type (%T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3) = 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.85d)]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.fc3 = impl_witness_table (%Core.import_ref.653), @T.as_type.as.DefaultOrUnformed.impl [concrete]
// 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: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: %pattern_type.2da = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.2da = var_pattern %x.patt [concrete]
// CHECK:STDOUT: %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: }
// 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.8ca) [concrete = constants.%DefaultOrUnformed.facet]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTypes, (constants.%DefaultOrUnformed.impl_witness.462) [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,110 +166,110 @@ 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.49edc4.1: type = class_type @TypePack.1 [concrete]
// CHECK:STDOUT: %pattern_type.9db866.1: type = pattern_type %TypePack.49edc4.1 [concrete]
// 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: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
// CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete]
// CHECK:STDOUT: %T.50c: %Default.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.50c) [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.85d: %T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3 = struct_value () [symbolic]
// CHECK:STDOUT: %TypePack.Op.type.c6ed4b.1: type = fn_type @TypePack.Op.1 [concrete]
// CHECK:STDOUT: %TypePack.Op.4bf03f.1: %TypePack.Op.type.c6ed4b.1 = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.969c90.1: <witness> = custom_witness (%TypePack.Op.4bf03f.1), @Default [concrete]
// CHECK:STDOUT: %Default.facet.314ffa.1: %Default.type = facet_value %TypePack.49edc4.1, (%custom_witness.969c90.1) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.f67529.1: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.fc3, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.314ffa.1) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.de969b.1: %DefaultOrUnformed.type = facet_value %TypePack.49edc4.1, (%DefaultOrUnformed.impl_witness.f67529.1) [concrete]
// CHECK:STDOUT: %TypePack.49edc4.2: type = class_type @TypePack.2 [concrete]
// CHECK:STDOUT: %pattern_type.9db866.2: type = pattern_type %TypePack.49edc4.2 [concrete]
// CHECK:STDOUT: %TypePack.Op.type.c6ed4b.2: type = fn_type @TypePack.Op.2 [concrete]
// CHECK:STDOUT: %TypePack.Op.4bf03f.2: %TypePack.Op.type.c6ed4b.2 = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.969c90.2: <witness> = custom_witness (%TypePack.Op.4bf03f.2), @Default [concrete]
// CHECK:STDOUT: %Default.facet.314ffa.2: %Default.type = facet_value %TypePack.49edc4.2, (%custom_witness.969c90.2) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.f67529.2: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.fc3, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.314ffa.2) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.de969b.2: %DefaultOrUnformed.type = facet_value %TypePack.49edc4.2, (%DefaultOrUnformed.impl_witness.f67529.2) [concrete]
// CHECK:STDOUT: %TypePack.49edc4.3: type = class_type @TypePack.3 [concrete]
// CHECK:STDOUT: %pattern_type.9db866.3: type = pattern_type %TypePack.49edc4.3 [concrete]
// CHECK:STDOUT: %TypePack.Op.type.c6ed4b.3: type = fn_type @TypePack.Op.3 [concrete]
// CHECK:STDOUT: %TypePack.Op.4bf03f.3: %TypePack.Op.type.c6ed4b.3 = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.969c90.3: <witness> = custom_witness (%TypePack.Op.4bf03f.3), @Default [concrete]
// CHECK:STDOUT: %Default.facet.314ffa.3: %Default.type = facet_value %TypePack.49edc4.3, (%custom_witness.969c90.3) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.f67529.3: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.fc3, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.314ffa.3) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.de969b.3: %DefaultOrUnformed.type = facet_value %TypePack.49edc4.3, (%DefaultOrUnformed.impl_witness.f67529.3) [concrete]
// CHECK:STDOUT: %TypePack.49edc4.4: type = class_type @TypePack.4 [concrete]
// CHECK:STDOUT: %pattern_type.9db866.4: type = pattern_type %TypePack.49edc4.4 [concrete]
// CHECK:STDOUT: %TypePack.Op.type.c6ed4b.4: type = fn_type @TypePack.Op.4 [concrete]
// CHECK:STDOUT: %TypePack.Op.4bf03f.4: %TypePack.Op.type.c6ed4b.4 = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.969c90.4: <witness> = custom_witness (%TypePack.Op.4bf03f.4), @Default [concrete]
// CHECK:STDOUT: %Default.facet.314ffa.4: %Default.type = facet_value %TypePack.49edc4.4, (%custom_witness.969c90.4) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.f67529.4: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.fc3, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.314ffa.4) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet.de969b.4: %DefaultOrUnformed.type = facet_value %TypePack.49edc4.4, (%DefaultOrUnformed.impl_witness.f67529.4) [concrete]
// CHECK:STDOUT: %T.4ca: %Default.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.47c: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.4ca) [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.25a: %T.as_type.as.DefaultOrUnformed.impl.Op.type.47c = struct_value () [symbolic]
// 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: %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: %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: %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: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
// CHECK:STDOUT: %Core.import_ref.653: @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op.type (%T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3) = 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.85d)]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.fc3 = impl_witness_table (%Core.import_ref.653), @T.as_type.as.DefaultOrUnformed.impl [concrete]
// 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: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %a0.patt: %pattern_type.9db866.1 = ref_binding_pattern a0 [concrete]
// CHECK:STDOUT: %a0.var_patt: %pattern_type.9db866.1 = var_pattern %a0.patt [concrete]
// 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: }
// CHECK:STDOUT: %a0.var: ref %TypePack.49edc4.1 = var %a0.var_patt [concrete]
// CHECK:STDOUT: %a0: ref %TypePack.49edc4.1 = ref_binding a0, %a0.var [concrete = %a0.var]
// 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: name_binding_decl {
// CHECK:STDOUT: %a1.patt: %pattern_type.9db866.2 = ref_binding_pattern a1 [concrete]
// CHECK:STDOUT: %a1.var_patt: %pattern_type.9db866.2 = var_pattern %a1.patt [concrete]
// 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: }
// CHECK:STDOUT: %a1.var: ref %TypePack.49edc4.2 = var %a1.var_patt [concrete]
// CHECK:STDOUT: %a1: ref %TypePack.49edc4.2 = ref_binding a1, %a1.var [concrete = %a1.var]
// 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: name_binding_decl {
// CHECK:STDOUT: %a2.patt: %pattern_type.9db866.3 = ref_binding_pattern a2 [concrete]
// CHECK:STDOUT: %a2.var_patt: %pattern_type.9db866.3 = var_pattern %a2.patt [concrete]
// 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: }
// CHECK:STDOUT: %a2.var: ref %TypePack.49edc4.3 = var %a2.var_patt [concrete]
// CHECK:STDOUT: %a2: ref %TypePack.49edc4.3 = ref_binding a2, %a2.var [concrete = %a2.var]
// 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: name_binding_decl {
// CHECK:STDOUT: %a3.patt: %pattern_type.9db866.4 = ref_binding_pattern a3 [concrete]
// CHECK:STDOUT: %a3.var_patt: %pattern_type.9db866.4 = var_pattern %a3.patt [concrete]
// 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: }
// CHECK:STDOUT: %a3.var: ref %TypePack.49edc4.4 = var %a3.var_patt [concrete]
// CHECK:STDOUT: %a3: ref %TypePack.49edc4.4 = ref_binding a3, %a3.var [concrete = %a3.var]
// 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: }
// CHECK:STDOUT:
// CHECK:STDOUT: fn @__global_init() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc7: %DefaultOrUnformed.type = facet_value constants.%TypePack.49edc4.1, (constants.%DefaultOrUnformed.impl_witness.f67529.1) [concrete = constants.%DefaultOrUnformed.facet.de969b.1]
// CHECK:STDOUT: %.loc7_23.1: %DefaultOrUnformed.type = converted constants.%TypePack.49edc4.1, %DefaultOrUnformed.facet.loc7 [concrete = constants.%DefaultOrUnformed.facet.de969b.1]
// CHECK:STDOUT: %as_type.loc7: type = facet_access_type %.loc7_23.1 [concrete = constants.%TypePack.49edc4.1]
// CHECK:STDOUT: %.loc7_23.2: type = converted %.loc7_23.1, %as_type.loc7 [concrete = constants.%TypePack.49edc4.1]
// CHECK:STDOUT: %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: <elided>
// CHECK:STDOUT: %.loc7_1: ref %TypePack.49edc4.1 = splice_block file.%a0.var [concrete = file.%a0.var] {}
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc7: init %TypePack.49edc4.1 to %.loc7_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.1()
// 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: assign file.%a0.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc7
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8: %DefaultOrUnformed.type = facet_value constants.%TypePack.49edc4.2, (constants.%DefaultOrUnformed.impl_witness.f67529.2) [concrete = constants.%DefaultOrUnformed.facet.de969b.2]
// CHECK:STDOUT: %.loc8_28.1: %DefaultOrUnformed.type = converted constants.%TypePack.49edc4.2, %DefaultOrUnformed.facet.loc8 [concrete = constants.%DefaultOrUnformed.facet.de969b.2]
// CHECK:STDOUT: %as_type.loc8: type = facet_access_type %.loc8_28.1 [concrete = constants.%TypePack.49edc4.2]
// CHECK:STDOUT: %.loc8_28.2: type = converted %.loc8_28.1, %as_type.loc8 [concrete = constants.%TypePack.49edc4.2]
// CHECK:STDOUT: %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: <elided>
// CHECK:STDOUT: %.loc8_1: ref %TypePack.49edc4.2 = splice_block file.%a1.var [concrete = file.%a1.var] {}
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc8: init %TypePack.49edc4.2 to %.loc8_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.2()
// 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: assign file.%a1.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc8
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc9: %DefaultOrUnformed.type = facet_value constants.%TypePack.49edc4.3, (constants.%DefaultOrUnformed.impl_witness.f67529.3) [concrete = constants.%DefaultOrUnformed.facet.de969b.3]
// CHECK:STDOUT: %.loc9_35.1: %DefaultOrUnformed.type = converted constants.%TypePack.49edc4.3, %DefaultOrUnformed.facet.loc9 [concrete = constants.%DefaultOrUnformed.facet.de969b.3]
// CHECK:STDOUT: %as_type.loc9: type = facet_access_type %.loc9_35.1 [concrete = constants.%TypePack.49edc4.3]
// CHECK:STDOUT: %.loc9_35.2: type = converted %.loc9_35.1, %as_type.loc9 [concrete = constants.%TypePack.49edc4.3]
// CHECK:STDOUT: %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: <elided>
// CHECK:STDOUT: %.loc9_1: ref %TypePack.49edc4.3 = splice_block file.%a2.var [concrete = file.%a2.var] {}
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc9: init %TypePack.49edc4.3 to %.loc9_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.3()
// 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: assign file.%a2.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc9
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc10: %DefaultOrUnformed.type = facet_value constants.%TypePack.49edc4.4, (constants.%DefaultOrUnformed.impl_witness.f67529.4) [concrete = constants.%DefaultOrUnformed.facet.de969b.4]
// CHECK:STDOUT: %.loc10_42.1: %DefaultOrUnformed.type = converted constants.%TypePack.49edc4.4, %DefaultOrUnformed.facet.loc10 [concrete = constants.%DefaultOrUnformed.facet.de969b.4]
// CHECK:STDOUT: %as_type.loc10: type = facet_access_type %.loc10_42.1 [concrete = constants.%TypePack.49edc4.4]
// CHECK:STDOUT: %.loc10_42.2: type = converted %.loc10_42.1, %as_type.loc10 [concrete = constants.%TypePack.49edc4.4]
// CHECK:STDOUT: %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: <elided>
// CHECK:STDOUT: %.loc10_1: ref %TypePack.49edc4.4 = splice_block file.%a3.var [concrete = file.%a3.var] {}
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc10: init %TypePack.49edc4.4 to %.loc10_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.4()
// 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: 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.9de: type = pattern_type %A [concrete]
// CHECK:STDOUT: %pattern_type.b54: 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.a04: type = ptr_type %B [concrete]
// CHECK:STDOUT: %ptr.270: type = ptr_type %A [concrete]
// CHECK:STDOUT: %ptr.13d: type = ptr_type %B [concrete]
// CHECK:STDOUT: %ptr.bce: 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: %.5ef: ref %B = temporary invalid, %B.val [concrete]
// CHECK:STDOUT: %.dae: 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.9de = ref_binding_pattern a [concrete]
// CHECK:STDOUT: %a.var_patt: %pattern_type.9de = var_pattern %a.patt [concrete]
// 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: }
// 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.%.5ef]
// CHECK:STDOUT: %.loc7_41.2: ref %B = temporary %.loc7_39.2, %.loc7_41.1 [concrete = constants.%.dae]
// 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.a04 = addr_of %.loc7_41.4
// CHECK:STDOUT: %addr.loc7_49.2: %ptr.270 = addr_of %.loc7_1
// 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: %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
+34 -34
View File
@@ -42,18 +42,18 @@ var x2: X(Cpp.IsLarge(Cpp.Large)) = X(true).Make();
// CHECK:STDOUT: %IsLarge.template: %IsLarge.type = struct_value () [concrete]
// CHECK:STDOUT: %Small: type = class_type @Small [concrete]
// CHECK:STDOUT: %false: bool = bool_literal false [concrete]
// CHECK:STDOUT: %X.49c: type = class_type @X, @X(%false) [concrete]
// CHECK:STDOUT: %X.Make.type.4e2: type = fn_type @X.Make, @X(%false) [concrete]
// CHECK:STDOUT: %X.Make.ae0: %X.Make.type.4e2 = struct_value () [concrete]
// CHECK:STDOUT: %pattern_type.607: type = pattern_type %X.49c [concrete]
// CHECK:STDOUT: %X.Make.specific_fn.9a2: <specific function> = specific_function %X.Make.ae0, @X.Make(%false) [concrete]
// CHECK:STDOUT: %X.3b1: type = class_type @X, @X(%false) [concrete]
// CHECK:STDOUT: %X.Make.type.ae8: type = fn_type @X.Make, @X(%false) [concrete]
// CHECK:STDOUT: %X.Make.f03: %X.Make.type.ae8 = struct_value () [concrete]
// CHECK:STDOUT: %pattern_type.b61: type = pattern_type %X.3b1 [concrete]
// CHECK:STDOUT: %X.Make.specific_fn.a38: <specific function> = specific_function %X.Make.f03, @X.Make(%false) [concrete]
// CHECK:STDOUT: %Large: type = class_type @Large [concrete]
// CHECK:STDOUT: %true: bool = bool_literal true [concrete]
// CHECK:STDOUT: %X.07f: type = class_type @X, @X(%true) [concrete]
// CHECK:STDOUT: %X.Make.type.7d1: type = fn_type @X.Make, @X(%true) [concrete]
// CHECK:STDOUT: %X.Make.3ee: %X.Make.type.7d1 = struct_value () [concrete]
// CHECK:STDOUT: %pattern_type.dd2: type = pattern_type %X.07f [concrete]
// CHECK:STDOUT: %X.Make.specific_fn.5a7: <specific function> = specific_function %X.Make.3ee, @X.Make(%true) [concrete]
// CHECK:STDOUT: %X.26c: type = class_type @X, @X(%true) [concrete]
// CHECK:STDOUT: %X.Make.type.669: type = fn_type @X.Make, @X(%true) [concrete]
// CHECK:STDOUT: %X.Make.8a2: %X.Make.type.669 = struct_value () [concrete]
// CHECK:STDOUT: %pattern_type.63b: type = pattern_type %X.26c [concrete]
// CHECK:STDOUT: %X.Make.specific_fn.17d: <specific function> = specific_function %X.Make.8a2, @X.Make(%true) [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -70,56 +70,56 @@ var x2: X(Cpp.IsLarge(Cpp.Large)) = X(true).Make();
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x1.patt: %pattern_type.607 = ref_binding_pattern x1 [concrete]
// CHECK:STDOUT: %x1.var_patt: %pattern_type.607 = var_pattern %x1.patt [concrete]
// CHECK:STDOUT: %x1.patt: %pattern_type.b61 = ref_binding_pattern x1 [concrete]
// CHECK:STDOUT: %x1.var_patt: %pattern_type.b61 = var_pattern %x1.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x1.var: ref %X.49c = var %x1.var_patt [concrete]
// CHECK:STDOUT: %.loc11: type = splice_block %X.loc11 [concrete = constants.%X.49c] {
// CHECK:STDOUT: %x1.var: ref %X.3b1 = var %x1.var_patt [concrete]
// CHECK:STDOUT: %.loc11: type = splice_block %X.loc11 [concrete = constants.%X.3b1] {
// CHECK:STDOUT: %X.ref.loc11: %X.type = name_ref X, %X.decl [concrete = constants.%X.generic]
// CHECK:STDOUT: %Cpp.ref.loc11_11: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %IsLarge.ref.loc11: %IsLarge.type = name_ref IsLarge, imports.%IsLarge.template [concrete = constants.%IsLarge.template]
// CHECK:STDOUT: %Cpp.ref.loc11_23: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %Small.ref: type = name_ref Small, imports.%Small.decl [concrete = constants.%Small]
// CHECK:STDOUT: %false: bool = bool_literal false [concrete = constants.%false]
// CHECK:STDOUT: %X.loc11: type = class_type @X, @X(constants.%false) [concrete = constants.%X.49c]
// CHECK:STDOUT: %X.loc11: type = class_type @X, @X(constants.%false) [concrete = constants.%X.3b1]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x1: ref %X.49c = ref_binding x1, %x1.var [concrete = %x1.var]
// CHECK:STDOUT: %x1: ref %X.3b1 = ref_binding x1, %x1.var [concrete = %x1.var]
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x2.patt: %pattern_type.dd2 = ref_binding_pattern x2 [concrete]
// CHECK:STDOUT: %x2.var_patt: %pattern_type.dd2 = var_pattern %x2.patt [concrete]
// CHECK:STDOUT: %x2.patt: %pattern_type.63b = ref_binding_pattern x2 [concrete]
// CHECK:STDOUT: %x2.var_patt: %pattern_type.63b = var_pattern %x2.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x2.var: ref %X.07f = var %x2.var_patt [concrete]
// CHECK:STDOUT: %.loc12: type = splice_block %X.loc12 [concrete = constants.%X.07f] {
// CHECK:STDOUT: %x2.var: ref %X.26c = var %x2.var_patt [concrete]
// CHECK:STDOUT: %.loc12: type = splice_block %X.loc12 [concrete = constants.%X.26c] {
// CHECK:STDOUT: %X.ref.loc12: %X.type = name_ref X, %X.decl [concrete = constants.%X.generic]
// CHECK:STDOUT: %Cpp.ref.loc12_11: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %IsLarge.ref.loc12: %IsLarge.type = name_ref IsLarge, imports.%IsLarge.template [concrete = constants.%IsLarge.template]
// CHECK:STDOUT: %Cpp.ref.loc12_23: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %Large.ref: type = name_ref Large, imports.%Large.decl [concrete = constants.%Large]
// CHECK:STDOUT: %true: bool = bool_literal true [concrete = constants.%true]
// CHECK:STDOUT: %X.loc12: type = class_type @X, @X(constants.%true) [concrete = constants.%X.07f]
// CHECK:STDOUT: %X.loc12: type = class_type @X, @X(constants.%true) [concrete = constants.%X.26c]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x2: ref %X.07f = ref_binding x2, %x2.var [concrete = %x2.var]
// CHECK:STDOUT: %x2: ref %X.26c = ref_binding x2, %x2.var [concrete = %x2.var]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: fn @__global_init() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %X.ref.loc11: %X.type = name_ref X, file.%X.decl [concrete = constants.%X.generic]
// CHECK:STDOUT: %false: bool = bool_literal false [concrete = constants.%false]
// CHECK:STDOUT: %X.loc11: type = class_type @X, @X(constants.%false) [concrete = constants.%X.49c]
// CHECK:STDOUT: %.loc11_45: %X.Make.type.4e2 = specific_constant @X.%X.Make.decl, @X(constants.%false) [concrete = constants.%X.Make.ae0]
// CHECK:STDOUT: %Make.ref.loc11: %X.Make.type.4e2 = name_ref Make, %.loc11_45 [concrete = constants.%X.Make.ae0]
// CHECK:STDOUT: %X.Make.specific_fn.loc11: <specific function> = specific_function %Make.ref.loc11, @X.Make(constants.%false) [concrete = constants.%X.Make.specific_fn.9a2]
// CHECK:STDOUT: %.loc11_1: ref %X.49c = splice_block file.%x1.var [concrete = file.%x1.var] {}
// CHECK:STDOUT: %X.Make.call.loc11: init %X.49c to %.loc11_1 = call %X.Make.specific_fn.loc11()
// CHECK:STDOUT: %X.loc11: type = class_type @X, @X(constants.%false) [concrete = constants.%X.3b1]
// CHECK:STDOUT: %.loc11_45: %X.Make.type.ae8 = specific_constant @X.%X.Make.decl, @X(constants.%false) [concrete = constants.%X.Make.f03]
// CHECK:STDOUT: %Make.ref.loc11: %X.Make.type.ae8 = name_ref Make, %.loc11_45 [concrete = constants.%X.Make.f03]
// CHECK:STDOUT: %X.Make.specific_fn.loc11: <specific function> = specific_function %Make.ref.loc11, @X.Make(constants.%false) [concrete = constants.%X.Make.specific_fn.a38]
// CHECK:STDOUT: %.loc11_1: ref %X.3b1 = splice_block file.%x1.var [concrete = file.%x1.var] {}
// CHECK:STDOUT: %X.Make.call.loc11: init %X.3b1 to %.loc11_1 = call %X.Make.specific_fn.loc11()
// CHECK:STDOUT: assign file.%x1.var, %X.Make.call.loc11
// CHECK:STDOUT: %X.ref.loc12: %X.type = name_ref X, file.%X.decl [concrete = constants.%X.generic]
// CHECK:STDOUT: %true: bool = bool_literal true [concrete = constants.%true]
// CHECK:STDOUT: %X.loc12: type = class_type @X, @X(constants.%true) [concrete = constants.%X.07f]
// CHECK:STDOUT: %.loc12_44: %X.Make.type.7d1 = specific_constant @X.%X.Make.decl, @X(constants.%true) [concrete = constants.%X.Make.3ee]
// CHECK:STDOUT: %Make.ref.loc12: %X.Make.type.7d1 = name_ref Make, %.loc12_44 [concrete = constants.%X.Make.3ee]
// CHECK:STDOUT: %X.Make.specific_fn.loc12: <specific function> = specific_function %Make.ref.loc12, @X.Make(constants.%true) [concrete = constants.%X.Make.specific_fn.5a7]
// CHECK:STDOUT: %.loc12_1: ref %X.07f = splice_block file.%x2.var [concrete = file.%x2.var] {}
// CHECK:STDOUT: %X.Make.call.loc12: init %X.07f to %.loc12_1 = call %X.Make.specific_fn.loc12()
// CHECK:STDOUT: %X.loc12: type = class_type @X, @X(constants.%true) [concrete = constants.%X.26c]
// CHECK:STDOUT: %.loc12_44: %X.Make.type.669 = specific_constant @X.%X.Make.decl, @X(constants.%true) [concrete = constants.%X.Make.8a2]
// CHECK:STDOUT: %Make.ref.loc12: %X.Make.type.669 = name_ref Make, %.loc12_44 [concrete = constants.%X.Make.8a2]
// CHECK:STDOUT: %X.Make.specific_fn.loc12: <specific function> = specific_function %Make.ref.loc12, @X.Make(constants.%true) [concrete = constants.%X.Make.specific_fn.17d]
// CHECK:STDOUT: %.loc12_1: ref %X.26c = splice_block file.%x2.var [concrete = file.%x2.var] {}
// CHECK:STDOUT: %X.Make.call.loc12: init %X.26c to %.loc12_1 = call %X.Make.specific_fn.loc12()
// CHECK:STDOUT: assign file.%x2.var, %X.Make.call.loc12
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -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.8a6: type = pattern_type %TwoNonType [concrete]
// CHECK:STDOUT: %pattern_type.7f0: 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.8a6 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.8a6 = var_pattern %x.patt [concrete]
// 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: }
// CHECK:STDOUT: %x.var: ref %TwoNonType = var %x.var_patt [concrete]
// CHECK:STDOUT: %x: ref %TwoNonType = ref_binding x, %x.var [concrete = %x.var]
@@ -214,19 +214,19 @@ fn G() -> i32 {
// CHECK:STDOUT: %DependentNonType.template: %DependentNonType.type = struct_value () [concrete]
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %DependentNonType.794fcf.1: type = class_type @DependentNonType.1 [concrete]
// CHECK:STDOUT: %pattern_type.c6b: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %DependentNonType.f1e65a.1: type = class_type @DependentNonType.1 [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %pattern_type.b95a71.1: type = pattern_type %DependentNonType.794fcf.1 [concrete]
// CHECK:STDOUT: %pattern_type.844c90.1: type = pattern_type %DependentNonType.f1e65a.1 [concrete]
// CHECK:STDOUT: %MakeDependentNonType123.cpp_overload_set.type: type = cpp_overload_set_type @MakeDependentNonType123.cpp_overload_set [concrete]
// CHECK:STDOUT: %MakeDependentNonType123.cpp_overload_set.value: %MakeDependentNonType123.cpp_overload_set.type = cpp_overload_set_value @MakeDependentNonType123.cpp_overload_set [concrete]
// CHECK:STDOUT: %ptr.5b4: type = ptr_type %DependentNonType.794fcf.1 [concrete]
// CHECK:STDOUT: %ptr.89d: type = ptr_type %DependentNonType.f1e65a.1 [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.794fcf.2: type = class_type @DependentNonType.2 [concrete]
// CHECK:STDOUT: %pattern_type.b95a71.2: type = pattern_type %DependentNonType.794fcf.2 [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: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %DependentNonType.val: %DependentNonType.794fcf.2 = struct_value () [concrete]
// CHECK:STDOUT: %DependentNonType.val: %DependentNonType.f1e65a.2 = struct_value () [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -243,38 +243,38 @@ fn G() -> i32 {
// CHECK:STDOUT: } {
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
// CHECK:STDOUT: %StaticInt.patt: %pattern_type.7ce = ref_binding_pattern StaticInt [concrete]
// CHECK:STDOUT: %StaticInt.var_patt: %pattern_type.7ce = var_pattern %StaticInt.patt [concrete]
// CHECK:STDOUT: %StaticInt.patt: %pattern_type.c6b = ref_binding_pattern StaticInt [concrete]
// CHECK:STDOUT: %StaticInt.var_patt: %pattern_type.c6b = var_pattern %StaticInt.patt [concrete]
// CHECK:STDOUT: %StaticInt.var: ref %i32 = var %StaticInt.var_patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: %pattern_type.b95a71.1 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.b95a71.1 = var_pattern %x.patt [concrete]
// 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: }
// CHECK:STDOUT: %x.var: ref %DependentNonType.794fcf.1 = var %x.var_patt [concrete]
// CHECK:STDOUT: %x: ref %DependentNonType.794fcf.1 = ref_binding x, %x.var [concrete = %x.var]
// 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: name_binding_decl {
// CHECK:STDOUT: %y.patt: %pattern_type.b95a71.2 = ref_binding_pattern y [concrete]
// CHECK:STDOUT: %y.var_patt: %pattern_type.b95a71.2 = var_pattern %y.patt [concrete]
// 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: }
// CHECK:STDOUT: %y.var: ref %DependentNonType.794fcf.2 = var %y.var_patt [concrete]
// CHECK:STDOUT: %y: ref %DependentNonType.794fcf.2 = ref_binding y, %y.var [concrete = %y.var]
// 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: }
// 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.794fcf.1 = splice_block file.%x.var [concrete = file.%x.var] {}
// CHECK:STDOUT: %addr: %ptr.5b4 = addr_of %.loc7_1
// 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: %MakeDependentNonType123__carbon_thunk.call: init %empty_tuple.type = call imports.%MakeDependentNonType123__carbon_thunk.decl(%addr)
// CHECK:STDOUT: %.loc7_69: init %DependentNonType.794fcf.1 to %.loc7_1 = mark_in_place_init %MakeDependentNonType123__carbon_thunk.call
// CHECK:STDOUT: %.loc7_69: init %DependentNonType.f1e65a.1 to %.loc7_1 = mark_in_place_init %MakeDependentNonType123__carbon_thunk.call
// CHECK:STDOUT: assign file.%x.var, %.loc7_69
// CHECK:STDOUT: %.loc8_54.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct]
// CHECK:STDOUT: %.loc8_54.2: init %DependentNonType.794fcf.2 to file.%y.var = class_init () [concrete = constants.%DependentNonType.val]
// CHECK:STDOUT: %.loc8_1: init %DependentNonType.794fcf.2 = converted %.loc8_54.1, %.loc8_54.2 [concrete = constants.%DependentNonType.val]
// CHECK:STDOUT: %.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: assign file.%y.var, %.loc8_1
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -84,29 +84,29 @@ var x: Cpp.TwoTemplates(Cpp.A, true);
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %TwoTemplates: type = class_type @TwoTemplates [concrete]
// CHECK:STDOUT: %pattern_type.2b7: type = pattern_type %TwoTemplates [concrete]
// CHECK:STDOUT: %pattern_type.4dd: 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.50c: %Default.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.50c) [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.85d: %T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3 = struct_value () [symbolic]
// CHECK:STDOUT: %T.4ca: %Default.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.47c: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.4ca) [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.25a: %T.as_type.as.DefaultOrUnformed.impl.Op.type.47c = struct_value () [symbolic]
// 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.6e5: <witness> = custom_witness (%TwoTemplates.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.90a: %Default.type = facet_value %TwoTemplates, (%custom_witness.6e5) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.edb: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.fc3, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.90a) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTemplates, (%DefaultOrUnformed.impl_witness.edb) [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: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
// CHECK:STDOUT: %Core.import_ref.653: @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op.type (%T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3) = 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.85d)]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.fc3 = impl_witness_table (%Core.import_ref.653), @T.as_type.as.DefaultOrUnformed.impl [concrete]
// 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: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: %pattern_type.2b7 = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.2b7 = var_pattern %x.patt [concrete]
// CHECK:STDOUT: %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: }
// 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.edb) [concrete = constants.%DefaultOrUnformed.facet]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTemplates, (constants.%DefaultOrUnformed.impl_witness.d13) [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]
@@ -68,29 +68,29 @@ var x: Cpp.TwoTypes(Cpp.A, {});
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete]
// CHECK:STDOUT: %pattern_type.2da: type = pattern_type %TwoTypes [concrete]
// CHECK:STDOUT: %pattern_type.3df: 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.50c: %Default.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.50c) [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.85d: %T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3 = struct_value () [symbolic]
// CHECK:STDOUT: %T.4ca: %Default.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.47c: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.4ca) [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.25a: %T.as_type.as.DefaultOrUnformed.impl.Op.type.47c = struct_value () [symbolic]
// 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.2e3: <witness> = custom_witness (%TwoTypes.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.c59: %Default.type = facet_value %TwoTypes, (%custom_witness.2e3) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.8ca: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.fc3, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.c59) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTypes, (%DefaultOrUnformed.impl_witness.8ca) [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: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
// CHECK:STDOUT: %Core.import_ref.653: @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op.type (%T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3) = 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.85d)]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.fc3 = impl_witness_table (%Core.import_ref.653), @T.as_type.as.DefaultOrUnformed.impl [concrete]
// 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: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: %pattern_type.2da = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.2da = var_pattern %x.patt [concrete]
// CHECK:STDOUT: %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: }
// 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.8ca) [concrete = constants.%DefaultOrUnformed.facet]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTypes, (constants.%DefaultOrUnformed.impl_witness.462) [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,29 +113,29 @@ var x: Cpp.TwoTypes(Cpp.A, {});
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete]
// CHECK:STDOUT: %pattern_type.2da: type = pattern_type %TwoTypes [concrete]
// CHECK:STDOUT: %pattern_type.3df: 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.50c: %Default.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.50c) [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.85d: %T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3 = struct_value () [symbolic]
// CHECK:STDOUT: %T.4ca: %Default.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.47c: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.4ca) [symbolic]
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.25a: %T.as_type.as.DefaultOrUnformed.impl.Op.type.47c = struct_value () [symbolic]
// 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.2e3: <witness> = custom_witness (%TwoTypes.Op), @Default [concrete]
// CHECK:STDOUT: %Default.facet.c59: %Default.type = facet_value %TwoTypes, (%custom_witness.2e3) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.8ca: <witness> = impl_witness imports.%DefaultOrUnformed.impl_witness_table.fc3, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.c59) [concrete]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %TwoTypes, (%DefaultOrUnformed.impl_witness.8ca) [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: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
// CHECK:STDOUT: %Core.import_ref.653: @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op.type (%T.as_type.as.DefaultOrUnformed.impl.Op.type.2c3) = 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.85d)]
// CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.fc3 = impl_witness_table (%Core.import_ref.653), @T.as_type.as.DefaultOrUnformed.impl [concrete]
// 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: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: %pattern_type.2da = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.2da = var_pattern %x.patt [concrete]
// CHECK:STDOUT: %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: }
// 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.8ca) [concrete = constants.%DefaultOrUnformed.facet]
// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%TwoTypes, (constants.%DefaultOrUnformed.impl_witness.462) [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,114 +38,114 @@ 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.270: type = ptr_type %A [concrete]
// CHECK:STDOUT: %pattern_type.bcf: type = pattern_type %ptr.270 [concrete]
// CHECK:STDOUT: %var.type.230: type = cpp_type_template_type r#var [concrete]
// CHECK:STDOUT: %var.template.326: %var.type.230 = struct_value () [concrete]
// CHECK:STDOUT: %pattern_type.9de: type = pattern_type %A [concrete]
// CHECK:STDOUT: %addr.0b0: %ptr.270 = addr_of imports.%var.var.2f7 [concrete]
// CHECK:STDOUT: %ptr.bce: type = ptr_type %A [concrete]
// CHECK:STDOUT: %pattern_type.d1f: type = pattern_type %ptr.bce [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: %B: type = class_type @B [concrete]
// CHECK:STDOUT: %ptr.a04: type = ptr_type %B [concrete]
// CHECK:STDOUT: %pattern_type.837: type = pattern_type %ptr.a04 [concrete]
// CHECK:STDOUT: %pattern_type.d0f: type = pattern_type %B [concrete]
// CHECK:STDOUT: %addr.324: %ptr.a04 = addr_of imports.%var.var.a15 [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: %Wrap: type = class_type @Wrap [concrete]
// CHECK:STDOUT: %var.type.17b: type = cpp_type_template_type r#var [concrete]
// CHECK:STDOUT: %var.template.df3: %var.type.17b = struct_value () [concrete]
// CHECK:STDOUT: %addr.113: %ptr.270 = addr_of imports.%var.var.2e6 [concrete]
// CHECK:STDOUT: %addr.594: %ptr.a04 = addr_of imports.%var.var.bab [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: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
// CHECK:STDOUT: %Cpp: <namespace> = namespace file.%Cpp.import_cpp, [concrete] {
// CHECK:STDOUT: .A = %A.decl
// CHECK:STDOUT: .r#var = %var.template.326
// CHECK:STDOUT: .r#var = %var.template.164
// CHECK:STDOUT: .B = %B.decl
// CHECK:STDOUT: .Wrap = %Wrap.decl
// CHECK:STDOUT: import Cpp//...
// CHECK:STDOUT: }
// CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {}
// CHECK:STDOUT: %var.template.326: %var.type.230 = struct_value () [concrete = constants.%var.template.326]
// CHECK:STDOUT: %var.patt.5a2: %pattern_type.9de = ref_binding_pattern r#var [concrete]
// CHECK:STDOUT: %var.var_patt.093: %pattern_type.9de = var_pattern %var.patt.5a2 [concrete]
// CHECK:STDOUT: %var.var.2f7: ref %A = var %var.var_patt.093 [concrete]
// 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: %B.decl: type = class_decl @B [concrete = constants.%B] {} {}
// CHECK:STDOUT: %var.patt.7db: %pattern_type.d0f = ref_binding_pattern r#var [concrete]
// CHECK:STDOUT: %var.var_patt.56c: %pattern_type.d0f = var_pattern %var.patt.7db [concrete]
// CHECK:STDOUT: %var.var.a15: ref %B = var %var.var_patt.56c [concrete]
// 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: %Wrap.decl: type = class_decl @Wrap [concrete = constants.%Wrap] {} {}
// CHECK:STDOUT: %var.template.df3: %var.type.17b = struct_value () [concrete = constants.%var.template.df3]
// CHECK:STDOUT: %var.patt.022: %pattern_type.9de = ref_binding_pattern r#var [concrete]
// CHECK:STDOUT: %var.var_patt.0cb: %pattern_type.9de = var_pattern %var.patt.022 [concrete]
// CHECK:STDOUT: %var.var.2e6: ref %A = var %var.var_patt.0cb [concrete]
// CHECK:STDOUT: %var.patt.605: %pattern_type.d0f = ref_binding_pattern r#var [concrete]
// CHECK:STDOUT: %var.var_patt.efb: %pattern_type.d0f = var_pattern %var.patt.605 [concrete]
// CHECK:STDOUT: %var.var.bab: ref %B = var %var.var_patt.efb [concrete]
// 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: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %pa.patt: %pattern_type.bcf = value_binding_pattern pa [concrete]
// CHECK:STDOUT: %pa.patt: %pattern_type.d1f = value_binding_pattern pa [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.270] {
// CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.bce] {
// 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.270]
// CHECK:STDOUT: %ptr.loc7: type = ptr_type %A.ref.loc7 [concrete = constants.%ptr.bce]
// CHECK:STDOUT: }
// CHECK:STDOUT: %pa: %ptr.270 = value_binding pa, @__global_init.%addr.loc7
// CHECK:STDOUT: %pa: %ptr.bce = value_binding pa, @__global_init.%addr.loc7
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %pb.patt: %pattern_type.837 = value_binding_pattern pb [concrete]
// CHECK:STDOUT: %pb.patt: %pattern_type.dd8 = value_binding_pattern pb [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: type = splice_block %ptr.loc8 [concrete = constants.%ptr.a04] {
// CHECK:STDOUT: %.loc8: type = splice_block %ptr.loc8 [concrete = constants.%ptr.13d] {
// 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.a04]
// CHECK:STDOUT: %ptr.loc8: type = ptr_type %B.ref.loc8 [concrete = constants.%ptr.13d]
// CHECK:STDOUT: }
// CHECK:STDOUT: %pb: %ptr.a04 = value_binding pb, @__global_init.%addr.loc8
// CHECK:STDOUT: %pb: %ptr.13d = value_binding pb, @__global_init.%addr.loc8
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %pwa.patt: %pattern_type.bcf = value_binding_pattern pwa [concrete]
// CHECK:STDOUT: %pwa.patt: %pattern_type.d1f = value_binding_pattern pwa [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: type = splice_block %ptr.loc9 [concrete = constants.%ptr.270] {
// CHECK:STDOUT: %.loc9: type = splice_block %ptr.loc9 [concrete = constants.%ptr.bce] {
// 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.270]
// CHECK:STDOUT: %ptr.loc9: type = ptr_type %A.ref.loc9 [concrete = constants.%ptr.bce]
// CHECK:STDOUT: }
// CHECK:STDOUT: %pwa: %ptr.270 = value_binding pwa, @__global_init.%addr.loc9
// CHECK:STDOUT: %pwa: %ptr.bce = value_binding pwa, @__global_init.%addr.loc9
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %pwb.patt: %pattern_type.837 = value_binding_pattern pwb [concrete]
// CHECK:STDOUT: %pwb.patt: %pattern_type.dd8 = value_binding_pattern pwb [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10: type = splice_block %ptr.loc10 [concrete = constants.%ptr.a04] {
// CHECK:STDOUT: %.loc10: type = splice_block %ptr.loc10 [concrete = constants.%ptr.13d] {
// 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.a04]
// CHECK:STDOUT: %ptr.loc10: type = ptr_type %B.ref.loc10 [concrete = constants.%ptr.13d]
// CHECK:STDOUT: }
// CHECK:STDOUT: %pwb: %ptr.a04 = value_binding pwb, @__global_init.%addr.loc10
// CHECK:STDOUT: %pwb: %ptr.13d = value_binding pwb, @__global_init.%addr.loc10
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: fn @__global_init() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %Cpp.ref.loc7_19: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %var.ref.loc7: %var.type.230 = name_ref r#var, imports.%var.template.326 [concrete = constants.%var.template.326]
// 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.270 = addr_of imports.%var.var.2f7 [concrete = constants.%addr.0b0]
// CHECK:STDOUT: %addr.loc7: %ptr.bce = addr_of imports.%var.var.389 [concrete = constants.%addr.b03]
// CHECK:STDOUT: %Cpp.ref.loc8_19: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %var.ref.loc8: %var.type.230 = name_ref r#var, imports.%var.template.326 [concrete = constants.%var.template.326]
// 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.a04 = addr_of imports.%var.var.a15 [concrete = constants.%addr.324]
// CHECK:STDOUT: %addr.loc8: %ptr.13d = addr_of imports.%var.var.c8c [concrete = constants.%addr.dd0]
// 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.17b = name_ref r#var, imports.%var.template.df3 [concrete = constants.%var.template.df3]
// 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.270 = addr_of imports.%var.var.2e6 [concrete = constants.%addr.113]
// CHECK:STDOUT: %addr.loc9: %ptr.bce = addr_of imports.%var.var.71c [concrete = constants.%addr.9d1]
// 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.17b = name_ref r#var, imports.%var.template.df3 [concrete = constants.%var.template.df3]
// 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.a04 = addr_of imports.%var.var.bab [concrete = constants.%addr.594]
// CHECK:STDOUT: %addr.loc10: %ptr.13d = addr_of imports.%var.var.74b [concrete = constants.%addr.03a]
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
// CHECK:STDOUT: