mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Implement thunking in terms of constant evaluation (#7332)
The bulk of this change is changing most pattern insts to be `Always` rather than `AlwaysUnique` constants, so that they can be wrapped in `SpecificConstant`s to perform substitution. That then lets thunking rely much more on `SpecificConstant` wrappers instead of deep-copying the inst tree with modified types. This approach to thunking should scale better, particularly as things like form generics make function signatures more complex, because we can leverage the existing support for constant evaluation and substitution. Unfortunately, applying this approach to binding patterns will require more work; see the TODO near the top of `thunk.cpp` for details. --------- Co-authored-by: Richard Smith <richard@metafoo.co.uk>
This commit is contained in:
co-authored by
Richard Smith
parent
40d2d8f68c
commit
e023f75254
@@ -40,12 +40,16 @@ var a2: Cpp.Second(Cpp.B, Cpp.A) = Cpp.A.A();
|
||||
// CHECK:STDOUT: %A: type = class_type @A [concrete]
|
||||
// CHECK:STDOUT: %B: type = class_type @B [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.3fa: type = pattern_type %A [concrete]
|
||||
// CHECK:STDOUT: %a1.patt: %pattern_type.3fa = ref_binding_pattern a1 [concrete]
|
||||
// CHECK:STDOUT: %a1.var_patt: %pattern_type.3fa = var_pattern %a1.patt [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.25f: 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.65a: type = pattern_type %B [concrete]
|
||||
// CHECK:STDOUT: %b1.patt: %pattern_type.65a = ref_binding_pattern b1 [concrete]
|
||||
// CHECK:STDOUT: %b1.var_patt: %pattern_type.65a = var_pattern %b1.patt [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.dc0: type = ptr_type %B [concrete]
|
||||
@@ -53,6 +57,10 @@ var a2: Cpp.Second(Cpp.B, Cpp.A) = Cpp.A.A();
|
||||
// CHECK:STDOUT: %B__carbon_thunk: %B__carbon_thunk.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %Second.type: type = cpp_type_template_type Second [concrete]
|
||||
// CHECK:STDOUT: %Second.template: %Second.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %b2.patt: %pattern_type.65a = ref_binding_pattern b2 [concrete]
|
||||
// CHECK:STDOUT: %b2.var_patt: %pattern_type.65a = var_pattern %b2.patt [concrete]
|
||||
// CHECK:STDOUT: %a2.patt: %pattern_type.3fa = ref_binding_pattern a2 [concrete]
|
||||
// CHECK:STDOUT: %a2.var_patt: %pattern_type.3fa = var_pattern %a2.patt [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -83,26 +91,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.3fa = ref_binding_pattern a1 [concrete]
|
||||
// CHECK:STDOUT: %a1.var_patt: %pattern_type.3fa = var_pattern %a1.patt [concrete]
|
||||
// CHECK:STDOUT: %a1.patt: %pattern_type.3fa = ref_binding_pattern a1 [concrete = constants.%a1.patt]
|
||||
// CHECK:STDOUT: %a1.var_patt: %pattern_type.3fa = var_pattern %a1.patt [concrete = constants.%a1.var_patt]
|
||||
// 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.65a = ref_binding_pattern b1 [concrete]
|
||||
// CHECK:STDOUT: %b1.var_patt: %pattern_type.65a = var_pattern %b1.patt [concrete]
|
||||
// CHECK:STDOUT: %b1.patt: %pattern_type.65a = ref_binding_pattern b1 [concrete = constants.%b1.patt]
|
||||
// CHECK:STDOUT: %b1.var_patt: %pattern_type.65a = var_pattern %b1.patt [concrete = constants.%b1.var_patt]
|
||||
// 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.65a = ref_binding_pattern b2 [concrete]
|
||||
// CHECK:STDOUT: %b2.var_patt: %pattern_type.65a = var_pattern %b2.patt [concrete]
|
||||
// CHECK:STDOUT: %b2.patt: %pattern_type.65a = ref_binding_pattern b2 [concrete = constants.%b2.patt]
|
||||
// CHECK:STDOUT: %b2.var_patt: %pattern_type.65a = var_pattern %b2.patt [concrete = constants.%b2.var_patt]
|
||||
// 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.3fa = ref_binding_pattern a2 [concrete]
|
||||
// CHECK:STDOUT: %a2.var_patt: %pattern_type.3fa = var_pattern %a2.patt [concrete]
|
||||
// CHECK:STDOUT: %a2.patt: %pattern_type.3fa = ref_binding_pattern a2 [concrete = constants.%a2.patt]
|
||||
// CHECK:STDOUT: %a2.var_patt: %pattern_type.3fa = var_pattern %a2.patt [concrete = constants.%a2.var_patt]
|
||||
// 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]
|
||||
|
||||
@@ -123,6 +123,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.83a: type = pattern_type %TwoTypes [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.83a = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.83a = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
|
||||
// CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete]
|
||||
// CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic]
|
||||
@@ -143,8 +145,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.83a = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.83a = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.83a = ref_binding_pattern x [concrete = constants.%x.patt]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.83a = var_pattern %x.patt [concrete = constants.%x.var_patt]
|
||||
// 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]
|
||||
@@ -168,6 +170,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %TypePack.78f: type = class_type @TypePack.1 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.a64: type = pattern_type %TypePack.78f [concrete]
|
||||
// CHECK:STDOUT: %a0.patt: %pattern_type.a64 = ref_binding_pattern a0 [concrete]
|
||||
// CHECK:STDOUT: %a0.var_patt: %pattern_type.a64 = var_pattern %a0.patt [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
|
||||
// CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete]
|
||||
// CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic]
|
||||
@@ -181,6 +185,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.be2: %DefaultOrUnformed.type = facet_value %TypePack.78f, (%DefaultOrUnformed.impl_witness.6f4) [concrete]
|
||||
// CHECK:STDOUT: %TypePack.0bc: type = class_type @TypePack.2 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.20e: type = pattern_type %TypePack.0bc [concrete]
|
||||
// CHECK:STDOUT: %a1.patt: %pattern_type.20e = ref_binding_pattern a1 [concrete]
|
||||
// CHECK:STDOUT: %a1.var_patt: %pattern_type.20e = var_pattern %a1.patt [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.type.83af6e.2: type = fn_type @TypePack.Op.2 [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.4dca31.2: %TypePack.Op.type.83af6e.2 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %custom_witness.9b40fb.2: <witness> = custom_witness (%TypePack.Op.4dca31.2), @Default [concrete]
|
||||
@@ -189,6 +195,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.777: %DefaultOrUnformed.type = facet_value %TypePack.0bc, (%DefaultOrUnformed.impl_witness.8e2) [concrete]
|
||||
// CHECK:STDOUT: %TypePack.0ec: type = class_type @TypePack.3 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.c25: type = pattern_type %TypePack.0ec [concrete]
|
||||
// CHECK:STDOUT: %a2.patt: %pattern_type.c25 = ref_binding_pattern a2 [concrete]
|
||||
// CHECK:STDOUT: %a2.var_patt: %pattern_type.c25 = var_pattern %a2.patt [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.type.83af6e.3: type = fn_type @TypePack.Op.3 [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.4dca31.3: %TypePack.Op.type.83af6e.3 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %custom_witness.9b40fb.3: <witness> = custom_witness (%TypePack.Op.4dca31.3), @Default [concrete]
|
||||
@@ -197,6 +205,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.967: %DefaultOrUnformed.type = facet_value %TypePack.0ec, (%DefaultOrUnformed.impl_witness.873) [concrete]
|
||||
// CHECK:STDOUT: %TypePack.186: type = class_type @TypePack.4 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.678: type = pattern_type %TypePack.186 [concrete]
|
||||
// CHECK:STDOUT: %a3.patt: %pattern_type.678 = ref_binding_pattern a3 [concrete]
|
||||
// CHECK:STDOUT: %a3.var_patt: %pattern_type.678 = var_pattern %a3.patt [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.type.83af6e.4: type = fn_type @TypePack.Op.4 [concrete]
|
||||
// CHECK:STDOUT: %TypePack.Op.4dca31.4: %TypePack.Op.type.83af6e.4 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %custom_witness.9b40fb.4: <witness> = custom_witness (%TypePack.Op.4dca31.4), @Default [concrete]
|
||||
@@ -212,26 +222,26 @@ 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.a64 = ref_binding_pattern a0 [concrete]
|
||||
// CHECK:STDOUT: %a0.var_patt: %pattern_type.a64 = var_pattern %a0.patt [concrete]
|
||||
// CHECK:STDOUT: %a0.patt: %pattern_type.a64 = ref_binding_pattern a0 [concrete = constants.%a0.patt]
|
||||
// CHECK:STDOUT: %a0.var_patt: %pattern_type.a64 = var_pattern %a0.patt [concrete = constants.%a0.var_patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a0.var: ref %TypePack.78f = var %a0.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a0: ref %TypePack.78f = ref_binding a0, %a0.var [concrete = %a0.var]
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %a1.patt: %pattern_type.20e = ref_binding_pattern a1 [concrete]
|
||||
// CHECK:STDOUT: %a1.var_patt: %pattern_type.20e = var_pattern %a1.patt [concrete]
|
||||
// CHECK:STDOUT: %a1.patt: %pattern_type.20e = ref_binding_pattern a1 [concrete = constants.%a1.patt]
|
||||
// CHECK:STDOUT: %a1.var_patt: %pattern_type.20e = var_pattern %a1.patt [concrete = constants.%a1.var_patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a1.var: ref %TypePack.0bc = var %a1.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a1: ref %TypePack.0bc = ref_binding a1, %a1.var [concrete = %a1.var]
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %a2.patt: %pattern_type.c25 = ref_binding_pattern a2 [concrete]
|
||||
// CHECK:STDOUT: %a2.var_patt: %pattern_type.c25 = var_pattern %a2.patt [concrete]
|
||||
// CHECK:STDOUT: %a2.patt: %pattern_type.c25 = ref_binding_pattern a2 [concrete = constants.%a2.patt]
|
||||
// CHECK:STDOUT: %a2.var_patt: %pattern_type.c25 = var_pattern %a2.patt [concrete = constants.%a2.var_patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a2.var: ref %TypePack.0ec = var %a2.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a2: ref %TypePack.0ec = ref_binding a2, %a2.var [concrete = %a2.var]
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %a3.patt: %pattern_type.678 = ref_binding_pattern a3 [concrete]
|
||||
// CHECK:STDOUT: %a3.var_patt: %pattern_type.678 = var_pattern %a3.patt [concrete]
|
||||
// CHECK:STDOUT: %a3.patt: %pattern_type.678 = ref_binding_pattern a3 [concrete = constants.%a3.patt]
|
||||
// CHECK:STDOUT: %a3.var_patt: %pattern_type.678 = var_pattern %a3.patt [concrete = constants.%a3.var_patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a3.var: ref %TypePack.186 = var %a3.var_patt [concrete]
|
||||
// CHECK:STDOUT: %a3: ref %TypePack.186 = ref_binding a3, %a3.var [concrete = %a3.var]
|
||||
|
||||
@@ -37,6 +37,8 @@ var a: Cpp.A = Cpp.X(Cpp.A, Cpp.B).f({} as Cpp.B);
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
|
||||
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.3fa: type = pattern_type %A [concrete]
|
||||
// CHECK:STDOUT: %a.patt: %pattern_type.3fa = ref_binding_pattern a [concrete]
|
||||
// CHECK:STDOUT: %a.var_patt: %pattern_type.3fa = var_pattern %a.patt [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]
|
||||
@@ -71,8 +73,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.3fa = ref_binding_pattern a [concrete]
|
||||
// CHECK:STDOUT: %a.var_patt: %pattern_type.3fa = var_pattern %a.patt [concrete]
|
||||
// CHECK:STDOUT: %a.patt: %pattern_type.3fa = ref_binding_pattern a [concrete = constants.%a.patt]
|
||||
// CHECK:STDOUT: %a.var_patt: %pattern_type.3fa = var_pattern %a.patt [concrete = constants.%a.var_patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a.var: ref %A = var %a.var_patt [concrete]
|
||||
// CHECK:STDOUT: %.loc7: type = splice_block %A.ref [concrete = constants.%A] {
|
||||
|
||||
@@ -46,6 +46,8 @@ var x2: X(Cpp.IsLarge(Cpp.Large)) = X(true).Make();
|
||||
// CHECK:STDOUT: %X.Make.type.243: type = fn_type @X.Make, @X(%false) [concrete]
|
||||
// CHECK:STDOUT: %X.Make.d05: %X.Make.type.243 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.26c: type = pattern_type %X.541 [concrete]
|
||||
// CHECK:STDOUT: %x1.patt: %pattern_type.26c = ref_binding_pattern x1 [concrete]
|
||||
// CHECK:STDOUT: %x1.var_patt: %pattern_type.26c = var_pattern %x1.patt [concrete]
|
||||
// CHECK:STDOUT: %X.Make.specific_fn.932: <specific function> = specific_function %X.Make.d05, @X.Make(%false) [concrete]
|
||||
// CHECK:STDOUT: %Large: type = class_type @Large [concrete]
|
||||
// CHECK:STDOUT: %true: bool = bool_literal true [concrete]
|
||||
@@ -53,6 +55,8 @@ var x2: X(Cpp.IsLarge(Cpp.Large)) = X(true).Make();
|
||||
// CHECK:STDOUT: %X.Make.type.4b0: type = fn_type @X.Make, @X(%true) [concrete]
|
||||
// CHECK:STDOUT: %X.Make.42d: %X.Make.type.4b0 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.795: type = pattern_type %X.7b4 [concrete]
|
||||
// CHECK:STDOUT: %x2.patt: %pattern_type.795 = ref_binding_pattern x2 [concrete]
|
||||
// CHECK:STDOUT: %x2.var_patt: %pattern_type.795 = var_pattern %x2.patt [concrete]
|
||||
// CHECK:STDOUT: %X.Make.specific_fn.8a7: <specific function> = specific_function %X.Make.42d, @X.Make(%true) [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -70,8 +74,8 @@ 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.26c = ref_binding_pattern x1 [concrete]
|
||||
// CHECK:STDOUT: %x1.var_patt: %pattern_type.26c = var_pattern %x1.patt [concrete]
|
||||
// CHECK:STDOUT: %x1.patt: %pattern_type.26c = ref_binding_pattern x1 [concrete = constants.%x1.patt]
|
||||
// CHECK:STDOUT: %x1.var_patt: %pattern_type.26c = var_pattern %x1.patt [concrete = constants.%x1.var_patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x1.var: ref %X.541 = var %x1.var_patt [concrete]
|
||||
// CHECK:STDOUT: %.loc11: type = splice_block %X.loc11 [concrete = constants.%X.541] {
|
||||
@@ -85,8 +89,8 @@ var x2: X(Cpp.IsLarge(Cpp.Large)) = X(true).Make();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x1: ref %X.541 = ref_binding x1, %x1.var [concrete = %x1.var]
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %x2.patt: %pattern_type.795 = ref_binding_pattern x2 [concrete]
|
||||
// CHECK:STDOUT: %x2.var_patt: %pattern_type.795 = var_pattern %x2.patt [concrete]
|
||||
// CHECK:STDOUT: %x2.patt: %pattern_type.795 = ref_binding_pattern x2 [concrete = constants.%x2.patt]
|
||||
// CHECK:STDOUT: %x2.var_patt: %pattern_type.795 = var_pattern %x2.patt [concrete = constants.%x2.var_patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x2.var: ref %X.7b4 = var %x2.var_patt [concrete]
|
||||
// CHECK:STDOUT: %.loc12: type = splice_block %X.loc12 [concrete = constants.%X.7b4] {
|
||||
|
||||
@@ -184,14 +184,16 @@ fn G() -> i32 {
|
||||
// CHECK:STDOUT: %TwoNonType: type = class_type @TwoNonType [concrete]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.2aa: type = pattern_type %TwoNonType [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.2aa = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.2aa = var_pattern %x.patt [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.2aa = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.2aa = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.2aa = ref_binding_pattern x [concrete = constants.%x.patt]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.2aa = var_pattern %x.patt [concrete = constants.%x.var_patt]
|
||||
// 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]
|
||||
@@ -218,13 +220,19 @@ fn G() -> i32 {
|
||||
// CHECK:STDOUT: %DependentNonType.43e: type = class_type @DependentNonType.1 [concrete]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.eef: type = pattern_type %DependentNonType.43e [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.eef = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.eef = var_pattern %x.patt [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.f0c: type = ptr_type %DependentNonType.43e [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: %StaticInt.patt: %pattern_type.6b6 = ref_binding_pattern StaticInt [concrete]
|
||||
// CHECK:STDOUT: %StaticInt.var_patt: %pattern_type.6b6 = var_pattern %StaticInt.patt [concrete]
|
||||
// CHECK:STDOUT: %DependentNonType.d43: type = class_type @DependentNonType.2 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.70d: type = pattern_type %DependentNonType.d43 [concrete]
|
||||
// CHECK:STDOUT: %y.patt: %pattern_type.70d = ref_binding_pattern y [concrete]
|
||||
// CHECK:STDOUT: %y.var_patt: %pattern_type.70d = var_pattern %y.patt [concrete]
|
||||
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %DependentNonType.val: %DependentNonType.d43 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -243,21 +251,21 @@ fn G() -> i32 {
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %StaticInt.patt: %pattern_type.6b6 = ref_binding_pattern StaticInt [concrete]
|
||||
// CHECK:STDOUT: %StaticInt.var_patt: %pattern_type.6b6 = var_pattern %StaticInt.patt [concrete]
|
||||
// CHECK:STDOUT: %StaticInt.patt: %pattern_type.6b6 = ref_binding_pattern StaticInt [concrete = constants.%StaticInt.patt]
|
||||
// CHECK:STDOUT: %StaticInt.var_patt: %pattern_type.6b6 = var_pattern %StaticInt.patt [concrete = constants.%StaticInt.var_patt]
|
||||
// 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.eef = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.eef = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.eef = ref_binding_pattern x [concrete = constants.%x.patt]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.eef = var_pattern %x.patt [concrete = constants.%x.var_patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x.var: ref %DependentNonType.43e = var %x.var_patt [concrete]
|
||||
// CHECK:STDOUT: %x: ref %DependentNonType.43e = ref_binding x, %x.var [concrete = %x.var]
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %y.patt: %pattern_type.70d = ref_binding_pattern y [concrete]
|
||||
// CHECK:STDOUT: %y.var_patt: %pattern_type.70d = var_pattern %y.patt [concrete]
|
||||
// CHECK:STDOUT: %y.patt: %pattern_type.70d = ref_binding_pattern y [concrete = constants.%y.patt]
|
||||
// CHECK:STDOUT: %y.var_patt: %pattern_type.70d = var_pattern %y.patt [concrete = constants.%y.var_patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %y.var: ref %DependentNonType.d43 = var %y.var_patt [concrete]
|
||||
// CHECK:STDOUT: %y: ref %DependentNonType.d43 = ref_binding y, %y.var [concrete = %y.var]
|
||||
|
||||
+6
-4
@@ -85,6 +85,8 @@ var x: Cpp.TwoTemplates(Cpp.A, true);
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %TwoTemplates: type = class_type @TwoTemplates [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.f5e: type = pattern_type %TwoTemplates [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.f5e = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.f5e = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
|
||||
// CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete]
|
||||
// CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic]
|
||||
@@ -105,8 +107,8 @@ var x: Cpp.TwoTemplates(Cpp.A, true);
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.f5e = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.f5e = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.f5e = ref_binding_pattern x [concrete = constants.%x.patt]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.f5e = var_pattern %x.patt [concrete = constants.%x.var_patt]
|
||||
// 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]
|
||||
@@ -129,8 +131,8 @@ var x: Cpp.TwoTemplates(Cpp.A, true);
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %x.patt: <error> = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: <error> = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: <error> = ref_binding_pattern x [concrete = <error>]
|
||||
// CHECK:STDOUT: %x.var_patt: <error> = var_pattern %x.patt [concrete = <error>]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x.var: ref <error> = var %x.var_patt [concrete = <error>]
|
||||
// CHECK:STDOUT: %x: ref <error> = ref_binding x, <error> [concrete = <error>]
|
||||
|
||||
@@ -69,6 +69,8 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.83a: type = pattern_type %TwoTypes [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.83a = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.83a = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
|
||||
// CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete]
|
||||
// CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic]
|
||||
@@ -89,8 +91,8 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.83a = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.83a = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.83a = ref_binding_pattern x [concrete = constants.%x.patt]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.83a = var_pattern %x.patt [concrete = constants.%x.var_patt]
|
||||
// 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]
|
||||
@@ -114,6 +116,8 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %TwoTypes: type = class_type @TwoTypes [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.0c3: type = pattern_type %TwoTypes [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.0c3 = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.0c3 = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
|
||||
// CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete]
|
||||
// CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic]
|
||||
@@ -134,8 +138,8 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.0c3 = ref_binding_pattern x [concrete]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.0c3 = var_pattern %x.patt [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.0c3 = ref_binding_pattern x [concrete = constants.%x.patt]
|
||||
// CHECK:STDOUT: %x.var_patt: %pattern_type.0c3 = var_pattern %x.patt [concrete = constants.%x.var_patt]
|
||||
// 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]
|
||||
|
||||
@@ -40,19 +40,31 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B);
|
||||
// CHECK:STDOUT: %A: type = class_type @A [concrete]
|
||||
// CHECK:STDOUT: %ptr.25f: type = ptr_type %A [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.1fa: type = pattern_type %ptr.25f [concrete]
|
||||
// CHECK:STDOUT: %pa.patt: %pattern_type.1fa = value_binding_pattern pa [concrete]
|
||||
// CHECK:STDOUT: %var.type.fce: type = cpp_type_template_type r#var [concrete]
|
||||
// CHECK:STDOUT: %var.template.7db: %var.type.fce = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.3fa: type = pattern_type %A [concrete]
|
||||
// CHECK:STDOUT: %var.patt.c98: %pattern_type.3fa = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.e06: %pattern_type.3fa = var_pattern %var.patt.c98 [concrete]
|
||||
// CHECK:STDOUT: %addr.58e: %ptr.25f = addr_of imports.%var.var.64d [concrete]
|
||||
// CHECK:STDOUT: %B: type = class_type @B [concrete]
|
||||
// CHECK:STDOUT: %ptr.dc0: type = ptr_type %B [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.733: type = pattern_type %ptr.dc0 [concrete]
|
||||
// CHECK:STDOUT: %pb.patt: %pattern_type.733 = value_binding_pattern pb [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.65a: type = pattern_type %B [concrete]
|
||||
// CHECK:STDOUT: %var.patt.de6: %pattern_type.65a = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.72d: %pattern_type.65a = var_pattern %var.patt.de6 [concrete]
|
||||
// CHECK:STDOUT: %addr.191: %ptr.dc0 = addr_of imports.%var.var.e6d [concrete]
|
||||
// CHECK:STDOUT: %pwa.patt: %pattern_type.1fa = value_binding_pattern pwa [concrete]
|
||||
// CHECK:STDOUT: %Wrap: type = class_type @Wrap [concrete]
|
||||
// CHECK:STDOUT: %var.type.30e: type = cpp_type_template_type r#var [concrete]
|
||||
// CHECK:STDOUT: %var.template.28b: %var.type.30e = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %var.patt.4ff: %pattern_type.3fa = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.c1f: %pattern_type.3fa = var_pattern %var.patt.4ff [concrete]
|
||||
// CHECK:STDOUT: %addr.7e0: %ptr.25f = addr_of imports.%var.var.6a9 [concrete]
|
||||
// CHECK:STDOUT: %pwb.patt: %pattern_type.733 = value_binding_pattern pwb [concrete]
|
||||
// CHECK:STDOUT: %var.patt.96f: %pattern_type.65a = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.891: %pattern_type.65a = var_pattern %var.patt.96f [concrete]
|
||||
// CHECK:STDOUT: %addr.e65: %ptr.dc0 = addr_of imports.%var.var.061 [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -66,26 +78,26 @@ 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.7db: %var.type.fce = struct_value () [concrete = constants.%var.template.7db]
|
||||
// CHECK:STDOUT: %var.patt.c98: %pattern_type.3fa = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.e06: %pattern_type.3fa = var_pattern %var.patt.c98 [concrete]
|
||||
// CHECK:STDOUT: %var.patt.c98: %pattern_type.3fa = ref_binding_pattern r#var [concrete = constants.%var.patt.c98]
|
||||
// CHECK:STDOUT: %var.var_patt.e06: %pattern_type.3fa = var_pattern %var.patt.c98 [concrete = constants.%var.var_patt.e06]
|
||||
// CHECK:STDOUT: %var.var.64d: ref %A = var %var.var_patt.e06 [concrete]
|
||||
// CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {}
|
||||
// CHECK:STDOUT: %var.patt.de6: %pattern_type.65a = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.72d: %pattern_type.65a = var_pattern %var.patt.de6 [concrete]
|
||||
// CHECK:STDOUT: %var.patt.de6: %pattern_type.65a = ref_binding_pattern r#var [concrete = constants.%var.patt.de6]
|
||||
// CHECK:STDOUT: %var.var_patt.72d: %pattern_type.65a = var_pattern %var.patt.de6 [concrete = constants.%var.var_patt.72d]
|
||||
// CHECK:STDOUT: %var.var.e6d: ref %B = var %var.var_patt.72d [concrete]
|
||||
// CHECK:STDOUT: %Wrap.decl: type = class_decl @Wrap [concrete = constants.%Wrap] {} {}
|
||||
// CHECK:STDOUT: %var.template.28b: %var.type.30e = struct_value () [concrete = constants.%var.template.28b]
|
||||
// CHECK:STDOUT: %var.patt.4ff: %pattern_type.3fa = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.c1f: %pattern_type.3fa = var_pattern %var.patt.4ff [concrete]
|
||||
// CHECK:STDOUT: %var.patt.4ff: %pattern_type.3fa = ref_binding_pattern r#var [concrete = constants.%var.patt.4ff]
|
||||
// CHECK:STDOUT: %var.var_patt.c1f: %pattern_type.3fa = var_pattern %var.patt.4ff [concrete = constants.%var.var_patt.c1f]
|
||||
// CHECK:STDOUT: %var.var.6a9: ref %A = var %var.var_patt.c1f [concrete]
|
||||
// CHECK:STDOUT: %var.patt.96f: %pattern_type.65a = ref_binding_pattern r#var [concrete]
|
||||
// CHECK:STDOUT: %var.var_patt.891: %pattern_type.65a = var_pattern %var.patt.96f [concrete]
|
||||
// CHECK:STDOUT: %var.patt.96f: %pattern_type.65a = ref_binding_pattern r#var [concrete = constants.%var.patt.96f]
|
||||
// CHECK:STDOUT: %var.var_patt.891: %pattern_type.65a = var_pattern %var.patt.96f [concrete = constants.%var.var_patt.891]
|
||||
// CHECK:STDOUT: %var.var.061: ref %B = var %var.var_patt.891 [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %pa.patt: %pattern_type.1fa = value_binding_pattern pa [concrete]
|
||||
// CHECK:STDOUT: %pa.patt: %pattern_type.1fa = value_binding_pattern pa [concrete = constants.%pa.patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.25f] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc7: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
@@ -94,7 +106,7 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %pa: %ptr.25f = value_binding pa, @__global_init.%addr.loc7
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %pb.patt: %pattern_type.733 = value_binding_pattern pb [concrete]
|
||||
// CHECK:STDOUT: %pb.patt: %pattern_type.733 = value_binding_pattern pb [concrete = constants.%pb.patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc8: type = splice_block %ptr.loc8 [concrete = constants.%ptr.dc0] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc8: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
@@ -103,7 +115,7 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %pb: %ptr.dc0 = value_binding pb, @__global_init.%addr.loc8
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %pwa.patt: %pattern_type.1fa = value_binding_pattern pwa [concrete]
|
||||
// CHECK:STDOUT: %pwa.patt: %pattern_type.1fa = value_binding_pattern pwa [concrete = constants.%pwa.patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc9: type = splice_block %ptr.loc9 [concrete = constants.%ptr.25f] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc9: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
@@ -112,7 +124,7 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %pwa: %ptr.25f = value_binding pwa, @__global_init.%addr.loc9
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %pwb.patt: %pattern_type.733 = value_binding_pattern pwb [concrete]
|
||||
// CHECK:STDOUT: %pwb.patt: %pattern_type.733 = value_binding_pattern pwb [concrete = constants.%pwb.patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc10: type = splice_block %ptr.loc10 [concrete = constants.%ptr.dc0] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc10: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
|
||||
Reference in New Issue
Block a user