diff --git a/toolchain/check/custom_witness.cpp b/toolchain/check/custom_witness.cpp index 6de243f42c40..d10f818870fb 100644 --- a/toolchain/check/custom_witness.cpp +++ b/toolchain/check/custom_witness.cpp @@ -408,8 +408,34 @@ static auto MakeSubobjectDestroyOpBody(Context& context, SemIR::LocId loc_id, auto inst = context.types().GetAsInst(self_type_id); CARBON_KIND_SWITCH(inst) { case CARBON_KIND(SemIR::ArrayType array_type): { - // TODO: implement destruction for array types. - (void)array_type; + auto size = context.ints() + .Get(context.insts() + .GetAs(array_type.bound_id) + .int_id) + .getSExtValue(); + auto index_type_id = + GetSingletonType(context, SemIR::IntLiteralType::TypeInstId); + + // TODO: Significantly reduce how much SemIR we output by replacing O(N) + // calls to `Destroy.SelfDestruct` loop over the array that calls the + // method in its body. + // + // We probably need to use `StartLoopHeader`, `BranchAndStartLoopBody`, + // and `FinishLoopBody`, which are currently private functions in + // `/toolchain/check/handle_loop_statement.cpp`. + while (--size >= 0) { + auto int_id = context.ints().Add(size); + auto index_id = AddInst( + context, loc_id, + SemIR::IntValue{.type_id = index_type_id, .int_id = int_id}); + auto element_id = AddInst( + context, loc_id, + {.type_id = context.types().GetTypeIdForTypeInstId( + array_type.element_type_inst_id), + .array_id = callee_self_param_id, + .index_id = index_id}); + BuildSelfDestructCall(context, element_id); + } return; } case CARBON_KIND(SemIR::ClassType class_type): { diff --git a/toolchain/check/testdata/array/basics.carbon b/toolchain/check/testdata/array/basics.carbon index c44e8b0ea29a..b4d8dcf8a7da 100644 --- a/toolchain/check/testdata/array/basics.carbon +++ b/toolchain/check/testdata/array/basics.carbon @@ -212,6 +212,8 @@ var a: array(1, 1); // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.3: type = fn_type @Destroy.WithSelf.Op.loc10_3.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.3: %Destroy.WithSelf.Op.type.ef016f.3 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.3: type = fn_type @Destroy.WithSelf.SelfDestruct.loc10_3.3 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.3: %Destroy.WithSelf.SelfDestruct.type.fbceb5.3 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.e5f: %pattern_type.c3e = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.1ad: %pattern_type.c3e = wrapper_binding_pattern self, %self.param_patt.e5f [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc10_3.4 [concrete] @@ -369,6 +371,14 @@ var a: array(1, 1); // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc10_3.4(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc10_3.1: ref %tuple.type.a8c = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.1: = bound_method %.loc10_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.3 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.1(%.loc10_3.1) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc10_3.2: ref %tuple.type.a8c = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.2: = bound_method %.loc10_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.3 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.2(%.loc10_3.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -577,6 +587,18 @@ var a: array(1, 1); // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc7(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc7_3.1: ref %empty_tuple.type = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc7_3.1: = bound_method %.loc7_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc7_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc7_3.1(%.loc7_3.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc7_3.2: ref %empty_tuple.type = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc7_3.2: = bound_method %.loc7_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc7_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc7_3.2(%.loc7_3.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc7_3.3: ref %empty_tuple.type = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc7_3.3: = bound_method %.loc7_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc7_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc7_3.3(%.loc7_3.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -743,6 +765,10 @@ var a: array(1, 1); // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc8_3(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc8: ref %empty_tuple.type = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc8) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/array/import.carbon b/toolchain/check/testdata/array/import.carbon index 5891b6eb4103..37b4c397b38d 100644 --- a/toolchain/check/testdata/array/import.carbon +++ b/toolchain/check/testdata/array/import.carbon @@ -80,10 +80,53 @@ fn F() -> i32 { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc6_12.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc6_12.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.087: %pattern_type.c07 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.b22: %pattern_type.c07 = wrapper_binding_pattern self, %self.param_patt.087 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc6_12.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] +// CHECK:STDOUT: %int_41: Core.IntLiteral = int_value 41 [concrete] +// CHECK:STDOUT: %int_40: Core.IntLiteral = int_value 40 [concrete] +// CHECK:STDOUT: %int_39: Core.IntLiteral = int_value 39 [concrete] +// CHECK:STDOUT: %int_38: Core.IntLiteral = int_value 38 [concrete] +// CHECK:STDOUT: %int_37: Core.IntLiteral = int_value 37 [concrete] +// CHECK:STDOUT: %int_36: Core.IntLiteral = int_value 36 [concrete] +// CHECK:STDOUT: %int_35: Core.IntLiteral = int_value 35 [concrete] +// CHECK:STDOUT: %int_34: Core.IntLiteral = int_value 34 [concrete] +// CHECK:STDOUT: %int_33: Core.IntLiteral = int_value 33 [concrete] +// CHECK:STDOUT: %int_31: Core.IntLiteral = int_value 31 [concrete] +// CHECK:STDOUT: %int_30: Core.IntLiteral = int_value 30 [concrete] +// CHECK:STDOUT: %int_29: Core.IntLiteral = int_value 29 [concrete] +// CHECK:STDOUT: %int_28: Core.IntLiteral = int_value 28 [concrete] +// CHECK:STDOUT: %int_27: Core.IntLiteral = int_value 27 [concrete] +// CHECK:STDOUT: %int_26: Core.IntLiteral = int_value 26 [concrete] +// CHECK:STDOUT: %int_25: Core.IntLiteral = int_value 25 [concrete] +// CHECK:STDOUT: %int_24: Core.IntLiteral = int_value 24 [concrete] +// CHECK:STDOUT: %int_23: Core.IntLiteral = int_value 23 [concrete] +// CHECK:STDOUT: %int_22: Core.IntLiteral = int_value 22 [concrete] +// CHECK:STDOUT: %int_21: Core.IntLiteral = int_value 21 [concrete] +// CHECK:STDOUT: %int_20: Core.IntLiteral = int_value 20 [concrete] +// CHECK:STDOUT: %int_19: Core.IntLiteral = int_value 19 [concrete] +// CHECK:STDOUT: %int_18: Core.IntLiteral = int_value 18 [concrete] +// CHECK:STDOUT: %int_17: Core.IntLiteral = int_value 17 [concrete] +// CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] +// CHECK:STDOUT: %int_15: Core.IntLiteral = int_value 15 [concrete] +// CHECK:STDOUT: %int_14: Core.IntLiteral = int_value 14 [concrete] +// CHECK:STDOUT: %int_13: Core.IntLiteral = int_value 13 [concrete] +// CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete] +// CHECK:STDOUT: %int_11: Core.IntLiteral = int_value 11 [concrete] +// CHECK:STDOUT: %int_10: Core.IntLiteral = int_value 10 [concrete] +// CHECK:STDOUT: %int_9: Core.IntLiteral = int_value 9 [concrete] +// CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] +// CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [concrete] +// CHECK:STDOUT: %int_6: Core.IntLiteral = int_value 6 [concrete] +// CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete] +// CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete] +// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc6_12.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc6_12.2 [concrete] @@ -159,6 +202,174 @@ fn F() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc6_12.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_41: Core.IntLiteral = int_value 41 [concrete = constants.%int_41] +// CHECK:STDOUT: %.loc6_12.1: ref %i32 = array_index %self.param, %int_41 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.1: = bound_method %.loc6_12.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.1(%.loc6_12.1) +// CHECK:STDOUT: %int_40: Core.IntLiteral = int_value 40 [concrete = constants.%int_40] +// CHECK:STDOUT: %.loc6_12.2: ref %i32 = array_index %self.param, %int_40 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.2: = bound_method %.loc6_12.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.2(%.loc6_12.2) +// CHECK:STDOUT: %int_39: Core.IntLiteral = int_value 39 [concrete = constants.%int_39] +// CHECK:STDOUT: %.loc6_12.3: ref %i32 = array_index %self.param, %int_39 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.3: = bound_method %.loc6_12.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.3(%.loc6_12.3) +// CHECK:STDOUT: %int_38: Core.IntLiteral = int_value 38 [concrete = constants.%int_38] +// CHECK:STDOUT: %.loc6_12.4: ref %i32 = array_index %self.param, %int_38 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.4: = bound_method %.loc6_12.4, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.4: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.4(%.loc6_12.4) +// CHECK:STDOUT: %int_37: Core.IntLiteral = int_value 37 [concrete = constants.%int_37] +// CHECK:STDOUT: %.loc6_12.5: ref %i32 = array_index %self.param, %int_37 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.5: = bound_method %.loc6_12.5, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.5: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.5(%.loc6_12.5) +// CHECK:STDOUT: %int_36: Core.IntLiteral = int_value 36 [concrete = constants.%int_36] +// CHECK:STDOUT: %.loc6_12.6: ref %i32 = array_index %self.param, %int_36 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.6: = bound_method %.loc6_12.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.6: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.6(%.loc6_12.6) +// CHECK:STDOUT: %int_35: Core.IntLiteral = int_value 35 [concrete = constants.%int_35] +// CHECK:STDOUT: %.loc6_12.7: ref %i32 = array_index %self.param, %int_35 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.7: = bound_method %.loc6_12.7, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.7: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.7(%.loc6_12.7) +// CHECK:STDOUT: %int_34: Core.IntLiteral = int_value 34 [concrete = constants.%int_34] +// CHECK:STDOUT: %.loc6_12.8: ref %i32 = array_index %self.param, %int_34 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.8: = bound_method %.loc6_12.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.8: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.8(%.loc6_12.8) +// CHECK:STDOUT: %int_33: Core.IntLiteral = int_value 33 [concrete = constants.%int_33] +// CHECK:STDOUT: %.loc6_12.9: ref %i32 = array_index %self.param, %int_33 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.9: = bound_method %.loc6_12.9, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.9: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.9(%.loc6_12.9) +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %.loc6_12.10: ref %i32 = array_index %self.param, %int_32 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.10: = bound_method %.loc6_12.10, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.10: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.10(%.loc6_12.10) +// CHECK:STDOUT: %int_31: Core.IntLiteral = int_value 31 [concrete = constants.%int_31] +// CHECK:STDOUT: %.loc6_12.11: ref %i32 = array_index %self.param, %int_31 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.11: = bound_method %.loc6_12.11, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.11: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.11(%.loc6_12.11) +// CHECK:STDOUT: %int_30: Core.IntLiteral = int_value 30 [concrete = constants.%int_30] +// CHECK:STDOUT: %.loc6_12.12: ref %i32 = array_index %self.param, %int_30 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.12: = bound_method %.loc6_12.12, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.12: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.12(%.loc6_12.12) +// CHECK:STDOUT: %int_29: Core.IntLiteral = int_value 29 [concrete = constants.%int_29] +// CHECK:STDOUT: %.loc6_12.13: ref %i32 = array_index %self.param, %int_29 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.13: = bound_method %.loc6_12.13, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.13: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.13(%.loc6_12.13) +// CHECK:STDOUT: %int_28: Core.IntLiteral = int_value 28 [concrete = constants.%int_28] +// CHECK:STDOUT: %.loc6_12.14: ref %i32 = array_index %self.param, %int_28 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.14: = bound_method %.loc6_12.14, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.14: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.14(%.loc6_12.14) +// CHECK:STDOUT: %int_27: Core.IntLiteral = int_value 27 [concrete = constants.%int_27] +// CHECK:STDOUT: %.loc6_12.15: ref %i32 = array_index %self.param, %int_27 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.15: = bound_method %.loc6_12.15, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.15: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.15(%.loc6_12.15) +// CHECK:STDOUT: %int_26: Core.IntLiteral = int_value 26 [concrete = constants.%int_26] +// CHECK:STDOUT: %.loc6_12.16: ref %i32 = array_index %self.param, %int_26 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.16: = bound_method %.loc6_12.16, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.16: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.16(%.loc6_12.16) +// CHECK:STDOUT: %int_25: Core.IntLiteral = int_value 25 [concrete = constants.%int_25] +// CHECK:STDOUT: %.loc6_12.17: ref %i32 = array_index %self.param, %int_25 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.17: = bound_method %.loc6_12.17, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.17: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.17(%.loc6_12.17) +// CHECK:STDOUT: %int_24: Core.IntLiteral = int_value 24 [concrete = constants.%int_24] +// CHECK:STDOUT: %.loc6_12.18: ref %i32 = array_index %self.param, %int_24 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.18: = bound_method %.loc6_12.18, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.18: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.18(%.loc6_12.18) +// CHECK:STDOUT: %int_23: Core.IntLiteral = int_value 23 [concrete = constants.%int_23] +// CHECK:STDOUT: %.loc6_12.19: ref %i32 = array_index %self.param, %int_23 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.19: = bound_method %.loc6_12.19, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.19: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.19(%.loc6_12.19) +// CHECK:STDOUT: %int_22: Core.IntLiteral = int_value 22 [concrete = constants.%int_22] +// CHECK:STDOUT: %.loc6_12.20: ref %i32 = array_index %self.param, %int_22 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.20: = bound_method %.loc6_12.20, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.20: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.20(%.loc6_12.20) +// CHECK:STDOUT: %int_21: Core.IntLiteral = int_value 21 [concrete = constants.%int_21] +// CHECK:STDOUT: %.loc6_12.21: ref %i32 = array_index %self.param, %int_21 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.21: = bound_method %.loc6_12.21, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.21: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.21(%.loc6_12.21) +// CHECK:STDOUT: %int_20: Core.IntLiteral = int_value 20 [concrete = constants.%int_20] +// CHECK:STDOUT: %.loc6_12.22: ref %i32 = array_index %self.param, %int_20 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.22: = bound_method %.loc6_12.22, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.22: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.22(%.loc6_12.22) +// CHECK:STDOUT: %int_19: Core.IntLiteral = int_value 19 [concrete = constants.%int_19] +// CHECK:STDOUT: %.loc6_12.23: ref %i32 = array_index %self.param, %int_19 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.23: = bound_method %.loc6_12.23, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.23: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.23(%.loc6_12.23) +// CHECK:STDOUT: %int_18: Core.IntLiteral = int_value 18 [concrete = constants.%int_18] +// CHECK:STDOUT: %.loc6_12.24: ref %i32 = array_index %self.param, %int_18 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.24: = bound_method %.loc6_12.24, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.24: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.24(%.loc6_12.24) +// CHECK:STDOUT: %int_17: Core.IntLiteral = int_value 17 [concrete = constants.%int_17] +// CHECK:STDOUT: %.loc6_12.25: ref %i32 = array_index %self.param, %int_17 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.25: = bound_method %.loc6_12.25, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.25: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.25(%.loc6_12.25) +// CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete = constants.%int_16] +// CHECK:STDOUT: %.loc6_12.26: ref %i32 = array_index %self.param, %int_16 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.26: = bound_method %.loc6_12.26, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.26: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.26(%.loc6_12.26) +// CHECK:STDOUT: %int_15: Core.IntLiteral = int_value 15 [concrete = constants.%int_15] +// CHECK:STDOUT: %.loc6_12.27: ref %i32 = array_index %self.param, %int_15 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.27: = bound_method %.loc6_12.27, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.27: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.27(%.loc6_12.27) +// CHECK:STDOUT: %int_14: Core.IntLiteral = int_value 14 [concrete = constants.%int_14] +// CHECK:STDOUT: %.loc6_12.28: ref %i32 = array_index %self.param, %int_14 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.28: = bound_method %.loc6_12.28, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.28: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.28(%.loc6_12.28) +// CHECK:STDOUT: %int_13: Core.IntLiteral = int_value 13 [concrete = constants.%int_13] +// CHECK:STDOUT: %.loc6_12.29: ref %i32 = array_index %self.param, %int_13 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.29: = bound_method %.loc6_12.29, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.29: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.29(%.loc6_12.29) +// CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete = constants.%int_12] +// CHECK:STDOUT: %.loc6_12.30: ref %i32 = array_index %self.param, %int_12 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.30: = bound_method %.loc6_12.30, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.30: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.30(%.loc6_12.30) +// CHECK:STDOUT: %int_11: Core.IntLiteral = int_value 11 [concrete = constants.%int_11] +// CHECK:STDOUT: %.loc6_12.31: ref %i32 = array_index %self.param, %int_11 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.31: = bound_method %.loc6_12.31, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.31: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.31(%.loc6_12.31) +// CHECK:STDOUT: %int_10: Core.IntLiteral = int_value 10 [concrete = constants.%int_10] +// CHECK:STDOUT: %.loc6_12.32: ref %i32 = array_index %self.param, %int_10 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.32: = bound_method %.loc6_12.32, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.32: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.32(%.loc6_12.32) +// CHECK:STDOUT: %int_9: Core.IntLiteral = int_value 9 [concrete = constants.%int_9] +// CHECK:STDOUT: %.loc6_12.33: ref %i32 = array_index %self.param, %int_9 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.33: = bound_method %.loc6_12.33, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.33: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.33(%.loc6_12.33) +// CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete = constants.%int_8] +// CHECK:STDOUT: %.loc6_12.34: ref %i32 = array_index %self.param, %int_8 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.34: = bound_method %.loc6_12.34, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.34: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.34(%.loc6_12.34) +// CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [concrete = constants.%int_7] +// CHECK:STDOUT: %.loc6_12.35: ref %i32 = array_index %self.param, %int_7 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.35: = bound_method %.loc6_12.35, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.35: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.35(%.loc6_12.35) +// CHECK:STDOUT: %int_6: Core.IntLiteral = int_value 6 [concrete = constants.%int_6] +// CHECK:STDOUT: %.loc6_12.36: ref %i32 = array_index %self.param, %int_6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.36: = bound_method %.loc6_12.36, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.36: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.36(%.loc6_12.36) +// CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5] +// CHECK:STDOUT: %.loc6_12.37: ref %i32 = array_index %self.param, %int_5 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.37: = bound_method %.loc6_12.37, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.37: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.37(%.loc6_12.37) +// CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4] +// CHECK:STDOUT: %.loc6_12.38: ref %i32 = array_index %self.param, %int_4 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.38: = bound_method %.loc6_12.38, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.38: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.38(%.loc6_12.38) +// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3] +// CHECK:STDOUT: %.loc6_12.39: ref %i32 = array_index %self.param, %int_3 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.39: = bound_method %.loc6_12.39, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.39: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.39(%.loc6_12.39) +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc6_12.40: ref %i32 = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.40: = bound_method %.loc6_12.40, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.40: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.40(%.loc6_12.40) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc6_12.41: ref %i32 = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.41: = bound_method %.loc6_12.41, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.41: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.41(%.loc6_12.41) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc6_12.42: ref %i32 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc6_12.42: = bound_method %.loc6_12.42, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc6_12.42: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc6_12.42(%.loc6_12.42) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/array/index_not_literal.carbon b/toolchain/check/testdata/array/index_not_literal.carbon index 9a704025a189..f8119cc41e5d 100644 --- a/toolchain/check/testdata/array/index_not_literal.carbon +++ b/toolchain/check/testdata/array/index_not_literal.carbon @@ -103,6 +103,8 @@ fn F(a: array({}, 3)) -> {} { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc10_20.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc10_20.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c42: %pattern_type.771 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.3bc: %pattern_type.771 = wrapper_binding_pattern self, %self.param_patt.c42 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc10_20.2 [concrete] @@ -232,6 +234,18 @@ fn F(a: array({}, 3)) -> {} { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc10_20.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] +// CHECK:STDOUT: %.loc10_20.1: ref %i32 = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_20.1: = bound_method %.loc10_20.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_20.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_20.1(%.loc10_20.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] +// CHECK:STDOUT: %.loc10_20.2: ref %i32 = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_20.2: = bound_method %.loc10_20.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_20.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_20.2(%.loc10_20.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc10_20.3: ref %i32 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_20.3: = bound_method %.loc10_20.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_20.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_20.3(%.loc10_20.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/array/init_dependent_bound.carbon b/toolchain/check/testdata/array/init_dependent_bound.carbon index 9fa1b074e771..5fdd972ce166 100644 --- a/toolchain/check/testdata/array/init_dependent_bound.carbon +++ b/toolchain/check/testdata/array/init_dependent_bound.carbon @@ -265,10 +265,13 @@ fn H() { G(3); } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc11_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc11_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c42: %pattern_type.771 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.3bc: %pattern_type.771 = wrapper_binding_pattern self, %self.param_patt.c42 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc11_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc11_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc11_3.2 [concrete] @@ -384,6 +387,18 @@ fn H() { G(3); } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc11_3.2(%self.param: ref %array_type.dc7) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc11_3.1: ref %i32 = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc11_3.1: = bound_method %.loc11_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc11_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc11_3.1(%.loc11_3.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc11_3.2: ref %i32 = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc11_3.2: = bound_method %.loc11_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc11_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc11_3.2(%.loc11_3.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc11_3.3: ref %i32 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc11_3.3: = bound_method %.loc11_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc11_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc11_3.3(%.loc11_3.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/deduce/array.carbon b/toolchain/check/testdata/deduce/array.carbon index f0b9201f2ae9..bb686869c2aa 100644 --- a/toolchain/check/testdata/deduce/array.carbon +++ b/toolchain/check/testdata/deduce/array.carbon @@ -205,6 +205,8 @@ fn G() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc9_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc9_3.2 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.2ae: %pattern_type.3f5 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.277: %pattern_type.3f5 = wrapper_binding_pattern self, %self.param_patt.2ae [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc9_3.3 [concrete] @@ -416,6 +418,18 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc9_3.3(%self.param: ref %array_type.9a3) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc9_3.1: ref %C = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.1: = bound_method %.loc9_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.1(%.loc9_3.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc9_3.2: ref %C = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.2: = bound_method %.loc9_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.2(%.loc9_3.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc9_3.3: ref %C = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.3: = bound_method %.loc9_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.3(%.loc9_3.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -538,6 +552,8 @@ fn G() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc9_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc9_3.2 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.2ae: %pattern_type.3f5 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.277: %pattern_type.3f5 = wrapper_binding_pattern self, %self.param_patt.2ae [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc9_3.3 [concrete] @@ -760,6 +776,18 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc9_3.3(%self.param: ref %array_type.9a3) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc9_3.1: ref %C = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.1: = bound_method %.loc9_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.1(%.loc9_3.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc9_3.2: ref %C = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.2: = bound_method %.loc9_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.2(%.loc9_3.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc9_3.3: ref %C = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.3: = bound_method %.loc9_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.3(%.loc9_3.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -851,6 +879,8 @@ fn G() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc9_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc9_3.2 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.2ae: %pattern_type.3f5 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.277: %pattern_type.3f5 = wrapper_binding_pattern self, %self.param_patt.2ae [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc9_3.3 [concrete] @@ -1048,6 +1078,18 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc9_3.3(%self.param: ref %array_type.9a3) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc9_3.1: ref %C = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.1: = bound_method %.loc9_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.1(%.loc9_3.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc9_3.2: ref %C = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.2: = bound_method %.loc9_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.2(%.loc9_3.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc9_3.3: ref %C = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.3: = bound_method %.loc9_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.3(%.loc9_3.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1149,6 +1191,8 @@ fn G() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc10_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc10_3.2 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.2ae: %pattern_type.3f5 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.277: %pattern_type.3f5 = wrapper_binding_pattern self, %self.param_patt.2ae [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc10_3.3 [concrete] @@ -1362,6 +1406,18 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc10_3.3(%self.param: ref %array_type.9a3) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc10_3.1: ref %C = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.1: = bound_method %.loc10_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.1(%.loc10_3.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc10_3.2: ref %C = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.2: = bound_method %.loc10_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.2(%.loc10_3.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc10_3.3: ref %C = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.3: = bound_method %.loc10_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.3(%.loc10_3.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1487,6 +1543,8 @@ fn G() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc11_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc11_3.2 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.7ca: %pattern_type.0ed = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.5cc: %pattern_type.0ed = wrapper_binding_pattern self, %self.param_patt.7ca [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc11_3.3 [concrete] @@ -1719,6 +1777,18 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc11_3.3(%self.param: ref %array_type.cec) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc11_3.1: ref %D = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc11_3.1: = bound_method %.loc11_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc11_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc11_3.1(%.loc11_3.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc11_3.2: ref %D = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc11_3.2: = bound_method %.loc11_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc11_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc11_3.2(%.loc11_3.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc11_3.3: ref %D = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc11_3.3: = bound_method %.loc11_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc11_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc11_3.3(%.loc11_3.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1840,6 +1910,8 @@ fn G() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc9_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc9_3.2 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.2ae: %pattern_type.3f5 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.277: %pattern_type.3f5 = wrapper_binding_pattern self, %self.param_patt.2ae [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc9_3.3 [concrete] @@ -2064,6 +2136,18 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc9_3.3(%self.param: ref %array_type.9a3) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc9_3.1: ref %C = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.1: = bound_method %.loc9_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.1(%.loc9_3.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc9_3.2: ref %C = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.2: = bound_method %.loc9_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.2(%.loc9_3.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc9_3.3: ref %C = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.3: = bound_method %.loc9_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.3(%.loc9_3.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/return_slot.carbon b/toolchain/check/testdata/function/generic/return_slot.carbon index 8e8d5855785e..d378b74ed838 100644 --- a/toolchain/check/testdata/function/generic/return_slot.carbon +++ b/toolchain/check/testdata/function/generic/return_slot.carbon @@ -105,6 +105,105 @@ fn G() { // CHECK:STDOUT: %self.patt.0e5: %pattern_type.3eb = wrapper_binding_pattern self, %self.param_patt.cc7 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc24_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] +// CHECK:STDOUT: %int_99: Core.IntLiteral = int_value 99 [concrete] +// CHECK:STDOUT: %int_98: Core.IntLiteral = int_value 98 [concrete] +// CHECK:STDOUT: %int_97: Core.IntLiteral = int_value 97 [concrete] +// CHECK:STDOUT: %int_96: Core.IntLiteral = int_value 96 [concrete] +// CHECK:STDOUT: %int_95: Core.IntLiteral = int_value 95 [concrete] +// CHECK:STDOUT: %int_94: Core.IntLiteral = int_value 94 [concrete] +// CHECK:STDOUT: %int_93: Core.IntLiteral = int_value 93 [concrete] +// CHECK:STDOUT: %int_92: Core.IntLiteral = int_value 92 [concrete] +// CHECK:STDOUT: %int_91: Core.IntLiteral = int_value 91 [concrete] +// CHECK:STDOUT: %int_90: Core.IntLiteral = int_value 90 [concrete] +// CHECK:STDOUT: %int_89: Core.IntLiteral = int_value 89 [concrete] +// CHECK:STDOUT: %int_88: Core.IntLiteral = int_value 88 [concrete] +// CHECK:STDOUT: %int_87: Core.IntLiteral = int_value 87 [concrete] +// CHECK:STDOUT: %int_86: Core.IntLiteral = int_value 86 [concrete] +// CHECK:STDOUT: %int_85: Core.IntLiteral = int_value 85 [concrete] +// CHECK:STDOUT: %int_84: Core.IntLiteral = int_value 84 [concrete] +// CHECK:STDOUT: %int_83: Core.IntLiteral = int_value 83 [concrete] +// CHECK:STDOUT: %int_82: Core.IntLiteral = int_value 82 [concrete] +// CHECK:STDOUT: %int_81: Core.IntLiteral = int_value 81 [concrete] +// CHECK:STDOUT: %int_80: Core.IntLiteral = int_value 80 [concrete] +// CHECK:STDOUT: %int_79: Core.IntLiteral = int_value 79 [concrete] +// CHECK:STDOUT: %int_78: Core.IntLiteral = int_value 78 [concrete] +// CHECK:STDOUT: %int_77: Core.IntLiteral = int_value 77 [concrete] +// CHECK:STDOUT: %int_76: Core.IntLiteral = int_value 76 [concrete] +// CHECK:STDOUT: %int_75: Core.IntLiteral = int_value 75 [concrete] +// CHECK:STDOUT: %int_74: Core.IntLiteral = int_value 74 [concrete] +// CHECK:STDOUT: %int_73: Core.IntLiteral = int_value 73 [concrete] +// CHECK:STDOUT: %int_72: Core.IntLiteral = int_value 72 [concrete] +// CHECK:STDOUT: %int_71: Core.IntLiteral = int_value 71 [concrete] +// CHECK:STDOUT: %int_70: Core.IntLiteral = int_value 70 [concrete] +// CHECK:STDOUT: %int_69: Core.IntLiteral = int_value 69 [concrete] +// CHECK:STDOUT: %int_68: Core.IntLiteral = int_value 68 [concrete] +// CHECK:STDOUT: %int_67: Core.IntLiteral = int_value 67 [concrete] +// CHECK:STDOUT: %int_66: Core.IntLiteral = int_value 66 [concrete] +// CHECK:STDOUT: %int_65: Core.IntLiteral = int_value 65 [concrete] +// CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] +// CHECK:STDOUT: %int_63: Core.IntLiteral = int_value 63 [concrete] +// CHECK:STDOUT: %int_62: Core.IntLiteral = int_value 62 [concrete] +// CHECK:STDOUT: %int_61: Core.IntLiteral = int_value 61 [concrete] +// CHECK:STDOUT: %int_60: Core.IntLiteral = int_value 60 [concrete] +// CHECK:STDOUT: %int_59: Core.IntLiteral = int_value 59 [concrete] +// CHECK:STDOUT: %int_58: Core.IntLiteral = int_value 58 [concrete] +// CHECK:STDOUT: %int_57: Core.IntLiteral = int_value 57 [concrete] +// CHECK:STDOUT: %int_56: Core.IntLiteral = int_value 56 [concrete] +// CHECK:STDOUT: %int_55: Core.IntLiteral = int_value 55 [concrete] +// CHECK:STDOUT: %int_54: Core.IntLiteral = int_value 54 [concrete] +// CHECK:STDOUT: %int_53: Core.IntLiteral = int_value 53 [concrete] +// CHECK:STDOUT: %int_52: Core.IntLiteral = int_value 52 [concrete] +// CHECK:STDOUT: %int_51: Core.IntLiteral = int_value 51 [concrete] +// CHECK:STDOUT: %int_50: Core.IntLiteral = int_value 50 [concrete] +// CHECK:STDOUT: %int_49: Core.IntLiteral = int_value 49 [concrete] +// CHECK:STDOUT: %int_48: Core.IntLiteral = int_value 48 [concrete] +// CHECK:STDOUT: %int_47: Core.IntLiteral = int_value 47 [concrete] +// CHECK:STDOUT: %int_46: Core.IntLiteral = int_value 46 [concrete] +// CHECK:STDOUT: %int_45: Core.IntLiteral = int_value 45 [concrete] +// CHECK:STDOUT: %int_44: Core.IntLiteral = int_value 44 [concrete] +// CHECK:STDOUT: %int_43: Core.IntLiteral = int_value 43 [concrete] +// CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete] +// CHECK:STDOUT: %int_41: Core.IntLiteral = int_value 41 [concrete] +// CHECK:STDOUT: %int_40: Core.IntLiteral = int_value 40 [concrete] +// CHECK:STDOUT: %int_39: Core.IntLiteral = int_value 39 [concrete] +// CHECK:STDOUT: %int_38: Core.IntLiteral = int_value 38 [concrete] +// CHECK:STDOUT: %int_37: Core.IntLiteral = int_value 37 [concrete] +// CHECK:STDOUT: %int_36: Core.IntLiteral = int_value 36 [concrete] +// CHECK:STDOUT: %int_35: Core.IntLiteral = int_value 35 [concrete] +// CHECK:STDOUT: %int_34: Core.IntLiteral = int_value 34 [concrete] +// CHECK:STDOUT: %int_33: Core.IntLiteral = int_value 33 [concrete] +// CHECK:STDOUT: %int_31: Core.IntLiteral = int_value 31 [concrete] +// CHECK:STDOUT: %int_30: Core.IntLiteral = int_value 30 [concrete] +// CHECK:STDOUT: %int_29: Core.IntLiteral = int_value 29 [concrete] +// CHECK:STDOUT: %int_28: Core.IntLiteral = int_value 28 [concrete] +// CHECK:STDOUT: %int_27: Core.IntLiteral = int_value 27 [concrete] +// CHECK:STDOUT: %int_26: Core.IntLiteral = int_value 26 [concrete] +// CHECK:STDOUT: %int_25: Core.IntLiteral = int_value 25 [concrete] +// CHECK:STDOUT: %int_24: Core.IntLiteral = int_value 24 [concrete] +// CHECK:STDOUT: %int_23: Core.IntLiteral = int_value 23 [concrete] +// CHECK:STDOUT: %int_22: Core.IntLiteral = int_value 22 [concrete] +// CHECK:STDOUT: %int_21: Core.IntLiteral = int_value 21 [concrete] +// CHECK:STDOUT: %int_20: Core.IntLiteral = int_value 20 [concrete] +// CHECK:STDOUT: %int_19: Core.IntLiteral = int_value 19 [concrete] +// CHECK:STDOUT: %int_18: Core.IntLiteral = int_value 18 [concrete] +// CHECK:STDOUT: %int_17: Core.IntLiteral = int_value 17 [concrete] +// CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] +// CHECK:STDOUT: %int_15: Core.IntLiteral = int_value 15 [concrete] +// CHECK:STDOUT: %int_14: Core.IntLiteral = int_value 14 [concrete] +// CHECK:STDOUT: %int_13: Core.IntLiteral = int_value 13 [concrete] +// CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete] +// CHECK:STDOUT: %int_11: Core.IntLiteral = int_value 11 [concrete] +// CHECK:STDOUT: %int_10: Core.IntLiteral = int_value 10 [concrete] +// CHECK:STDOUT: %int_9: Core.IntLiteral = int_value 9 [concrete] +// CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] +// CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [concrete] +// CHECK:STDOUT: %int_6: Core.IntLiteral = int_value 6 [concrete] +// CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete] +// CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete] +// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc24_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc24_3.2 [concrete] @@ -380,6 +479,406 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc24_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_99: Core.IntLiteral = int_value 99 [concrete = constants.%int_99] +// CHECK:STDOUT: %.loc24_3.1: ref %i32 = array_index %self.param, %int_99 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.1: = bound_method %.loc24_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.1(%.loc24_3.1) +// CHECK:STDOUT: %int_98: Core.IntLiteral = int_value 98 [concrete = constants.%int_98] +// CHECK:STDOUT: %.loc24_3.2: ref %i32 = array_index %self.param, %int_98 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.2: = bound_method %.loc24_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.2(%.loc24_3.2) +// CHECK:STDOUT: %int_97: Core.IntLiteral = int_value 97 [concrete = constants.%int_97] +// CHECK:STDOUT: %.loc24_3.3: ref %i32 = array_index %self.param, %int_97 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.3: = bound_method %.loc24_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.3(%.loc24_3.3) +// CHECK:STDOUT: %int_96: Core.IntLiteral = int_value 96 [concrete = constants.%int_96] +// CHECK:STDOUT: %.loc24_3.4: ref %i32 = array_index %self.param, %int_96 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.4: = bound_method %.loc24_3.4, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.4: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.4(%.loc24_3.4) +// CHECK:STDOUT: %int_95: Core.IntLiteral = int_value 95 [concrete = constants.%int_95] +// CHECK:STDOUT: %.loc24_3.5: ref %i32 = array_index %self.param, %int_95 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.5: = bound_method %.loc24_3.5, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.5: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.5(%.loc24_3.5) +// CHECK:STDOUT: %int_94: Core.IntLiteral = int_value 94 [concrete = constants.%int_94] +// CHECK:STDOUT: %.loc24_3.6: ref %i32 = array_index %self.param, %int_94 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.6: = bound_method %.loc24_3.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.6: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.6(%.loc24_3.6) +// CHECK:STDOUT: %int_93: Core.IntLiteral = int_value 93 [concrete = constants.%int_93] +// CHECK:STDOUT: %.loc24_3.7: ref %i32 = array_index %self.param, %int_93 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.7: = bound_method %.loc24_3.7, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.7: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.7(%.loc24_3.7) +// CHECK:STDOUT: %int_92: Core.IntLiteral = int_value 92 [concrete = constants.%int_92] +// CHECK:STDOUT: %.loc24_3.8: ref %i32 = array_index %self.param, %int_92 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.8: = bound_method %.loc24_3.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.8: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.8(%.loc24_3.8) +// CHECK:STDOUT: %int_91: Core.IntLiteral = int_value 91 [concrete = constants.%int_91] +// CHECK:STDOUT: %.loc24_3.9: ref %i32 = array_index %self.param, %int_91 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.9: = bound_method %.loc24_3.9, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.9: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.9(%.loc24_3.9) +// CHECK:STDOUT: %int_90: Core.IntLiteral = int_value 90 [concrete = constants.%int_90] +// CHECK:STDOUT: %.loc24_3.10: ref %i32 = array_index %self.param, %int_90 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.10: = bound_method %.loc24_3.10, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.10: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.10(%.loc24_3.10) +// CHECK:STDOUT: %int_89: Core.IntLiteral = int_value 89 [concrete = constants.%int_89] +// CHECK:STDOUT: %.loc24_3.11: ref %i32 = array_index %self.param, %int_89 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.11: = bound_method %.loc24_3.11, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.11: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.11(%.loc24_3.11) +// CHECK:STDOUT: %int_88: Core.IntLiteral = int_value 88 [concrete = constants.%int_88] +// CHECK:STDOUT: %.loc24_3.12: ref %i32 = array_index %self.param, %int_88 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.12: = bound_method %.loc24_3.12, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.12: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.12(%.loc24_3.12) +// CHECK:STDOUT: %int_87: Core.IntLiteral = int_value 87 [concrete = constants.%int_87] +// CHECK:STDOUT: %.loc24_3.13: ref %i32 = array_index %self.param, %int_87 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.13: = bound_method %.loc24_3.13, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.13: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.13(%.loc24_3.13) +// CHECK:STDOUT: %int_86: Core.IntLiteral = int_value 86 [concrete = constants.%int_86] +// CHECK:STDOUT: %.loc24_3.14: ref %i32 = array_index %self.param, %int_86 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.14: = bound_method %.loc24_3.14, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.14: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.14(%.loc24_3.14) +// CHECK:STDOUT: %int_85: Core.IntLiteral = int_value 85 [concrete = constants.%int_85] +// CHECK:STDOUT: %.loc24_3.15: ref %i32 = array_index %self.param, %int_85 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.15: = bound_method %.loc24_3.15, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.15: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.15(%.loc24_3.15) +// CHECK:STDOUT: %int_84: Core.IntLiteral = int_value 84 [concrete = constants.%int_84] +// CHECK:STDOUT: %.loc24_3.16: ref %i32 = array_index %self.param, %int_84 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.16: = bound_method %.loc24_3.16, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.16: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.16(%.loc24_3.16) +// CHECK:STDOUT: %int_83: Core.IntLiteral = int_value 83 [concrete = constants.%int_83] +// CHECK:STDOUT: %.loc24_3.17: ref %i32 = array_index %self.param, %int_83 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.17: = bound_method %.loc24_3.17, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.17: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.17(%.loc24_3.17) +// CHECK:STDOUT: %int_82: Core.IntLiteral = int_value 82 [concrete = constants.%int_82] +// CHECK:STDOUT: %.loc24_3.18: ref %i32 = array_index %self.param, %int_82 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.18: = bound_method %.loc24_3.18, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.18: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.18(%.loc24_3.18) +// CHECK:STDOUT: %int_81: Core.IntLiteral = int_value 81 [concrete = constants.%int_81] +// CHECK:STDOUT: %.loc24_3.19: ref %i32 = array_index %self.param, %int_81 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.19: = bound_method %.loc24_3.19, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.19: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.19(%.loc24_3.19) +// CHECK:STDOUT: %int_80: Core.IntLiteral = int_value 80 [concrete = constants.%int_80] +// CHECK:STDOUT: %.loc24_3.20: ref %i32 = array_index %self.param, %int_80 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.20: = bound_method %.loc24_3.20, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.20: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.20(%.loc24_3.20) +// CHECK:STDOUT: %int_79: Core.IntLiteral = int_value 79 [concrete = constants.%int_79] +// CHECK:STDOUT: %.loc24_3.21: ref %i32 = array_index %self.param, %int_79 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.21: = bound_method %.loc24_3.21, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.21: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.21(%.loc24_3.21) +// CHECK:STDOUT: %int_78: Core.IntLiteral = int_value 78 [concrete = constants.%int_78] +// CHECK:STDOUT: %.loc24_3.22: ref %i32 = array_index %self.param, %int_78 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.22: = bound_method %.loc24_3.22, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.22: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.22(%.loc24_3.22) +// CHECK:STDOUT: %int_77: Core.IntLiteral = int_value 77 [concrete = constants.%int_77] +// CHECK:STDOUT: %.loc24_3.23: ref %i32 = array_index %self.param, %int_77 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.23: = bound_method %.loc24_3.23, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.23: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.23(%.loc24_3.23) +// CHECK:STDOUT: %int_76: Core.IntLiteral = int_value 76 [concrete = constants.%int_76] +// CHECK:STDOUT: %.loc24_3.24: ref %i32 = array_index %self.param, %int_76 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.24: = bound_method %.loc24_3.24, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.24: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.24(%.loc24_3.24) +// CHECK:STDOUT: %int_75: Core.IntLiteral = int_value 75 [concrete = constants.%int_75] +// CHECK:STDOUT: %.loc24_3.25: ref %i32 = array_index %self.param, %int_75 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.25: = bound_method %.loc24_3.25, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.25: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.25(%.loc24_3.25) +// CHECK:STDOUT: %int_74: Core.IntLiteral = int_value 74 [concrete = constants.%int_74] +// CHECK:STDOUT: %.loc24_3.26: ref %i32 = array_index %self.param, %int_74 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.26: = bound_method %.loc24_3.26, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.26: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.26(%.loc24_3.26) +// CHECK:STDOUT: %int_73: Core.IntLiteral = int_value 73 [concrete = constants.%int_73] +// CHECK:STDOUT: %.loc24_3.27: ref %i32 = array_index %self.param, %int_73 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.27: = bound_method %.loc24_3.27, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.27: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.27(%.loc24_3.27) +// CHECK:STDOUT: %int_72: Core.IntLiteral = int_value 72 [concrete = constants.%int_72] +// CHECK:STDOUT: %.loc24_3.28: ref %i32 = array_index %self.param, %int_72 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.28: = bound_method %.loc24_3.28, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.28: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.28(%.loc24_3.28) +// CHECK:STDOUT: %int_71: Core.IntLiteral = int_value 71 [concrete = constants.%int_71] +// CHECK:STDOUT: %.loc24_3.29: ref %i32 = array_index %self.param, %int_71 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.29: = bound_method %.loc24_3.29, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.29: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.29(%.loc24_3.29) +// CHECK:STDOUT: %int_70: Core.IntLiteral = int_value 70 [concrete = constants.%int_70] +// CHECK:STDOUT: %.loc24_3.30: ref %i32 = array_index %self.param, %int_70 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.30: = bound_method %.loc24_3.30, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.30: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.30(%.loc24_3.30) +// CHECK:STDOUT: %int_69: Core.IntLiteral = int_value 69 [concrete = constants.%int_69] +// CHECK:STDOUT: %.loc24_3.31: ref %i32 = array_index %self.param, %int_69 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.31: = bound_method %.loc24_3.31, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.31: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.31(%.loc24_3.31) +// CHECK:STDOUT: %int_68: Core.IntLiteral = int_value 68 [concrete = constants.%int_68] +// CHECK:STDOUT: %.loc24_3.32: ref %i32 = array_index %self.param, %int_68 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.32: = bound_method %.loc24_3.32, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.32: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.32(%.loc24_3.32) +// CHECK:STDOUT: %int_67: Core.IntLiteral = int_value 67 [concrete = constants.%int_67] +// CHECK:STDOUT: %.loc24_3.33: ref %i32 = array_index %self.param, %int_67 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.33: = bound_method %.loc24_3.33, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.33: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.33(%.loc24_3.33) +// CHECK:STDOUT: %int_66: Core.IntLiteral = int_value 66 [concrete = constants.%int_66] +// CHECK:STDOUT: %.loc24_3.34: ref %i32 = array_index %self.param, %int_66 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.34: = bound_method %.loc24_3.34, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.34: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.34(%.loc24_3.34) +// CHECK:STDOUT: %int_65: Core.IntLiteral = int_value 65 [concrete = constants.%int_65] +// CHECK:STDOUT: %.loc24_3.35: ref %i32 = array_index %self.param, %int_65 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.35: = bound_method %.loc24_3.35, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.35: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.35(%.loc24_3.35) +// CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] +// CHECK:STDOUT: %.loc24_3.36: ref %i32 = array_index %self.param, %int_64 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.36: = bound_method %.loc24_3.36, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.36: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.36(%.loc24_3.36) +// CHECK:STDOUT: %int_63: Core.IntLiteral = int_value 63 [concrete = constants.%int_63] +// CHECK:STDOUT: %.loc24_3.37: ref %i32 = array_index %self.param, %int_63 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.37: = bound_method %.loc24_3.37, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.37: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.37(%.loc24_3.37) +// CHECK:STDOUT: %int_62: Core.IntLiteral = int_value 62 [concrete = constants.%int_62] +// CHECK:STDOUT: %.loc24_3.38: ref %i32 = array_index %self.param, %int_62 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.38: = bound_method %.loc24_3.38, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.38: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.38(%.loc24_3.38) +// CHECK:STDOUT: %int_61: Core.IntLiteral = int_value 61 [concrete = constants.%int_61] +// CHECK:STDOUT: %.loc24_3.39: ref %i32 = array_index %self.param, %int_61 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.39: = bound_method %.loc24_3.39, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.39: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.39(%.loc24_3.39) +// CHECK:STDOUT: %int_60: Core.IntLiteral = int_value 60 [concrete = constants.%int_60] +// CHECK:STDOUT: %.loc24_3.40: ref %i32 = array_index %self.param, %int_60 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.40: = bound_method %.loc24_3.40, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.40: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.40(%.loc24_3.40) +// CHECK:STDOUT: %int_59: Core.IntLiteral = int_value 59 [concrete = constants.%int_59] +// CHECK:STDOUT: %.loc24_3.41: ref %i32 = array_index %self.param, %int_59 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.41: = bound_method %.loc24_3.41, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.41: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.41(%.loc24_3.41) +// CHECK:STDOUT: %int_58: Core.IntLiteral = int_value 58 [concrete = constants.%int_58] +// CHECK:STDOUT: %.loc24_3.42: ref %i32 = array_index %self.param, %int_58 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.42: = bound_method %.loc24_3.42, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.42: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.42(%.loc24_3.42) +// CHECK:STDOUT: %int_57: Core.IntLiteral = int_value 57 [concrete = constants.%int_57] +// CHECK:STDOUT: %.loc24_3.43: ref %i32 = array_index %self.param, %int_57 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.43: = bound_method %.loc24_3.43, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.43: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.43(%.loc24_3.43) +// CHECK:STDOUT: %int_56: Core.IntLiteral = int_value 56 [concrete = constants.%int_56] +// CHECK:STDOUT: %.loc24_3.44: ref %i32 = array_index %self.param, %int_56 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.44: = bound_method %.loc24_3.44, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.44: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.44(%.loc24_3.44) +// CHECK:STDOUT: %int_55: Core.IntLiteral = int_value 55 [concrete = constants.%int_55] +// CHECK:STDOUT: %.loc24_3.45: ref %i32 = array_index %self.param, %int_55 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.45: = bound_method %.loc24_3.45, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.45: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.45(%.loc24_3.45) +// CHECK:STDOUT: %int_54: Core.IntLiteral = int_value 54 [concrete = constants.%int_54] +// CHECK:STDOUT: %.loc24_3.46: ref %i32 = array_index %self.param, %int_54 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.46: = bound_method %.loc24_3.46, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.46: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.46(%.loc24_3.46) +// CHECK:STDOUT: %int_53: Core.IntLiteral = int_value 53 [concrete = constants.%int_53] +// CHECK:STDOUT: %.loc24_3.47: ref %i32 = array_index %self.param, %int_53 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.47: = bound_method %.loc24_3.47, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.47: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.47(%.loc24_3.47) +// CHECK:STDOUT: %int_52: Core.IntLiteral = int_value 52 [concrete = constants.%int_52] +// CHECK:STDOUT: %.loc24_3.48: ref %i32 = array_index %self.param, %int_52 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.48: = bound_method %.loc24_3.48, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.48: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.48(%.loc24_3.48) +// CHECK:STDOUT: %int_51: Core.IntLiteral = int_value 51 [concrete = constants.%int_51] +// CHECK:STDOUT: %.loc24_3.49: ref %i32 = array_index %self.param, %int_51 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.49: = bound_method %.loc24_3.49, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.49: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.49(%.loc24_3.49) +// CHECK:STDOUT: %int_50: Core.IntLiteral = int_value 50 [concrete = constants.%int_50] +// CHECK:STDOUT: %.loc24_3.50: ref %i32 = array_index %self.param, %int_50 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.50: = bound_method %.loc24_3.50, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.50: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.50(%.loc24_3.50) +// CHECK:STDOUT: %int_49: Core.IntLiteral = int_value 49 [concrete = constants.%int_49] +// CHECK:STDOUT: %.loc24_3.51: ref %i32 = array_index %self.param, %int_49 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.51: = bound_method %.loc24_3.51, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.51: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.51(%.loc24_3.51) +// CHECK:STDOUT: %int_48: Core.IntLiteral = int_value 48 [concrete = constants.%int_48] +// CHECK:STDOUT: %.loc24_3.52: ref %i32 = array_index %self.param, %int_48 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.52: = bound_method %.loc24_3.52, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.52: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.52(%.loc24_3.52) +// CHECK:STDOUT: %int_47: Core.IntLiteral = int_value 47 [concrete = constants.%int_47] +// CHECK:STDOUT: %.loc24_3.53: ref %i32 = array_index %self.param, %int_47 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.53: = bound_method %.loc24_3.53, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.53: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.53(%.loc24_3.53) +// CHECK:STDOUT: %int_46: Core.IntLiteral = int_value 46 [concrete = constants.%int_46] +// CHECK:STDOUT: %.loc24_3.54: ref %i32 = array_index %self.param, %int_46 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.54: = bound_method %.loc24_3.54, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.54: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.54(%.loc24_3.54) +// CHECK:STDOUT: %int_45: Core.IntLiteral = int_value 45 [concrete = constants.%int_45] +// CHECK:STDOUT: %.loc24_3.55: ref %i32 = array_index %self.param, %int_45 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.55: = bound_method %.loc24_3.55, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.55: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.55(%.loc24_3.55) +// CHECK:STDOUT: %int_44: Core.IntLiteral = int_value 44 [concrete = constants.%int_44] +// CHECK:STDOUT: %.loc24_3.56: ref %i32 = array_index %self.param, %int_44 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.56: = bound_method %.loc24_3.56, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.56: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.56(%.loc24_3.56) +// CHECK:STDOUT: %int_43: Core.IntLiteral = int_value 43 [concrete = constants.%int_43] +// CHECK:STDOUT: %.loc24_3.57: ref %i32 = array_index %self.param, %int_43 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.57: = bound_method %.loc24_3.57, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.57: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.57(%.loc24_3.57) +// CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete = constants.%int_42] +// CHECK:STDOUT: %.loc24_3.58: ref %i32 = array_index %self.param, %int_42 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.58: = bound_method %.loc24_3.58, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.58: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.58(%.loc24_3.58) +// CHECK:STDOUT: %int_41: Core.IntLiteral = int_value 41 [concrete = constants.%int_41] +// CHECK:STDOUT: %.loc24_3.59: ref %i32 = array_index %self.param, %int_41 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.59: = bound_method %.loc24_3.59, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.59: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.59(%.loc24_3.59) +// CHECK:STDOUT: %int_40: Core.IntLiteral = int_value 40 [concrete = constants.%int_40] +// CHECK:STDOUT: %.loc24_3.60: ref %i32 = array_index %self.param, %int_40 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.60: = bound_method %.loc24_3.60, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.60: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.60(%.loc24_3.60) +// CHECK:STDOUT: %int_39: Core.IntLiteral = int_value 39 [concrete = constants.%int_39] +// CHECK:STDOUT: %.loc24_3.61: ref %i32 = array_index %self.param, %int_39 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.61: = bound_method %.loc24_3.61, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.61: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.61(%.loc24_3.61) +// CHECK:STDOUT: %int_38: Core.IntLiteral = int_value 38 [concrete = constants.%int_38] +// CHECK:STDOUT: %.loc24_3.62: ref %i32 = array_index %self.param, %int_38 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.62: = bound_method %.loc24_3.62, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.62: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.62(%.loc24_3.62) +// CHECK:STDOUT: %int_37: Core.IntLiteral = int_value 37 [concrete = constants.%int_37] +// CHECK:STDOUT: %.loc24_3.63: ref %i32 = array_index %self.param, %int_37 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.63: = bound_method %.loc24_3.63, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.63: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.63(%.loc24_3.63) +// CHECK:STDOUT: %int_36: Core.IntLiteral = int_value 36 [concrete = constants.%int_36] +// CHECK:STDOUT: %.loc24_3.64: ref %i32 = array_index %self.param, %int_36 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.64: = bound_method %.loc24_3.64, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.64: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.64(%.loc24_3.64) +// CHECK:STDOUT: %int_35: Core.IntLiteral = int_value 35 [concrete = constants.%int_35] +// CHECK:STDOUT: %.loc24_3.65: ref %i32 = array_index %self.param, %int_35 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.65: = bound_method %.loc24_3.65, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.65: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.65(%.loc24_3.65) +// CHECK:STDOUT: %int_34: Core.IntLiteral = int_value 34 [concrete = constants.%int_34] +// CHECK:STDOUT: %.loc24_3.66: ref %i32 = array_index %self.param, %int_34 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.66: = bound_method %.loc24_3.66, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.66: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.66(%.loc24_3.66) +// CHECK:STDOUT: %int_33: Core.IntLiteral = int_value 33 [concrete = constants.%int_33] +// CHECK:STDOUT: %.loc24_3.67: ref %i32 = array_index %self.param, %int_33 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.67: = bound_method %.loc24_3.67, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.67: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.67(%.loc24_3.67) +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %.loc24_3.68: ref %i32 = array_index %self.param, %int_32 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.68: = bound_method %.loc24_3.68, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.68: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.68(%.loc24_3.68) +// CHECK:STDOUT: %int_31: Core.IntLiteral = int_value 31 [concrete = constants.%int_31] +// CHECK:STDOUT: %.loc24_3.69: ref %i32 = array_index %self.param, %int_31 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.69: = bound_method %.loc24_3.69, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.69: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.69(%.loc24_3.69) +// CHECK:STDOUT: %int_30: Core.IntLiteral = int_value 30 [concrete = constants.%int_30] +// CHECK:STDOUT: %.loc24_3.70: ref %i32 = array_index %self.param, %int_30 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.70: = bound_method %.loc24_3.70, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.70: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.70(%.loc24_3.70) +// CHECK:STDOUT: %int_29: Core.IntLiteral = int_value 29 [concrete = constants.%int_29] +// CHECK:STDOUT: %.loc24_3.71: ref %i32 = array_index %self.param, %int_29 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.71: = bound_method %.loc24_3.71, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.71: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.71(%.loc24_3.71) +// CHECK:STDOUT: %int_28: Core.IntLiteral = int_value 28 [concrete = constants.%int_28] +// CHECK:STDOUT: %.loc24_3.72: ref %i32 = array_index %self.param, %int_28 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.72: = bound_method %.loc24_3.72, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.72: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.72(%.loc24_3.72) +// CHECK:STDOUT: %int_27: Core.IntLiteral = int_value 27 [concrete = constants.%int_27] +// CHECK:STDOUT: %.loc24_3.73: ref %i32 = array_index %self.param, %int_27 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.73: = bound_method %.loc24_3.73, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.73: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.73(%.loc24_3.73) +// CHECK:STDOUT: %int_26: Core.IntLiteral = int_value 26 [concrete = constants.%int_26] +// CHECK:STDOUT: %.loc24_3.74: ref %i32 = array_index %self.param, %int_26 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.74: = bound_method %.loc24_3.74, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.74: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.74(%.loc24_3.74) +// CHECK:STDOUT: %int_25: Core.IntLiteral = int_value 25 [concrete = constants.%int_25] +// CHECK:STDOUT: %.loc24_3.75: ref %i32 = array_index %self.param, %int_25 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.75: = bound_method %.loc24_3.75, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.75: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.75(%.loc24_3.75) +// CHECK:STDOUT: %int_24: Core.IntLiteral = int_value 24 [concrete = constants.%int_24] +// CHECK:STDOUT: %.loc24_3.76: ref %i32 = array_index %self.param, %int_24 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.76: = bound_method %.loc24_3.76, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.76: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.76(%.loc24_3.76) +// CHECK:STDOUT: %int_23: Core.IntLiteral = int_value 23 [concrete = constants.%int_23] +// CHECK:STDOUT: %.loc24_3.77: ref %i32 = array_index %self.param, %int_23 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.77: = bound_method %.loc24_3.77, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.77: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.77(%.loc24_3.77) +// CHECK:STDOUT: %int_22: Core.IntLiteral = int_value 22 [concrete = constants.%int_22] +// CHECK:STDOUT: %.loc24_3.78: ref %i32 = array_index %self.param, %int_22 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.78: = bound_method %.loc24_3.78, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.78: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.78(%.loc24_3.78) +// CHECK:STDOUT: %int_21: Core.IntLiteral = int_value 21 [concrete = constants.%int_21] +// CHECK:STDOUT: %.loc24_3.79: ref %i32 = array_index %self.param, %int_21 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.79: = bound_method %.loc24_3.79, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.79: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.79(%.loc24_3.79) +// CHECK:STDOUT: %int_20: Core.IntLiteral = int_value 20 [concrete = constants.%int_20] +// CHECK:STDOUT: %.loc24_3.80: ref %i32 = array_index %self.param, %int_20 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.80: = bound_method %.loc24_3.80, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.80: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.80(%.loc24_3.80) +// CHECK:STDOUT: %int_19: Core.IntLiteral = int_value 19 [concrete = constants.%int_19] +// CHECK:STDOUT: %.loc24_3.81: ref %i32 = array_index %self.param, %int_19 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.81: = bound_method %.loc24_3.81, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.81: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.81(%.loc24_3.81) +// CHECK:STDOUT: %int_18: Core.IntLiteral = int_value 18 [concrete = constants.%int_18] +// CHECK:STDOUT: %.loc24_3.82: ref %i32 = array_index %self.param, %int_18 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.82: = bound_method %.loc24_3.82, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.82: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.82(%.loc24_3.82) +// CHECK:STDOUT: %int_17: Core.IntLiteral = int_value 17 [concrete = constants.%int_17] +// CHECK:STDOUT: %.loc24_3.83: ref %i32 = array_index %self.param, %int_17 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.83: = bound_method %.loc24_3.83, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.83: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.83(%.loc24_3.83) +// CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete = constants.%int_16] +// CHECK:STDOUT: %.loc24_3.84: ref %i32 = array_index %self.param, %int_16 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.84: = bound_method %.loc24_3.84, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.84: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.84(%.loc24_3.84) +// CHECK:STDOUT: %int_15: Core.IntLiteral = int_value 15 [concrete = constants.%int_15] +// CHECK:STDOUT: %.loc24_3.85: ref %i32 = array_index %self.param, %int_15 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.85: = bound_method %.loc24_3.85, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.85: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.85(%.loc24_3.85) +// CHECK:STDOUT: %int_14: Core.IntLiteral = int_value 14 [concrete = constants.%int_14] +// CHECK:STDOUT: %.loc24_3.86: ref %i32 = array_index %self.param, %int_14 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.86: = bound_method %.loc24_3.86, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.86: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.86(%.loc24_3.86) +// CHECK:STDOUT: %int_13: Core.IntLiteral = int_value 13 [concrete = constants.%int_13] +// CHECK:STDOUT: %.loc24_3.87: ref %i32 = array_index %self.param, %int_13 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.87: = bound_method %.loc24_3.87, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.87: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.87(%.loc24_3.87) +// CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete = constants.%int_12] +// CHECK:STDOUT: %.loc24_3.88: ref %i32 = array_index %self.param, %int_12 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.88: = bound_method %.loc24_3.88, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.88: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.88(%.loc24_3.88) +// CHECK:STDOUT: %int_11: Core.IntLiteral = int_value 11 [concrete = constants.%int_11] +// CHECK:STDOUT: %.loc24_3.89: ref %i32 = array_index %self.param, %int_11 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.89: = bound_method %.loc24_3.89, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.89: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.89(%.loc24_3.89) +// CHECK:STDOUT: %int_10: Core.IntLiteral = int_value 10 [concrete = constants.%int_10] +// CHECK:STDOUT: %.loc24_3.90: ref %i32 = array_index %self.param, %int_10 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.90: = bound_method %.loc24_3.90, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.90: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.90(%.loc24_3.90) +// CHECK:STDOUT: %int_9: Core.IntLiteral = int_value 9 [concrete = constants.%int_9] +// CHECK:STDOUT: %.loc24_3.91: ref %i32 = array_index %self.param, %int_9 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.91: = bound_method %.loc24_3.91, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.91: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.91(%.loc24_3.91) +// CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete = constants.%int_8] +// CHECK:STDOUT: %.loc24_3.92: ref %i32 = array_index %self.param, %int_8 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.92: = bound_method %.loc24_3.92, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.92: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.92(%.loc24_3.92) +// CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [concrete = constants.%int_7] +// CHECK:STDOUT: %.loc24_3.93: ref %i32 = array_index %self.param, %int_7 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.93: = bound_method %.loc24_3.93, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.93: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.93(%.loc24_3.93) +// CHECK:STDOUT: %int_6: Core.IntLiteral = int_value 6 [concrete = constants.%int_6] +// CHECK:STDOUT: %.loc24_3.94: ref %i32 = array_index %self.param, %int_6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.94: = bound_method %.loc24_3.94, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.94: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.94(%.loc24_3.94) +// CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5] +// CHECK:STDOUT: %.loc24_3.95: ref %i32 = array_index %self.param, %int_5 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.95: = bound_method %.loc24_3.95, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.95: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.95(%.loc24_3.95) +// CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4] +// CHECK:STDOUT: %.loc24_3.96: ref %i32 = array_index %self.param, %int_4 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.96: = bound_method %.loc24_3.96, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.96: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.96(%.loc24_3.96) +// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3] +// CHECK:STDOUT: %.loc24_3.97: ref %i32 = array_index %self.param, %int_3 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.97: = bound_method %.loc24_3.97, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.97: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.97(%.loc24_3.97) +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc24_3.98: ref %i32 = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.98: = bound_method %.loc24_3.98, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.98: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.98(%.loc24_3.98) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc24_3.99: ref %i32 = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.99: = bound_method %.loc24_3.99, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.99: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.99(%.loc24_3.99) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc24_3.100: ref %i32 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_3.100: = bound_method %.loc24_3.100, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_3.100: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_3.100(%.loc24_3.100) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/template/convert.carbon b/toolchain/check/testdata/generic/template/convert.carbon index 8e44944cf6aa..65ee129ccef2 100644 --- a/toolchain/check/testdata/generic/template/convert.carbon +++ b/toolchain/check/testdata/generic/template/convert.carbon @@ -1159,6 +1159,18 @@ fn Test(d: D) { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc9_3.4(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc8af.1] +// CHECK:STDOUT: %.loc9_3.1: ref %X = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.1: = bound_method %.loc9_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.1(%.loc9_3.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8115.1] +// CHECK:STDOUT: %.loc9_3.2: ref %X = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.2: = bound_method %.loc9_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.2(%.loc9_3.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c61a1.1] +// CHECK:STDOUT: %.loc9_3.3: ref %X = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc9_3.3: = bound_method %.loc9_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc9_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc9_3.3(%.loc9_3.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/if_expr/basic.carbon b/toolchain/check/testdata/if_expr/basic.carbon index 20860e660f79..b307d352f91b 100644 --- a/toolchain/check/testdata/if_expr/basic.carbon +++ b/toolchain/check/testdata/if_expr/basic.carbon @@ -82,6 +82,8 @@ fn F(b: bool, n: i32, m: i32) -> i32 { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc16_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc16_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.dc5: %pattern_type.97e = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.7f9: %pattern_type.97e = wrapper_binding_pattern self, %self.param_patt.dc5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc16_3.2 [concrete] @@ -245,6 +247,10 @@ fn F(b: bool, n: i32, m: i32) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc16_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] +// CHECK:STDOUT: %.loc16: ref %i32 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc16, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc16) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/index/expr_category.carbon b/toolchain/check/testdata/index/expr_category.carbon index 236d302a811e..988fd5f198db 100644 --- a/toolchain/check/testdata/index/expr_category.carbon +++ b/toolchain/check/testdata/index/expr_category.carbon @@ -121,6 +121,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc18_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc18_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c42: %pattern_type.771 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.3bc: %pattern_type.771 = wrapper_binding_pattern self, %self.param_patt.c42 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc18_3.2 [concrete] @@ -368,6 +370,18 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc18_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] +// CHECK:STDOUT: %.loc18_3.1: ref %i32 = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc18_3.1: = bound_method %.loc18_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc18_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc18_3.1(%.loc18_3.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] +// CHECK:STDOUT: %.loc18_3.2: ref %i32 = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc18_3.2: = bound_method %.loc18_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc18_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc18_3.2(%.loc18_3.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] +// CHECK:STDOUT: %.loc18_3.3: ref %i32 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc18_3.3: = bound_method %.loc18_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc18_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc18_3.3(%.loc18_3.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/index/fail_expr_category.carbon b/toolchain/check/testdata/index/fail_expr_category.carbon index 8ecd2126454a..2fa431fcd37e 100644 --- a/toolchain/check/testdata/index/fail_expr_category.carbon +++ b/toolchain/check/testdata/index/fail_expr_category.carbon @@ -108,10 +108,14 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc41_5.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc41_5.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c42: %pattern_type.771 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.3bc: %pattern_type.771 = wrapper_binding_pattern self, %self.param_patt.c42 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc41_5.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc41_5.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc41_5.2 [concrete] @@ -352,6 +356,18 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc41_5.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc41_5.1: ref %i32 = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc41_5.1: = bound_method %.loc41_5.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc41_5.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc41_5.1(%.loc41_5.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc41_5.2: ref %i32 = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc41_5.2: = bound_method %.loc41_5.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc41_5.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc41_5.2(%.loc41_5.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] +// CHECK:STDOUT: %.loc41_5.3: ref %i32 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc41_5.3: = bound_method %.loc41_5.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc41_5.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc41_5.3(%.loc41_5.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/import/decayed_param.carbon b/toolchain/check/testdata/interop/cpp/function/import/decayed_param.carbon index a62a3cab4f0a..953e457ffefd 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/decayed_param.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/decayed_param.carbon @@ -210,10 +210,52 @@ fn F() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.6: type = fn_type @Destroy.WithSelf.Op.loc10_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.6: %Destroy.WithSelf.Op.type.ef016f.6 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.6: type = fn_type @Destroy.WithSelf.SelfDestruct.loc10_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.6: %Destroy.WithSelf.SelfDestruct.type.fbceb5.6 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.087: %pattern_type.c07 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.b22: %pattern_type.c07 = wrapper_binding_pattern self, %self.param_patt.087 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc10_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.7: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = struct_value () [concrete] +// CHECK:STDOUT: %int_41: Core.IntLiteral = int_value 41 [concrete] +// CHECK:STDOUT: %int_40: Core.IntLiteral = int_value 40 [concrete] +// CHECK:STDOUT: %int_39: Core.IntLiteral = int_value 39 [concrete] +// CHECK:STDOUT: %int_38: Core.IntLiteral = int_value 38 [concrete] +// CHECK:STDOUT: %int_37: Core.IntLiteral = int_value 37 [concrete] +// CHECK:STDOUT: %int_36: Core.IntLiteral = int_value 36 [concrete] +// CHECK:STDOUT: %int_35: Core.IntLiteral = int_value 35 [concrete] +// CHECK:STDOUT: %int_34: Core.IntLiteral = int_value 34 [concrete] +// CHECK:STDOUT: %int_33: Core.IntLiteral = int_value 33 [concrete] +// CHECK:STDOUT: %int_31: Core.IntLiteral = int_value 31 [concrete] +// CHECK:STDOUT: %int_30: Core.IntLiteral = int_value 30 [concrete] +// CHECK:STDOUT: %int_29: Core.IntLiteral = int_value 29 [concrete] +// CHECK:STDOUT: %int_28: Core.IntLiteral = int_value 28 [concrete] +// CHECK:STDOUT: %int_27: Core.IntLiteral = int_value 27 [concrete] +// CHECK:STDOUT: %int_26: Core.IntLiteral = int_value 26 [concrete] +// CHECK:STDOUT: %int_25: Core.IntLiteral = int_value 25 [concrete] +// CHECK:STDOUT: %int_24: Core.IntLiteral = int_value 24 [concrete] +// CHECK:STDOUT: %int_23: Core.IntLiteral = int_value 23 [concrete] +// CHECK:STDOUT: %int_22: Core.IntLiteral = int_value 22 [concrete] +// CHECK:STDOUT: %int_21: Core.IntLiteral = int_value 21 [concrete] +// CHECK:STDOUT: %int_20: Core.IntLiteral = int_value 20 [concrete] +// CHECK:STDOUT: %int_19: Core.IntLiteral = int_value 19 [concrete] +// CHECK:STDOUT: %int_18: Core.IntLiteral = int_value 18 [concrete] +// CHECK:STDOUT: %int_17: Core.IntLiteral = int_value 17 [concrete] +// CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] +// CHECK:STDOUT: %int_15: Core.IntLiteral = int_value 15 [concrete] +// CHECK:STDOUT: %int_14: Core.IntLiteral = int_value 14 [concrete] +// CHECK:STDOUT: %int_13: Core.IntLiteral = int_value 13 [concrete] +// CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete] +// CHECK:STDOUT: %int_11: Core.IntLiteral = int_value 11 [concrete] +// CHECK:STDOUT: %int_10: Core.IntLiteral = int_value 10 [concrete] +// CHECK:STDOUT: %int_9: Core.IntLiteral = int_value 9 [concrete] +// CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] +// CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [concrete] +// CHECK:STDOUT: %int_6: Core.IntLiteral = int_value 6 [concrete] +// CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete] +// CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete] +// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.7: type = fn_type @Destroy.WithSelf.Op.loc10_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.7: %Destroy.WithSelf.Op.type.ef016f.7 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.7: type = fn_type @Destroy.WithSelf.SelfDestruct.loc10_3.2 [concrete] @@ -447,6 +489,174 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc10_3.2(%self.param: ref %array_type.d58) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_41: Core.IntLiteral = int_value 41 [concrete = constants.%int_41] +// CHECK:STDOUT: %.loc10_3.1: ref %i32 = array_index %self.param, %int_41 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.1: = bound_method %.loc10_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.1(%.loc10_3.1) +// CHECK:STDOUT: %int_40: Core.IntLiteral = int_value 40 [concrete = constants.%int_40] +// CHECK:STDOUT: %.loc10_3.2: ref %i32 = array_index %self.param, %int_40 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.2: = bound_method %.loc10_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.2(%.loc10_3.2) +// CHECK:STDOUT: %int_39: Core.IntLiteral = int_value 39 [concrete = constants.%int_39] +// CHECK:STDOUT: %.loc10_3.3: ref %i32 = array_index %self.param, %int_39 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.3: = bound_method %.loc10_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.3(%.loc10_3.3) +// CHECK:STDOUT: %int_38: Core.IntLiteral = int_value 38 [concrete = constants.%int_38] +// CHECK:STDOUT: %.loc10_3.4: ref %i32 = array_index %self.param, %int_38 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.4: = bound_method %.loc10_3.4, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.4: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.4(%.loc10_3.4) +// CHECK:STDOUT: %int_37: Core.IntLiteral = int_value 37 [concrete = constants.%int_37] +// CHECK:STDOUT: %.loc10_3.5: ref %i32 = array_index %self.param, %int_37 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.5: = bound_method %.loc10_3.5, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.5: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.5(%.loc10_3.5) +// CHECK:STDOUT: %int_36: Core.IntLiteral = int_value 36 [concrete = constants.%int_36] +// CHECK:STDOUT: %.loc10_3.6: ref %i32 = array_index %self.param, %int_36 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.6: = bound_method %.loc10_3.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.6: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.6(%.loc10_3.6) +// CHECK:STDOUT: %int_35: Core.IntLiteral = int_value 35 [concrete = constants.%int_35] +// CHECK:STDOUT: %.loc10_3.7: ref %i32 = array_index %self.param, %int_35 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.7: = bound_method %.loc10_3.7, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.7: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.7(%.loc10_3.7) +// CHECK:STDOUT: %int_34: Core.IntLiteral = int_value 34 [concrete = constants.%int_34] +// CHECK:STDOUT: %.loc10_3.8: ref %i32 = array_index %self.param, %int_34 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.8: = bound_method %.loc10_3.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.8: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.8(%.loc10_3.8) +// CHECK:STDOUT: %int_33: Core.IntLiteral = int_value 33 [concrete = constants.%int_33] +// CHECK:STDOUT: %.loc10_3.9: ref %i32 = array_index %self.param, %int_33 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.9: = bound_method %.loc10_3.9, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.9: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.9(%.loc10_3.9) +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %.loc10_3.10: ref %i32 = array_index %self.param, %int_32 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.10: = bound_method %.loc10_3.10, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.10: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.10(%.loc10_3.10) +// CHECK:STDOUT: %int_31: Core.IntLiteral = int_value 31 [concrete = constants.%int_31] +// CHECK:STDOUT: %.loc10_3.11: ref %i32 = array_index %self.param, %int_31 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.11: = bound_method %.loc10_3.11, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.11: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.11(%.loc10_3.11) +// CHECK:STDOUT: %int_30: Core.IntLiteral = int_value 30 [concrete = constants.%int_30] +// CHECK:STDOUT: %.loc10_3.12: ref %i32 = array_index %self.param, %int_30 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.12: = bound_method %.loc10_3.12, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.12: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.12(%.loc10_3.12) +// CHECK:STDOUT: %int_29: Core.IntLiteral = int_value 29 [concrete = constants.%int_29] +// CHECK:STDOUT: %.loc10_3.13: ref %i32 = array_index %self.param, %int_29 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.13: = bound_method %.loc10_3.13, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.13: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.13(%.loc10_3.13) +// CHECK:STDOUT: %int_28: Core.IntLiteral = int_value 28 [concrete = constants.%int_28] +// CHECK:STDOUT: %.loc10_3.14: ref %i32 = array_index %self.param, %int_28 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.14: = bound_method %.loc10_3.14, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.14: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.14(%.loc10_3.14) +// CHECK:STDOUT: %int_27: Core.IntLiteral = int_value 27 [concrete = constants.%int_27] +// CHECK:STDOUT: %.loc10_3.15: ref %i32 = array_index %self.param, %int_27 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.15: = bound_method %.loc10_3.15, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.15: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.15(%.loc10_3.15) +// CHECK:STDOUT: %int_26: Core.IntLiteral = int_value 26 [concrete = constants.%int_26] +// CHECK:STDOUT: %.loc10_3.16: ref %i32 = array_index %self.param, %int_26 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.16: = bound_method %.loc10_3.16, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.16: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.16(%.loc10_3.16) +// CHECK:STDOUT: %int_25: Core.IntLiteral = int_value 25 [concrete = constants.%int_25] +// CHECK:STDOUT: %.loc10_3.17: ref %i32 = array_index %self.param, %int_25 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.17: = bound_method %.loc10_3.17, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.17: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.17(%.loc10_3.17) +// CHECK:STDOUT: %int_24: Core.IntLiteral = int_value 24 [concrete = constants.%int_24] +// CHECK:STDOUT: %.loc10_3.18: ref %i32 = array_index %self.param, %int_24 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.18: = bound_method %.loc10_3.18, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.18: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.18(%.loc10_3.18) +// CHECK:STDOUT: %int_23: Core.IntLiteral = int_value 23 [concrete = constants.%int_23] +// CHECK:STDOUT: %.loc10_3.19: ref %i32 = array_index %self.param, %int_23 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.19: = bound_method %.loc10_3.19, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.19: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.19(%.loc10_3.19) +// CHECK:STDOUT: %int_22: Core.IntLiteral = int_value 22 [concrete = constants.%int_22] +// CHECK:STDOUT: %.loc10_3.20: ref %i32 = array_index %self.param, %int_22 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.20: = bound_method %.loc10_3.20, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.20: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.20(%.loc10_3.20) +// CHECK:STDOUT: %int_21: Core.IntLiteral = int_value 21 [concrete = constants.%int_21] +// CHECK:STDOUT: %.loc10_3.21: ref %i32 = array_index %self.param, %int_21 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.21: = bound_method %.loc10_3.21, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.21: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.21(%.loc10_3.21) +// CHECK:STDOUT: %int_20: Core.IntLiteral = int_value 20 [concrete = constants.%int_20] +// CHECK:STDOUT: %.loc10_3.22: ref %i32 = array_index %self.param, %int_20 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.22: = bound_method %.loc10_3.22, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.22: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.22(%.loc10_3.22) +// CHECK:STDOUT: %int_19: Core.IntLiteral = int_value 19 [concrete = constants.%int_19] +// CHECK:STDOUT: %.loc10_3.23: ref %i32 = array_index %self.param, %int_19 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.23: = bound_method %.loc10_3.23, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.23: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.23(%.loc10_3.23) +// CHECK:STDOUT: %int_18: Core.IntLiteral = int_value 18 [concrete = constants.%int_18] +// CHECK:STDOUT: %.loc10_3.24: ref %i32 = array_index %self.param, %int_18 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.24: = bound_method %.loc10_3.24, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.24: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.24(%.loc10_3.24) +// CHECK:STDOUT: %int_17: Core.IntLiteral = int_value 17 [concrete = constants.%int_17] +// CHECK:STDOUT: %.loc10_3.25: ref %i32 = array_index %self.param, %int_17 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.25: = bound_method %.loc10_3.25, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.25: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.25(%.loc10_3.25) +// CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete = constants.%int_16] +// CHECK:STDOUT: %.loc10_3.26: ref %i32 = array_index %self.param, %int_16 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.26: = bound_method %.loc10_3.26, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.26: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.26(%.loc10_3.26) +// CHECK:STDOUT: %int_15: Core.IntLiteral = int_value 15 [concrete = constants.%int_15] +// CHECK:STDOUT: %.loc10_3.27: ref %i32 = array_index %self.param, %int_15 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.27: = bound_method %.loc10_3.27, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.27: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.27(%.loc10_3.27) +// CHECK:STDOUT: %int_14: Core.IntLiteral = int_value 14 [concrete = constants.%int_14] +// CHECK:STDOUT: %.loc10_3.28: ref %i32 = array_index %self.param, %int_14 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.28: = bound_method %.loc10_3.28, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.28: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.28(%.loc10_3.28) +// CHECK:STDOUT: %int_13: Core.IntLiteral = int_value 13 [concrete = constants.%int_13] +// CHECK:STDOUT: %.loc10_3.29: ref %i32 = array_index %self.param, %int_13 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.29: = bound_method %.loc10_3.29, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.29: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.29(%.loc10_3.29) +// CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete = constants.%int_12] +// CHECK:STDOUT: %.loc10_3.30: ref %i32 = array_index %self.param, %int_12 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.30: = bound_method %.loc10_3.30, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.30: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.30(%.loc10_3.30) +// CHECK:STDOUT: %int_11: Core.IntLiteral = int_value 11 [concrete = constants.%int_11] +// CHECK:STDOUT: %.loc10_3.31: ref %i32 = array_index %self.param, %int_11 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.31: = bound_method %.loc10_3.31, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.31: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.31(%.loc10_3.31) +// CHECK:STDOUT: %int_10: Core.IntLiteral = int_value 10 [concrete = constants.%int_10] +// CHECK:STDOUT: %.loc10_3.32: ref %i32 = array_index %self.param, %int_10 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.32: = bound_method %.loc10_3.32, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.32: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.32(%.loc10_3.32) +// CHECK:STDOUT: %int_9: Core.IntLiteral = int_value 9 [concrete = constants.%int_9] +// CHECK:STDOUT: %.loc10_3.33: ref %i32 = array_index %self.param, %int_9 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.33: = bound_method %.loc10_3.33, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.33: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.33(%.loc10_3.33) +// CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete = constants.%int_8] +// CHECK:STDOUT: %.loc10_3.34: ref %i32 = array_index %self.param, %int_8 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.34: = bound_method %.loc10_3.34, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.34: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.34(%.loc10_3.34) +// CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [concrete = constants.%int_7] +// CHECK:STDOUT: %.loc10_3.35: ref %i32 = array_index %self.param, %int_7 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.35: = bound_method %.loc10_3.35, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.35: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.35(%.loc10_3.35) +// CHECK:STDOUT: %int_6: Core.IntLiteral = int_value 6 [concrete = constants.%int_6] +// CHECK:STDOUT: %.loc10_3.36: ref %i32 = array_index %self.param, %int_6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.36: = bound_method %.loc10_3.36, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.36: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.36(%.loc10_3.36) +// CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5] +// CHECK:STDOUT: %.loc10_3.37: ref %i32 = array_index %self.param, %int_5 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.37: = bound_method %.loc10_3.37, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.37: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.37(%.loc10_3.37) +// CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4] +// CHECK:STDOUT: %.loc10_3.38: ref %i32 = array_index %self.param, %int_4 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.38: = bound_method %.loc10_3.38, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.38: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.38(%.loc10_3.38) +// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3] +// CHECK:STDOUT: %.loc10_3.39: ref %i32 = array_index %self.param, %int_3 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.39: = bound_method %.loc10_3.39, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.39: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.39(%.loc10_3.39) +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc10_3.40: ref %i32 = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.40: = bound_method %.loc10_3.40, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.40: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.40(%.loc10_3.40) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc10_3.41: ref %i32 = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.41: = bound_method %.loc10_3.41, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.41: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.41(%.loc10_3.41) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] +// CHECK:STDOUT: %.loc10_3.42: ref %i32 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_3.42: = bound_method %.loc10_3.42, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_3.42: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_3.42(%.loc10_3.42) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -516,10 +726,52 @@ fn F() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc22_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc22_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.087: %pattern_type.c07 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.b22: %pattern_type.c07 = wrapper_binding_pattern self, %self.param_patt.087 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc22_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = struct_value () [concrete] +// CHECK:STDOUT: %int_41: Core.IntLiteral = int_value 41 [concrete] +// CHECK:STDOUT: %int_40: Core.IntLiteral = int_value 40 [concrete] +// CHECK:STDOUT: %int_39: Core.IntLiteral = int_value 39 [concrete] +// CHECK:STDOUT: %int_38: Core.IntLiteral = int_value 38 [concrete] +// CHECK:STDOUT: %int_37: Core.IntLiteral = int_value 37 [concrete] +// CHECK:STDOUT: %int_36: Core.IntLiteral = int_value 36 [concrete] +// CHECK:STDOUT: %int_35: Core.IntLiteral = int_value 35 [concrete] +// CHECK:STDOUT: %int_34: Core.IntLiteral = int_value 34 [concrete] +// CHECK:STDOUT: %int_33: Core.IntLiteral = int_value 33 [concrete] +// CHECK:STDOUT: %int_31: Core.IntLiteral = int_value 31 [concrete] +// CHECK:STDOUT: %int_30: Core.IntLiteral = int_value 30 [concrete] +// CHECK:STDOUT: %int_29: Core.IntLiteral = int_value 29 [concrete] +// CHECK:STDOUT: %int_28: Core.IntLiteral = int_value 28 [concrete] +// CHECK:STDOUT: %int_27: Core.IntLiteral = int_value 27 [concrete] +// CHECK:STDOUT: %int_26: Core.IntLiteral = int_value 26 [concrete] +// CHECK:STDOUT: %int_25: Core.IntLiteral = int_value 25 [concrete] +// CHECK:STDOUT: %int_24: Core.IntLiteral = int_value 24 [concrete] +// CHECK:STDOUT: %int_23: Core.IntLiteral = int_value 23 [concrete] +// CHECK:STDOUT: %int_22: Core.IntLiteral = int_value 22 [concrete] +// CHECK:STDOUT: %int_21: Core.IntLiteral = int_value 21 [concrete] +// CHECK:STDOUT: %int_20: Core.IntLiteral = int_value 20 [concrete] +// CHECK:STDOUT: %int_19: Core.IntLiteral = int_value 19 [concrete] +// CHECK:STDOUT: %int_18: Core.IntLiteral = int_value 18 [concrete] +// CHECK:STDOUT: %int_17: Core.IntLiteral = int_value 17 [concrete] +// CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] +// CHECK:STDOUT: %int_15: Core.IntLiteral = int_value 15 [concrete] +// CHECK:STDOUT: %int_14: Core.IntLiteral = int_value 14 [concrete] +// CHECK:STDOUT: %int_13: Core.IntLiteral = int_value 13 [concrete] +// CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete] +// CHECK:STDOUT: %int_11: Core.IntLiteral = int_value 11 [concrete] +// CHECK:STDOUT: %int_10: Core.IntLiteral = int_value 10 [concrete] +// CHECK:STDOUT: %int_9: Core.IntLiteral = int_value 9 [concrete] +// CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] +// CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [concrete] +// CHECK:STDOUT: %int_6: Core.IntLiteral = int_value 6 [concrete] +// CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete] +// CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete] +// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.3: type = fn_type @Destroy.WithSelf.Op.loc22_3.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.3: %Destroy.WithSelf.Op.type.ef016f.3 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.3: type = fn_type @Destroy.WithSelf.SelfDestruct.loc22_3.2 [concrete] @@ -645,6 +897,174 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc22_3.2(%self.param: ref %array_type.d58) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_41: Core.IntLiteral = int_value 41 [concrete = constants.%int_41] +// CHECK:STDOUT: %.loc22_3.1: ref %i32 = array_index %self.param, %int_41 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.1: = bound_method %.loc22_3.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.1(%.loc22_3.1) +// CHECK:STDOUT: %int_40: Core.IntLiteral = int_value 40 [concrete = constants.%int_40] +// CHECK:STDOUT: %.loc22_3.2: ref %i32 = array_index %self.param, %int_40 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.2: = bound_method %.loc22_3.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.2(%.loc22_3.2) +// CHECK:STDOUT: %int_39: Core.IntLiteral = int_value 39 [concrete = constants.%int_39] +// CHECK:STDOUT: %.loc22_3.3: ref %i32 = array_index %self.param, %int_39 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.3: = bound_method %.loc22_3.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.3(%.loc22_3.3) +// CHECK:STDOUT: %int_38: Core.IntLiteral = int_value 38 [concrete = constants.%int_38] +// CHECK:STDOUT: %.loc22_3.4: ref %i32 = array_index %self.param, %int_38 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.4: = bound_method %.loc22_3.4, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.4: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.4(%.loc22_3.4) +// CHECK:STDOUT: %int_37: Core.IntLiteral = int_value 37 [concrete = constants.%int_37] +// CHECK:STDOUT: %.loc22_3.5: ref %i32 = array_index %self.param, %int_37 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.5: = bound_method %.loc22_3.5, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.5: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.5(%.loc22_3.5) +// CHECK:STDOUT: %int_36: Core.IntLiteral = int_value 36 [concrete = constants.%int_36] +// CHECK:STDOUT: %.loc22_3.6: ref %i32 = array_index %self.param, %int_36 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.6: = bound_method %.loc22_3.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.6: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.6(%.loc22_3.6) +// CHECK:STDOUT: %int_35: Core.IntLiteral = int_value 35 [concrete = constants.%int_35] +// CHECK:STDOUT: %.loc22_3.7: ref %i32 = array_index %self.param, %int_35 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.7: = bound_method %.loc22_3.7, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.7: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.7(%.loc22_3.7) +// CHECK:STDOUT: %int_34: Core.IntLiteral = int_value 34 [concrete = constants.%int_34] +// CHECK:STDOUT: %.loc22_3.8: ref %i32 = array_index %self.param, %int_34 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.8: = bound_method %.loc22_3.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.8: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.8(%.loc22_3.8) +// CHECK:STDOUT: %int_33: Core.IntLiteral = int_value 33 [concrete = constants.%int_33] +// CHECK:STDOUT: %.loc22_3.9: ref %i32 = array_index %self.param, %int_33 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.9: = bound_method %.loc22_3.9, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.9: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.9(%.loc22_3.9) +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %.loc22_3.10: ref %i32 = array_index %self.param, %int_32 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.10: = bound_method %.loc22_3.10, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.10: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.10(%.loc22_3.10) +// CHECK:STDOUT: %int_31: Core.IntLiteral = int_value 31 [concrete = constants.%int_31] +// CHECK:STDOUT: %.loc22_3.11: ref %i32 = array_index %self.param, %int_31 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.11: = bound_method %.loc22_3.11, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.11: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.11(%.loc22_3.11) +// CHECK:STDOUT: %int_30: Core.IntLiteral = int_value 30 [concrete = constants.%int_30] +// CHECK:STDOUT: %.loc22_3.12: ref %i32 = array_index %self.param, %int_30 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.12: = bound_method %.loc22_3.12, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.12: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.12(%.loc22_3.12) +// CHECK:STDOUT: %int_29: Core.IntLiteral = int_value 29 [concrete = constants.%int_29] +// CHECK:STDOUT: %.loc22_3.13: ref %i32 = array_index %self.param, %int_29 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.13: = bound_method %.loc22_3.13, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.13: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.13(%.loc22_3.13) +// CHECK:STDOUT: %int_28: Core.IntLiteral = int_value 28 [concrete = constants.%int_28] +// CHECK:STDOUT: %.loc22_3.14: ref %i32 = array_index %self.param, %int_28 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.14: = bound_method %.loc22_3.14, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.14: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.14(%.loc22_3.14) +// CHECK:STDOUT: %int_27: Core.IntLiteral = int_value 27 [concrete = constants.%int_27] +// CHECK:STDOUT: %.loc22_3.15: ref %i32 = array_index %self.param, %int_27 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.15: = bound_method %.loc22_3.15, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.15: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.15(%.loc22_3.15) +// CHECK:STDOUT: %int_26: Core.IntLiteral = int_value 26 [concrete = constants.%int_26] +// CHECK:STDOUT: %.loc22_3.16: ref %i32 = array_index %self.param, %int_26 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.16: = bound_method %.loc22_3.16, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.16: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.16(%.loc22_3.16) +// CHECK:STDOUT: %int_25: Core.IntLiteral = int_value 25 [concrete = constants.%int_25] +// CHECK:STDOUT: %.loc22_3.17: ref %i32 = array_index %self.param, %int_25 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.17: = bound_method %.loc22_3.17, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.17: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.17(%.loc22_3.17) +// CHECK:STDOUT: %int_24: Core.IntLiteral = int_value 24 [concrete = constants.%int_24] +// CHECK:STDOUT: %.loc22_3.18: ref %i32 = array_index %self.param, %int_24 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.18: = bound_method %.loc22_3.18, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.18: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.18(%.loc22_3.18) +// CHECK:STDOUT: %int_23: Core.IntLiteral = int_value 23 [concrete = constants.%int_23] +// CHECK:STDOUT: %.loc22_3.19: ref %i32 = array_index %self.param, %int_23 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.19: = bound_method %.loc22_3.19, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.19: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.19(%.loc22_3.19) +// CHECK:STDOUT: %int_22: Core.IntLiteral = int_value 22 [concrete = constants.%int_22] +// CHECK:STDOUT: %.loc22_3.20: ref %i32 = array_index %self.param, %int_22 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.20: = bound_method %.loc22_3.20, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.20: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.20(%.loc22_3.20) +// CHECK:STDOUT: %int_21: Core.IntLiteral = int_value 21 [concrete = constants.%int_21] +// CHECK:STDOUT: %.loc22_3.21: ref %i32 = array_index %self.param, %int_21 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.21: = bound_method %.loc22_3.21, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.21: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.21(%.loc22_3.21) +// CHECK:STDOUT: %int_20: Core.IntLiteral = int_value 20 [concrete = constants.%int_20] +// CHECK:STDOUT: %.loc22_3.22: ref %i32 = array_index %self.param, %int_20 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.22: = bound_method %.loc22_3.22, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.22: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.22(%.loc22_3.22) +// CHECK:STDOUT: %int_19: Core.IntLiteral = int_value 19 [concrete = constants.%int_19] +// CHECK:STDOUT: %.loc22_3.23: ref %i32 = array_index %self.param, %int_19 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.23: = bound_method %.loc22_3.23, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.23: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.23(%.loc22_3.23) +// CHECK:STDOUT: %int_18: Core.IntLiteral = int_value 18 [concrete = constants.%int_18] +// CHECK:STDOUT: %.loc22_3.24: ref %i32 = array_index %self.param, %int_18 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.24: = bound_method %.loc22_3.24, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.24: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.24(%.loc22_3.24) +// CHECK:STDOUT: %int_17: Core.IntLiteral = int_value 17 [concrete = constants.%int_17] +// CHECK:STDOUT: %.loc22_3.25: ref %i32 = array_index %self.param, %int_17 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.25: = bound_method %.loc22_3.25, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.25: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.25(%.loc22_3.25) +// CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete = constants.%int_16] +// CHECK:STDOUT: %.loc22_3.26: ref %i32 = array_index %self.param, %int_16 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.26: = bound_method %.loc22_3.26, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.26: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.26(%.loc22_3.26) +// CHECK:STDOUT: %int_15: Core.IntLiteral = int_value 15 [concrete = constants.%int_15] +// CHECK:STDOUT: %.loc22_3.27: ref %i32 = array_index %self.param, %int_15 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.27: = bound_method %.loc22_3.27, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.27: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.27(%.loc22_3.27) +// CHECK:STDOUT: %int_14: Core.IntLiteral = int_value 14 [concrete = constants.%int_14] +// CHECK:STDOUT: %.loc22_3.28: ref %i32 = array_index %self.param, %int_14 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.28: = bound_method %.loc22_3.28, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.28: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.28(%.loc22_3.28) +// CHECK:STDOUT: %int_13: Core.IntLiteral = int_value 13 [concrete = constants.%int_13] +// CHECK:STDOUT: %.loc22_3.29: ref %i32 = array_index %self.param, %int_13 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.29: = bound_method %.loc22_3.29, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.29: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.29(%.loc22_3.29) +// CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete = constants.%int_12] +// CHECK:STDOUT: %.loc22_3.30: ref %i32 = array_index %self.param, %int_12 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.30: = bound_method %.loc22_3.30, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.30: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.30(%.loc22_3.30) +// CHECK:STDOUT: %int_11: Core.IntLiteral = int_value 11 [concrete = constants.%int_11] +// CHECK:STDOUT: %.loc22_3.31: ref %i32 = array_index %self.param, %int_11 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.31: = bound_method %.loc22_3.31, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.31: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.31(%.loc22_3.31) +// CHECK:STDOUT: %int_10: Core.IntLiteral = int_value 10 [concrete = constants.%int_10] +// CHECK:STDOUT: %.loc22_3.32: ref %i32 = array_index %self.param, %int_10 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.32: = bound_method %.loc22_3.32, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.32: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.32(%.loc22_3.32) +// CHECK:STDOUT: %int_9: Core.IntLiteral = int_value 9 [concrete = constants.%int_9] +// CHECK:STDOUT: %.loc22_3.33: ref %i32 = array_index %self.param, %int_9 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.33: = bound_method %.loc22_3.33, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.33: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.33(%.loc22_3.33) +// CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete = constants.%int_8] +// CHECK:STDOUT: %.loc22_3.34: ref %i32 = array_index %self.param, %int_8 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.34: = bound_method %.loc22_3.34, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.34: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.34(%.loc22_3.34) +// CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [concrete = constants.%int_7] +// CHECK:STDOUT: %.loc22_3.35: ref %i32 = array_index %self.param, %int_7 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.35: = bound_method %.loc22_3.35, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.35: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.35(%.loc22_3.35) +// CHECK:STDOUT: %int_6: Core.IntLiteral = int_value 6 [concrete = constants.%int_6] +// CHECK:STDOUT: %.loc22_3.36: ref %i32 = array_index %self.param, %int_6 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.36: = bound_method %.loc22_3.36, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.36: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.36(%.loc22_3.36) +// CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5] +// CHECK:STDOUT: %.loc22_3.37: ref %i32 = array_index %self.param, %int_5 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.37: = bound_method %.loc22_3.37, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.37: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.37(%.loc22_3.37) +// CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4] +// CHECK:STDOUT: %.loc22_3.38: ref %i32 = array_index %self.param, %int_4 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.38: = bound_method %.loc22_3.38, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.38: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.38(%.loc22_3.38) +// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3] +// CHECK:STDOUT: %.loc22_3.39: ref %i32 = array_index %self.param, %int_3 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.39: = bound_method %.loc22_3.39, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.39: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.39(%.loc22_3.39) +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] +// CHECK:STDOUT: %.loc22_3.40: ref %i32 = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.40: = bound_method %.loc22_3.40, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.40: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.40(%.loc22_3.40) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] +// CHECK:STDOUT: %.loc22_3.41: ref %i32 = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.41: = bound_method %.loc22_3.41, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.41: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.41(%.loc22_3.41) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] +// CHECK:STDOUT: %.loc22_3.42: ref %i32 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc22_3.42: = bound_method %.loc22_3.42, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc22_3.42: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc22_3.42(%.loc22_3.42) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/macros/macros.carbon b/toolchain/check/testdata/interop/cpp/macros/macros.carbon index 0d914253450e..5a7b1c2198c5 100644 --- a/toolchain/check/testdata/interop/cpp/macros/macros.carbon +++ b/toolchain/check/testdata/interop/cpp/macros/macros.carbon @@ -1136,6 +1136,8 @@ let _: C(1) = {} as C(Cpp.COUNT); // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc10_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc10_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc10_3.2 [concrete] @@ -1260,6 +1262,10 @@ let _: C(1) = {} as C(Cpp.COUNT); // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc10_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc10: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc10, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc10) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.darwin.carbon b/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.darwin.carbon index 6dd041ccf9b4..e39cfb63b904 100644 --- a/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.darwin.carbon +++ b/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.darwin.carbon @@ -700,6 +700,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc11_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc11_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc11_3.2 [concrete] @@ -840,6 +842,10 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc11_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc11: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc11, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc11) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -929,6 +935,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc11_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc11_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc11_3.2 [concrete] @@ -1069,6 +1077,10 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc11_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc11: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc11, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc11) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1190,6 +1202,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc24_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc24_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc24_3.2 [concrete] @@ -1460,6 +1474,10 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc24_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc24: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc24, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc24) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -4249,6 +4267,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc24_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc24_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc24_3.2 [concrete] @@ -4522,6 +4542,10 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc24_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc24: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc24, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc24) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.llp64.carbon b/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.llp64.carbon index 5b1643146783..fceb660c3a6e 100644 --- a/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.llp64.carbon +++ b/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.llp64.carbon @@ -766,6 +766,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc11_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc11_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc11_3.2 [concrete] @@ -906,6 +908,10 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc11_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc11: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc11, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc11) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1000,6 +1006,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc11_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc11_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc11_3.2 [concrete] @@ -1140,6 +1148,10 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc11_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc11: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc11, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc11) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1257,6 +1269,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc26_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc26_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc26_3.2 [concrete] @@ -1551,6 +1565,10 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc26_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc26: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc26, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc26) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -4668,6 +4686,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc24_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc24_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc24_3.2 [concrete] @@ -4955,6 +4975,10 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc24_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc24: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc24, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc24) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.lp64.carbon b/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.lp64.carbon index bc6cd0cdddf4..6362145dee7c 100644 --- a/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.lp64.carbon +++ b/toolchain/check/testdata/interop/cpp/primitive_types/long_and_long_long.lp64.carbon @@ -714,6 +714,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc11_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc11_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc11_3.2 [concrete] @@ -854,6 +856,10 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc11_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc11: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc11, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc11) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -948,6 +954,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc11_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc11_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc11_3.2 [concrete] @@ -1088,6 +1096,10 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc11_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc11: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc11, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc11) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1195,6 +1207,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc24_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc24_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc24_3.2 [concrete] @@ -1476,6 +1490,10 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc24_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc24: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc24, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc24) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -4377,6 +4395,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.loc24_3.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.loc24_3.1 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c06: %pattern_type.18b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a67: %pattern_type.18b = wrapper_binding_pattern self, %self.param_patt.c06 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc24_3.2 [concrete] @@ -4664,6 +4684,10 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc24_3.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc24: ref %f32.c73 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound: = bound_method %.loc24, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound(%.loc24) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/stdlib/initializer_list.carbon b/toolchain/check/testdata/interop/cpp/stdlib/initializer_list.carbon index c06993e01cd3..6df9af7d0509 100644 --- a/toolchain/check/testdata/interop/cpp/stdlib/initializer_list.carbon +++ b/toolchain/check/testdata/interop/cpp/stdlib/initializer_list.carbon @@ -123,6 +123,8 @@ fn F() { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.3: type = fn_type @Destroy.WithSelf.Op.loc10_23.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.3: %Destroy.WithSelf.Op.type.ef016f.3 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.3: type = fn_type @Destroy.WithSelf.SelfDestruct.loc10_23.2 [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.3: %Destroy.WithSelf.SelfDestruct.type.fbceb5.3 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.c42: %pattern_type.771 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.3bc: %pattern_type.771 = wrapper_binding_pattern self, %self.param_patt.c42 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc10_23.2 [concrete] @@ -475,6 +477,18 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc10_23.2(%self.param: ref %array_type) { // CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] +// CHECK:STDOUT: %.loc10_23.1: ref %i32 = array_index %self.param, %int_2 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_23.1: = bound_method %.loc10_23.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.3 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_23.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_23.1(%.loc10_23.1) +// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] +// CHECK:STDOUT: %.loc10_23.2: ref %i32 = array_index %self.param, %int_1 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_23.2: = bound_method %.loc10_23.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.3 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_23.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_23.2(%.loc10_23.2) +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %.loc10_23.3: ref %i32 = array_index %self.param, %int_0 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc10_23.3: = bound_method %.loc10_23.3, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.3 +// CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc10_23.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc10_23.3(%.loc10_23.3) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/array/array_in_place.carbon b/toolchain/lower/testdata/array/array_in_place.carbon index 88ef18ab14ac..7e5f72ff88bc 100644 --- a/toolchain/lower/testdata/array/array_in_place.carbon +++ b/toolchain/lower/testdata/array/array_in_place.carbon @@ -63,6 +63,10 @@ fn G() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.133da171e935f2c5:core.Destroy.Core"(ptr %self) #0 !dbg !49 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc16_3.1.array.index = getelementptr inbounds [2 x { i32, i32, i32 }], ptr %self, i32 0, i64 1, !dbg !51 +// CHECK:STDOUT: call void @"_CSelfDestruct.555b1314256372b8:core.Destroy.Core"(ptr %.loc16_3.1.array.index), !dbg !51 +// CHECK:STDOUT: %.loc16_3.2.array.index = getelementptr inbounds [2 x { i32, i32, i32 }], ptr %self, i32 0, i64 0, !dbg !51 +// CHECK:STDOUT: call void @"_CSelfDestruct.555b1314256372b8:core.Destroy.Core"(ptr %.loc16_3.2.array.index), !dbg !51 // CHECK:STDOUT: ret void, !dbg !51 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/array/assign_return_value.carbon b/toolchain/lower/testdata/array/assign_return_value.carbon index 3547502c08dc..d2ea78ba3b87 100644 --- a/toolchain/lower/testdata/array/assign_return_value.carbon +++ b/toolchain/lower/testdata/array/assign_return_value.carbon @@ -78,6 +78,10 @@ fn Run() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.8014ee1b1a984df0:core.Destroy.Core"(ptr %self) #0 !dbg !52 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc16_3.1.array.index = getelementptr inbounds [2 x i32], ptr %self, i32 0, i64 1, !dbg !54 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc16_3.1.array.index), !dbg !54 +// CHECK:STDOUT: %.loc16_3.2.array.index = getelementptr inbounds [2 x i32], ptr %self, i32 0, i64 0, !dbg !54 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc16_3.2.array.index), !dbg !54 // CHECK:STDOUT: ret void, !dbg !54 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/array/base.carbon b/toolchain/lower/testdata/array/base.carbon index a811bcb5632d..1e3a19524a1c 100644 --- a/toolchain/lower/testdata/array/base.carbon +++ b/toolchain/lower/testdata/array/base.carbon @@ -84,6 +84,12 @@ fn Run() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.dc7dedd104b837b2:core.Destroy.Core"(ptr %self) #0 !dbg !63 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc18_3.1.array.index = getelementptr inbounds [3 x i32], ptr %self, i32 0, i64 2, !dbg !65 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc18_3.1.array.index), !dbg !65 +// CHECK:STDOUT: %.loc18_3.2.array.index = getelementptr inbounds [3 x i32], ptr %self, i32 0, i64 1, !dbg !65 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc18_3.2.array.index), !dbg !65 +// CHECK:STDOUT: %.loc18_3.3.array.index = getelementptr inbounds [3 x i32], ptr %self, i32 0, i64 0, !dbg !65 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc18_3.3.array.index), !dbg !65 // CHECK:STDOUT: ret void, !dbg !65 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -122,6 +128,16 @@ fn Run() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.c135263f75f7214d:core.Destroy.Core"(ptr %self) #0 !dbg !83 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc16_3.1.array.index = getelementptr inbounds [5 x {}], ptr %self, i32 0, i64 4, !dbg !85 +// CHECK:STDOUT: call void @"_CSelfDestruct.61ea2aba74ab3bf1:core.Destroy.Core"(ptr %.loc16_3.1.array.index), !dbg !85 +// CHECK:STDOUT: %.loc16_3.2.array.index = getelementptr inbounds [5 x {}], ptr %self, i32 0, i64 3, !dbg !85 +// CHECK:STDOUT: call void @"_CSelfDestruct.61ea2aba74ab3bf1:core.Destroy.Core"(ptr %.loc16_3.2.array.index), !dbg !85 +// CHECK:STDOUT: %.loc16_3.3.array.index = getelementptr inbounds [5 x {}], ptr %self, i32 0, i64 2, !dbg !85 +// CHECK:STDOUT: call void @"_CSelfDestruct.61ea2aba74ab3bf1:core.Destroy.Core"(ptr %.loc16_3.3.array.index), !dbg !85 +// CHECK:STDOUT: %.loc16_3.4.array.index = getelementptr inbounds [5 x {}], ptr %self, i32 0, i64 1, !dbg !85 +// CHECK:STDOUT: call void @"_CSelfDestruct.61ea2aba74ab3bf1:core.Destroy.Core"(ptr %.loc16_3.4.array.index), !dbg !85 +// CHECK:STDOUT: %.loc16_3.5.array.index = getelementptr inbounds [5 x {}], ptr %self, i32 0, i64 0, !dbg !85 +// CHECK:STDOUT: call void @"_CSelfDestruct.61ea2aba74ab3bf1:core.Destroy.Core"(ptr %.loc16_3.5.array.index), !dbg !85 // CHECK:STDOUT: ret void, !dbg !85 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -141,6 +157,10 @@ fn Run() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.8815565a27e3ec8c:core.Destroy.Core"(ptr %self) #0 !dbg !95 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc15_3.1.array.index = getelementptr inbounds [2 x double], ptr %self, i32 0, i64 1, !dbg !97 +// CHECK:STDOUT: call void @"_CSelfDestruct.dc14d4dd21801791:core.Destroy.Core"(ptr %.loc15_3.1.array.index), !dbg !97 +// CHECK:STDOUT: %.loc15_3.2.array.index = getelementptr inbounds [2 x double], ptr %self, i32 0, i64 0, !dbg !97 +// CHECK:STDOUT: call void @"_CSelfDestruct.dc14d4dd21801791:core.Destroy.Core"(ptr %.loc15_3.2.array.index), !dbg !97 // CHECK:STDOUT: ret void, !dbg !97 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -154,6 +174,8 @@ fn Run() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.d277540f487baeed:core.Destroy.Core"(ptr %self) #0 !dbg !103 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc14.array.index = getelementptr inbounds [1 x i32], ptr %self, i32 0, i64 0, !dbg !105 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc14.array.index), !dbg !105 // CHECK:STDOUT: ret void, !dbg !105 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/array/function_param.carbon b/toolchain/lower/testdata/array/function_param.carbon index ec1c3d5b105e..486db767dee8 100644 --- a/toolchain/lower/testdata/array/function_param.carbon +++ b/toolchain/lower/testdata/array/function_param.carbon @@ -55,6 +55,12 @@ fn G() -> i32 { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.dc7dedd104b837b2:core.Destroy.Core"(ptr %self) #0 !dbg !51 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc18_20.1.array.index = getelementptr inbounds [3 x i32], ptr %self, i32 0, i64 2, !dbg !53 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc18_20.1.array.index), !dbg !53 +// CHECK:STDOUT: %.loc18_20.2.array.index = getelementptr inbounds [3 x i32], ptr %self, i32 0, i64 1, !dbg !53 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc18_20.2.array.index), !dbg !53 +// CHECK:STDOUT: %.loc18_20.3.array.index = getelementptr inbounds [3 x i32], ptr %self, i32 0, i64 0, !dbg !53 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc18_20.3.array.index), !dbg !53 // CHECK:STDOUT: ret void, !dbg !53 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/array/iterate.carbon b/toolchain/lower/testdata/array/iterate.carbon index c54cbbd26dab..56867b508ab8 100644 --- a/toolchain/lower/testdata/array/iterate.carbon +++ b/toolchain/lower/testdata/array/iterate.carbon @@ -131,6 +131,18 @@ fn F() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.1366a4d5330239bd:core.Destroy.Core"(ptr %self) #0 !dbg !67 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc16_43.1.array.index = getelementptr inbounds [6 x i32], ptr %self, i32 0, i64 5, !dbg !69 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc16_43.1.array.index), !dbg !69 +// CHECK:STDOUT: %.loc16_43.2.array.index = getelementptr inbounds [6 x i32], ptr %self, i32 0, i64 4, !dbg !69 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc16_43.2.array.index), !dbg !69 +// CHECK:STDOUT: %.loc16_43.3.array.index = getelementptr inbounds [6 x i32], ptr %self, i32 0, i64 3, !dbg !69 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc16_43.3.array.index), !dbg !69 +// CHECK:STDOUT: %.loc16_43.4.array.index = getelementptr inbounds [6 x i32], ptr %self, i32 0, i64 2, !dbg !69 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc16_43.4.array.index), !dbg !69 +// CHECK:STDOUT: %.loc16_43.5.array.index = getelementptr inbounds [6 x i32], ptr %self, i32 0, i64 1, !dbg !69 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc16_43.5.array.index), !dbg !69 +// CHECK:STDOUT: %.loc16_43.6.array.index = getelementptr inbounds [6 x i32], ptr %self, i32 0, i64 0, !dbg !69 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc16_43.6.array.index), !dbg !69 // CHECK:STDOUT: ret void, !dbg !69 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/array/layout.carbon b/toolchain/lower/testdata/array/layout.carbon index a36d6486a404..e566c375593d 100644 --- a/toolchain/lower/testdata/array/layout.carbon +++ b/toolchain/lower/testdata/array/layout.carbon @@ -86,6 +86,12 @@ var c: array(Core.Int(257), 5) = (1, 2, 3, 4, 5); // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.9e05708f03266b13:core.Destroy.Core"(ptr %self) #0 !dbg !57 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc9_3.1.array.index = getelementptr inbounds [3 x <{ <{ ptr, i32 }>, [4 x i8] }>], ptr %self, i32 0, i64 2, !dbg !59 +// CHECK:STDOUT: call void @"_CSelfDestruct.0bcbe81284b6bcb5:core.Destroy.Core"(ptr %.loc9_3.1.array.index), !dbg !59 +// CHECK:STDOUT: %.loc9_3.2.array.index = getelementptr inbounds [3 x <{ <{ ptr, i32 }>, [4 x i8] }>], ptr %self, i32 0, i64 1, !dbg !59 +// CHECK:STDOUT: call void @"_CSelfDestruct.0bcbe81284b6bcb5:core.Destroy.Core"(ptr %.loc9_3.2.array.index), !dbg !59 +// CHECK:STDOUT: %.loc9_3.3.array.index = getelementptr inbounds [3 x <{ <{ ptr, i32 }>, [4 x i8] }>], ptr %self, i32 0, i64 0, !dbg !59 +// CHECK:STDOUT: call void @"_CSelfDestruct.0bcbe81284b6bcb5:core.Destroy.Core"(ptr %.loc9_3.3.array.index), !dbg !59 // CHECK:STDOUT: ret void, !dbg !59 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/builtins/cpp.carbon b/toolchain/lower/testdata/builtins/cpp.carbon index 23a19e0db13f..6791cdddfd54 100644 --- a/toolchain/lower/testdata/builtins/cpp.carbon +++ b/toolchain/lower/testdata/builtins/cpp.carbon @@ -109,6 +109,14 @@ fn Test() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.88cc3346b7991af5:core.Destroy.Core"(ptr %self) #0 !dbg !36 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc25_52.1.array.index = getelementptr inbounds [4 x i32], ptr %self, i32 0, i64 3, !dbg !38 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc25_52.1.array.index), !dbg !38 +// CHECK:STDOUT: %.loc25_52.2.array.index = getelementptr inbounds [4 x i32], ptr %self, i32 0, i64 2, !dbg !38 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc25_52.2.array.index), !dbg !38 +// CHECK:STDOUT: %.loc25_52.3.array.index = getelementptr inbounds [4 x i32], ptr %self, i32 0, i64 1, !dbg !38 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc25_52.3.array.index), !dbg !38 +// CHECK:STDOUT: %.loc25_52.4.array.index = getelementptr inbounds [4 x i32], ptr %self, i32 0, i64 0, !dbg !38 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc25_52.4.array.index), !dbg !38 // CHECK:STDOUT: ret void, !dbg !38 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/index/array_element_access.carbon b/toolchain/lower/testdata/index/array_element_access.carbon index fa1dc9d5da1a..c65d771eb4bc 100644 --- a/toolchain/lower/testdata/index/array_element_access.carbon +++ b/toolchain/lower/testdata/index/array_element_access.carbon @@ -96,6 +96,10 @@ fn Run() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.8014ee1b1a984df0:core.Destroy.Core"(ptr %self) #0 !dbg !58 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc20_18.1.array.index = getelementptr inbounds [2 x i32], ptr %self, i32 0, i64 1, !dbg !60 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc20_18.1.array.index), !dbg !60 +// CHECK:STDOUT: %.loc20_18.2.array.index = getelementptr inbounds [2 x i32], ptr %self, i32 0, i64 0, !dbg !60 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc20_18.2.array.index), !dbg !60 // CHECK:STDOUT: ret void, !dbg !60 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -130,7 +134,7 @@ fn Run() { // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #1 // CHECK:STDOUT: // CHECK:STDOUT: ; uselistorder directives -// CHECK:STDOUT: uselistorder ptr @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core", { 0, 1, 4, 3, 2 } +// CHECK:STDOUT: uselistorder ptr @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core", { 0, 1, 2, 3, 6, 5, 4 } // CHECK:STDOUT: uselistorder ptr @"_CSelfDestruct.8014ee1b1a984df0:core.Destroy.Core", { 1, 0 } // CHECK:STDOUT: uselistorder ptr @llvm.memcpy.p0.p0.i64, { 1, 0 } // CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 5, 4, 3, 2, 1, 0 } diff --git a/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_pointer.carbon b/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_pointer.carbon index 899656f81746..c3f88977b87c 100644 --- a/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_pointer.carbon +++ b/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_pointer.carbon @@ -120,6 +120,12 @@ fn InitNontrivialDtor() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.dc7dedd104b837b2:core.Destroy.Core"(ptr %self) #0 !dbg !31 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc13_50.1.array.index = getelementptr inbounds [3 x i32], ptr %self, i32 0, i64 2, !dbg !33 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc13_50.1.array.index), !dbg !33 +// CHECK:STDOUT: %.loc13_50.2.array.index = getelementptr inbounds [3 x i32], ptr %self, i32 0, i64 1, !dbg !33 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc13_50.2.array.index), !dbg !33 +// CHECK:STDOUT: %.loc13_50.3.array.index = getelementptr inbounds [3 x i32], ptr %self, i32 0, i64 0, !dbg !33 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc13_50.3.array.index), !dbg !33 // CHECK:STDOUT: ret void, !dbg !33 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -254,6 +260,12 @@ fn InitNontrivialDtor() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.71d86972d5684aff:core.Destroy.Core"(ptr %self) #0 !dbg !67 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc23_69.1.array.index = getelementptr inbounds [3 x [1 x i8]], ptr %self, i32 0, i64 2, !dbg !69 +// CHECK:STDOUT: call void @"_CSelfDestruct.cbb50137a92c3ee4:core.Destroy.Core"(ptr %.loc23_69.1.array.index), !dbg !69 +// CHECK:STDOUT: %.loc23_69.2.array.index = getelementptr inbounds [3 x [1 x i8]], ptr %self, i32 0, i64 1, !dbg !69 +// CHECK:STDOUT: call void @"_CSelfDestruct.cbb50137a92c3ee4:core.Destroy.Core"(ptr %.loc23_69.2.array.index), !dbg !69 +// CHECK:STDOUT: %.loc23_69.3.array.index = getelementptr inbounds [3 x [1 x i8]], ptr %self, i32 0, i64 0, !dbg !69 +// CHECK:STDOUT: call void @"_CSelfDestruct.cbb50137a92c3ee4:core.Destroy.Core"(ptr %.loc23_69.3.array.index), !dbg !69 // CHECK:STDOUT: ret void, !dbg !69 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_size.carbon b/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_size.carbon index d1beed6cfbf7..089e0643aaa1 100644 --- a/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_size.carbon +++ b/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_size.carbon @@ -120,6 +120,12 @@ fn InitNontrivialDtor() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.dc7dedd104b837b2:core.Destroy.Core"(ptr %self) #0 !dbg !32 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc13_50.1.array.index = getelementptr inbounds [3 x i32], ptr %self, i32 0, i64 2, !dbg !34 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc13_50.1.array.index), !dbg !34 +// CHECK:STDOUT: %.loc13_50.2.array.index = getelementptr inbounds [3 x i32], ptr %self, i32 0, i64 1, !dbg !34 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc13_50.2.array.index), !dbg !34 +// CHECK:STDOUT: %.loc13_50.3.array.index = getelementptr inbounds [3 x i32], ptr %self, i32 0, i64 0, !dbg !34 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc13_50.3.array.index), !dbg !34 // CHECK:STDOUT: ret void, !dbg !34 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -253,6 +259,12 @@ fn InitNontrivialDtor() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.71d86972d5684aff:core.Destroy.Core"(ptr %self) #0 !dbg !68 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc23_69.1.array.index = getelementptr inbounds [3 x [1 x i8]], ptr %self, i32 0, i64 2, !dbg !70 +// CHECK:STDOUT: call void @"_CSelfDestruct.cbb50137a92c3ee4:core.Destroy.Core"(ptr %.loc23_69.1.array.index), !dbg !70 +// CHECK:STDOUT: %.loc23_69.2.array.index = getelementptr inbounds [3 x [1 x i8]], ptr %self, i32 0, i64 1, !dbg !70 +// CHECK:STDOUT: call void @"_CSelfDestruct.cbb50137a92c3ee4:core.Destroy.Core"(ptr %.loc23_69.2.array.index), !dbg !70 +// CHECK:STDOUT: %.loc23_69.3.array.index = getelementptr inbounds [3 x [1 x i8]], ptr %self, i32 0, i64 0, !dbg !70 +// CHECK:STDOUT: call void @"_CSelfDestruct.cbb50137a92c3ee4:core.Destroy.Core"(ptr %.loc23_69.3.array.index), !dbg !70 // CHECK:STDOUT: ret void, !dbg !70 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/primitives/numeric_literals.carbon b/toolchain/lower/testdata/primitives/numeric_literals.carbon index d45c4c1db15b..6d07a6f6a76f 100644 --- a/toolchain/lower/testdata/primitives/numeric_literals.carbon +++ b/toolchain/lower/testdata/primitives/numeric_literals.carbon @@ -69,6 +69,18 @@ fn F() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.2891f36f5aa8bde4:core.Destroy.Core"(ptr %self) #0 !dbg !54 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc22_3.1.array.index = getelementptr inbounds [6 x double], ptr %self, i32 0, i64 5, !dbg !56 +// CHECK:STDOUT: call void @"_CSelfDestruct.dc14d4dd21801791:core.Destroy.Core"(ptr %.loc22_3.1.array.index), !dbg !56 +// CHECK:STDOUT: %.loc22_3.2.array.index = getelementptr inbounds [6 x double], ptr %self, i32 0, i64 4, !dbg !56 +// CHECK:STDOUT: call void @"_CSelfDestruct.dc14d4dd21801791:core.Destroy.Core"(ptr %.loc22_3.2.array.index), !dbg !56 +// CHECK:STDOUT: %.loc22_3.3.array.index = getelementptr inbounds [6 x double], ptr %self, i32 0, i64 3, !dbg !56 +// CHECK:STDOUT: call void @"_CSelfDestruct.dc14d4dd21801791:core.Destroy.Core"(ptr %.loc22_3.3.array.index), !dbg !56 +// CHECK:STDOUT: %.loc22_3.4.array.index = getelementptr inbounds [6 x double], ptr %self, i32 0, i64 2, !dbg !56 +// CHECK:STDOUT: call void @"_CSelfDestruct.dc14d4dd21801791:core.Destroy.Core"(ptr %.loc22_3.4.array.index), !dbg !56 +// CHECK:STDOUT: %.loc22_3.5.array.index = getelementptr inbounds [6 x double], ptr %self, i32 0, i64 1, !dbg !56 +// CHECK:STDOUT: call void @"_CSelfDestruct.dc14d4dd21801791:core.Destroy.Core"(ptr %.loc22_3.5.array.index), !dbg !56 +// CHECK:STDOUT: %.loc22_3.6.array.index = getelementptr inbounds [6 x double], ptr %self, i32 0, i64 0, !dbg !56 +// CHECK:STDOUT: call void @"_CSelfDestruct.dc14d4dd21801791:core.Destroy.Core"(ptr %.loc22_3.6.array.index), !dbg !56 // CHECK:STDOUT: ret void, !dbg !56 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -88,6 +100,14 @@ fn F() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.88cc3346b7991af5:core.Destroy.Core"(ptr %self) #0 !dbg !66 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc16_3.1.array.index = getelementptr inbounds [4 x i32], ptr %self, i32 0, i64 3, !dbg !68 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc16_3.1.array.index), !dbg !68 +// CHECK:STDOUT: %.loc16_3.2.array.index = getelementptr inbounds [4 x i32], ptr %self, i32 0, i64 2, !dbg !68 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc16_3.2.array.index), !dbg !68 +// CHECK:STDOUT: %.loc16_3.3.array.index = getelementptr inbounds [4 x i32], ptr %self, i32 0, i64 1, !dbg !68 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc16_3.3.array.index), !dbg !68 +// CHECK:STDOUT: %.loc16_3.4.array.index = getelementptr inbounds [4 x i32], ptr %self, i32 0, i64 0, !dbg !68 +// CHECK:STDOUT: call void @"_CSelfDestruct.f58524831c37807e:core.Destroy.Core"(ptr %.loc16_3.4.array.index), !dbg !68 // CHECK:STDOUT: ret void, !dbg !68 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/template/convert.carbon b/toolchain/lower/testdata/template/convert.carbon index 317aeaa7fafa..0919eba8a764 100644 --- a/toolchain/lower/testdata/template/convert.carbon +++ b/toolchain/lower/testdata/template/convert.carbon @@ -412,6 +412,12 @@ fn Test2(c: C) { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_CSubobjectDestroy.4c02ca82d7b9fa3c:core.Destroy.Core"(ptr %self) #0 !dbg !144 { // CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc8_3.1.array.index = getelementptr inbounds [3 x {}], ptr %self, i32 0, i64 2, !dbg !146 +// CHECK:STDOUT: call void @"_CSelfDestruct.8b0bf151036f045a:core.Destroy.Core"(ptr %.loc8_3.1.array.index), !dbg !146 +// CHECK:STDOUT: %.loc8_3.2.array.index = getelementptr inbounds [3 x {}], ptr %self, i32 0, i64 1, !dbg !146 +// CHECK:STDOUT: call void @"_CSelfDestruct.8b0bf151036f045a:core.Destroy.Core"(ptr %.loc8_3.2.array.index), !dbg !146 +// CHECK:STDOUT: %.loc8_3.3.array.index = getelementptr inbounds [3 x {}], ptr %self, i32 0, i64 0, !dbg !146 +// CHECK:STDOUT: call void @"_CSelfDestruct.8b0bf151036f045a:core.Destroy.Core"(ptr %.loc8_3.3.array.index), !dbg !146 // CHECK:STDOUT: ret void, !dbg !146 // CHECK:STDOUT: } // CHECK:STDOUT: