Separate binding insts for refs and values (#6235)

This resolves a TODO in `expr_info.cpp` by using the inst kind rather
than the bound value to track the binding's category.

Since we're churning all the `bind_name` insts in testdata anyway, I'm
also taking this opportunity to align the inst naming with the design's
terminology, by calling these insts "bindings" (this aspect of the PR is
dependent on #6231 resolving an ambiguity in that terminology). For
consistency we'll need to rename several other insts as well (see the
TODO on `RefBinding`); I'm deferring that to a separate PR to minimize
the review load, but I think those name changes are in-scope for this
review.
This commit is contained in:
Geoff Romer
2025-10-23 01:46:24 +00:00
committed by GitHub
parent c0879b2200
commit 09710d102f
435 changed files with 4380 additions and 4306 deletions
+110 -110
View File
@@ -1087,7 +1087,7 @@ fn F() {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c.patt: %pattern_type.217 = binding_pattern c [concrete]
// CHECK:STDOUT: %c.patt: %pattern_type.217 = ref_binding_pattern c [concrete]
// CHECK:STDOUT: %c.var_patt: %pattern_type.217 = var_pattern %c.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c.var: ref %C = var %c.var_patt
@@ -1103,7 +1103,7 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref.loc8_10: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc8_13: type = name_ref C, imports.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c: ref %C = bind_name c, %c.var
// CHECK:STDOUT: %c: ref %C = ref_binding c, %c.var
// CHECK:STDOUT: %c.ref.loc11: ref %C = name_ref c, %c
// CHECK:STDOUT: %.loc11_3.1: ref %C = temporary_storage
// CHECK:STDOUT: %addr.loc11_5: %ptr.d9e = addr_of %c.ref.loc11
@@ -1119,7 +1119,7 @@ fn F() {
// CHECK:STDOUT: %.loc12_3.2: init %C = in_place_init %operator--__carbon_thunk.call, %.loc12_3.1
// CHECK:STDOUT: %.loc12_3.3: ref %C = temporary %.loc12_3.1, %.loc12_3.2
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %minus.patt: %pattern_type.217 = binding_pattern minus [concrete]
// CHECK:STDOUT: %minus.patt: %pattern_type.217 = value_binding_pattern minus [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c.ref.loc15: ref %C = name_ref c, %c
// CHECK:STDOUT: %.loc15_22.1: ref %C = temporary_storage
@@ -1135,7 +1135,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc15_22.3: ref %C = temporary %.loc15_22.1, %.loc15_22.2
// CHECK:STDOUT: %.loc15_22.4: %C = bind_value %.loc15_22.3
// CHECK:STDOUT: %minus: %C = bind_name minus, %.loc15_22.4
// CHECK:STDOUT: %minus: %C = value_binding minus, %.loc15_22.4
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc15: <bound method> = bound_method %.loc15_22.3, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.841
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %bound_method.loc15: <bound method> = bound_method %.loc15_22.3, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
@@ -1388,7 +1388,7 @@ fn F() {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c1.patt: %pattern_type.217 = binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.patt: %pattern_type.217 = ref_binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.var_patt: %pattern_type.217 = var_pattern %c1.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.var: ref %C = var %c1.var_patt
@@ -1404,9 +1404,9 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref.loc8_11: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc8_14: type = name_ref C, imports.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1: ref %C = bind_name c1, %c1.var
// CHECK:STDOUT: %c1: ref %C = ref_binding c1, %c1.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c2.patt: %pattern_type.217 = binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.patt: %pattern_type.217 = ref_binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.var_patt: %pattern_type.217 = var_pattern %c2.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c2.var: ref %C = var %c2.var_patt
@@ -1422,9 +1422,9 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref.loc9_11: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc9_14: type = name_ref C, imports.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c2: ref %C = bind_name c2, %c2.var
// CHECK:STDOUT: %c2: ref %C = ref_binding c2, %c2.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %addition.patt: %pattern_type.217 = binding_pattern addition [concrete]
// CHECK:STDOUT: %addition.patt: %pattern_type.217 = value_binding_pattern addition [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc12: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc12: ref %C = name_ref c2, %c2
@@ -1444,9 +1444,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12_28.3: ref %C = temporary %.loc12_28.1, %.loc12_28.2
// CHECK:STDOUT: %.loc12_28.4: %C = bind_value %.loc12_28.3
// CHECK:STDOUT: %addition: %C = bind_name addition, %.loc12_28.4
// CHECK:STDOUT: %addition: %C = value_binding addition, %.loc12_28.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %subtraction.patt: %pattern_type.217 = binding_pattern subtraction [concrete]
// CHECK:STDOUT: %subtraction.patt: %pattern_type.217 = value_binding_pattern subtraction [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc13: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc13: ref %C = name_ref c2, %c2
@@ -1466,9 +1466,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc13_31.3: ref %C = temporary %.loc13_31.1, %.loc13_31.2
// CHECK:STDOUT: %.loc13_31.4: %C = bind_value %.loc13_31.3
// CHECK:STDOUT: %subtraction: %C = bind_name subtraction, %.loc13_31.4
// CHECK:STDOUT: %subtraction: %C = value_binding subtraction, %.loc13_31.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %multiplication.patt: %pattern_type.217 = binding_pattern multiplication [concrete]
// CHECK:STDOUT: %multiplication.patt: %pattern_type.217 = value_binding_pattern multiplication [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc14: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc14: ref %C = name_ref c2, %c2
@@ -1488,9 +1488,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc14_34.3: ref %C = temporary %.loc14_34.1, %.loc14_34.2
// CHECK:STDOUT: %.loc14_34.4: %C = bind_value %.loc14_34.3
// CHECK:STDOUT: %multiplication: %C = bind_name multiplication, %.loc14_34.4
// CHECK:STDOUT: %multiplication: %C = value_binding multiplication, %.loc14_34.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %division.patt: %pattern_type.217 = binding_pattern division [concrete]
// CHECK:STDOUT: %division.patt: %pattern_type.217 = value_binding_pattern division [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc15: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc15: ref %C = name_ref c2, %c2
@@ -1510,9 +1510,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc15_28.3: ref %C = temporary %.loc15_28.1, %.loc15_28.2
// CHECK:STDOUT: %.loc15_28.4: %C = bind_value %.loc15_28.3
// CHECK:STDOUT: %division: %C = bind_name division, %.loc15_28.4
// CHECK:STDOUT: %division: %C = value_binding division, %.loc15_28.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %modulo.patt: %pattern_type.217 = binding_pattern modulo [concrete]
// CHECK:STDOUT: %modulo.patt: %pattern_type.217 = value_binding_pattern modulo [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc16: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc16: ref %C = name_ref c2, %c2
@@ -1532,9 +1532,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc16_26.3: ref %C = temporary %.loc16_26.1, %.loc16_26.2
// CHECK:STDOUT: %.loc16_26.4: %C = bind_value %.loc16_26.3
// CHECK:STDOUT: %modulo: %C = bind_name modulo, %.loc16_26.4
// CHECK:STDOUT: %modulo: %C = value_binding modulo, %.loc16_26.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %bitwise_and.patt: %pattern_type.217 = binding_pattern bitwise_and [concrete]
// CHECK:STDOUT: %bitwise_and.patt: %pattern_type.217 = value_binding_pattern bitwise_and [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc19: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc19: ref %C = name_ref c2, %c2
@@ -1554,9 +1554,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc19_31.3: ref %C = temporary %.loc19_31.1, %.loc19_31.2
// CHECK:STDOUT: %.loc19_31.4: %C = bind_value %.loc19_31.3
// CHECK:STDOUT: %bitwise_and: %C = bind_name bitwise_and, %.loc19_31.4
// CHECK:STDOUT: %bitwise_and: %C = value_binding bitwise_and, %.loc19_31.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %bitwise_or.patt: %pattern_type.217 = binding_pattern bitwise_or [concrete]
// CHECK:STDOUT: %bitwise_or.patt: %pattern_type.217 = value_binding_pattern bitwise_or [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc20: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc20: ref %C = name_ref c2, %c2
@@ -1576,9 +1576,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc20_30.3: ref %C = temporary %.loc20_30.1, %.loc20_30.2
// CHECK:STDOUT: %.loc20_30.4: %C = bind_value %.loc20_30.3
// CHECK:STDOUT: %bitwise_or: %C = bind_name bitwise_or, %.loc20_30.4
// CHECK:STDOUT: %bitwise_or: %C = value_binding bitwise_or, %.loc20_30.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %bitwise_xor.patt: %pattern_type.217 = binding_pattern bitwise_xor [concrete]
// CHECK:STDOUT: %bitwise_xor.patt: %pattern_type.217 = value_binding_pattern bitwise_xor [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc21: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc21: ref %C = name_ref c2, %c2
@@ -1598,9 +1598,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc21_31.3: ref %C = temporary %.loc21_31.1, %.loc21_31.2
// CHECK:STDOUT: %.loc21_31.4: %C = bind_value %.loc21_31.3
// CHECK:STDOUT: %bitwise_xor: %C = bind_name bitwise_xor, %.loc21_31.4
// CHECK:STDOUT: %bitwise_xor: %C = value_binding bitwise_xor, %.loc21_31.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %left_shift.patt: %pattern_type.217 = binding_pattern left_shift [concrete]
// CHECK:STDOUT: %left_shift.patt: %pattern_type.217 = value_binding_pattern left_shift [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc22: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba]
@@ -1624,9 +1624,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc22_30.3: ref %C = temporary %.loc22_30.1, %.loc22_30.2
// CHECK:STDOUT: %.loc22_30.4: %C = bind_value %.loc22_30.3
// CHECK:STDOUT: %left_shift: %C = bind_name left_shift, %.loc22_30.4
// CHECK:STDOUT: %left_shift: %C = value_binding left_shift, %.loc22_30.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %right_shift.patt: %pattern_type.217 = binding_pattern right_shift [concrete]
// CHECK:STDOUT: %right_shift.patt: %pattern_type.217 = value_binding_pattern right_shift [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc23: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b]
@@ -1650,7 +1650,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc23_31.3: ref %C = temporary %.loc23_31.1, %.loc23_31.2
// CHECK:STDOUT: %.loc23_31.4: %C = bind_value %.loc23_31.3
// CHECK:STDOUT: %right_shift: %C = bind_name right_shift, %.loc23_31.4
// CHECK:STDOUT: %right_shift: %C = value_binding right_shift, %.loc23_31.4
// CHECK:STDOUT: %c1.ref.loc26: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc26: ref %C = name_ref c2, %c2
// CHECK:STDOUT: %.loc26_6.1: ref %C = temporary_storage
@@ -1740,7 +1740,7 @@ fn F() {
// CHECK:STDOUT: %.loc35_6.2: init %C = in_place_init %operator^=__carbon_thunk.call, %.loc35_6.1
// CHECK:STDOUT: %.loc35_6.3: ref %C = temporary %.loc35_6.1, %.loc35_6.2
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %equal.patt: %pattern_type.831 = binding_pattern equal [concrete]
// CHECK:STDOUT: %equal.patt: %pattern_type.831 = value_binding_pattern equal [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc38: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc38: ref %C = name_ref c2, %c2
@@ -1761,9 +1761,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc38_24.3: bool = value_of_initializer %.loc38_24.2
// CHECK:STDOUT: %.loc38_24.4: bool = converted %.loc38_24.2, %.loc38_24.3
// CHECK:STDOUT: %equal: bool = bind_name equal, %.loc38_24.4
// CHECK:STDOUT: %equal: bool = value_binding equal, %.loc38_24.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %not_equal.patt: %pattern_type.831 = binding_pattern not_equal [concrete]
// CHECK:STDOUT: %not_equal.patt: %pattern_type.831 = value_binding_pattern not_equal [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc39: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc39: ref %C = name_ref c2, %c2
@@ -1784,9 +1784,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc39_28.3: bool = value_of_initializer %.loc39_28.2
// CHECK:STDOUT: %.loc39_28.4: bool = converted %.loc39_28.2, %.loc39_28.3
// CHECK:STDOUT: %not_equal: bool = bind_name not_equal, %.loc39_28.4
// CHECK:STDOUT: %not_equal: bool = value_binding not_equal, %.loc39_28.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %greater_than.patt: %pattern_type.831 = binding_pattern greater_than [concrete]
// CHECK:STDOUT: %greater_than.patt: %pattern_type.831 = value_binding_pattern greater_than [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc40: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc40: ref %C = name_ref c2, %c2
@@ -1807,9 +1807,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc40_31.3: bool = value_of_initializer %.loc40_31.2
// CHECK:STDOUT: %.loc40_31.4: bool = converted %.loc40_31.2, %.loc40_31.3
// CHECK:STDOUT: %greater_than: bool = bind_name greater_than, %.loc40_31.4
// CHECK:STDOUT: %greater_than: bool = value_binding greater_than, %.loc40_31.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %less_than.patt: %pattern_type.831 = binding_pattern less_than [concrete]
// CHECK:STDOUT: %less_than.patt: %pattern_type.831 = value_binding_pattern less_than [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc41: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc41: ref %C = name_ref c2, %c2
@@ -1830,9 +1830,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc41_28.3: bool = value_of_initializer %.loc41_28.2
// CHECK:STDOUT: %.loc41_28.4: bool = converted %.loc41_28.2, %.loc41_28.3
// CHECK:STDOUT: %less_than: bool = bind_name less_than, %.loc41_28.4
// CHECK:STDOUT: %less_than: bool = value_binding less_than, %.loc41_28.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %greater_than_or_equal.patt: %pattern_type.831 = binding_pattern greater_than_or_equal [concrete]
// CHECK:STDOUT: %greater_than_or_equal.patt: %pattern_type.831 = value_binding_pattern greater_than_or_equal [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc42: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc42: ref %C = name_ref c2, %c2
@@ -1853,9 +1853,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc42_40.3: bool = value_of_initializer %.loc42_40.2
// CHECK:STDOUT: %.loc42_40.4: bool = converted %.loc42_40.2, %.loc42_40.3
// CHECK:STDOUT: %greater_than_or_equal: bool = bind_name greater_than_or_equal, %.loc42_40.4
// CHECK:STDOUT: %greater_than_or_equal: bool = value_binding greater_than_or_equal, %.loc42_40.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %less_than_or_equal.patt: %pattern_type.831 = binding_pattern less_than_or_equal [concrete]
// CHECK:STDOUT: %less_than_or_equal.patt: %pattern_type.831 = value_binding_pattern less_than_or_equal [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc43: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc43: ref %C = name_ref c2, %c2
@@ -1876,7 +1876,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc43_37.3: bool = value_of_initializer %.loc43_37.2
// CHECK:STDOUT: %.loc43_37.4: bool = converted %.loc43_37.2, %.loc43_37.3
// CHECK:STDOUT: %less_than_or_equal: bool = bind_name less_than_or_equal, %.loc43_37.4
// CHECK:STDOUT: %less_than_or_equal: bool = value_binding less_than_or_equal, %.loc43_37.4
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc35: <bound method> = bound_method %.loc35_6.3, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.841
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %bound_method.loc35: <bound method> = bound_method %.loc35_6.3, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
@@ -2021,7 +2021,7 @@ fn F() {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c1.patt: %pattern_type.217 = binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.patt: %pattern_type.217 = value_binding_pattern c1 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Cpp.ref.loc8_19: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc8_22: type = name_ref C, imports.%C.decl [concrete = constants.%C]
@@ -2036,9 +2036,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8_27.3: ref %C = temporary %.loc8_27.1, %.loc8_27.2
// CHECK:STDOUT: %.loc8_27.4: %C = bind_value %.loc8_27.3
// CHECK:STDOUT: %c1: %C = bind_name c1, %.loc8_27.4
// CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_27.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c2.patt: %pattern_type.217 = binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.patt: %pattern_type.217 = value_binding_pattern c2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Cpp.ref.loc9_19: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc9_22: type = name_ref C, imports.%C.decl [concrete = constants.%C]
@@ -2053,9 +2053,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9_27.3: ref %C = temporary %.loc9_27.1, %.loc9_27.2
// CHECK:STDOUT: %.loc9_27.4: %C = bind_value %.loc9_27.3
// CHECK:STDOUT: %c2: %C = bind_name c2, %.loc9_27.4
// CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_27.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c3.patt: %pattern_type.217 = binding_pattern c3 [concrete]
// CHECK:STDOUT: %c3.patt: %pattern_type.217 = value_binding_pattern c3 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc10: %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2
@@ -2073,9 +2073,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10_22.3: ref %C = temporary %.loc10_22.1, %.loc10_22.2
// CHECK:STDOUT: %.loc10_22.4: %C = bind_value %.loc10_22.3
// CHECK:STDOUT: %c3: %C = bind_name c3, %.loc10_22.4
// CHECK:STDOUT: %c3: %C = value_binding c3, %.loc10_22.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c4.patt: %pattern_type.217 = binding_pattern c4 [concrete]
// CHECK:STDOUT: %c4.patt: %pattern_type.217 = value_binding_pattern c4 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc11: %C = name_ref c1, %c1
// CHECK:STDOUT: %c3.ref.loc11: %C = name_ref c3, %c3
@@ -2093,9 +2093,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11_22.3: ref %C = temporary %.loc11_22.1, %.loc11_22.2
// CHECK:STDOUT: %.loc11_22.4: %C = bind_value %.loc11_22.3
// CHECK:STDOUT: %c4: %C = bind_name c4, %.loc11_22.4
// CHECK:STDOUT: %c4: %C = value_binding c4, %.loc11_22.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c5.patt: %pattern_type.217 = binding_pattern c5 [concrete]
// CHECK:STDOUT: %c5.patt: %pattern_type.217 = value_binding_pattern c5 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c4.ref: %C = name_ref c4, %c4
// CHECK:STDOUT: %c3.ref.loc12: %C = name_ref c3, %c3
@@ -2113,7 +2113,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12_22.3: ref %C = temporary %.loc12_22.1, %.loc12_22.2
// CHECK:STDOUT: %.loc12_22.4: %C = bind_value %.loc12_22.3
// CHECK:STDOUT: %c5: %C = bind_name c5, %.loc12_22.4
// CHECK:STDOUT: %c5: %C = value_binding c5, %.loc12_22.4
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc12: <bound method> = bound_method %.loc12_22.3, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.841
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %bound_method.loc12: <bound method> = bound_method %.loc12_22.3, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
@@ -2194,7 +2194,7 @@ fn F() {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c1.patt: %pattern_type.217 = binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.patt: %pattern_type.217 = ref_binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.var_patt: %pattern_type.217 = var_pattern %c1.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.var: ref %C = var %c1.var_patt
@@ -2210,9 +2210,9 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref.loc15_11: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc15_14: type = name_ref C, imports.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1: ref %C = bind_name c1, %c1.var
// CHECK:STDOUT: %c1: ref %C = ref_binding c1, %c1.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c2.patt: %pattern_type.217 = binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.patt: %pattern_type.217 = ref_binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.var_patt: %pattern_type.217 = var_pattern %c2.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c2.var: ref %C = var %c2.var_patt
@@ -2228,9 +2228,9 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref.loc16_11: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc16_14: type = name_ref C, imports.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c2: ref %C = bind_name c2, %c2.var
// CHECK:STDOUT: %c2: ref %C = ref_binding c2, %c2.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %greater_than.patt: %pattern_type.831 = binding_pattern greater_than [concrete]
// CHECK:STDOUT: %greater_than.patt: %pattern_type.831 = value_binding_pattern greater_than [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc19: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc19: ref %C = name_ref c2, %c2
@@ -2251,9 +2251,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc19_31.3: bool = value_of_initializer %.loc19_31.2
// CHECK:STDOUT: %.loc19_31.4: bool = converted %.loc19_31.2, %.loc19_31.3
// CHECK:STDOUT: %greater_than: bool = bind_name greater_than, %.loc19_31.4
// CHECK:STDOUT: %greater_than: bool = value_binding greater_than, %.loc19_31.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %less_than.patt: %pattern_type.831 = binding_pattern less_than [concrete]
// CHECK:STDOUT: %less_than.patt: %pattern_type.831 = value_binding_pattern less_than [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc26: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc26: ref %C = name_ref c2, %c2
@@ -2262,9 +2262,9 @@ fn F() {
// CHECK:STDOUT: %.loc26_18.2: type = value_of_initializer %Bool.call.loc26 [concrete = bool]
// CHECK:STDOUT: %.loc26_18.3: type = converted %Bool.call.loc26, %.loc26_18.2 [concrete = bool]
// CHECK:STDOUT: }
// CHECK:STDOUT: %less_than: bool = bind_name less_than, <error> [concrete = <error>]
// CHECK:STDOUT: %less_than: bool = value_binding less_than, <error> [concrete = <error>]
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %greater_than_or_equal.patt: %pattern_type.831 = binding_pattern greater_than_or_equal [concrete]
// CHECK:STDOUT: %greater_than_or_equal.patt: %pattern_type.831 = value_binding_pattern greater_than_or_equal [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc33: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc33: ref %C = name_ref c2, %c2
@@ -2273,9 +2273,9 @@ fn F() {
// CHECK:STDOUT: %.loc33_30.2: type = value_of_initializer %Bool.call.loc33 [concrete = bool]
// CHECK:STDOUT: %.loc33_30.3: type = converted %Bool.call.loc33, %.loc33_30.2 [concrete = bool]
// CHECK:STDOUT: }
// CHECK:STDOUT: %greater_than_or_equal: bool = bind_name greater_than_or_equal, <error> [concrete = <error>]
// CHECK:STDOUT: %greater_than_or_equal: bool = value_binding greater_than_or_equal, <error> [concrete = <error>]
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %less_than_or_equal.patt: %pattern_type.831 = binding_pattern less_than_or_equal [concrete]
// CHECK:STDOUT: %less_than_or_equal.patt: %pattern_type.831 = value_binding_pattern less_than_or_equal [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc36: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc36: ref %C = name_ref c2, %c2
@@ -2296,7 +2296,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc36_37.3: bool = value_of_initializer %.loc36_37.2
// CHECK:STDOUT: %.loc36_37.4: bool = converted %.loc36_37.2, %.loc36_37.3
// CHECK:STDOUT: %less_than_or_equal: bool = bind_name less_than_or_equal, %.loc36_37.4
// CHECK:STDOUT: %less_than_or_equal: bool = value_binding less_than_or_equal, %.loc36_37.4
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc16: <bound method> = bound_method %c2.var, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.841
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %bound_method.loc16: <bound method> = bound_method %c2.var, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
@@ -2355,7 +2355,7 @@ fn F() {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c1.patt: %pattern_type.217 = binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.patt: %pattern_type.217 = ref_binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.var_patt: %pattern_type.217 = var_pattern %c1.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.var: ref %C = var %c1.var_patt
@@ -2371,9 +2371,9 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref.loc12_11: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc12_14: type = name_ref C, imports.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1: ref %C = bind_name c1, %c1.var
// CHECK:STDOUT: %c1: ref %C = ref_binding c1, %c1.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c2.patt: %pattern_type.217 = binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.patt: %pattern_type.217 = ref_binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.var_patt: %pattern_type.217 = var_pattern %c2.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c2.var: ref %C = var %c2.var_patt
@@ -2389,9 +2389,9 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref.loc13_11: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc13_14: type = name_ref C, imports.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c2: ref %C = bind_name c2, %c2.var
// CHECK:STDOUT: %c2: ref %C = ref_binding c2, %c2.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %equal.patt: %pattern_type.831 = binding_pattern equal [concrete]
// CHECK:STDOUT: %equal.patt: %pattern_type.831 = value_binding_pattern equal [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc16: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc16: ref %C = name_ref c2, %c2
@@ -2412,9 +2412,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc16_24.3: bool = value_of_initializer %.loc16_24.2
// CHECK:STDOUT: %.loc16_24.4: bool = converted %.loc16_24.2, %.loc16_24.3
// CHECK:STDOUT: %equal: bool = bind_name equal, %.loc16_24.4
// CHECK:STDOUT: %equal: bool = value_binding equal, %.loc16_24.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %not_equal.patt: %pattern_type.831 = binding_pattern not_equal [concrete]
// CHECK:STDOUT: %not_equal.patt: %pattern_type.831 = value_binding_pattern not_equal [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc23: ref %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc23: ref %C = name_ref c2, %c2
@@ -2423,7 +2423,7 @@ fn F() {
// CHECK:STDOUT: %.loc23_18.2: type = value_of_initializer %Bool.call.loc23 [concrete = bool]
// CHECK:STDOUT: %.loc23_18.3: type = converted %Bool.call.loc23, %.loc23_18.2 [concrete = bool]
// CHECK:STDOUT: }
// CHECK:STDOUT: %not_equal: bool = bind_name not_equal, <error> [concrete = <error>]
// CHECK:STDOUT: %not_equal: bool = value_binding not_equal, <error> [concrete = <error>]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc13: <bound method> = bound_method %c2.var, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.841
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %bound_method.loc13: <bound method> = bound_method %c2.var, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
@@ -2482,7 +2482,7 @@ fn F() {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c1.patt: %pattern_type.69f = binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.patt: %pattern_type.69f = value_binding_pattern c1 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Cpp.ref.loc8_21: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %N.ref.loc8_24: <namespace> = name_ref N, imports.%N [concrete = imports.%N]
@@ -2499,9 +2499,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8_31.3: ref %C = temporary %.loc8_31.1, %.loc8_31.2
// CHECK:STDOUT: %.loc8_31.4: %C = bind_value %.loc8_31.3
// CHECK:STDOUT: %c1: %C = bind_name c1, %.loc8_31.4
// CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_31.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c2.patt: %pattern_type.69f = binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.patt: %pattern_type.69f = value_binding_pattern c2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Cpp.ref.loc9_21: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %N.ref.loc9_24: <namespace> = name_ref N, imports.%N [concrete = imports.%N]
@@ -2518,9 +2518,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9_31.3: ref %C = temporary %.loc9_31.1, %.loc9_31.2
// CHECK:STDOUT: %.loc9_31.4: %C = bind_value %.loc9_31.3
// CHECK:STDOUT: %c2: %C = bind_name c2, %.loc9_31.4
// CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_31.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c3.patt: %pattern_type.69f = binding_pattern c3 [concrete]
// CHECK:STDOUT: %c3.patt: %pattern_type.69f = value_binding_pattern c3 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref: %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2
@@ -2539,7 +2539,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10_24.3: ref %C = temporary %.loc10_24.1, %.loc10_24.2
// CHECK:STDOUT: %.loc10_24.4: %C = bind_value %.loc10_24.3
// CHECK:STDOUT: %c3: %C = bind_name c3, %.loc10_24.4
// CHECK:STDOUT: %c3: %C = value_binding c3, %.loc10_24.4
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc10: <bound method> = bound_method %.loc10_24.3, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.b69
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %bound_method.loc10: <bound method> = bound_method %.loc10_24.3, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
@@ -2632,7 +2632,7 @@ fn F() {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c1.patt: %pattern_type.20f = binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.patt: %pattern_type.20f = value_binding_pattern c1 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Cpp.ref.loc8_23: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %N1.ref.loc8_26: <namespace> = name_ref N1, imports.%N1 [concrete = imports.%N1]
@@ -2649,9 +2649,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8_36.3: ref %C1 = temporary %.loc8_36.1, %.loc8_36.2
// CHECK:STDOUT: %.loc8_36.4: %C1 = bind_value %.loc8_36.3
// CHECK:STDOUT: %c1: %C1 = bind_name c1, %.loc8_36.4
// CHECK:STDOUT: %c1: %C1 = value_binding c1, %.loc8_36.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c2.patt: %pattern_type.846 = binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.patt: %pattern_type.846 = value_binding_pattern c2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Cpp.ref.loc9_23: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %N2.ref.loc9_26: <namespace> = name_ref N2, imports.%N2 [concrete = imports.%N2]
@@ -2668,9 +2668,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9_36.3: ref %C2 = temporary %.loc9_36.1, %.loc9_36.2
// CHECK:STDOUT: %.loc9_36.4: %C2 = bind_value %.loc9_36.3
// CHECK:STDOUT: %c2: %C2 = bind_name c2, %.loc9_36.4
// CHECK:STDOUT: %c2: %C2 = value_binding c2, %.loc9_36.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c3.patt: %pattern_type.846 = binding_pattern c3 [concrete]
// CHECK:STDOUT: %c3.patt: %pattern_type.846 = value_binding_pattern c3 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref.loc10: %C1 = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref.loc10: %C2 = name_ref c2, %c2
@@ -2689,9 +2689,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10_26.3: ref %C2 = temporary %.loc10_26.1, %.loc10_26.2
// CHECK:STDOUT: %.loc10_26.4: %C2 = bind_value %.loc10_26.3
// CHECK:STDOUT: %c3: %C2 = bind_name c3, %.loc10_26.4
// CHECK:STDOUT: %c3: %C2 = value_binding c3, %.loc10_26.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c4.patt: %pattern_type.846 = binding_pattern c4 [concrete]
// CHECK:STDOUT: %c4.patt: %pattern_type.846 = value_binding_pattern c4 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c2.ref.loc11: %C2 = name_ref c2, %c2
// CHECK:STDOUT: %c1.ref.loc11: %C1 = name_ref c1, %c1
@@ -2710,7 +2710,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11_26.3: ref %C2 = temporary %.loc11_26.1, %.loc11_26.2
// CHECK:STDOUT: %.loc11_26.4: %C2 = bind_value %.loc11_26.3
// CHECK:STDOUT: %c4: %C2 = bind_name c4, %.loc11_26.4
// CHECK:STDOUT: %c4: %C2 = value_binding c4, %.loc11_26.4
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc11: <bound method> = bound_method %.loc11_26.3, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.553
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %bound_method.loc11: <bound method> = bound_method %.loc11_26.3, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
@@ -2772,7 +2772,7 @@ fn F() {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c1.patt: %pattern_type.69f = binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.patt: %pattern_type.69f = value_binding_pattern c1 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Cpp.ref.loc8_21: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %N.ref.loc8_24: <namespace> = name_ref N, imports.%N [concrete = imports.%N]
@@ -2789,9 +2789,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8_31.3: ref %C = temporary %.loc8_31.1, %.loc8_31.2
// CHECK:STDOUT: %.loc8_31.4: %C = bind_value %.loc8_31.3
// CHECK:STDOUT: %c1: %C = bind_name c1, %.loc8_31.4
// CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_31.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c2.patt: %pattern_type.69f = binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.patt: %pattern_type.69f = value_binding_pattern c2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Cpp.ref.loc9_21: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %N.ref.loc9_24: <namespace> = name_ref N, imports.%N [concrete = imports.%N]
@@ -2808,9 +2808,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9_31.3: ref %C = temporary %.loc9_31.1, %.loc9_31.2
// CHECK:STDOUT: %.loc9_31.4: %C = bind_value %.loc9_31.3
// CHECK:STDOUT: %c2: %C = bind_name c2, %.loc9_31.4
// CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_31.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c3.patt: %pattern_type.69f = binding_pattern c3 [concrete]
// CHECK:STDOUT: %c3.patt: %pattern_type.69f = value_binding_pattern c3 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref: %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2
@@ -2819,7 +2819,7 @@ fn F() {
// CHECK:STDOUT: %N.ref.loc14: <namespace> = name_ref N, imports.%N [concrete = imports.%N]
// CHECK:STDOUT: %C.ref.loc14: type = name_ref C, imports.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c3: %C = bind_name c3, <error> [concrete = <error>]
// CHECK:STDOUT: %c3: %C = value_binding c3, <error> [concrete = <error>]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc9: <bound method> = bound_method %.loc9_31.3, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.b69
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %bound_method.loc9: <bound method> = bound_method %.loc9_31.3, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
@@ -2876,7 +2876,7 @@ fn F() {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c1.patt: %pattern_type.b28 = binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.patt: %pattern_type.b28 = value_binding_pattern c1 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Cpp.ref.loc8_21: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %O.ref.loc8_24: type = name_ref O, imports.%O.decl [concrete = constants.%O]
@@ -2893,9 +2893,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8_31.3: ref %C = temporary %.loc8_31.1, %.loc8_31.2
// CHECK:STDOUT: %.loc8_31.4: %C = bind_value %.loc8_31.3
// CHECK:STDOUT: %c1: %C = bind_name c1, %.loc8_31.4
// CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_31.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c2.patt: %pattern_type.b28 = binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.patt: %pattern_type.b28 = value_binding_pattern c2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Cpp.ref.loc9_21: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %O.ref.loc9_24: type = name_ref O, imports.%O.decl [concrete = constants.%O]
@@ -2912,9 +2912,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9_31.3: ref %C = temporary %.loc9_31.1, %.loc9_31.2
// CHECK:STDOUT: %.loc9_31.4: %C = bind_value %.loc9_31.3
// CHECK:STDOUT: %c2: %C = bind_name c2, %.loc9_31.4
// CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_31.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c3.patt: %pattern_type.b28 = binding_pattern c3 [concrete]
// CHECK:STDOUT: %c3.patt: %pattern_type.b28 = value_binding_pattern c3 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref: %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2
@@ -2933,7 +2933,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10_24.3: ref %C = temporary %.loc10_24.1, %.loc10_24.2
// CHECK:STDOUT: %.loc10_24.4: %C = bind_value %.loc10_24.3
// CHECK:STDOUT: %c3: %C = bind_name c3, %.loc10_24.4
// CHECK:STDOUT: %c3: %C = value_binding c3, %.loc10_24.4
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc10: <bound method> = bound_method %.loc10_24.3, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.ae5
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %bound_method.loc10: <bound method> = bound_method %.loc10_24.3, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
@@ -2999,7 +2999,7 @@ fn F() {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c1.patt: %pattern_type.84b = binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.patt: %pattern_type.84b = value_binding_pattern c1 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Cpp.ref.loc8_23: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %N.ref.loc8_26: <namespace> = name_ref N, imports.%N [concrete = imports.%N]
@@ -3018,9 +3018,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8_35.3: ref %C = temporary %.loc8_35.1, %.loc8_35.2
// CHECK:STDOUT: %.loc8_35.4: %C = bind_value %.loc8_35.3
// CHECK:STDOUT: %c1: %C = bind_name c1, %.loc8_35.4
// CHECK:STDOUT: %c1: %C = value_binding c1, %.loc8_35.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c2.patt: %pattern_type.84b = binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.patt: %pattern_type.84b = value_binding_pattern c2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Cpp.ref.loc9_23: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %N.ref.loc9_26: <namespace> = name_ref N, imports.%N [concrete = imports.%N]
@@ -3039,9 +3039,9 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9_35.3: ref %C = temporary %.loc9_35.1, %.loc9_35.2
// CHECK:STDOUT: %.loc9_35.4: %C = bind_value %.loc9_35.3
// CHECK:STDOUT: %c2: %C = bind_name c2, %.loc9_35.4
// CHECK:STDOUT: %c2: %C = value_binding c2, %.loc9_35.4
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c3.patt: %pattern_type.84b = binding_pattern c3 [concrete]
// CHECK:STDOUT: %c3.patt: %pattern_type.84b = value_binding_pattern c3 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref: %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2
@@ -3061,7 +3061,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10_26.3: ref %C = temporary %.loc10_26.1, %.loc10_26.2
// CHECK:STDOUT: %.loc10_26.4: %C = bind_value %.loc10_26.3
// CHECK:STDOUT: %c3: %C = bind_name c3, %.loc10_26.4
// CHECK:STDOUT: %c3: %C = value_binding c3, %.loc10_26.4
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc10: <bound method> = bound_method %.loc10_26.3, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.971
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %bound_method.loc10: <bound method> = bound_method %.loc10_26.3, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
@@ -3128,7 +3128,7 @@ fn F() {
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c1.patt: %pattern_type.217 = binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.patt: %pattern_type.217 = ref_binding_pattern c1 [concrete]
// CHECK:STDOUT: %c1.var_patt: %pattern_type.217 = var_pattern %c1.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.var: ref %C = var %c1.var_patt
@@ -3144,9 +3144,9 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref.loc8_11: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc8_14: type = name_ref C, imports.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1: ref %C = bind_name c1, %c1.var
// CHECK:STDOUT: %c1: ref %C = ref_binding c1, %c1.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c2.patt: %pattern_type.217 = binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.patt: %pattern_type.217 = ref_binding_pattern c2 [concrete]
// CHECK:STDOUT: %c2.var_patt: %pattern_type.217 = var_pattern %c2.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c2.var: ref %C = var %c2.var_patt
@@ -3161,9 +3161,9 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref.loc9: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc9: type = name_ref C, imports.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c2: ref %C = bind_name c2, %c2.var
// CHECK:STDOUT: %c2: ref %C = ref_binding c2, %c2.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c3.patt: %pattern_type.217 = binding_pattern c3 [concrete]
// CHECK:STDOUT: %c3.patt: %pattern_type.217 = ref_binding_pattern c3 [concrete]
// CHECK:STDOUT: %c3.var_patt: %pattern_type.217 = var_pattern %c3.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c3.var: ref %C = var %c3.var_patt
@@ -3182,7 +3182,7 @@ fn F() {
// CHECK:STDOUT: %Cpp.ref.loc10: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c3: ref %C = bind_name c3, %c3.var
// CHECK:STDOUT: %c3: ref %C = ref_binding c3, %c3.var
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc10: <bound method> = bound_method %c3.var, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.841
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %bound_method.loc10: <bound method> = bound_method %c3.var, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
@@ -3264,7 +3264,7 @@ fn F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c3.patt: %pattern_type.217 = binding_pattern c3 [concrete]
// CHECK:STDOUT: %c3.patt: %pattern_type.217 = value_binding_pattern c3 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c1.ref: %C = name_ref c1, %c1
// CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2
@@ -3282,7 +3282,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10_22.3: ref %C = temporary %.loc10_22.1, %.loc10_22.2
// CHECK:STDOUT: %.loc10_22.4: %C = bind_value %.loc10_22.3
// CHECK:STDOUT: %c3: %C = bind_name c3, %.loc10_22.4
// CHECK:STDOUT: %c3: %C = value_binding c3, %.loc10_22.4
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc10: <bound method> = bound_method %.loc10_22.3, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.841
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: %bound_method.loc10: <bound method> = bound_method %.loc10_22.3, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1