summaryrefslogtreecommitdiffstats
path: root/tests/mir-opt
diff options
context:
space:
mode:
Diffstat (limited to 'tests/mir-opt')
-rw-r--r--tests/mir-opt/address_of.address_of_reborrow.SimplifyCfg-initial.after.mir482
-rw-r--r--tests/mir-opt/address_of.borrow_and_cast.SimplifyCfg-initial.after.mir68
-rw-r--r--tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.mir64
-rw-r--r--tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir61
-rw-r--r--tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir61
-rw-r--r--tests/mir-opt/array_index_is_temporary.rs2
-rw-r--r--tests/mir-opt/asm_unwind_panic_abort.main.AbortUnwindingCalls.after.mir16
-rw-r--r--tests/mir-opt/basic_assignment.main.ElaborateDrops.diff90
-rw-r--r--tests/mir-opt/basic_assignment.main.SimplifyCfg-initial.after.mir86
-rw-r--r--tests/mir-opt/bool_compare.opt1.InstSimplify.diff34
-rw-r--r--tests/mir-opt/bool_compare.opt2.InstSimplify.diff34
-rw-r--r--tests/mir-opt/bool_compare.opt3.InstSimplify.diff34
-rw-r--r--tests/mir-opt/bool_compare.opt4.InstSimplify.diff34
-rw-r--r--tests/mir-opt/box_expr.main.ElaborateDrops.before.mir80
-rw-r--r--tests/mir-opt/box_expr.main.ElaborateDrops.before.panic-abort.mir71
-rw-r--r--tests/mir-opt/box_expr.main.ElaborateDrops.before.panic-unwind.mir71
-rw-r--r--tests/mir-opt/box_expr.rs2
-rw-r--r--tests/mir-opt/building/async_await.a-{closure#0}.generator_resume.0.mir28
-rw-r--r--tests/mir-opt/building/async_await.b-{closure#0}.generator_resume.0.mir388
-rw-r--r--tests/mir-opt/building/custom/aggregate_exprs.adt.built.after.mir18
-rw-r--r--tests/mir-opt/building/custom/aggregate_exprs.array.built.after.mir16
-rw-r--r--tests/mir-opt/building/custom/aggregate_exprs.tuple.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/arbitrary_let.arbitrary_let.built.after.mir18
-rw-r--r--tests/mir-opt/building/custom/arrays.arrays.built.after.mir14
-rw-r--r--tests/mir-opt/building/custom/as_cast.float_to_int.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/as_cast.int_to_int.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/as_cast.int_to_ptr.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/composite_return.tuple.built.after.mir8
-rw-r--r--tests/mir-opt/building/custom/consts.consts.built.after.mir27
-rw-r--r--tests/mir-opt/building/custom/consts.statics.built.after.mir18
-rw-r--r--tests/mir-opt/building/custom/enums.set_discr.built.after.mir8
-rw-r--r--tests/mir-opt/building/custom/enums.set_discr_repr.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/enums.switch_bool.built.after.mir12
-rw-r--r--tests/mir-opt/building/custom/enums.switch_option.built.after.mir16
-rw-r--r--tests/mir-opt/building/custom/enums.switch_option_repr.built.after.mir16
-rw-r--r--tests/mir-opt/building/custom/operators.f.built.after.mir46
-rw-r--r--tests/mir-opt/building/custom/projections.copy_for_deref.built.after.mir10
-rw-r--r--tests/mir-opt/building/custom/projections.set.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/projections.simple_index.built.after.mir12
-rw-r--r--tests/mir-opt/building/custom/projections.tuples.built.after.mir8
-rw-r--r--tests/mir-opt/building/custom/projections.unions.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/projections.unwrap.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/projections.unwrap_deref.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/references.immut_ref.built.after.mir12
-rw-r--r--tests/mir-opt/building/custom/references.mut_ref.built.after.mir12
-rw-r--r--tests/mir-opt/building/custom/references.raw_pointer.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/references.raw_pointer_offset.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/simple_assign.simple.built.after.mir20
-rw-r--r--tests/mir-opt/building/custom/simple_assign.simple_ref.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/terminators.assert_nonzero.built.after.mir8
-rw-r--r--tests/mir-opt/building/custom/terminators.direct_call.built.after.mir9
-rw-r--r--tests/mir-opt/building/custom/terminators.drop_first.built.after.mir8
-rw-r--r--tests/mir-opt/building/custom/terminators.drop_second.built.after.mir6
-rw-r--r--tests/mir-opt/building/custom/terminators.indirect_call.built.after.mir6
-rw-r--r--tests/mir-opt/building/enum_cast.bar.built.after.mir30
-rw-r--r--tests/mir-opt/building/enum_cast.boo.built.after.mir30
-rw-r--r--tests/mir-opt/building/enum_cast.droppy.built.after.mir82
-rw-r--r--tests/mir-opt/building/enum_cast.far.built.after.mir30
-rw-r--r--tests/mir-opt/building/enum_cast.foo.built.after.mir20
-rw-r--r--tests/mir-opt/building/enum_cast.offsetty.built.after.mir38
-rw-r--r--tests/mir-opt/building/enum_cast.signy.built.after.mir38
-rw-r--r--tests/mir-opt/building/enum_cast.unsigny.built.after.mir20
-rw-r--r--tests/mir-opt/building/issue_101867.main.built.after.mir72
-rw-r--r--tests/mir-opt/building/issue_110508.rs13
-rw-r--r--tests/mir-opt/building/issue_110508.{impl#0}-BAR.built.after.mir14
-rw-r--r--tests/mir-opt/building/issue_110508.{impl#0}-SELF_BAR.built.after.mir14
-rw-r--r--tests/mir-opt/building/issue_49232.main.built.after.mir77
-rw-r--r--tests/mir-opt/building/match_false_edges.full_tested_match.built.after.mir125
-rw-r--r--tests/mir-opt/building/match_false_edges.full_tested_match2.built.after.mir125
-rw-r--r--tests/mir-opt/building/match_false_edges.main.built.after.mir190
-rw-r--r--tests/mir-opt/building/receiver_ptr_mutability.main.built.after.mir125
-rw-r--r--tests/mir-opt/building/shifts.shift_signed.built.after.mir238
-rw-r--r--tests/mir-opt/building/shifts.shift_unsigned.built.after.mir214
-rw-r--r--tests/mir-opt/building/simple_match.match_bool.built.after.mir20
-rw-r--r--tests/mir-opt/building/storage_live_dead_in_statics.XXX.built.after.mir389
-rw-r--r--tests/mir-opt/building/uniform_array_move_out.move_out_by_subslice.built.after.mir116
-rw-r--r--tests/mir-opt/building/uniform_array_move_out.move_out_from_end.built.after.mir116
-rw-r--r--tests/mir-opt/byte_slice.main.SimplifyCfg-elaborate-drops.after.mir29
-rw-r--r--tests/mir-opt/casts.redundant.InstSimplify.diff30
-rw-r--r--tests/mir-opt/casts.redundant.PreCodegen.after.mir12
-rw-r--r--tests/mir-opt/casts.roundtrip.PreCodegen.after.mir16
-rw-r--r--tests/mir-opt/combine_array_len.norm2.InstSimplify.diff77
-rw-r--r--tests/mir-opt/combine_array_len.norm2.InstSimplify.panic-abort.diff77
-rw-r--r--tests/mir-opt/combine_array_len.norm2.InstSimplify.panic-unwind.diff77
-rw-r--r--tests/mir-opt/combine_array_len.rs2
-rw-r--r--tests/mir-opt/combine_clone_of_primitives.rs2
-rw-r--r--tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.diff82
-rw-r--r--tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.panic-abort.diff65
-rw-r--r--tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.panic-unwind.diff73
-rw-r--r--tests/mir-opt/combine_transmutes.adt_transmutes.InstSimplify.diff125
-rw-r--r--tests/mir-opt/combine_transmutes.identity_transmutes.InstSimplify.diff44
-rw-r--r--tests/mir-opt/combine_transmutes.integer_transmutes.InstSimplify.diff30
-rw-r--r--tests/mir-opt/const_allocation.main.ConstProp.after.32bit.mir25
-rw-r--r--tests/mir-opt/const_allocation.main.ConstProp.after.64bit.mir25
-rw-r--r--tests/mir-opt/const_allocation2.main.ConstProp.after.32bit.mir25
-rw-r--r--tests/mir-opt/const_allocation2.main.ConstProp.after.64bit.mir25
-rw-r--r--tests/mir-opt/const_allocation3.main.ConstProp.after.32bit.mir25
-rw-r--r--tests/mir-opt/const_allocation3.main.ConstProp.after.64bit.mir25
-rw-r--r--tests/mir-opt/const_debuginfo.main.ConstDebugInfo.diff131
-rw-r--r--tests/mir-opt/const_goto.issue_77355_opt.ConstGoto.diff56
-rw-r--r--tests/mir-opt/const_goto_const_eval_fail.f.ConstGoto.diff44
-rw-r--r--tests/mir-opt/const_goto_const_eval_fail.rs2
-rw-r--r--tests/mir-opt/const_goto_storage.match_nested_if.ConstGoto.diff129
-rw-r--r--tests/mir-opt/const_promotion_extern_static.BAR-promoted[0].SimplifyCfg-elaborate-drops.after.mir21
-rw-r--r--tests/mir-opt/const_promotion_extern_static.BAR.PromoteTemps.diff62
-rw-r--r--tests/mir-opt/const_promotion_extern_static.BOP.built.after.mir20
-rw-r--r--tests/mir-opt/const_promotion_extern_static.FOO-promoted[0].SimplifyCfg-elaborate-drops.after.mir21
-rw-r--r--tests/mir-opt/const_promotion_extern_static.FOO.PromoteTemps.diff62
-rw-r--r--tests/mir-opt/const_prop/address_of_pair.fn0.ConstProp.diff58
-rw-r--r--tests/mir-opt/const_prop/aggregate.foo.ConstProp.diff55
-rw-r--r--tests/mir-opt/const_prop/aggregate.foo.ConstProp.panic-abort.diff55
-rw-r--r--tests/mir-opt/const_prop/aggregate.foo.ConstProp.panic-unwind.diff55
-rw-r--r--tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.mir49
-rw-r--r--tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.panic-abort.mir49
-rw-r--r--tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.panic-unwind.mir49
-rw-r--r--tests/mir-opt/const_prop/aggregate.main.ConstProp.diff44
-rw-r--r--tests/mir-opt/const_prop/aggregate.main.ConstProp.panic-abort.diff41
-rw-r--r--tests/mir-opt/const_prop/aggregate.main.ConstProp.panic-unwind.diff41
-rw-r--r--tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.mir39
-rw-r--r--tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.panic-abort.mir36
-rw-r--r--tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.panic-unwind.mir36
-rw-r--r--tests/mir-opt/const_prop/aggregate.rs2
-rw-r--r--tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.diff39
-rw-r--r--tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.panic-abort.diff39
-rw-r--r--tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.panic-unwind.diff39
-rw-r--r--tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.diff39
-rw-r--r--tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.panic-abort.diff39
-rw-r--r--tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.panic-unwind.diff39
-rw-r--r--tests/mir-opt/const_prop/array_index.rs2
-rw-r--r--tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.diff53
-rw-r--r--tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.panic-abort.diff53
-rw-r--r--tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.panic-unwind.diff53
-rw-r--r--tests/mir-opt/const_prop/bad_op_div_by_zero.rs2
-rw-r--r--tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.diff53
-rw-r--r--tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.panic-abort.diff53
-rw-r--r--tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.panic-unwind.diff53
-rw-r--r--tests/mir-opt/const_prop/bad_op_mod_by_zero.rs2
-rw-r--r--tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.diff57
-rw-r--r--tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.panic-abort.diff54
-rw-r--r--tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.panic-unwind.diff54
-rw-r--r--tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.diff57
-rw-r--r--tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.panic-abort.diff54
-rw-r--r--tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.panic-unwind.diff54
-rw-r--r--tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.rs2
-rw-r--r--tests/mir-opt/const_prop/boolean_identities.test.ConstProp.diff36
-rw-r--r--tests/mir-opt/const_prop/boxes.main.ConstProp.diff60
-rw-r--r--tests/mir-opt/const_prop/boxes.main.ConstProp.panic-abort.diff53
-rw-r--r--tests/mir-opt/const_prop/boxes.main.ConstProp.panic-unwind.diff57
-rw-r--r--tests/mir-opt/const_prop/boxes.rs2
-rw-r--r--tests/mir-opt/const_prop/cast.main.ConstProp.diff30
-rw-r--r--tests/mir-opt/const_prop/checked_add.main.ConstProp.diff28
-rw-r--r--tests/mir-opt/const_prop/checked_add.main.ConstProp.panic-abort.diff28
-rw-r--r--tests/mir-opt/const_prop/checked_add.main.ConstProp.panic-unwind.diff28
-rw-r--r--tests/mir-opt/const_prop/checked_add.rs2
-rw-r--r--tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.diff44
-rw-r--r--tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.panic-abort.diff38
-rw-r--r--tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.panic-unwind.diff38
-rw-r--r--tests/mir-opt/const_prop/const_prop_fails_gracefully.rs2
-rw-r--r--tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.diff31
-rw-r--r--tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.panic-abort.diff25
-rw-r--r--tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.panic-unwind.diff25
-rw-r--r--tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.mir9
-rw-r--r--tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.panic-abort.mir9
-rw-r--r--tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.panic-unwind.mir9
-rw-r--r--tests/mir-opt/const_prop/control_flow_simplification.rs2
-rw-r--r--tests/mir-opt/const_prop/discriminant.main.ConstProp.32bit.diff57
-rw-r--r--tests/mir-opt/const_prop/discriminant.main.ConstProp.64bit.diff57
-rw-r--r--tests/mir-opt/const_prop/indirect.main.ConstProp.diff33
-rw-r--r--tests/mir-opt/const_prop/indirect.main.ConstProp.panic-abort.diff33
-rw-r--r--tests/mir-opt/const_prop/indirect.main.ConstProp.panic-unwind.diff33
-rw-r--r--tests/mir-opt/const_prop/indirect.rs2
-rw-r--r--tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.diff39
-rw-r--r--tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.panic-abort.diff39
-rw-r--r--tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.panic-unwind.diff39
-rw-r--r--tests/mir-opt/const_prop/inherit_overflow.rs2
-rw-r--r--tests/mir-opt/const_prop/invalid_constant.main.ConstProp.diff91
-rw-r--r--tests/mir-opt/const_prop/invalid_constant.main.RemoveZsts.diff106
-rw-r--r--tests/mir-opt/const_prop/issue_66971.main.ConstProp.diff23
-rw-r--r--tests/mir-opt/const_prop/issue_66971.main.ConstProp.panic-abort.diff20
-rw-r--r--tests/mir-opt/const_prop/issue_66971.main.ConstProp.panic-unwind.diff20
-rw-r--r--tests/mir-opt/const_prop/issue_66971.rs2
-rw-r--r--tests/mir-opt/const_prop/issue_67019.main.ConstProp.diff28
-rw-r--r--tests/mir-opt/const_prop/issue_67019.main.ConstProp.panic-abort.diff25
-rw-r--r--tests/mir-opt/const_prop/issue_67019.main.ConstProp.panic-unwind.diff25
-rw-r--r--tests/mir-opt/const_prop/issue_67019.rs2
-rw-r--r--tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.diff39
-rw-r--r--tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.panic-abort.diff39
-rw-r--r--tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.panic-unwind.diff39
-rw-r--r--tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.diff39
-rw-r--r--tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.panic-abort.diff39
-rw-r--r--tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.panic-unwind.diff39
-rw-r--r--tests/mir-opt/const_prop/large_array_index.rs2
-rw-r--r--tests/mir-opt/const_prop/mult_by_zero.test.ConstProp.diff18
-rw-r--r--tests/mir-opt/const_prop/mutable_variable.main.ConstProp.diff30
-rw-r--r--tests/mir-opt/const_prop/mutable_variable_aggregate.main.ConstProp.diff32
-rw-r--r--tests/mir-opt/const_prop/mutable_variable_aggregate_mut_ref.main.ConstProp.diff38
-rw-r--r--tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.diff35
-rw-r--r--tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.panic-abort.diff32
-rw-r--r--tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.panic-unwind.diff32
-rw-r--r--tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.rs2
-rw-r--r--tests/mir-opt/const_prop/mutable_variable_no_prop.main.ConstProp.diff55
-rw-r--r--tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.diff53
-rw-r--r--tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.panic-abort.diff50
-rw-r--r--tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.panic-unwind.diff50
-rw-r--r--tests/mir-opt/const_prop/mutable_variable_unprop_assign.rs2
-rw-r--r--tests/mir-opt/const_prop/offset_of.concrete.ConstProp.diff44
-rw-r--r--tests/mir-opt/const_prop/offset_of.concrete.ConstProp.panic-abort.diff72
-rw-r--r--tests/mir-opt/const_prop/offset_of.concrete.ConstProp.panic-unwind.diff72
-rw-r--r--tests/mir-opt/const_prop/offset_of.generic.ConstProp.diff40
-rw-r--r--tests/mir-opt/const_prop/offset_of.generic.ConstProp.panic-abort.diff68
-rw-r--r--tests/mir-opt/const_prop/offset_of.generic.ConstProp.panic-unwind.diff68
-rw-r--r--tests/mir-opt/const_prop/offset_of.rs1
-rw-r--r--tests/mir-opt/const_prop/read_immutable_static.main.ConstProp.diff60
-rw-r--r--tests/mir-opt/const_prop/ref_deref.main.ConstProp.diff31
-rw-r--r--tests/mir-opt/const_prop/ref_deref_project.main.ConstProp.diff31
-rw-r--r--tests/mir-opt/const_prop/reify_fn_ptr.main.ConstProp.diff33
-rw-r--r--tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.diff44
-rw-r--r--tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.panic-abort.diff44
-rw-r--r--tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.panic-unwind.diff44
-rw-r--r--tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.diff44
-rw-r--r--tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.panic-abort.diff44
-rw-r--r--tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.panic-unwind.diff44
-rw-r--r--tests/mir-opt/const_prop/repeat.rs2
-rw-r--r--tests/mir-opt/const_prop/return_place.add.ConstProp.diff21
-rw-r--r--tests/mir-opt/const_prop/return_place.add.ConstProp.panic-abort.diff21
-rw-r--r--tests/mir-opt/const_prop/return_place.add.ConstProp.panic-unwind.diff21
-rw-r--r--tests/mir-opt/const_prop/return_place.add.PreCodegen.before.mir16
-rw-r--r--tests/mir-opt/const_prop/return_place.add.PreCodegen.before.panic-abort.mir16
-rw-r--r--tests/mir-opt/const_prop/return_place.add.PreCodegen.before.panic-unwind.mir16
-rw-r--r--tests/mir-opt/const_prop/return_place.rs2
-rw-r--r--tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.diff34
-rw-r--r--tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.panic-abort.diff31
-rw-r--r--tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.panic-unwind.diff31
-rw-r--r--tests/mir-opt/const_prop/scalar_literal_propagation.rs2
-rw-r--r--tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.diff50
-rw-r--r--tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.panic-abort.diff47
-rw-r--r--tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.panic-unwind.diff47
-rw-r--r--tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.diff50
-rw-r--r--tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.panic-abort.diff47
-rw-r--r--tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.panic-unwind.diff47
-rw-r--r--tests/mir-opt/const_prop/slice_len.rs2
-rw-r--r--tests/mir-opt/const_prop/switch_int.main.ConstProp.diff34
-rw-r--r--tests/mir-opt/const_prop/switch_int.main.ConstProp.panic-abort.diff28
-rw-r--r--tests/mir-opt/const_prop/switch_int.main.ConstProp.panic-unwind.diff28
-rw-r--r--tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.diff34
-rw-r--r--tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.panic-abort.diff28
-rw-r--r--tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.panic-unwind.diff28
-rw-r--r--tests/mir-opt/const_prop/switch_int.rs2
-rw-r--r--tests/mir-opt/const_prop/transmute.from_char.ConstProp.32bit.diff8
-rw-r--r--tests/mir-opt/const_prop/transmute.from_char.ConstProp.64bit.diff8
-rw-r--r--tests/mir-opt/const_prop/transmute.invalid_bool.ConstProp.32bit.diff8
-rw-r--r--tests/mir-opt/const_prop/transmute.invalid_bool.ConstProp.64bit.diff8
-rw-r--r--tests/mir-opt/const_prop/transmute.invalid_char.ConstProp.32bit.diff8
-rw-r--r--tests/mir-opt/const_prop/transmute.invalid_char.ConstProp.64bit.diff8
-rw-r--r--tests/mir-opt/const_prop/transmute.less_as_i8.ConstProp.32bit.diff21
-rw-r--r--tests/mir-opt/const_prop/transmute.less_as_i8.ConstProp.64bit.diff21
-rw-r--r--tests/mir-opt/const_prop/transmute.undef_union_as_integer.ConstProp.32bit.diff22
-rw-r--r--tests/mir-opt/const_prop/transmute.undef_union_as_integer.ConstProp.64bit.diff22
-rw-r--r--tests/mir-opt/const_prop/transmute.unreachable_box.ConstProp.32bit.diff17
-rw-r--r--tests/mir-opt/const_prop/transmute.unreachable_box.ConstProp.64bit.diff17
-rw-r--r--tests/mir-opt/const_prop/transmute.unreachable_direct.ConstProp.32bit.diff18
-rw-r--r--tests/mir-opt/const_prop/transmute.unreachable_direct.ConstProp.64bit.diff18
-rw-r--r--tests/mir-opt/const_prop/transmute.unreachable_mut.ConstProp.32bit.diff25
-rw-r--r--tests/mir-opt/const_prop/transmute.unreachable_mut.ConstProp.64bit.diff25
-rw-r--r--tests/mir-opt/const_prop/transmute.unreachable_ref.ConstProp.32bit.diff17
-rw-r--r--tests/mir-opt/const_prop/transmute.unreachable_ref.ConstProp.64bit.diff17
-rw-r--r--tests/mir-opt/const_prop/transmute.valid_char.ConstProp.32bit.diff8
-rw-r--r--tests/mir-opt/const_prop/transmute.valid_char.ConstProp.64bit.diff8
-rw-r--r--tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.diff35
-rw-r--r--tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.panic-abort.diff32
-rw-r--r--tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.panic-unwind.diff32
-rw-r--r--tests/mir-opt/const_prop/tuple_literal_propagation.rs2
-rw-r--r--tests/mir-opt/const_prop/while_let_loops.change_loop_body.ConstProp.diff58
-rw-r--r--tests/mir-opt/const_prop_miscompile.bar.ConstProp.diff52
-rw-r--r--tests/mir-opt/const_prop_miscompile.foo.ConstProp.diff44
-rw-r--r--tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.diff33
-rw-r--r--tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.panic-abort.diff27
-rw-r--r--tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.panic-unwind.diff27
-rw-r--r--tests/mir-opt/copy-prop/borrowed_local.rs2
-rw-r--r--tests/mir-opt/copy-prop/branch.foo.CopyProp.diff65
-rw-r--r--tests/mir-opt/copy-prop/branch.foo.CopyProp.panic-abort.diff56
-rw-r--r--tests/mir-opt/copy-prop/branch.foo.CopyProp.panic-unwind.diff56
-rw-r--r--tests/mir-opt/copy-prop/branch.rs2
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.diff23
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.panic-abort.diff23
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.panic-unwind.diff23
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.diff28
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.panic-abort.diff25
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.panic-unwind.diff25
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.diff18
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.panic-abort.diff18
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.panic-unwind.diff18
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.diff28
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.panic-abort.diff25
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.panic-unwind.diff25
-rw-r--r--tests/mir-opt/copy-prop/copy_propagation_arg.rs2
-rw-r--r--tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.diff31
-rw-r--r--tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.panic-abort.diff25
-rw-r--r--tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.panic-unwind.diff25
-rw-r--r--tests/mir-opt/copy-prop/custom_move_arg.rs2
-rw-r--r--tests/mir-opt/copy-prop/cycle.main.CopyProp.diff60
-rw-r--r--tests/mir-opt/copy-prop/cycle.main.CopyProp.panic-abort.diff54
-rw-r--r--tests/mir-opt/copy-prop/cycle.main.CopyProp.panic-unwind.diff54
-rw-r--r--tests/mir-opt/copy-prop/cycle.rs2
-rw-r--r--tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.mir29
-rw-r--r--tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.panic-abort.mir26
-rw-r--r--tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.panic-unwind.mir26
-rw-r--r--tests/mir-opt/copy-prop/dead_stores_79191.rs2
-rw-r--r--tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.mir29
-rw-r--r--tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.panic-abort.mir26
-rw-r--r--tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.panic-unwind.mir26
-rw-r--r--tests/mir-opt/copy-prop/dead_stores_better.rs2
-rw-r--r--tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff138
-rw-r--r--tests/mir-opt/copy-prop/issue_107511.main.CopyProp.panic-abort.diff129
-rw-r--r--tests/mir-opt/copy-prop/issue_107511.main.CopyProp.panic-unwind.diff129
-rw-r--r--tests/mir-opt/copy-prop/issue_107511.rs2
-rw-r--r--tests/mir-opt/copy-prop/move_arg.f.CopyProp.diff40
-rw-r--r--tests/mir-opt/copy-prop/move_arg.f.CopyProp.panic-abort.diff37
-rw-r--r--tests/mir-opt/copy-prop/move_arg.f.CopyProp.panic-unwind.diff37
-rw-r--r--tests/mir-opt/copy-prop/move_arg.rs2
-rw-r--r--tests/mir-opt/copy-prop/move_projection.f.CopyProp.diff31
-rw-r--r--tests/mir-opt/copy-prop/move_projection.f.CopyProp.panic-abort.diff25
-rw-r--r--tests/mir-opt/copy-prop/move_projection.f.CopyProp.panic-unwind.diff25
-rw-r--r--tests/mir-opt/copy-prop/move_projection.rs2
-rw-r--r--tests/mir-opt/copy-prop/mutate_through_pointer.f.CopyProp.diff20
-rw-r--r--tests/mir-opt/copy-prop/non_dominate.f.CopyProp.diff22
-rw-r--r--tests/mir-opt/copy-prop/partial_init.main.CopyProp.diff8
-rw-r--r--tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.diff56
-rw-r--r--tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.panic-abort.diff53
-rw-r--r--tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.panic-unwind.diff53
-rw-r--r--tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.diff52
-rw-r--r--tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.panic-abort.diff49
-rw-r--r--tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.panic-unwind.diff49
-rw-r--r--tests/mir-opt/copy-prop/reborrow.remut.CopyProp.diff50
-rw-r--r--tests/mir-opt/copy-prop/reborrow.remut.CopyProp.panic-abort.diff47
-rw-r--r--tests/mir-opt/copy-prop/reborrow.remut.CopyProp.panic-unwind.diff47
-rw-r--r--tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.diff50
-rw-r--r--tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.panic-abort.diff47
-rw-r--r--tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.panic-unwind.diff47
-rw-r--r--tests/mir-opt/copy-prop/reborrow.rs2
-rw-r--r--tests/mir-opt/dataflow-const-prop/cast.main.DataflowConstProp.diff48
-rw-r--r--tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.diff80
-rw-r--r--tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.panic-abort.diff80
-rw-r--r--tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.panic-unwind.diff80
-rw-r--r--tests/mir-opt/dataflow-const-prop/checked.rs2
-rw-r--r--tests/mir-opt/dataflow-const-prop/enum.multiple.DataflowConstProp.diff88
-rw-r--r--tests/mir-opt/dataflow-const-prop/enum.mutate_discriminant.DataflowConstProp.diff22
-rw-r--r--tests/mir-opt/dataflow-const-prop/enum.simple.DataflowConstProp.diff68
-rw-r--r--tests/mir-opt/dataflow-const-prop/if.main.DataflowConstProp.diff150
-rw-r--r--tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.diff39
-rw-r--r--tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.panic-abort.diff39
-rw-r--r--tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.panic-unwind.diff39
-rw-r--r--tests/mir-opt/dataflow-const-prop/inherit_overflow.rs2
-rw-r--r--tests/mir-opt/dataflow-const-prop/issue_81605.f.DataflowConstProp.diff34
-rw-r--r--tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.diff55
-rw-r--r--tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.panic-abort.diff49
-rw-r--r--tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.panic-unwind.diff49
-rw-r--r--tests/mir-opt/dataflow-const-prop/ref_without_sb.rs2
-rw-r--r--tests/mir-opt/dataflow-const-prop/repr_transparent.main.DataflowConstProp.diff58
-rw-r--r--tests/mir-opt/dataflow-const-prop/self_assign.main.DataflowConstProp.diff66
-rw-r--r--tests/mir-opt/dataflow-const-prop/self_assign_add.main.DataflowConstProp.diff24
-rw-r--r--tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.diff54
-rw-r--r--tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.panic-abort.diff51
-rw-r--r--tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.panic-unwind.diff51
-rw-r--r--tests/mir-opt/dataflow-const-prop/sibling_ptr.rs2
-rw-r--r--tests/mir-opt/dataflow-const-prop/struct.main.DataflowConstProp.diff72
-rw-r--r--tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.diff40
-rw-r--r--tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.panic-abort.diff37
-rw-r--r--tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.panic-unwind.diff37
-rw-r--r--tests/mir-opt/dataflow-const-prop/terminator.rs2
-rw-r--r--tests/mir-opt/dataflow-const-prop/tuple.main.DataflowConstProp.diff112
-rw-r--r--tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.diff76
-rw-r--r--tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.panic-abort.diff73
-rw-r--r--tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.panic-unwind.diff73
-rw-r--r--tests/mir-opt/dead-store-elimination/cycle.rs2
-rw-r--r--tests/mir-opt/dead-store-elimination/place_mention.main.DeadStoreElimination.diff22
-rw-r--r--tests/mir-opt/dead-store-elimination/provenance_soundness.pointer_to_int.DeadStoreElimination.diff44
-rw-r--r--tests/mir-opt/dead-store-elimination/provenance_soundness.retags.DeadStoreElimination.diff10
-rw-r--r--tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.diff100
-rw-r--r--tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.panic-abort.diff96
-rw-r--r--tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.panic-unwind.diff96
-rw-r--r--tests/mir-opt/deduplicate_blocks.rs2
-rw-r--r--tests/mir-opt/deref-patterns/string.foo.PreCodegen.after.mir67
-rw-r--r--tests/mir-opt/derefer_complex_case.main.Derefer.diff105
-rw-r--r--tests/mir-opt/derefer_complex_case.main.Derefer.panic-abort.diff97
-rw-r--r--tests/mir-opt/derefer_complex_case.main.Derefer.panic-unwind.diff93
-rw-r--r--tests/mir-opt/derefer_complex_case.rs2
-rw-r--r--tests/mir-opt/derefer_inline_test.main.Derefer.diff45
-rw-r--r--tests/mir-opt/derefer_inline_test.main.Derefer.panic-abort.diff38
-rw-r--r--tests/mir-opt/derefer_inline_test.main.Derefer.panic-unwind.diff38
-rw-r--r--tests/mir-opt/derefer_inline_test.rs2
-rw-r--r--tests/mir-opt/derefer_terminator_test.main.Derefer.diff92
-rw-r--r--tests/mir-opt/derefer_terminator_test.main.Derefer.panic-abort.diff90
-rw-r--r--tests/mir-opt/derefer_terminator_test.main.Derefer.panic-unwind.diff86
-rw-r--r--tests/mir-opt/derefer_terminator_test.rs2
-rw-r--r--tests/mir-opt/derefer_test.main.Derefer.diff66
-rw-r--r--tests/mir-opt/derefer_test_multiple.main.Derefer.diff118
-rw-r--r--tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.diff75
-rw-r--r--tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.panic-abort.diff66
-rw-r--r--tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.panic-unwind.diff66
-rw-r--r--tests/mir-opt/dest-prop/branch.rs2
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.diff26
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.panic-abort.diff26
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.panic-unwind.diff26
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.diff32
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.panic-abort.diff29
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.panic-unwind.diff29
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.diff22
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.panic-abort.diff22
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.panic-unwind.diff22
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.diff32
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.panic-abort.diff29
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.panic-unwind.diff29
-rw-r--r--tests/mir-opt/dest-prop/copy_propagation_arg.rs2
-rw-r--r--tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.diff77
-rw-r--r--tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.panic-abort.diff71
-rw-r--r--tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.panic-unwind.diff71
-rw-r--r--tests/mir-opt/dest-prop/cycle.rs2
-rw-r--r--tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.mir34
-rw-r--r--tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.panic-abort.mir31
-rw-r--r--tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.panic-unwind.mir31
-rw-r--r--tests/mir-opt/dest-prop/dead_stores_79191.rs2
-rw-r--r--tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.mir33
-rw-r--r--tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.panic-abort.mir30
-rw-r--r--tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.panic-unwind.mir30
-rw-r--r--tests/mir-opt/dest-prop/dead_stores_better.rs2
-rw-r--r--tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.diff43
-rw-r--r--tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.panic-abort.diff43
-rw-r--r--tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.panic-unwind.diff43
-rw-r--r--tests/mir-opt/dest-prop/simple.rs2
-rw-r--r--tests/mir-opt/dest-prop/union.main.DestinationPropagation.diff35
-rw-r--r--tests/mir-opt/dest-prop/union.main.DestinationPropagation.panic-abort.diff32
-rw-r--r--tests/mir-opt/dest-prop/union.main.DestinationPropagation.panic-unwind.diff32
-rw-r--r--tests/mir-opt/dest-prop/union.rs2
-rw-r--r--tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.diff86
-rw-r--r--tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.panic-abort.diff80
-rw-r--r--tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.panic-unwind.diff80
-rw-r--r--tests/mir-opt/dest-prop/unreachable.rs2
-rw-r--r--tests/mir-opt/dont_yeet_assert.generic.InstSimplify.diff18
-rw-r--r--tests/mir-opt/early_otherwise_branch.opt1.EarlyOtherwiseBranch.diff98
-rw-r--r--tests/mir-opt/early_otherwise_branch.opt2.EarlyOtherwiseBranch.diff110
-rw-r--r--tests/mir-opt/early_otherwise_branch.opt3.EarlyOtherwiseBranch.diff98
-rw-r--r--tests/mir-opt/early_otherwise_branch_3_element_tuple.opt1.EarlyOtherwiseBranch.diff132
-rw-r--r--tests/mir-opt/early_otherwise_branch_68867.try_sum.EarlyOtherwiseBranch.diff334
-rw-r--r--tests/mir-opt/early_otherwise_branch_noopt.noopt1.EarlyOtherwiseBranch.diff108
-rw-r--r--tests/mir-opt/early_otherwise_branch_soundness.no_deref_ptr.EarlyOtherwiseBranch.diff42
-rw-r--r--tests/mir-opt/early_otherwise_branch_soundness.no_downcast.EarlyOtherwiseBranch.diff30
-rw-r--r--tests/mir-opt/enum_opt.cand.EnumSizeOpt.32bit.diff114
-rw-r--r--tests/mir-opt/enum_opt.cand.EnumSizeOpt.64bit.diff114
-rw-r--r--tests/mir-opt/enum_opt.invalid.EnumSizeOpt.32bit.diff34
-rw-r--r--tests/mir-opt/enum_opt.invalid.EnumSizeOpt.64bit.diff34
-rw-r--r--tests/mir-opt/enum_opt.trunc.EnumSizeOpt.32bit.diff52
-rw-r--r--tests/mir-opt/enum_opt.trunc.EnumSizeOpt.64bit.diff52
-rw-r--r--tests/mir-opt/enum_opt.unin.EnumSizeOpt.32bit.diff114
-rw-r--r--tests/mir-opt/enum_opt.unin.EnumSizeOpt.64bit.diff114
-rw-r--r--tests/mir-opt/equal_true.opt.InstSimplify.diff34
-rw-r--r--tests/mir-opt/exponential_or.match_tuple.SimplifyCfg-initial.after.mir88
-rw-r--r--tests/mir-opt/fn_ptr_shim.core.ops-function-Fn-call.AddMovesForPackedDrops.before.mir8
-rw-r--r--tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.diff129
-rw-r--r--tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.panic-abort.diff111
-rw-r--r--tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.panic-unwind.diff111
-rw-r--r--tests/mir-opt/funky_arms.rs2
-rw-r--r--tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.mir91
-rw-r--r--tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.panic-abort.mir82
-rw-r--r--tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.panic-unwind.mir91
-rw-r--r--tests/mir-opt/generator_drop_cleanup.rs2
-rw-r--r--tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.mir124
-rw-r--r--tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.panic-abort.mir83
-rw-r--r--tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.panic-unwind.mir118
-rw-r--r--tests/mir-opt/generator_storage_dead_unwind.rs2
-rw-r--r--tests/mir-opt/generator_tiny.main-{closure#0}.generator_resume.0.mir79
-rw-r--r--tests/mir-opt/if_condition_int.dont_opt_bool.SimplifyComparisonIntegral.diff24
-rw-r--r--tests/mir-opt/if_condition_int.dont_opt_floats.SimplifyComparisonIntegral.diff32
-rw-r--r--tests/mir-opt/if_condition_int.dont_remove_comparison.SimplifyComparisonIntegral.diff76
-rw-r--r--tests/mir-opt/if_condition_int.opt_char.SimplifyComparisonIntegral.diff42
-rw-r--r--tests/mir-opt/if_condition_int.opt_i8.SimplifyComparisonIntegral.diff42
-rw-r--r--tests/mir-opt/if_condition_int.opt_multiple_ifs.SimplifyComparisonIntegral.diff76
-rw-r--r--tests/mir-opt/if_condition_int.opt_negative.SimplifyComparisonIntegral.diff42
-rw-r--r--tests/mir-opt/if_condition_int.opt_u32.SimplifyComparisonIntegral.diff42
-rw-r--r--tests/mir-opt/inline/asm_unwind.main.Inline.diff45
-rw-r--r--tests/mir-opt/inline/asm_unwind.main.Inline.panic-abort.diff34
-rw-r--r--tests/mir-opt/inline/asm_unwind.main.Inline.panic-unwind.diff42
-rw-r--r--tests/mir-opt/inline/asm_unwind.rs5
-rw-r--r--tests/mir-opt/inline/caller_with_trivial_bound.foo.Inline.diff33
-rw-r--r--tests/mir-opt/inline/caller_with_trivial_bound.foo.Inline.panic-unwind.diff30
-rw-r--r--tests/mir-opt/inline/caller_with_trivial_bound.rs2
-rw-r--r--tests/mir-opt/inline/cycle.f.Inline.diff43
-rw-r--r--tests/mir-opt/inline/cycle.f.Inline.panic-abort.diff32
-rw-r--r--tests/mir-opt/inline/cycle.f.Inline.panic-unwind.diff40
-rw-r--r--tests/mir-opt/inline/cycle.g.Inline.diff58
-rw-r--r--tests/mir-opt/inline/cycle.g.Inline.panic-abort.diff44
-rw-r--r--tests/mir-opt/inline/cycle.g.Inline.panic-unwind.diff52
-rw-r--r--tests/mir-opt/inline/cycle.main.Inline.diff58
-rw-r--r--tests/mir-opt/inline/cycle.main.Inline.panic-abort.diff54
-rw-r--r--tests/mir-opt/inline/cycle.main.Inline.panic-unwind.diff62
-rw-r--r--tests/mir-opt/inline/cycle.rs3
-rw-r--r--tests/mir-opt/inline/dyn_trait.get_query.Inline.diff54
-rw-r--r--tests/mir-opt/inline/dyn_trait.get_query.Inline.panic-abort.diff45
-rw-r--r--tests/mir-opt/inline/dyn_trait.get_query.Inline.panic-unwind.diff45
-rw-r--r--tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.diff23
-rw-r--r--tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.panic-abort.diff20
-rw-r--r--tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.panic-unwind.diff20
-rw-r--r--tests/mir-opt/inline/dyn_trait.rs2
-rw-r--r--tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.diff33
-rw-r--r--tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.panic-abort.diff28
-rw-r--r--tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.panic-unwind.diff28
-rw-r--r--tests/mir-opt/inline/exponential_runtime.main.Inline.diff75
-rw-r--r--tests/mir-opt/inline/exponential_runtime.main.Inline.panic-abort.diff134
-rw-r--r--tests/mir-opt/inline/exponential_runtime.main.Inline.panic-unwind.diff134
-rw-r--r--tests/mir-opt/inline/exponential_runtime.rs2
-rw-r--r--tests/mir-opt/inline/inline_any_operand.bar.Inline.after.mir49
-rw-r--r--tests/mir-opt/inline/inline_closure.foo.Inline.after.mir82
-rw-r--r--tests/mir-opt/inline/inline_closure_borrows_arg.foo.Inline.after.mir84
-rw-r--r--tests/mir-opt/inline/inline_closure_captures.foo.Inline.after.mir108
-rw-r--r--tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.diff24
-rw-r--r--tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.panic-abort.diff21
-rw-r--r--tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.panic-unwind.diff21
-rw-r--r--tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.diff24
-rw-r--r--tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.panic-abort.diff21
-rw-r--r--tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.panic-unwind.diff21
-rw-r--r--tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.diff25
-rw-r--r--tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.panic-abort.diff22
-rw-r--r--tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.panic-unwind.diff22
-rw-r--r--tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.diff22
-rw-r--r--tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.panic-abort.diff19
-rw-r--r--tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.panic-unwind.diff19
-rw-r--r--tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.diff22
-rw-r--r--tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.panic-abort.diff19
-rw-r--r--tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.panic-unwind.diff19
-rw-r--r--tests/mir-opt/inline/inline_compatibility.rs1
-rw-r--r--tests/mir-opt/inline/inline_cycle.one.Inline.diff30
-rw-r--r--tests/mir-opt/inline/inline_cycle.one.Inline.panic-abort.diff25
-rw-r--r--tests/mir-opt/inline/inline_cycle.one.Inline.panic-unwind.diff25
-rw-r--r--tests/mir-opt/inline/inline_cycle.rs2
-rw-r--r--tests/mir-opt/inline/inline_cycle.two.Inline.diff42
-rw-r--r--tests/mir-opt/inline/inline_cycle.two.Inline.panic-abort.diff46
-rw-r--r--tests/mir-opt/inline/inline_cycle.two.Inline.panic-unwind.diff46
-rw-r--r--tests/mir-opt/inline/inline_cycle_generic.main.Inline.diff29
-rw-r--r--tests/mir-opt/inline/inline_cycle_generic.main.Inline.panic-abort.diff26
-rw-r--r--tests/mir-opt/inline/inline_cycle_generic.main.Inline.panic-unwind.diff26
-rw-r--r--tests/mir-opt/inline/inline_cycle_generic.rs2
-rw-r--r--tests/mir-opt/inline/inline_diverging.f.Inline.diff24
-rw-r--r--tests/mir-opt/inline/inline_diverging.f.Inline.panic-abort.diff21
-rw-r--r--tests/mir-opt/inline/inline_diverging.f.Inline.panic-unwind.diff21
-rw-r--r--tests/mir-opt/inline/inline_diverging.g.Inline.diff49
-rw-r--r--tests/mir-opt/inline/inline_diverging.g.Inline.panic-abort.diff41
-rw-r--r--tests/mir-opt/inline/inline_diverging.g.Inline.panic-unwind.diff41
-rw-r--r--tests/mir-opt/inline/inline_diverging.h.Inline.diff83
-rw-r--r--tests/mir-opt/inline/inline_diverging.h.Inline.panic-abort.diff45
-rw-r--r--tests/mir-opt/inline/inline_diverging.h.Inline.panic-unwind.diff46
-rw-r--r--tests/mir-opt/inline/inline_diverging.rs3
-rw-r--r--tests/mir-opt/inline/inline_generator.main.Inline.diff132
-rw-r--r--tests/mir-opt/inline/inline_generator.main.Inline.panic-abort.diff107
-rw-r--r--tests/mir-opt/inline/inline_generator.main.Inline.panic-unwind.diff112
-rw-r--r--tests/mir-opt/inline/inline_generator.rs7
-rw-r--r--tests/mir-opt/inline/inline_instruction_set.default.Inline.diff56
-rw-r--r--tests/mir-opt/inline/inline_instruction_set.t32.Inline.diff56
-rw-r--r--tests/mir-opt/inline/inline_into_box_place.main.Inline.diff81
-rw-r--r--tests/mir-opt/inline/inline_into_box_place.main.Inline.panic-abort.diff205
-rw-r--r--tests/mir-opt/inline/inline_into_box_place.main.Inline.panic-unwind.diff218
-rw-r--r--tests/mir-opt/inline/inline_into_box_place.rs4
-rw-r--r--tests/mir-opt/inline/inline_options.main.Inline.after.mir55
-rw-r--r--tests/mir-opt/inline/inline_options.main.Inline.after.panic-abort.mir43
-rw-r--r--tests/mir-opt/inline/inline_options.main.Inline.after.panic-unwind.mir43
-rw-r--r--tests/mir-opt/inline/inline_options.rs2
-rw-r--r--tests/mir-opt/inline/inline_retag.bar.Inline.after.mir107
-rw-r--r--tests/mir-opt/inline/inline_shims.clone.Inline.diff26
-rw-r--r--tests/mir-opt/inline/inline_shims.clone.Inline.panic-abort.diff23
-rw-r--r--tests/mir-opt/inline/inline_shims.clone.Inline.panic-unwind.diff23
-rw-r--r--tests/mir-opt/inline/inline_shims.drop.Inline.diff56
-rw-r--r--tests/mir-opt/inline/inline_shims.drop.Inline.panic-abort.diff64
-rw-r--r--tests/mir-opt/inline/inline_shims.drop.Inline.panic-unwind.diff50
-rw-r--r--tests/mir-opt/inline/inline_shims.rs2
-rw-r--r--tests/mir-opt/inline/inline_specialization.main.Inline.diff28
-rw-r--r--tests/mir-opt/inline/inline_specialization.main.Inline.panic-abort.diff25
-rw-r--r--tests/mir-opt/inline/inline_specialization.main.Inline.panic-unwind.diff25
-rw-r--r--tests/mir-opt/inline/inline_specialization.rs2
-rw-r--r--tests/mir-opt/inline/inline_trait_method.rs2
-rw-r--r--tests/mir-opt/inline/inline_trait_method.test.Inline.after.mir21
-rw-r--r--tests/mir-opt/inline/inline_trait_method.test.Inline.after.panic-abort.mir18
-rw-r--r--tests/mir-opt/inline/inline_trait_method.test.Inline.after.panic-unwind.mir18
-rw-r--r--tests/mir-opt/inline/inline_trait_method_2.rs2
-rw-r--r--tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.mir28
-rw-r--r--tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.panic-abort.mir25
-rw-r--r--tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.panic-unwind.mir25
-rw-r--r--tests/mir-opt/inline/issue_106141.outer.Inline.diff55
-rw-r--r--tests/mir-opt/inline/issue_106141.outer.Inline.panic-abort.diff47
-rw-r--r--tests/mir-opt/inline/issue_106141.outer.Inline.panic-unwind.diff47
-rw-r--r--tests/mir-opt/inline/issue_106141.rs2
-rw-r--r--tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.a.Inline.after.mir36
-rw-r--r--tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.b.Inline.after.mir44
-rw-r--r--tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.c.Inline.after.mir28
-rw-r--r--tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.d.Inline.after.mir36
-rw-r--r--tests/mir-opt/inline/issue_76997_inline_scopes_parenting.main.Inline.after.mir59
-rw-r--r--tests/mir-opt/inline/issue_78442.bar.Inline.diff68
-rw-r--r--tests/mir-opt/inline/issue_78442.bar.Inline.panic-abort.diff47
-rw-r--r--tests/mir-opt/inline/issue_78442.bar.Inline.panic-unwind.diff62
-rw-r--r--tests/mir-opt/inline/issue_78442.bar.RevealAll.diff57
-rw-r--r--tests/mir-opt/inline/issue_78442.bar.RevealAll.panic-abort.diff42
-rw-r--r--tests/mir-opt/inline/issue_78442.bar.RevealAll.panic-unwind.diff50
-rw-r--r--tests/mir-opt/inline/issue_78442.rs2
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.rs14
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.Inline.panic-abort.diff36
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.Inline.panic-unwind.diff36
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.PreCodegen.after.panic-abort.mir22
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.PreCodegen.after.panic-unwind.mir22
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.diff152
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.panic-abort.diff45
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.panic-unwind.diff45
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.mir138
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.panic-abort.mir31
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.panic-unwind.mir31
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.Inline.panic-abort.diff36
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.Inline.panic-unwind.diff36
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.PreCodegen.after.panic-abort.mir22
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.PreCodegen.after.panic-unwind.mir22
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.diff152
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.panic-abort.diff45
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.panic-unwind.diff45
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.mir138
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.panic-abort.mir31
-rw-r--r--tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.panic-unwind.mir31
-rw-r--r--tests/mir-opt/inline/unsized_argument.caller.Inline.diff58
-rw-r--r--tests/mir-opt/inline/unwrap_unchecked.rs2
-rw-r--r--tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.diff55
-rw-r--r--tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-abort.diff48
-rw-r--r--tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-unwind.diff52
-rw-r--r--tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.mir41
-rw-r--r--tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-abort.mir41
-rw-r--r--tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-unwind.mir41
-rw-r--r--tests/mir-opt/instrument_coverage.bar.InstrumentCoverage.diff8
-rw-r--r--tests/mir-opt/instrument_coverage.main.InstrumentCoverage.diff45
-rw-r--r--tests/mir-opt/instsimplify_duplicate_switch_targets.assert_zero.InstSimplify.diff12
-rw-r--r--tests/mir-opt/intrinsic_asserts.generic.InstSimplify.diff39
-rw-r--r--tests/mir-opt/intrinsic_asserts.panics.InstSimplify.diff47
-rw-r--r--tests/mir-opt/intrinsic_asserts.removable.InstSimplify.diff45
-rw-r--r--tests/mir-opt/issue_101973.inner.ConstProp.diff85
-rw-r--r--tests/mir-opt/issue_101973.inner.ConstProp.panic-abort.diff82
-rw-r--r--tests/mir-opt/issue_101973.inner.ConstProp.panic-unwind.diff82
-rw-r--r--tests/mir-opt/issue_101973.rs2
-rw-r--r--tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.mir25
-rw-r--r--tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.panic-abort.mir16
-rw-r--r--tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.panic-unwind.mir16
-rw-r--r--tests/mir-opt/issue_104451_unwindable_intrinsics.rs2
-rw-r--r--tests/mir-opt/issue_38669.main.SimplifyCfg-initial.after.mir56
-rw-r--r--tests/mir-opt/issue_41110.main.ElaborateDrops.diff75
-rw-r--r--tests/mir-opt/issue_41110.main.ElaborateDrops.panic-abort.diff69
-rw-r--r--tests/mir-opt/issue_41110.main.ElaborateDrops.panic-unwind.diff69
-rw-r--r--tests/mir-opt/issue_41110.rs2
-rw-r--r--tests/mir-opt/issue_41110.test.ElaborateDrops.diff105
-rw-r--r--tests/mir-opt/issue_41110.test.ElaborateDrops.panic-abort.diff102
-rw-r--r--tests/mir-opt/issue_41110.test.ElaborateDrops.panic-unwind.diff102
-rw-r--r--tests/mir-opt/issue_41697.{impl#0}-{constant#0}.SimplifyCfg-promote-consts.after.mir14
-rw-r--r--tests/mir-opt/issue_41888.main.ElaborateDrops.diff151
-rw-r--r--tests/mir-opt/issue_41888.main.ElaborateDrops.panic-abort.diff148
-rw-r--r--tests/mir-opt/issue_41888.main.ElaborateDrops.panic-unwind.diff148
-rw-r--r--tests/mir-opt/issue_41888.rs2
-rw-r--r--tests/mir-opt/issue_62289.rs2
-rw-r--r--tests/mir-opt/issue_62289.test.ElaborateDrops.before.mir122
-rw-r--r--tests/mir-opt/issue_62289.test.ElaborateDrops.before.panic-abort.mir113
-rw-r--r--tests/mir-opt/issue_62289.test.ElaborateDrops.before.panic-unwind.mir113
-rw-r--r--tests/mir-opt/issue_72181.bar.built.after.mir16
-rw-r--r--tests/mir-opt/issue_72181.foo.built.after.mir28
-rw-r--r--tests/mir-opt/issue_72181.main.built.after.mir77
-rw-r--r--tests/mir-opt/issue_72181_1.f.built.after.mir10
-rw-r--r--tests/mir-opt/issue_72181_1.main.built.after.mir54
-rw-r--r--tests/mir-opt/issue_76432.rs2
-rw-r--r--tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.diff60
-rw-r--r--tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.panic-abort.diff54
-rw-r--r--tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.panic-unwind.diff54
-rw-r--r--tests/mir-opt/issue_78192.f.InstSimplify.diff36
-rw-r--r--tests/mir-opt/issue_91633.bar.built.after.mir35
-rw-r--r--tests/mir-opt/issue_91633.foo.built.after.mir57
-rw-r--r--tests/mir-opt/issue_91633.fun.built.after.mir40
-rw-r--r--tests/mir-opt/issue_91633.hey.built.after.mir39
-rw-r--r--tests/mir-opt/issue_99325.main.built.after.mir409
-rw-r--r--tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.mir84
-rw-r--r--tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-abort.mir72
-rw-r--r--tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-unwind.mir72
-rw-r--r--tests/mir-opt/issues/issue_59352.rs2
-rw-r--r--tests/mir-opt/issues/issue_75439.foo.MatchBranchSimplification.diff72
-rw-r--r--tests/mir-opt/loop_test.main.SimplifyCfg-promote-consts.after.mir56
-rw-r--r--tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.diff64
-rw-r--r--tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-abort.diff64
-rw-r--r--tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-unwind.diff64
-rw-r--r--tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.diff77
-rw-r--r--tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-abort.diff77
-rw-r--r--tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-unwind.diff77
-rw-r--r--tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.diff26
-rw-r--r--tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-abort.diff26
-rw-r--r--tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-unwind.diff26
-rw-r--r--tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.diff26
-rw-r--r--tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-abort.diff26
-rw-r--r--tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-unwind.diff26
-rw-r--r--tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.diff50
-rw-r--r--tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-abort.diff50
-rw-r--r--tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-unwind.diff50
-rw-r--r--tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.diff44
-rw-r--r--tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-abort.diff44
-rw-r--r--tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-unwind.diff44
-rw-r--r--tests/mir-opt/lower_array_len.rs2
-rw-r--r--tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.diff20
-rw-r--r--tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.panic-abort.diff17
-rw-r--r--tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.panic-unwind.diff17
-rw-r--r--tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.diff26
-rw-r--r--tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.panic-abort.diff23
-rw-r--r--tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.panic-unwind.diff23
-rw-r--r--tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.diff119
-rw-r--r--tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.panic-abort.diff94
-rw-r--r--tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.panic-unwind.diff98
-rw-r--r--tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.diff72
-rw-r--r--tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.panic-abort.diff69
-rw-r--r--tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.panic-unwind.diff69
-rw-r--r--tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.diff29
-rw-r--r--tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.panic-abort.diff26
-rw-r--r--tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.panic-unwind.diff26
-rw-r--r--tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.diff31
-rw-r--r--tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.panic-abort.diff28
-rw-r--r--tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.panic-unwind.diff28
-rw-r--r--tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.diff54
-rw-r--r--tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-abort.diff48
-rw-r--r--tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-unwind.diff48
-rw-r--r--tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.diff30
-rw-r--r--tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.panic-abort.diff27
-rw-r--r--tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.panic-unwind.diff27
-rw-r--r--tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.diff27
-rw-r--r--tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.panic-abort.diff24
-rw-r--r--tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.panic-unwind.diff24
-rw-r--r--tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.diff21
-rw-r--r--tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.panic-abort.diff18
-rw-r--r--tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.panic-unwind.diff18
-rw-r--r--tests/mir-opt/lower_intrinsics.rs13
-rw-r--r--tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.diff20
-rw-r--r--tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.panic-abort.diff17
-rw-r--r--tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.panic-unwind.diff17
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.diff27
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.panic-abort.diff24
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.panic-unwind.diff24
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.diff27
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.panic-abort.diff24
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.panic-unwind.diff24
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.diff25
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.panic-abort.diff22
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.panic-unwind.diff22
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.diff25
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.panic-abort.diff22
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.panic-unwind.diff22
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.diff25
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.panic-abort.diff22
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.panic-unwind.diff22
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.diff22
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.panic-abort.diff19
-rw-r--r--tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.panic-unwind.diff19
-rw-r--r--tests/mir-opt/lower_intrinsics.unchecked.LowerIntrinsics.panic-abort.diff154
-rw-r--r--tests/mir-opt/lower_intrinsics.unchecked.LowerIntrinsics.panic-unwind.diff154
-rw-r--r--tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.diff21
-rw-r--r--tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.panic-abort.diff18
-rw-r--r--tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.panic-unwind.diff18
-rw-r--r--tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.diff83
-rw-r--r--tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.panic-abort.diff74
-rw-r--r--tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.panic-unwind.diff74
-rw-r--r--tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.diff83
-rw-r--r--tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.panic-abort.diff74
-rw-r--r--tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.panic-unwind.diff74
-rw-r--r--tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.diff36
-rw-r--r--tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.panic-abort.diff33
-rw-r--r--tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.panic-unwind.diff33
-rw-r--r--tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.diff63
-rw-r--r--tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-abort.diff60
-rw-r--r--tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-unwind.diff60
-rw-r--r--tests/mir-opt/lower_slice_len.rs2
-rw-r--r--tests/mir-opt/match_arm_scopes.complicated_match.SimplifyCfg-initial.after-ElaborateDrops.after.diff272
-rw-r--r--tests/mir-opt/match_arm_scopes.complicated_match.panic-abort.SimplifyCfg-initial.after-ElaborateDrops.after.diff272
-rw-r--r--tests/mir-opt/match_arm_scopes.complicated_match.panic-unwind.SimplifyCfg-initial.after-ElaborateDrops.after.diff272
-rw-r--r--tests/mir-opt/match_arm_scopes.rs2
-rw-r--r--tests/mir-opt/match_test.main.SimplifyCfg-initial.after.mir106
-rw-r--r--tests/mir-opt/matches_reduce_branches.bar.MatchBranchSimplification.diff116
-rw-r--r--tests/mir-opt/matches_reduce_branches.foo.MatchBranchSimplification.diff70
-rw-r--r--tests/mir-opt/matches_reduce_branches.match_nested_if.MatchBranchSimplification.diff132
-rw-r--r--tests/mir-opt/matches_u8.exhaustive_match.MatchBranchSimplification.diff22
-rw-r--r--tests/mir-opt/matches_u8.exhaustive_match_i8.MatchBranchSimplification.diff22
-rw-r--r--tests/mir-opt/multiple_return_terminators.test.MultipleReturnTerminators.diff6
-rw-r--r--tests/mir-opt/nll/named_lifetimes_basic.use_x.nll.0.mir14
-rw-r--r--tests/mir-opt/nll/region_subtyping_basic.main.nll.0.32bit.mir108
-rw-r--r--tests/mir-opt/nll/region_subtyping_basic.main.nll.0.64bit.mir108
-rw-r--r--tests/mir-opt/no_drop_for_inactive_variant.rs2
-rw-r--r--tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.mir49
-rw-r--r--tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.panic-abort.mir38
-rw-r--r--tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.panic-unwind.mir43
-rw-r--r--tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.mir49
-rw-r--r--tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.panic-abort.mir40
-rw-r--r--tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.panic-unwind.mir40
-rw-r--r--tests/mir-opt/no_spurious_drop_after_call.rs2
-rw-r--r--tests/mir-opt/not_equal_false.opt.InstSimplify.diff34
-rw-r--r--tests/mir-opt/nrvo_miscompile_111005.wrong.RenameReturnPlace.diff17
-rw-r--r--tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.diff43
-rw-r--r--tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.panic-abort.diff42
-rw-r--r--tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.panic-unwind.diff42
-rw-r--r--tests/mir-opt/nrvo_simple.rs2
-rw-r--r--tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.mir55
-rw-r--r--tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir46
-rw-r--r--tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir55
-rw-r--r--tests/mir-opt/packed_struct_drop_aligned.rs2
-rw-r--r--tests/mir-opt/pre-codegen/chained_comparison.bitand.PreCodegen.after.mir84
-rw-r--r--tests/mir-opt/pre-codegen/chained_comparison.naive.PreCodegen.after.mir136
-rw-r--r--tests/mir-opt/pre-codegen/chained_comparison.returning.PreCodegen.after.mir126
-rw-r--r--tests/mir-opt/pre-codegen/chained_comparison.rs51
-rw-r--r--tests/mir-opt/pre-codegen/checked_ops.checked_shl.PreCodegen.after.mir84
-rw-r--r--tests/mir-opt/pre-codegen/checked_ops.rs17
-rw-r--r--tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.mir61
-rw-r--r--tests/mir-opt/pre-codegen/duplicate_switch_targets.ub_if_b.PreCodegen.after.mir20
-rw-r--r--tests/mir-opt/pre-codegen/intrinsics.f_u64.PreCodegen.after.mir25
-rw-r--r--tests/mir-opt/pre-codegen/intrinsics.f_unit.PreCodegen.after.mir17
-rw-r--r--tests/mir-opt/pre-codegen/loops.filter_mapped.PreCodegen.after.mir93
-rw-r--r--tests/mir-opt/pre-codegen/loops.int_range.PreCodegen.after.mir118
-rw-r--r--tests/mir-opt/pre-codegen/loops.mapped.PreCodegen.after.mir82
-rw-r--r--tests/mir-opt/pre-codegen/loops.rs37
-rw-r--r--tests/mir-opt/pre-codegen/loops.vec_move.PreCodegen.after.mir74
-rw-r--r--tests/mir-opt/pre-codegen/mem_replace.manual_replace.PreCodegen.after.mir14
-rw-r--r--tests/mir-opt/pre-codegen/mem_replace.mem_replace.PreCodegen.after.mir66
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.diff59
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.panic-abort.diff59
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.panic-unwind.diff59
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.diff59
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.panic-abort.diff59
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.panic-unwind.diff59
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.mir18
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.panic-abort.mir18
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.panic-unwind.mir18
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.mir18
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.panic-abort.mir18
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.panic-unwind.mir18
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.diff71
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.panic-abort.diff71
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.panic-unwind.diff71
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.diff71
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.panic-abort.diff71
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.panic-unwind.diff71
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.mir18
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.panic-abort.mir18
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.panic-unwind.mir18
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.mir18
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.panic-abort.mir18
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.panic-unwind.mir18
-rw-r--r--tests/mir-opt/pre-codegen/optimizes_into_variable.rs2
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.mir91
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-abort.mir131
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-unwind.mir139
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.mir95
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.panic-abort.mir81
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.panic-unwind.mir89
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.mir20
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.panic-abort.mir17
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.panic-unwind.mir17
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.mir20
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-abort.mir71
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-unwind.mir71
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.rs1
-rw-r--r--tests/mir-opt/pre-codegen/simple_option_map.ezmap.PreCodegen.after.mir66
-rw-r--r--tests/mir-opt/pre-codegen/slice_filter.rs15
-rw-r--r--tests/mir-opt/pre-codegen/slice_filter.variant_a-{closure#0}.PreCodegen.after.mir231
-rw-r--r--tests/mir-opt/pre-codegen/slice_filter.variant_b-{closure#0}.PreCodegen.after.mir95
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.rs1
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.mir105
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir102
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir102
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.mir134
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-abort.mir103
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-unwind.mir103
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.mir26
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.panic-abort.mir23
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.panic-unwind.mir23
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.mir20
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.panic-abort.mir20
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.panic-unwind.mir20
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-abort.mir197
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-unwind.mir205
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.mir203
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-abort.mir184
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-unwind.mir192
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir147
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir155
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.mir220
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir201
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir209
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.rs16
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.mir17
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.panic-abort.mir14
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.panic-unwind.mir14
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.mir17
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.panic-abort.mir14
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.panic-unwind.mir14
-rw-r--r--tests/mir-opt/pre-codegen/spans.outer.PreCodegen.after.panic-abort.mir19
-rw-r--r--tests/mir-opt/pre-codegen/spans.outer.PreCodegen.after.panic-unwind.mir19
-rw-r--r--tests/mir-opt/pre-codegen/spans.rs16
-rw-r--r--tests/mir-opt/pre-codegen/try_identity.new.PreCodegen.after.mir68
-rw-r--r--tests/mir-opt/pre-codegen/try_identity.old.PreCodegen.after.mir34
-rw-r--r--tests/mir-opt/reference_prop.debuginfo.ReferencePropagation.diff248
-rw-r--r--tests/mir-opt/reference_prop.dominate_storage.ReferencePropagation.diff37
-rw-r--r--tests/mir-opt/reference_prop.maybe_dead.ReferencePropagation.diff61
-rw-r--r--tests/mir-opt/reference_prop.multiple_storage.ReferencePropagation.diff27
-rw-r--r--tests/mir-opt/reference_prop.mut_raw_then_mut_shr.ReferencePropagation.diff108
-rw-r--r--tests/mir-opt/reference_prop.read_through_raw.ReferencePropagation.diff28
-rw-r--r--tests/mir-opt/reference_prop.reference_propagation.ReferencePropagation.diff698
-rw-r--r--tests/mir-opt/reference_prop.reference_propagation_const_ptr.ReferencePropagation.diff751
-rw-r--r--tests/mir-opt/reference_prop.reference_propagation_mut.ReferencePropagation.diff692
-rw-r--r--tests/mir-opt/reference_prop.reference_propagation_mut_ptr.ReferencePropagation.diff672
-rw-r--r--tests/mir-opt/reference_prop.unique_with_copies.ReferencePropagation.diff78
-rw-r--r--tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.diff74
-rw-r--r--tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.panic-abort.diff74
-rw-r--r--tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.panic-unwind.diff74
-rw-r--r--tests/mir-opt/remove_fake_borrows.rs2
-rw-r--r--tests/mir-opt/remove_never_const.no_codegen.PreCodegen.after.mir4
-rw-r--r--tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.diff98
-rw-r--r--tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.panic-abort.diff92
-rw-r--r--tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.panic-unwind.diff92
-rw-r--r--tests/mir-opt/remove_storage_markers.rs2
-rw-r--r--tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.diff31
-rw-r--r--tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.panic-abort.diff27
-rw-r--r--tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.panic-unwind.diff31
-rw-r--r--tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.diff31
-rw-r--r--tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.panic-abort.diff27
-rw-r--r--tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.panic-unwind.diff31
-rw-r--r--tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.diff27
-rw-r--r--tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.panic-abort.diff27
-rw-r--r--tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.panic-unwind.diff27
-rw-r--r--tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.diff27
-rw-r--r--tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.panic-abort.diff27
-rw-r--r--tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.panic-unwind.diff27
-rw-r--r--tests/mir-opt/remove_unneeded_drops.rs2
-rw-r--r--tests/mir-opt/remove_zsts.get_union.PreCodegen.after.mir6
-rw-r--r--tests/mir-opt/remove_zsts.get_union.RemoveZsts.diff22
-rw-r--r--tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.mir188
-rw-r--r--tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.panic-abort.mir176
-rw-r--r--tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.panic-unwind.mir176
-rw-r--r--tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir22
-rw-r--r--tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.panic-abort.mir23
-rw-r--r--tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.panic-unwind.mir19
-rw-r--r--tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.mir21
-rw-r--r--tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.panic-abort.mir21
-rw-r--r--tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.panic-unwind.mir21
-rw-r--r--tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.mir199
-rw-r--r--tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir168
-rw-r--r--tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir180
-rw-r--r--tests/mir-opt/retag.rs2
-rw-r--r--tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.mir18
-rw-r--r--tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.panic-abort.mir18
-rw-r--r--tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.panic-unwind.mir18
-rw-r--r--tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.mir15
-rw-r--r--tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.panic-abort.mir15
-rw-r--r--tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.panic-unwind.mir15
-rw-r--r--tests/mir-opt/separate_const_switch.identity.SeparateConstSwitch.diff130
-rw-r--r--tests/mir-opt/separate_const_switch.rs2
-rw-r--r--tests/mir-opt/separate_const_switch.too_complex.SeparateConstSwitch.diff91
-rw-r--r--tests/mir-opt/simplify_cfg.main.SimplifyCfg-early-opt.diff50
-rw-r--r--tests/mir-opt/simplify_cfg.main.SimplifyCfg-initial.diff53
-rw-r--r--tests/mir-opt/simplify_duplicate_unreachable_blocks.assert_nonzero_nonmax.SimplifyCfg-after-uninhabited-enum-branching.diff14
-rw-r--r--tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.diff36
-rw-r--r--tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.panic-abort.diff33
-rw-r--r--tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.panic-unwind.diff33
-rw-r--r--tests/mir-opt/simplify_if.rs2
-rw-r--r--tests/mir-opt/simplify_locals.c.SimplifyLocals-before-const-prop.diff40
-rw-r--r--tests/mir-opt/simplify_locals.d1.SimplifyLocals-before-const-prop.diff14
-rw-r--r--tests/mir-opt/simplify_locals.d2.SimplifyLocals-before-const-prop.diff32
-rw-r--r--tests/mir-opt/simplify_locals.expose_addr.SimplifyLocals-before-const-prop.diff24
-rw-r--r--tests/mir-opt/simplify_locals.r.SimplifyLocals-before-const-prop.diff32
-rw-r--r--tests/mir-opt/simplify_locals.t1.SimplifyLocals-before-const-prop.diff22
-rw-r--r--tests/mir-opt/simplify_locals.t2.SimplifyLocals-before-const-prop.diff22
-rw-r--r--tests/mir-opt/simplify_locals.t3.SimplifyLocals-before-const-prop.diff30
-rw-r--r--tests/mir-opt/simplify_locals.t4.SimplifyLocals-before-const-prop.diff22
-rw-r--r--tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.diff53
-rw-r--r--tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.panic-abort.diff50
-rw-r--r--tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.panic-unwind.diff50
-rw-r--r--tests/mir-opt/simplify_locals_fixedpoint.rs2
-rw-r--r--tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.diff101
-rw-r--r--tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.panic-abort.diff86
-rw-r--r--tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.panic-unwind.diff86
-rw-r--r--tests/mir-opt/simplify_locals_removes_unused_consts.rs2
-rw-r--r--tests/mir-opt/simplify_locals_removes_unused_discriminant_reads.map.SimplifyLocals-before-const-prop.diff52
-rw-r--r--tests/mir-opt/simplify_match.main.ConstProp.diff33
-rw-r--r--tests/mir-opt/simplify_match.main.ConstProp.panic-abort.diff30
-rw-r--r--tests/mir-opt/simplify_match.main.ConstProp.panic-unwind.diff30
-rw-r--r--tests/mir-opt/simplify_match.rs2
-rw-r--r--tests/mir-opt/slice_drop_shim.core.ptr-drop_in_place.[String].AddMovesForPackedDrops.before.mir48
-rw-r--r--tests/mir-opt/slice_filter.rs20
-rw-r--r--tests/mir-opt/slice_filter.variant_a-{closure#0}.CopyProp.diff279
-rw-r--r--tests/mir-opt/slice_filter.variant_a-{closure#0}.DestinationPropagation.diff165
-rw-r--r--tests/mir-opt/slice_filter.variant_a-{closure#0}.ReferencePropagation.diff267
-rw-r--r--tests/mir-opt/slice_filter.variant_b-{closure#0}.CopyProp.diff139
-rw-r--r--tests/mir-opt/slice_filter.variant_b-{closure#0}.DestinationPropagation.diff109
-rw-r--r--tests/mir-opt/slice_filter.variant_b-{closure#0}.ReferencePropagation.diff103
-rw-r--r--tests/mir-opt/spanview_block.main.built.after.html3
-rw-r--r--tests/mir-opt/spanview_statement.main.built.after.html3
-rw-r--r--tests/mir-opt/spanview_terminator.main.built.after.html3
-rw-r--r--tests/mir-opt/sroa/lifetimes.foo.ScalarReplacementOfAggregates.diff294
-rw-r--r--tests/mir-opt/sroa/structs.constant.ScalarReplacementOfAggregates.diff62
-rw-r--r--tests/mir-opt/sroa/structs.copies.ScalarReplacementOfAggregates.diff144
-rw-r--r--tests/mir-opt/sroa/structs.dropping.ScalarReplacementOfAggregates.diff52
-rw-r--r--tests/mir-opt/sroa/structs.enums.ScalarReplacementOfAggregates.diff46
-rw-r--r--tests/mir-opt/sroa/structs.escaping.ScalarReplacementOfAggregates.diff52
-rw-r--r--tests/mir-opt/sroa/structs.flat.ScalarReplacementOfAggregates.diff119
-rw-r--r--tests/mir-opt/sroa/structs.ref_copies.ScalarReplacementOfAggregates.diff82
-rw-r--r--tests/mir-opt/sroa/structs.structs.ScalarReplacementOfAggregates.diff48
-rw-r--r--tests/mir-opt/sroa/structs.unions.ScalarReplacementOfAggregates.diff24
-rw-r--r--tests/mir-opt/storage_ranges.main.nll.0.mir66
-rw-r--r--tests/mir-opt/switch_to_self.rs21
-rw-r--r--tests/mir-opt/switch_to_self.test.MatchBranchSimplification.diff19
-rw-r--r--tests/mir-opt/tls_access.main.PreCodegen.after.mir34
-rw-r--r--tests/mir-opt/uninhabited_enum.process_never.SimplifyLocals-final.after.mir10
-rw-r--r--tests/mir-opt/uninhabited_enum.process_void.SimplifyLocals-final.after.mir8
-rw-r--r--tests/mir-opt/uninhabited_enum_branching.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir85
-rw-r--r--tests/mir-opt/uninhabited_enum_branching.main.UninhabitedEnumBranching.diff109
-rw-r--r--tests/mir-opt/uninhabited_enum_branching2.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir122
-rw-r--r--tests/mir-opt/uninhabited_enum_branching2.main.UninhabitedEnumBranching.diff166
-rw-r--r--tests/mir-opt/uninhabited_fallthrough_elimination.eliminate_fallthrough.UninhabitedEnumBranching.diff28
-rw-r--r--tests/mir-opt/uninhabited_fallthrough_elimination.keep_fallthrough.UninhabitedEnumBranching.diff26
-rw-r--r--tests/mir-opt/unreachable.main.UnreachablePropagation.diff70
-rw-r--r--tests/mir-opt/unreachable.main.UnreachablePropagation.panic-abort.diff67
-rw-r--r--tests/mir-opt/unreachable.main.UnreachablePropagation.panic-unwind.diff67
-rw-r--r--tests/mir-opt/unreachable.rs2
-rw-r--r--tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.diff71
-rw-r--r--tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.panic-abort.diff65
-rw-r--r--tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.panic-unwind.diff65
-rw-r--r--tests/mir-opt/unreachable_diverging.rs2
-rw-r--r--tests/mir-opt/unusual_item_types.E-V-{constant#0}.built.after.mir6
-rw-r--r--tests/mir-opt/unusual_item_types.Test-X-{constructor#0}.built.after.mir6
-rw-r--r--tests/mir-opt/unusual_item_types.core.ptr-drop_in_place.Vec_i32_.AddMovesForPackedDrops.before.mir25
-rw-r--r--tests/mir-opt/unusual_item_types.{impl#0}-ASSOCIATED_CONSTANT.built.after.mir6
-rw-r--r--tests/mir-opt/while_storage.rs2
-rw-r--r--tests/mir-opt/while_storage.while_loop.PreCodegen.after.mir52
-rw-r--r--tests/mir-opt/while_storage.while_loop.PreCodegen.after.panic-abort.mir46
-rw-r--r--tests/mir-opt/while_storage.while_loop.PreCodegen.after.panic-unwind.mir46
1032 files changed, 31452 insertions, 21447 deletions
diff --git a/tests/mir-opt/address_of.address_of_reborrow.SimplifyCfg-initial.after.mir b/tests/mir-opt/address_of.address_of_reborrow.SimplifyCfg-initial.after.mir
index b1d34a196..61aa89e44 100644
--- a/tests/mir-opt/address_of.address_of_reborrow.SimplifyCfg-initial.after.mir
+++ b/tests/mir-opt/address_of.address_of_reborrow.SimplifyCfg-initial.after.mir
@@ -33,83 +33,83 @@
| 29: user_ty: Canonical { value: Ty(*mut [i32]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:36:12: 36:22, inferred_ty: *mut [i32]
|
fn address_of_reborrow() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/address_of.rs:+0:26: +0:26
- let _1: &[i32; 10]; // in scope 0 at $DIR/address_of.rs:+1:9: +1:10
- let _2: [i32; 10]; // in scope 0 at $DIR/address_of.rs:+1:14: +1:21
- let mut _4: [i32; 10]; // in scope 0 at $DIR/address_of.rs:+2:22: +2:29
- let _5: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+4:5: +4:18
- let mut _6: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+4:5: +4:18
- let _7: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+5:5: +5:26
- let _8: *const dyn std::marker::Send; // in scope 0 at $DIR/address_of.rs:+6:5: +6:25
- let mut _9: *const dyn std::marker::Send; // in scope 0 at $DIR/address_of.rs:+6:5: +6:25
- let mut _10: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+6:5: +6:6
- let _11: *const [i32]; // in scope 0 at $DIR/address_of.rs:+7:5: +7:22
- let mut _12: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+7:5: +7:6
- let _13: *const i32; // in scope 0 at $DIR/address_of.rs:+8:5: +8:20
- let mut _14: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+8:5: +8:6
- let mut _18: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+12:30: +12:31
- let mut _20: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+13:27: +13:28
- let _21: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+15:5: +15:18
- let mut _22: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+15:5: +15:18
- let _23: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+16:5: +16:26
- let _24: *const dyn std::marker::Send; // in scope 0 at $DIR/address_of.rs:+17:5: +17:25
- let mut _25: *const dyn std::marker::Send; // in scope 0 at $DIR/address_of.rs:+17:5: +17:25
- let mut _26: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+17:5: +17:6
- let _27: *const [i32]; // in scope 0 at $DIR/address_of.rs:+18:5: +18:22
- let mut _28: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+18:5: +18:6
- let mut _32: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+22:30: +22:31
- let mut _34: *const [i32; 10]; // in scope 0 at $DIR/address_of.rs:+23:27: +23:28
- let _35: *mut [i32; 10]; // in scope 0 at $DIR/address_of.rs:+25:5: +25:16
- let mut _36: *mut [i32; 10]; // in scope 0 at $DIR/address_of.rs:+25:5: +25:16
- let _37: *mut [i32; 10]; // in scope 0 at $DIR/address_of.rs:+26:5: +26:24
- let _38: *mut dyn std::marker::Send; // in scope 0 at $DIR/address_of.rs:+27:5: +27:23
- let mut _39: *mut dyn std::marker::Send; // in scope 0 at $DIR/address_of.rs:+27:5: +27:23
- let mut _40: *mut [i32; 10]; // in scope 0 at $DIR/address_of.rs:+27:5: +27:6
- let _41: *mut [i32]; // in scope 0 at $DIR/address_of.rs:+28:5: +28:20
- let mut _42: *mut [i32; 10]; // in scope 0 at $DIR/address_of.rs:+28:5: +28:6
- let mut _46: *mut [i32; 10]; // in scope 0 at $DIR/address_of.rs:+32:28: +32:29
- let mut _48: *mut [i32; 10]; // in scope 0 at $DIR/address_of.rs:+33:25: +33:26
+ let mut _0: ();
+ let _1: &[i32; 10];
+ let _2: [i32; 10];
+ let mut _4: [i32; 10];
+ let _5: *const [i32; 10];
+ let mut _6: *const [i32; 10];
+ let _7: *const [i32; 10];
+ let _8: *const dyn std::marker::Send;
+ let mut _9: *const dyn std::marker::Send;
+ let mut _10: *const [i32; 10];
+ let _11: *const [i32];
+ let mut _12: *const [i32; 10];
+ let _13: *const i32;
+ let mut _14: *const [i32; 10];
+ let mut _18: *const [i32; 10];
+ let mut _20: *const [i32; 10];
+ let _21: *const [i32; 10];
+ let mut _22: *const [i32; 10];
+ let _23: *const [i32; 10];
+ let _24: *const dyn std::marker::Send;
+ let mut _25: *const dyn std::marker::Send;
+ let mut _26: *const [i32; 10];
+ let _27: *const [i32];
+ let mut _28: *const [i32; 10];
+ let mut _32: *const [i32; 10];
+ let mut _34: *const [i32; 10];
+ let _35: *mut [i32; 10];
+ let mut _36: *mut [i32; 10];
+ let _37: *mut [i32; 10];
+ let _38: *mut dyn std::marker::Send;
+ let mut _39: *mut dyn std::marker::Send;
+ let mut _40: *mut [i32; 10];
+ let _41: *mut [i32];
+ let mut _42: *mut [i32; 10];
+ let mut _46: *mut [i32; 10];
+ let mut _48: *mut [i32; 10];
scope 1 {
- debug y => _1; // in scope 1 at $DIR/address_of.rs:+1:9: +1:10
- let mut _3: &mut [i32; 10]; // in scope 1 at $DIR/address_of.rs:+2:9: +2:14
+ debug y => _1;
+ let mut _3: &mut [i32; 10];
scope 2 {
- debug z => _3; // in scope 2 at $DIR/address_of.rs:+2:9: +2:14
- let _15: *const [i32; 10] as UserTypeProjection { base: UserType(2), projs: [] }; // in scope 2 at $DIR/address_of.rs:+10:9: +10:10
+ debug z => _3;
+ let _15: *const [i32; 10] as UserTypeProjection { base: UserType(2), projs: [] };
scope 3 {
- debug p => _15; // in scope 3 at $DIR/address_of.rs:+10:9: +10:10
- let _16: *const [i32; 10] as UserTypeProjection { base: UserType(4), projs: [] }; // in scope 3 at $DIR/address_of.rs:+11:9: +11:10
+ debug p => _15;
+ let _16: *const [i32; 10] as UserTypeProjection { base: UserType(4), projs: [] };
scope 4 {
- debug p => _16; // in scope 4 at $DIR/address_of.rs:+11:9: +11:10
- let _17: *const dyn std::marker::Send as UserTypeProjection { base: UserType(6), projs: [] }; // in scope 4 at $DIR/address_of.rs:+12:9: +12:10
+ debug p => _16;
+ let _17: *const dyn std::marker::Send as UserTypeProjection { base: UserType(6), projs: [] };
scope 5 {
- debug p => _17; // in scope 5 at $DIR/address_of.rs:+12:9: +12:10
- let _19: *const [i32] as UserTypeProjection { base: UserType(8), projs: [] }; // in scope 5 at $DIR/address_of.rs:+13:9: +13:10
+ debug p => _17;
+ let _19: *const [i32] as UserTypeProjection { base: UserType(8), projs: [] };
scope 6 {
- debug p => _19; // in scope 6 at $DIR/address_of.rs:+13:9: +13:10
- let _29: *const [i32; 10] as UserTypeProjection { base: UserType(12), projs: [] }; // in scope 6 at $DIR/address_of.rs:+20:9: +20:10
+ debug p => _19;
+ let _29: *const [i32; 10] as UserTypeProjection { base: UserType(12), projs: [] };
scope 7 {
- debug p => _29; // in scope 7 at $DIR/address_of.rs:+20:9: +20:10
- let _30: *const [i32; 10] as UserTypeProjection { base: UserType(14), projs: [] }; // in scope 7 at $DIR/address_of.rs:+21:9: +21:10
+ debug p => _29;
+ let _30: *const [i32; 10] as UserTypeProjection { base: UserType(14), projs: [] };
scope 8 {
- debug p => _30; // in scope 8 at $DIR/address_of.rs:+21:9: +21:10
- let _31: *const dyn std::marker::Send as UserTypeProjection { base: UserType(16), projs: [] }; // in scope 8 at $DIR/address_of.rs:+22:9: +22:10
+ debug p => _30;
+ let _31: *const dyn std::marker::Send as UserTypeProjection { base: UserType(16), projs: [] };
scope 9 {
- debug p => _31; // in scope 9 at $DIR/address_of.rs:+22:9: +22:10
- let _33: *const [i32] as UserTypeProjection { base: UserType(18), projs: [] }; // in scope 9 at $DIR/address_of.rs:+23:9: +23:10
+ debug p => _31;
+ let _33: *const [i32] as UserTypeProjection { base: UserType(18), projs: [] };
scope 10 {
- debug p => _33; // in scope 10 at $DIR/address_of.rs:+23:9: +23:10
- let _43: *mut [i32; 10] as UserTypeProjection { base: UserType(22), projs: [] }; // in scope 10 at $DIR/address_of.rs:+30:9: +30:10
+ debug p => _33;
+ let _43: *mut [i32; 10] as UserTypeProjection { base: UserType(22), projs: [] };
scope 11 {
- debug p => _43; // in scope 11 at $DIR/address_of.rs:+30:9: +30:10
- let _44: *mut [i32; 10] as UserTypeProjection { base: UserType(24), projs: [] }; // in scope 11 at $DIR/address_of.rs:+31:9: +31:10
+ debug p => _43;
+ let _44: *mut [i32; 10] as UserTypeProjection { base: UserType(24), projs: [] };
scope 12 {
- debug p => _44; // in scope 12 at $DIR/address_of.rs:+31:9: +31:10
- let _45: *mut dyn std::marker::Send as UserTypeProjection { base: UserType(26), projs: [] }; // in scope 12 at $DIR/address_of.rs:+32:9: +32:10
+ debug p => _44;
+ let _45: *mut dyn std::marker::Send as UserTypeProjection { base: UserType(26), projs: [] };
scope 13 {
- debug p => _45; // in scope 13 at $DIR/address_of.rs:+32:9: +32:10
- let _47: *mut [i32] as UserTypeProjection { base: UserType(28), projs: [] }; // in scope 13 at $DIR/address_of.rs:+33:9: +33:10
+ debug p => _45;
+ let _47: *mut [i32] as UserTypeProjection { base: UserType(28), projs: [] };
scope 14 {
- debug p => _47; // in scope 14 at $DIR/address_of.rs:+33:9: +33:10
+ debug p => _47;
}
}
}
@@ -126,183 +126,183 @@ fn address_of_reborrow() -> () {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/address_of.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/address_of.rs:+1:14: +1:21
- _2 = [const 0_i32; 10]; // scope 0 at $DIR/address_of.rs:+1:14: +1:21
- _1 = &_2; // scope 0 at $DIR/address_of.rs:+1:13: +1:21
- FakeRead(ForLet(None), _1); // scope 0 at $DIR/address_of.rs:+1:9: +1:10
- StorageLive(_3); // scope 1 at $DIR/address_of.rs:+2:9: +2:14
- StorageLive(_4); // scope 1 at $DIR/address_of.rs:+2:22: +2:29
- _4 = [const 0_i32; 10]; // scope 1 at $DIR/address_of.rs:+2:22: +2:29
- _3 = &mut _4; // scope 1 at $DIR/address_of.rs:+2:17: +2:29
- FakeRead(ForLet(None), _3); // scope 1 at $DIR/address_of.rs:+2:9: +2:14
- StorageLive(_5); // scope 2 at $DIR/address_of.rs:+4:5: +4:18
- StorageLive(_6); // scope 2 at $DIR/address_of.rs:+4:5: +4:18
- _6 = &raw const (*_1); // scope 2 at $DIR/address_of.rs:+4:5: +4:6
- AscribeUserType(_6, o, UserTypeProjection { base: UserType(0), projs: [] }); // scope 2 at $DIR/address_of.rs:+4:5: +4:18
- _5 = _6; // scope 2 at $DIR/address_of.rs:+4:5: +4:18
- StorageDead(_6); // scope 2 at $DIR/address_of.rs:+4:18: +4:19
- StorageDead(_5); // scope 2 at $DIR/address_of.rs:+4:18: +4:19
- StorageLive(_7); // scope 2 at $DIR/address_of.rs:+5:5: +5:26
- _7 = &raw const (*_1); // scope 2 at $DIR/address_of.rs:+5:5: +5:6
- StorageDead(_7); // scope 2 at $DIR/address_of.rs:+5:26: +5:27
- StorageLive(_8); // scope 2 at $DIR/address_of.rs:+6:5: +6:25
- StorageLive(_9); // scope 2 at $DIR/address_of.rs:+6:5: +6:25
- StorageLive(_10); // scope 2 at $DIR/address_of.rs:+6:5: +6:6
- _10 = &raw const (*_1); // scope 2 at $DIR/address_of.rs:+6:5: +6:6
- _9 = move _10 as *const dyn std::marker::Send (Pointer(Unsize)); // scope 2 at $DIR/address_of.rs:+6:5: +6:6
- StorageDead(_10); // scope 2 at $DIR/address_of.rs:+6:5: +6:6
- AscribeUserType(_9, o, UserTypeProjection { base: UserType(1), projs: [] }); // scope 2 at $DIR/address_of.rs:+6:5: +6:25
- _8 = _9; // scope 2 at $DIR/address_of.rs:+6:5: +6:25
- StorageDead(_9); // scope 2 at $DIR/address_of.rs:+6:25: +6:26
- StorageDead(_8); // scope 2 at $DIR/address_of.rs:+6:25: +6:26
- StorageLive(_11); // scope 2 at $DIR/address_of.rs:+7:5: +7:22
- StorageLive(_12); // scope 2 at $DIR/address_of.rs:+7:5: +7:6
- _12 = &raw const (*_1); // scope 2 at $DIR/address_of.rs:+7:5: +7:6
- _11 = move _12 as *const [i32] (Pointer(Unsize)); // scope 2 at $DIR/address_of.rs:+7:5: +7:6
- StorageDead(_12); // scope 2 at $DIR/address_of.rs:+7:5: +7:6
- StorageDead(_11); // scope 2 at $DIR/address_of.rs:+7:22: +7:23
- StorageLive(_13); // scope 2 at $DIR/address_of.rs:+8:5: +8:20
- StorageLive(_14); // scope 2 at $DIR/address_of.rs:+8:5: +8:6
- _14 = &raw const (*_1); // scope 2 at $DIR/address_of.rs:+8:5: +8:6
- _13 = move _14 as *const i32 (Pointer(ArrayToPointer)); // scope 2 at $DIR/address_of.rs:+8:5: +8:20
- StorageDead(_14); // scope 2 at $DIR/address_of.rs:+8:19: +8:20
- StorageDead(_13); // scope 2 at $DIR/address_of.rs:+8:20: +8:21
- StorageLive(_15); // scope 2 at $DIR/address_of.rs:+10:9: +10:10
- _15 = &raw const (*_1); // scope 2 at $DIR/address_of.rs:+10:23: +10:24
- FakeRead(ForLet(None), _15); // scope 2 at $DIR/address_of.rs:+10:9: +10:10
- AscribeUserType(_15, o, UserTypeProjection { base: UserType(3), projs: [] }); // scope 2 at $DIR/address_of.rs:+10:12: +10:20
- StorageLive(_16); // scope 3 at $DIR/address_of.rs:+11:9: +11:10
- _16 = &raw const (*_1); // scope 3 at $DIR/address_of.rs:+11:31: +11:32
- FakeRead(ForLet(None), _16); // scope 3 at $DIR/address_of.rs:+11:9: +11:10
- AscribeUserType(_16, o, UserTypeProjection { base: UserType(5), projs: [] }); // scope 3 at $DIR/address_of.rs:+11:12: +11:28
- StorageLive(_17); // scope 4 at $DIR/address_of.rs:+12:9: +12:10
- StorageLive(_18); // scope 4 at $DIR/address_of.rs:+12:30: +12:31
- _18 = &raw const (*_1); // scope 4 at $DIR/address_of.rs:+12:30: +12:31
- _17 = move _18 as *const dyn std::marker::Send (Pointer(Unsize)); // scope 4 at $DIR/address_of.rs:+12:30: +12:31
- StorageDead(_18); // scope 4 at $DIR/address_of.rs:+12:30: +12:31
- FakeRead(ForLet(None), _17); // scope 4 at $DIR/address_of.rs:+12:9: +12:10
- AscribeUserType(_17, o, UserTypeProjection { base: UserType(7), projs: [] }); // scope 4 at $DIR/address_of.rs:+12:12: +12:27
- StorageLive(_19); // scope 5 at $DIR/address_of.rs:+13:9: +13:10
- StorageLive(_20); // scope 5 at $DIR/address_of.rs:+13:27: +13:28
- _20 = &raw const (*_1); // scope 5 at $DIR/address_of.rs:+13:27: +13:28
- _19 = move _20 as *const [i32] (Pointer(Unsize)); // scope 5 at $DIR/address_of.rs:+13:27: +13:28
- StorageDead(_20); // scope 5 at $DIR/address_of.rs:+13:27: +13:28
- FakeRead(ForLet(None), _19); // scope 5 at $DIR/address_of.rs:+13:9: +13:10
- AscribeUserType(_19, o, UserTypeProjection { base: UserType(9), projs: [] }); // scope 5 at $DIR/address_of.rs:+13:12: +13:24
- StorageLive(_21); // scope 6 at $DIR/address_of.rs:+15:5: +15:18
- StorageLive(_22); // scope 6 at $DIR/address_of.rs:+15:5: +15:18
- _22 = &raw const (*_3); // scope 6 at $DIR/address_of.rs:+15:5: +15:6
- AscribeUserType(_22, o, UserTypeProjection { base: UserType(10), projs: [] }); // scope 6 at $DIR/address_of.rs:+15:5: +15:18
- _21 = _22; // scope 6 at $DIR/address_of.rs:+15:5: +15:18
- StorageDead(_22); // scope 6 at $DIR/address_of.rs:+15:18: +15:19
- StorageDead(_21); // scope 6 at $DIR/address_of.rs:+15:18: +15:19
- StorageLive(_23); // scope 6 at $DIR/address_of.rs:+16:5: +16:26
- _23 = &raw const (*_3); // scope 6 at $DIR/address_of.rs:+16:5: +16:6
- StorageDead(_23); // scope 6 at $DIR/address_of.rs:+16:26: +16:27
- StorageLive(_24); // scope 6 at $DIR/address_of.rs:+17:5: +17:25
- StorageLive(_25); // scope 6 at $DIR/address_of.rs:+17:5: +17:25
- StorageLive(_26); // scope 6 at $DIR/address_of.rs:+17:5: +17:6
- _26 = &raw const (*_3); // scope 6 at $DIR/address_of.rs:+17:5: +17:6
- _25 = move _26 as *const dyn std::marker::Send (Pointer(Unsize)); // scope 6 at $DIR/address_of.rs:+17:5: +17:6
- StorageDead(_26); // scope 6 at $DIR/address_of.rs:+17:5: +17:6
- AscribeUserType(_25, o, UserTypeProjection { base: UserType(11), projs: [] }); // scope 6 at $DIR/address_of.rs:+17:5: +17:25
- _24 = _25; // scope 6 at $DIR/address_of.rs:+17:5: +17:25
- StorageDead(_25); // scope 6 at $DIR/address_of.rs:+17:25: +17:26
- StorageDead(_24); // scope 6 at $DIR/address_of.rs:+17:25: +17:26
- StorageLive(_27); // scope 6 at $DIR/address_of.rs:+18:5: +18:22
- StorageLive(_28); // scope 6 at $DIR/address_of.rs:+18:5: +18:6
- _28 = &raw const (*_3); // scope 6 at $DIR/address_of.rs:+18:5: +18:6
- _27 = move _28 as *const [i32] (Pointer(Unsize)); // scope 6 at $DIR/address_of.rs:+18:5: +18:6
- StorageDead(_28); // scope 6 at $DIR/address_of.rs:+18:5: +18:6
- StorageDead(_27); // scope 6 at $DIR/address_of.rs:+18:22: +18:23
- StorageLive(_29); // scope 6 at $DIR/address_of.rs:+20:9: +20:10
- _29 = &raw const (*_3); // scope 6 at $DIR/address_of.rs:+20:23: +20:24
- FakeRead(ForLet(None), _29); // scope 6 at $DIR/address_of.rs:+20:9: +20:10
- AscribeUserType(_29, o, UserTypeProjection { base: UserType(13), projs: [] }); // scope 6 at $DIR/address_of.rs:+20:12: +20:20
- StorageLive(_30); // scope 7 at $DIR/address_of.rs:+21:9: +21:10
- _30 = &raw const (*_3); // scope 7 at $DIR/address_of.rs:+21:31: +21:32
- FakeRead(ForLet(None), _30); // scope 7 at $DIR/address_of.rs:+21:9: +21:10
- AscribeUserType(_30, o, UserTypeProjection { base: UserType(15), projs: [] }); // scope 7 at $DIR/address_of.rs:+21:12: +21:28
- StorageLive(_31); // scope 8 at $DIR/address_of.rs:+22:9: +22:10
- StorageLive(_32); // scope 8 at $DIR/address_of.rs:+22:30: +22:31
- _32 = &raw const (*_3); // scope 8 at $DIR/address_of.rs:+22:30: +22:31
- _31 = move _32 as *const dyn std::marker::Send (Pointer(Unsize)); // scope 8 at $DIR/address_of.rs:+22:30: +22:31
- StorageDead(_32); // scope 8 at $DIR/address_of.rs:+22:30: +22:31
- FakeRead(ForLet(None), _31); // scope 8 at $DIR/address_of.rs:+22:9: +22:10
- AscribeUserType(_31, o, UserTypeProjection { base: UserType(17), projs: [] }); // scope 8 at $DIR/address_of.rs:+22:12: +22:27
- StorageLive(_33); // scope 9 at $DIR/address_of.rs:+23:9: +23:10
- StorageLive(_34); // scope 9 at $DIR/address_of.rs:+23:27: +23:28
- _34 = &raw const (*_3); // scope 9 at $DIR/address_of.rs:+23:27: +23:28
- _33 = move _34 as *const [i32] (Pointer(Unsize)); // scope 9 at $DIR/address_of.rs:+23:27: +23:28
- StorageDead(_34); // scope 9 at $DIR/address_of.rs:+23:27: +23:28
- FakeRead(ForLet(None), _33); // scope 9 at $DIR/address_of.rs:+23:9: +23:10
- AscribeUserType(_33, o, UserTypeProjection { base: UserType(19), projs: [] }); // scope 9 at $DIR/address_of.rs:+23:12: +23:24
- StorageLive(_35); // scope 10 at $DIR/address_of.rs:+25:5: +25:16
- StorageLive(_36); // scope 10 at $DIR/address_of.rs:+25:5: +25:16
- _36 = &raw mut (*_3); // scope 10 at $DIR/address_of.rs:+25:5: +25:6
- AscribeUserType(_36, o, UserTypeProjection { base: UserType(20), projs: [] }); // scope 10 at $DIR/address_of.rs:+25:5: +25:16
- _35 = _36; // scope 10 at $DIR/address_of.rs:+25:5: +25:16
- StorageDead(_36); // scope 10 at $DIR/address_of.rs:+25:16: +25:17
- StorageDead(_35); // scope 10 at $DIR/address_of.rs:+25:16: +25:17
- StorageLive(_37); // scope 10 at $DIR/address_of.rs:+26:5: +26:24
- _37 = &raw mut (*_3); // scope 10 at $DIR/address_of.rs:+26:5: +26:6
- StorageDead(_37); // scope 10 at $DIR/address_of.rs:+26:24: +26:25
- StorageLive(_38); // scope 10 at $DIR/address_of.rs:+27:5: +27:23
- StorageLive(_39); // scope 10 at $DIR/address_of.rs:+27:5: +27:23
- StorageLive(_40); // scope 10 at $DIR/address_of.rs:+27:5: +27:6
- _40 = &raw mut (*_3); // scope 10 at $DIR/address_of.rs:+27:5: +27:6
- _39 = move _40 as *mut dyn std::marker::Send (Pointer(Unsize)); // scope 10 at $DIR/address_of.rs:+27:5: +27:6
- StorageDead(_40); // scope 10 at $DIR/address_of.rs:+27:5: +27:6
- AscribeUserType(_39, o, UserTypeProjection { base: UserType(21), projs: [] }); // scope 10 at $DIR/address_of.rs:+27:5: +27:23
- _38 = _39; // scope 10 at $DIR/address_of.rs:+27:5: +27:23
- StorageDead(_39); // scope 10 at $DIR/address_of.rs:+27:23: +27:24
- StorageDead(_38); // scope 10 at $DIR/address_of.rs:+27:23: +27:24
- StorageLive(_41); // scope 10 at $DIR/address_of.rs:+28:5: +28:20
- StorageLive(_42); // scope 10 at $DIR/address_of.rs:+28:5: +28:6
- _42 = &raw mut (*_3); // scope 10 at $DIR/address_of.rs:+28:5: +28:6
- _41 = move _42 as *mut [i32] (Pointer(Unsize)); // scope 10 at $DIR/address_of.rs:+28:5: +28:6
- StorageDead(_42); // scope 10 at $DIR/address_of.rs:+28:5: +28:6
- StorageDead(_41); // scope 10 at $DIR/address_of.rs:+28:20: +28:21
- StorageLive(_43); // scope 10 at $DIR/address_of.rs:+30:9: +30:10
- _43 = &raw mut (*_3); // scope 10 at $DIR/address_of.rs:+30:21: +30:22
- FakeRead(ForLet(None), _43); // scope 10 at $DIR/address_of.rs:+30:9: +30:10
- AscribeUserType(_43, o, UserTypeProjection { base: UserType(23), projs: [] }); // scope 10 at $DIR/address_of.rs:+30:12: +30:18
- StorageLive(_44); // scope 11 at $DIR/address_of.rs:+31:9: +31:10
- _44 = &raw mut (*_3); // scope 11 at $DIR/address_of.rs:+31:29: +31:30
- FakeRead(ForLet(None), _44); // scope 11 at $DIR/address_of.rs:+31:9: +31:10
- AscribeUserType(_44, o, UserTypeProjection { base: UserType(25), projs: [] }); // scope 11 at $DIR/address_of.rs:+31:12: +31:26
- StorageLive(_45); // scope 12 at $DIR/address_of.rs:+32:9: +32:10
- StorageLive(_46); // scope 12 at $DIR/address_of.rs:+32:28: +32:29
- _46 = &raw mut (*_3); // scope 12 at $DIR/address_of.rs:+32:28: +32:29
- _45 = move _46 as *mut dyn std::marker::Send (Pointer(Unsize)); // scope 12 at $DIR/address_of.rs:+32:28: +32:29
- StorageDead(_46); // scope 12 at $DIR/address_of.rs:+32:28: +32:29
- FakeRead(ForLet(None), _45); // scope 12 at $DIR/address_of.rs:+32:9: +32:10
- AscribeUserType(_45, o, UserTypeProjection { base: UserType(27), projs: [] }); // scope 12 at $DIR/address_of.rs:+32:12: +32:25
- StorageLive(_47); // scope 13 at $DIR/address_of.rs:+33:9: +33:10
- StorageLive(_48); // scope 13 at $DIR/address_of.rs:+33:25: +33:26
- _48 = &raw mut (*_3); // scope 13 at $DIR/address_of.rs:+33:25: +33:26
- _47 = move _48 as *mut [i32] (Pointer(Unsize)); // scope 13 at $DIR/address_of.rs:+33:25: +33:26
- StorageDead(_48); // scope 13 at $DIR/address_of.rs:+33:25: +33:26
- FakeRead(ForLet(None), _47); // scope 13 at $DIR/address_of.rs:+33:9: +33:10
- AscribeUserType(_47, o, UserTypeProjection { base: UserType(29), projs: [] }); // scope 13 at $DIR/address_of.rs:+33:12: +33:22
- _0 = const (); // scope 0 at $DIR/address_of.rs:+0:26: +34:2
- StorageDead(_47); // scope 13 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_45); // scope 12 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_44); // scope 11 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_43); // scope 10 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_33); // scope 9 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_31); // scope 8 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_30); // scope 7 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_29); // scope 6 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_19); // scope 5 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_17); // scope 4 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_16); // scope 3 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_15); // scope 2 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_4); // scope 1 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_3); // scope 1 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_2); // scope 0 at $DIR/address_of.rs:+34:1: +34:2
- StorageDead(_1); // scope 0 at $DIR/address_of.rs:+34:1: +34:2
- return; // scope 0 at $DIR/address_of.rs:+34:2: +34:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = [const 0_i32; 10];
+ _1 = &_2;
+ FakeRead(ForLet(None), _1);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = [const 0_i32; 10];
+ _3 = &mut _4;
+ FakeRead(ForLet(None), _3);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = &raw const (*_1);
+ AscribeUserType(_6, o, UserTypeProjection { base: UserType(0), projs: [] });
+ _5 = _6;
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageLive(_7);
+ _7 = &raw const (*_1);
+ StorageDead(_7);
+ StorageLive(_8);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = &raw const (*_1);
+ _9 = move _10 as *const dyn std::marker::Send (PointerCoercion(Unsize));
+ StorageDead(_10);
+ AscribeUserType(_9, o, UserTypeProjection { base: UserType(1), projs: [] });
+ _8 = _9;
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageLive(_11);
+ StorageLive(_12);
+ _12 = &raw const (*_1);
+ _11 = move _12 as *const [i32] (PointerCoercion(Unsize));
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageLive(_13);
+ StorageLive(_14);
+ _14 = &raw const (*_1);
+ _13 = move _14 as *const i32 (PointerCoercion(ArrayToPointer));
+ StorageDead(_14);
+ StorageDead(_13);
+ StorageLive(_15);
+ _15 = &raw const (*_1);
+ FakeRead(ForLet(None), _15);
+ AscribeUserType(_15, o, UserTypeProjection { base: UserType(3), projs: [] });
+ StorageLive(_16);
+ _16 = &raw const (*_1);
+ FakeRead(ForLet(None), _16);
+ AscribeUserType(_16, o, UserTypeProjection { base: UserType(5), projs: [] });
+ StorageLive(_17);
+ StorageLive(_18);
+ _18 = &raw const (*_1);
+ _17 = move _18 as *const dyn std::marker::Send (PointerCoercion(Unsize));
+ StorageDead(_18);
+ FakeRead(ForLet(None), _17);
+ AscribeUserType(_17, o, UserTypeProjection { base: UserType(7), projs: [] });
+ StorageLive(_19);
+ StorageLive(_20);
+ _20 = &raw const (*_1);
+ _19 = move _20 as *const [i32] (PointerCoercion(Unsize));
+ StorageDead(_20);
+ FakeRead(ForLet(None), _19);
+ AscribeUserType(_19, o, UserTypeProjection { base: UserType(9), projs: [] });
+ StorageLive(_21);
+ StorageLive(_22);
+ _22 = &raw const (*_3);
+ AscribeUserType(_22, o, UserTypeProjection { base: UserType(10), projs: [] });
+ _21 = _22;
+ StorageDead(_22);
+ StorageDead(_21);
+ StorageLive(_23);
+ _23 = &raw const (*_3);
+ StorageDead(_23);
+ StorageLive(_24);
+ StorageLive(_25);
+ StorageLive(_26);
+ _26 = &raw const (*_3);
+ _25 = move _26 as *const dyn std::marker::Send (PointerCoercion(Unsize));
+ StorageDead(_26);
+ AscribeUserType(_25, o, UserTypeProjection { base: UserType(11), projs: [] });
+ _24 = _25;
+ StorageDead(_25);
+ StorageDead(_24);
+ StorageLive(_27);
+ StorageLive(_28);
+ _28 = &raw const (*_3);
+ _27 = move _28 as *const [i32] (PointerCoercion(Unsize));
+ StorageDead(_28);
+ StorageDead(_27);
+ StorageLive(_29);
+ _29 = &raw const (*_3);
+ FakeRead(ForLet(None), _29);
+ AscribeUserType(_29, o, UserTypeProjection { base: UserType(13), projs: [] });
+ StorageLive(_30);
+ _30 = &raw const (*_3);
+ FakeRead(ForLet(None), _30);
+ AscribeUserType(_30, o, UserTypeProjection { base: UserType(15), projs: [] });
+ StorageLive(_31);
+ StorageLive(_32);
+ _32 = &raw const (*_3);
+ _31 = move _32 as *const dyn std::marker::Send (PointerCoercion(Unsize));
+ StorageDead(_32);
+ FakeRead(ForLet(None), _31);
+ AscribeUserType(_31, o, UserTypeProjection { base: UserType(17), projs: [] });
+ StorageLive(_33);
+ StorageLive(_34);
+ _34 = &raw const (*_3);
+ _33 = move _34 as *const [i32] (PointerCoercion(Unsize));
+ StorageDead(_34);
+ FakeRead(ForLet(None), _33);
+ AscribeUserType(_33, o, UserTypeProjection { base: UserType(19), projs: [] });
+ StorageLive(_35);
+ StorageLive(_36);
+ _36 = &raw mut (*_3);
+ AscribeUserType(_36, o, UserTypeProjection { base: UserType(20), projs: [] });
+ _35 = _36;
+ StorageDead(_36);
+ StorageDead(_35);
+ StorageLive(_37);
+ _37 = &raw mut (*_3);
+ StorageDead(_37);
+ StorageLive(_38);
+ StorageLive(_39);
+ StorageLive(_40);
+ _40 = &raw mut (*_3);
+ _39 = move _40 as *mut dyn std::marker::Send (PointerCoercion(Unsize));
+ StorageDead(_40);
+ AscribeUserType(_39, o, UserTypeProjection { base: UserType(21), projs: [] });
+ _38 = _39;
+ StorageDead(_39);
+ StorageDead(_38);
+ StorageLive(_41);
+ StorageLive(_42);
+ _42 = &raw mut (*_3);
+ _41 = move _42 as *mut [i32] (PointerCoercion(Unsize));
+ StorageDead(_42);
+ StorageDead(_41);
+ StorageLive(_43);
+ _43 = &raw mut (*_3);
+ FakeRead(ForLet(None), _43);
+ AscribeUserType(_43, o, UserTypeProjection { base: UserType(23), projs: [] });
+ StorageLive(_44);
+ _44 = &raw mut (*_3);
+ FakeRead(ForLet(None), _44);
+ AscribeUserType(_44, o, UserTypeProjection { base: UserType(25), projs: [] });
+ StorageLive(_45);
+ StorageLive(_46);
+ _46 = &raw mut (*_3);
+ _45 = move _46 as *mut dyn std::marker::Send (PointerCoercion(Unsize));
+ StorageDead(_46);
+ FakeRead(ForLet(None), _45);
+ AscribeUserType(_45, o, UserTypeProjection { base: UserType(27), projs: [] });
+ StorageLive(_47);
+ StorageLive(_48);
+ _48 = &raw mut (*_3);
+ _47 = move _48 as *mut [i32] (PointerCoercion(Unsize));
+ StorageDead(_48);
+ FakeRead(ForLet(None), _47);
+ AscribeUserType(_47, o, UserTypeProjection { base: UserType(29), projs: [] });
+ _0 = const ();
+ StorageDead(_47);
+ StorageDead(_45);
+ StorageDead(_44);
+ StorageDead(_43);
+ StorageDead(_33);
+ StorageDead(_31);
+ StorageDead(_30);
+ StorageDead(_29);
+ StorageDead(_19);
+ StorageDead(_17);
+ StorageDead(_16);
+ StorageDead(_15);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/address_of.borrow_and_cast.SimplifyCfg-initial.after.mir b/tests/mir-opt/address_of.borrow_and_cast.SimplifyCfg-initial.after.mir
index 4c67376b5..a07ccd460 100644
--- a/tests/mir-opt/address_of.borrow_and_cast.SimplifyCfg-initial.after.mir
+++ b/tests/mir-opt/address_of.borrow_and_cast.SimplifyCfg-initial.after.mir
@@ -1,47 +1,47 @@
// MIR for `borrow_and_cast` after SimplifyCfg-initial
fn borrow_and_cast(_1: i32) -> () {
- debug x => _1; // in scope 0 at $DIR/address_of.rs:+0:20: +0:25
- let mut _0: (); // return place in scope 0 at $DIR/address_of.rs:+0:32: +0:32
- let _2: *const i32; // in scope 0 at $DIR/address_of.rs:+1:9: +1:10
- let _3: &i32; // in scope 0 at $DIR/address_of.rs:+1:13: +1:15
- let _5: &mut i32; // in scope 0 at $DIR/address_of.rs:+2:13: +2:19
- let mut _7: &mut i32; // in scope 0 at $DIR/address_of.rs:+3:13: +3:19
+ debug x => _1;
+ let mut _0: ();
+ let _2: *const i32;
+ let _3: &i32;
+ let _5: &mut i32;
+ let mut _7: &mut i32;
scope 1 {
- debug p => _2; // in scope 1 at $DIR/address_of.rs:+1:9: +1:10
- let _4: *const i32; // in scope 1 at $DIR/address_of.rs:+2:9: +2:10
+ debug p => _2;
+ let _4: *const i32;
scope 2 {
- debug q => _4; // in scope 2 at $DIR/address_of.rs:+2:9: +2:10
- let _6: *mut i32; // in scope 2 at $DIR/address_of.rs:+3:9: +3:10
+ debug q => _4;
+ let _6: *mut i32;
scope 3 {
- debug r => _6; // in scope 3 at $DIR/address_of.rs:+3:9: +3:10
+ debug r => _6;
}
}
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/address_of.rs:+1:9: +1:10
- StorageLive(_3); // scope 0 at $DIR/address_of.rs:+1:13: +1:15
- _3 = &_1; // scope 0 at $DIR/address_of.rs:+1:13: +1:15
- _2 = &raw const (*_3); // scope 0 at $DIR/address_of.rs:+1:13: +1:15
- FakeRead(ForLet(None), _2); // scope 0 at $DIR/address_of.rs:+1:9: +1:10
- StorageDead(_3); // scope 0 at $DIR/address_of.rs:+1:29: +1:30
- StorageLive(_4); // scope 1 at $DIR/address_of.rs:+2:9: +2:10
- StorageLive(_5); // scope 1 at $DIR/address_of.rs:+2:13: +2:19
- _5 = &mut _1; // scope 1 at $DIR/address_of.rs:+2:13: +2:19
- _4 = &raw const (*_5); // scope 1 at $DIR/address_of.rs:+2:13: +2:19
- FakeRead(ForLet(None), _4); // scope 1 at $DIR/address_of.rs:+2:9: +2:10
- StorageDead(_5); // scope 1 at $DIR/address_of.rs:+2:33: +2:34
- StorageLive(_6); // scope 2 at $DIR/address_of.rs:+3:9: +3:10
- StorageLive(_7); // scope 2 at $DIR/address_of.rs:+3:13: +3:19
- _7 = &mut _1; // scope 2 at $DIR/address_of.rs:+3:13: +3:19
- _6 = &raw mut (*_7); // scope 2 at $DIR/address_of.rs:+3:13: +3:19
- FakeRead(ForLet(None), _6); // scope 2 at $DIR/address_of.rs:+3:9: +3:10
- StorageDead(_7); // scope 2 at $DIR/address_of.rs:+3:31: +3:32
- _0 = const (); // scope 0 at $DIR/address_of.rs:+0:32: +4:2
- StorageDead(_6); // scope 2 at $DIR/address_of.rs:+4:1: +4:2
- StorageDead(_4); // scope 1 at $DIR/address_of.rs:+4:1: +4:2
- StorageDead(_2); // scope 0 at $DIR/address_of.rs:+4:1: +4:2
- return; // scope 0 at $DIR/address_of.rs:+4:2: +4:2
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &_1;
+ _2 = &raw const (*_3);
+ FakeRead(ForLet(None), _2);
+ StorageDead(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = &mut _1;
+ _4 = &raw const (*_5);
+ FakeRead(ForLet(None), _4);
+ StorageDead(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &mut _1;
+ _6 = &raw mut (*_7);
+ FakeRead(ForLet(None), _6);
+ StorageDead(_7);
+ _0 = const ();
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.mir b/tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.mir
deleted file mode 100644
index 4be382fac..000000000
--- a/tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.mir
+++ /dev/null
@@ -1,64 +0,0 @@
-// MIR for `main` after SimplifyCfg-elaborate-drops
-
-fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/array_index_is_temporary.rs:+0:11: +0:11
- let mut _1: [u32; 3]; // in scope 0 at $DIR/array_index_is_temporary.rs:+1:9: +1:14
- let mut _4: &mut usize; // in scope 0 at $DIR/array_index_is_temporary.rs:+3:25: +3:31
- let mut _5: u32; // in scope 0 at $DIR/array_index_is_temporary.rs:+4:12: +4:29
- let mut _6: *mut usize; // in scope 0 at $DIR/array_index_is_temporary.rs:+4:25: +4:26
- let _7: usize; // in scope 0 at $DIR/array_index_is_temporary.rs:+4:7: +4:8
- let mut _8: usize; // in scope 0 at $DIR/array_index_is_temporary.rs:+4:5: +4:9
- let mut _9: bool; // in scope 0 at $DIR/array_index_is_temporary.rs:+4:5: +4:9
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/array_index_is_temporary.rs:+1:9: +1:14
- let mut _2: usize; // in scope 1 at $DIR/array_index_is_temporary.rs:+2:9: +2:14
- scope 2 {
- debug y => _2; // in scope 2 at $DIR/array_index_is_temporary.rs:+2:9: +2:14
- let _3: *mut usize; // in scope 2 at $DIR/array_index_is_temporary.rs:+3:9: +3:10
- scope 3 {
- debug z => _3; // in scope 3 at $DIR/array_index_is_temporary.rs:+3:9: +3:10
- scope 4 {
- }
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/array_index_is_temporary.rs:+1:9: +1:14
- _1 = [const 42_u32, const 43_u32, const 44_u32]; // scope 0 at $DIR/array_index_is_temporary.rs:+1:17: +1:29
- StorageLive(_2); // scope 1 at $DIR/array_index_is_temporary.rs:+2:9: +2:14
- _2 = const 1_usize; // scope 1 at $DIR/array_index_is_temporary.rs:+2:17: +2:18
- StorageLive(_3); // scope 2 at $DIR/array_index_is_temporary.rs:+3:9: +3:10
- StorageLive(_4); // scope 2 at $DIR/array_index_is_temporary.rs:+3:25: +3:31
- _4 = &mut _2; // scope 2 at $DIR/array_index_is_temporary.rs:+3:25: +3:31
- _3 = &raw mut (*_4); // scope 2 at $DIR/array_index_is_temporary.rs:+3:25: +3:31
- StorageDead(_4); // scope 2 at $DIR/array_index_is_temporary.rs:+3:31: +3:32
- StorageLive(_5); // scope 3 at $DIR/array_index_is_temporary.rs:+4:12: +4:29
- StorageLive(_6); // scope 4 at $DIR/array_index_is_temporary.rs:+4:25: +4:26
- _6 = _3; // scope 4 at $DIR/array_index_is_temporary.rs:+4:25: +4:26
- _5 = foo(move _6) -> bb1; // scope 4 at $DIR/array_index_is_temporary.rs:+4:21: +4:27
- // mir::Constant
- // + span: $DIR/array_index_is_temporary.rs:17:21: 17:24
- // + literal: Const { ty: unsafe fn(*mut usize) -> u32 {foo}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_6); // scope 4 at $DIR/array_index_is_temporary.rs:+4:26: +4:27
- StorageLive(_7); // scope 3 at $DIR/array_index_is_temporary.rs:+4:7: +4:8
- _7 = _2; // scope 3 at $DIR/array_index_is_temporary.rs:+4:7: +4:8
- _8 = Len(_1); // scope 3 at $DIR/array_index_is_temporary.rs:+4:5: +4:9
- _9 = Lt(_7, _8); // scope 3 at $DIR/array_index_is_temporary.rs:+4:5: +4:9
- assert(move _9, "index out of bounds: the length is {} but the index is {}", move _8, _7) -> bb2; // scope 3 at $DIR/array_index_is_temporary.rs:+4:5: +4:9
- }
-
- bb2: {
- _1[_7] = move _5; // scope 3 at $DIR/array_index_is_temporary.rs:+4:5: +4:29
- StorageDead(_5); // scope 3 at $DIR/array_index_is_temporary.rs:+4:28: +4:29
- StorageDead(_7); // scope 3 at $DIR/array_index_is_temporary.rs:+4:29: +4:30
- _0 = const (); // scope 0 at $DIR/array_index_is_temporary.rs:+0:11: +5:2
- StorageDead(_3); // scope 2 at $DIR/array_index_is_temporary.rs:+5:1: +5:2
- StorageDead(_2); // scope 1 at $DIR/array_index_is_temporary.rs:+5:1: +5:2
- StorageDead(_1); // scope 0 at $DIR/array_index_is_temporary.rs:+5:1: +5:2
- return; // scope 0 at $DIR/array_index_is_temporary.rs:+5:2: +5:2
- }
-}
diff --git a/tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir b/tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir
new file mode 100644
index 000000000..9b4c221df
--- /dev/null
+++ b/tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir
@@ -0,0 +1,61 @@
+// MIR for `main` after SimplifyCfg-elaborate-drops
+
+fn main() -> () {
+ let mut _0: ();
+ let mut _1: [u32; 3];
+ let mut _4: &mut usize;
+ let mut _5: u32;
+ let mut _6: *mut usize;
+ let _7: usize;
+ let mut _8: usize;
+ let mut _9: bool;
+ scope 1 {
+ debug x => _1;
+ let mut _2: usize;
+ scope 2 {
+ debug y => _2;
+ let _3: *mut usize;
+ scope 3 {
+ debug z => _3;
+ scope 4 {
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = [const 42_u32, const 43_u32, const 44_u32];
+ StorageLive(_2);
+ _2 = const 1_usize;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &mut _2;
+ _3 = &raw mut (*_4);
+ StorageDead(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = _3;
+ _5 = foo(move _6) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_6);
+ StorageLive(_7);
+ _7 = _2;
+ _8 = Len(_1);
+ _9 = Lt(_7, _8);
+ assert(move _9, "index out of bounds: the length is {} but the index is {}", move _8, _7) -> [success: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ _1[_7] = move _5;
+ StorageDead(_5);
+ StorageDead(_7);
+ _0 = const ();
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+}
diff --git a/tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir b/tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
new file mode 100644
index 000000000..4b05610f7
--- /dev/null
+++ b/tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
@@ -0,0 +1,61 @@
+// MIR for `main` after SimplifyCfg-elaborate-drops
+
+fn main() -> () {
+ let mut _0: ();
+ let mut _1: [u32; 3];
+ let mut _4: &mut usize;
+ let mut _5: u32;
+ let mut _6: *mut usize;
+ let _7: usize;
+ let mut _8: usize;
+ let mut _9: bool;
+ scope 1 {
+ debug x => _1;
+ let mut _2: usize;
+ scope 2 {
+ debug y => _2;
+ let _3: *mut usize;
+ scope 3 {
+ debug z => _3;
+ scope 4 {
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = [const 42_u32, const 43_u32, const 44_u32];
+ StorageLive(_2);
+ _2 = const 1_usize;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &mut _2;
+ _3 = &raw mut (*_4);
+ StorageDead(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = _3;
+ _5 = foo(move _6) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_6);
+ StorageLive(_7);
+ _7 = _2;
+ _8 = Len(_1);
+ _9 = Lt(_7, _8);
+ assert(move _9, "index out of bounds: the length is {} but the index is {}", move _8, _7) -> [success: bb2, unwind continue];
+ }
+
+ bb2: {
+ _1[_7] = move _5;
+ StorageDead(_5);
+ StorageDead(_7);
+ _0 = const ();
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+}
diff --git a/tests/mir-opt/array_index_is_temporary.rs b/tests/mir-opt/array_index_is_temporary.rs
index 702b9c70e..950429fb6 100644
--- a/tests/mir-opt/array_index_is_temporary.rs
+++ b/tests/mir-opt/array_index_is_temporary.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Retagging (from Stacked Borrows) relies on the array index being a fresh
// temporary, so that side-effects cannot change it.
// Test that this is indeed the case.
diff --git a/tests/mir-opt/asm_unwind_panic_abort.main.AbortUnwindingCalls.after.mir b/tests/mir-opt/asm_unwind_panic_abort.main.AbortUnwindingCalls.after.mir
index f6954ab35..a59ffe97b 100644
--- a/tests/mir-opt/asm_unwind_panic_abort.main.AbortUnwindingCalls.after.mir
+++ b/tests/mir-opt/asm_unwind_panic_abort.main.AbortUnwindingCalls.after.mir
@@ -1,20 +1,20 @@
// MIR for `main` after AbortUnwindingCalls
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/asm_unwind_panic_abort.rs:+0:11: +0:11
- let _1: (); // in scope 0 at $DIR/asm_unwind_panic_abort.rs:+2:9: +2:49
+ let mut _0: ();
+ let _1: ();
scope 1 {
}
bb0: {
- StorageLive(_1); // scope 1 at $DIR/asm_unwind_panic_abort.rs:+2:9: +2:49
- _1 = const (); // scope 1 at $DIR/asm_unwind_panic_abort.rs:+2:9: +2:49
- asm!("", options(MAY_UNWIND)) -> [return: bb1, unwind terminate]; // scope 1 at $DIR/asm_unwind_panic_abort.rs:+2:9: +2:49
+ StorageLive(_1);
+ _1 = const ();
+ asm!("", options(MAY_UNWIND)) -> [return: bb1, unwind terminate];
}
bb1: {
- StorageDead(_1); // scope 1 at $DIR/asm_unwind_panic_abort.rs:+2:48: +2:49
- _0 = const (); // scope 1 at $DIR/asm_unwind_panic_abort.rs:+1:5: +3:6
- return; // scope 0 at $DIR/asm_unwind_panic_abort.rs:+4:2: +4:2
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/basic_assignment.main.ElaborateDrops.diff b/tests/mir-opt/basic_assignment.main.ElaborateDrops.diff
index d663c3435..9c7b3c519 100644
--- a/tests/mir-opt/basic_assignment.main.ElaborateDrops.diff
+++ b/tests/mir-opt/basic_assignment.main.ElaborateDrops.diff
@@ -2,88 +2,88 @@
+ // MIR for `main` after ElaborateDrops
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/basic_assignment.rs:+0:11: +0:11
- let _1: bool; // in scope 0 at $DIR/basic_assignment.rs:+1:9: +1:17
- let mut _3: bool; // in scope 0 at $DIR/basic_assignment.rs:+6:16: +6:24
- let mut _6: std::option::Option<std::boxed::Box<u32>>; // in scope 0 at $DIR/basic_assignment.rs:+13:14: +13:20
+ let mut _0: ();
+ let _1: bool;
+ let mut _3: bool;
+ let mut _6: std::option::Option<std::boxed::Box<u32>>;
scope 1 {
- debug nodrop_x => _1; // in scope 1 at $DIR/basic_assignment.rs:+1:9: +1:17
- let _2: bool; // in scope 1 at $DIR/basic_assignment.rs:+2:9: +2:17
+ debug nodrop_x => _1;
+ let _2: bool;
scope 2 {
- debug nodrop_y => _2; // in scope 2 at $DIR/basic_assignment.rs:+2:9: +2:17
- let _4: std::option::Option<std::boxed::Box<u32>>; // in scope 2 at $DIR/basic_assignment.rs:+8:9: +8:15
+ debug nodrop_y => _2;
+ let _4: std::option::Option<std::boxed::Box<u32>>;
scope 3 {
- debug drop_x => _4; // in scope 3 at $DIR/basic_assignment.rs:+8:9: +8:15
- let _5: std::option::Option<std::boxed::Box<u32>>; // in scope 3 at $DIR/basic_assignment.rs:+9:9: +9:15
+ debug drop_x => _4;
+ let _5: std::option::Option<std::boxed::Box<u32>>;
scope 4 {
- debug drop_y => _5; // in scope 4 at $DIR/basic_assignment.rs:+9:9: +9:15
+ debug drop_y => _5;
}
}
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/basic_assignment.rs:+1:9: +1:17
- _1 = const false; // scope 0 at $DIR/basic_assignment.rs:+1:20: +1:25
- StorageLive(_2); // scope 1 at $DIR/basic_assignment.rs:+2:9: +2:17
- StorageLive(_3); // scope 2 at $DIR/basic_assignment.rs:+6:16: +6:24
- _3 = _1; // scope 2 at $DIR/basic_assignment.rs:+6:16: +6:24
- _2 = move _3; // scope 2 at $DIR/basic_assignment.rs:+6:5: +6:24
- StorageDead(_3); // scope 2 at $DIR/basic_assignment.rs:+6:23: +6:24
- StorageLive(_4); // scope 2 at $DIR/basic_assignment.rs:+8:9: +8:15
- _4 = Option::<Box<u32>>::None; // scope 2 at $DIR/basic_assignment.rs:+8:36: +8:40
- StorageLive(_5); // scope 3 at $DIR/basic_assignment.rs:+9:9: +9:15
- StorageLive(_6); // scope 4 at $DIR/basic_assignment.rs:+13:14: +13:20
- _6 = move _4; // scope 4 at $DIR/basic_assignment.rs:+13:14: +13:20
-- drop(_5) -> [return: bb1, unwind: bb2]; // scope 4 at $DIR/basic_assignment.rs:+13:5: +13:11
-+ goto -> bb1; // scope 4 at $DIR/basic_assignment.rs:+13:5: +13:11
+ StorageLive(_1);
+ _1 = const false;
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = move _3;
+ StorageDead(_3);
+ StorageLive(_4);
+ _4 = Option::<Box<u32>>::None;
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = move _4;
+- drop(_5) -> [return: bb1, unwind: bb2];
++ goto -> bb1;
}
bb1: {
- _5 = move _6; // scope 4 at $DIR/basic_assignment.rs:+13:5: +13:11
-- drop(_6) -> [return: bb3, unwind: bb6]; // scope 4 at $DIR/basic_assignment.rs:+13:19: +13:20
-+ goto -> bb3; // scope 4 at $DIR/basic_assignment.rs:+13:19: +13:20
+ _5 = move _6;
+- drop(_6) -> [return: bb3, unwind: bb6];
++ goto -> bb3;
}
bb2 (cleanup): {
- _5 = move _6; // scope 4 at $DIR/basic_assignment.rs:+13:5: +13:11
- drop(_6) -> [return: bb6, unwind terminate]; // scope 4 at $DIR/basic_assignment.rs:+13:19: +13:20
+ _5 = move _6;
+ drop(_6) -> [return: bb6, unwind terminate];
}
bb3: {
- StorageDead(_6); // scope 4 at $DIR/basic_assignment.rs:+13:19: +13:20
- _0 = const (); // scope 0 at $DIR/basic_assignment.rs:+0:11: +14:2
- drop(_5) -> [return: bb4, unwind: bb7]; // scope 3 at $DIR/basic_assignment.rs:+14:1: +14:2
+ StorageDead(_6);
+ _0 = const ();
+ drop(_5) -> [return: bb4, unwind: bb7];
}
bb4: {
- StorageDead(_5); // scope 3 at $DIR/basic_assignment.rs:+14:1: +14:2
-- drop(_4) -> bb5; // scope 2 at $DIR/basic_assignment.rs:+14:1: +14:2
-+ goto -> bb5; // scope 2 at $DIR/basic_assignment.rs:+14:1: +14:2
+ StorageDead(_5);
+- drop(_4) -> [return: bb5, unwind continue];
++ goto -> bb5;
}
bb5: {
- StorageDead(_4); // scope 2 at $DIR/basic_assignment.rs:+14:1: +14:2
- StorageDead(_2); // scope 1 at $DIR/basic_assignment.rs:+14:1: +14:2
- StorageDead(_1); // scope 0 at $DIR/basic_assignment.rs:+14:1: +14:2
- return; // scope 0 at $DIR/basic_assignment.rs:+14:2: +14:2
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
bb6 (cleanup): {
- drop(_5) -> [return: bb7, unwind terminate]; // scope 3 at $DIR/basic_assignment.rs:+14:1: +14:2
+ drop(_5) -> [return: bb7, unwind terminate];
}
bb7 (cleanup): {
-- drop(_4) -> [return: bb8, unwind terminate]; // scope 2 at $DIR/basic_assignment.rs:+14:1: +14:2
-+ goto -> bb8; // scope 2 at $DIR/basic_assignment.rs:+14:1: +14:2
+- drop(_4) -> [return: bb8, unwind terminate];
++ goto -> bb8;
}
bb8 (cleanup): {
- resume; // scope 0 at $DIR/basic_assignment.rs:+0:1: +14:2
+ resume;
+ }
+
+ bb9 (cleanup): {
-+ unreachable; // scope 0 at $DIR/basic_assignment.rs:+0:1: +14:2
++ unreachable;
}
}
diff --git a/tests/mir-opt/basic_assignment.main.SimplifyCfg-initial.after.mir b/tests/mir-opt/basic_assignment.main.SimplifyCfg-initial.after.mir
index d63497e3a..a9bc2e890 100644
--- a/tests/mir-opt/basic_assignment.main.SimplifyCfg-initial.after.mir
+++ b/tests/mir-opt/basic_assignment.main.SimplifyCfg-initial.after.mir
@@ -5,82 +5,82 @@
| 1: user_ty: Canonical { value: Ty(std::option::Option<std::boxed::Box<u32>>), max_universe: U0, variables: [] }, span: $DIR/basic_assignment.rs:20:17: 20:33, inferred_ty: std::option::Option<std::boxed::Box<u32>>
|
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/basic_assignment.rs:+0:11: +0:11
- let _1: bool; // in scope 0 at $DIR/basic_assignment.rs:+1:9: +1:17
- let mut _3: bool; // in scope 0 at $DIR/basic_assignment.rs:+6:16: +6:24
- let mut _6: std::option::Option<std::boxed::Box<u32>>; // in scope 0 at $DIR/basic_assignment.rs:+13:14: +13:20
+ let mut _0: ();
+ let _1: bool;
+ let mut _3: bool;
+ let mut _6: std::option::Option<std::boxed::Box<u32>>;
scope 1 {
- debug nodrop_x => _1; // in scope 1 at $DIR/basic_assignment.rs:+1:9: +1:17
- let _2: bool; // in scope 1 at $DIR/basic_assignment.rs:+2:9: +2:17
+ debug nodrop_x => _1;
+ let _2: bool;
scope 2 {
- debug nodrop_y => _2; // in scope 2 at $DIR/basic_assignment.rs:+2:9: +2:17
- let _4: std::option::Option<std::boxed::Box<u32>> as UserTypeProjection { base: UserType(0), projs: [] }; // in scope 2 at $DIR/basic_assignment.rs:+8:9: +8:15
+ debug nodrop_y => _2;
+ let _4: std::option::Option<std::boxed::Box<u32>> as UserTypeProjection { base: UserType(0), projs: [] };
scope 3 {
- debug drop_x => _4; // in scope 3 at $DIR/basic_assignment.rs:+8:9: +8:15
- let _5: std::option::Option<std::boxed::Box<u32>>; // in scope 3 at $DIR/basic_assignment.rs:+9:9: +9:15
+ debug drop_x => _4;
+ let _5: std::option::Option<std::boxed::Box<u32>>;
scope 4 {
- debug drop_y => _5; // in scope 4 at $DIR/basic_assignment.rs:+9:9: +9:15
+ debug drop_y => _5;
}
}
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/basic_assignment.rs:+1:9: +1:17
- _1 = const false; // scope 0 at $DIR/basic_assignment.rs:+1:20: +1:25
- FakeRead(ForLet(None), _1); // scope 0 at $DIR/basic_assignment.rs:+1:9: +1:17
- StorageLive(_2); // scope 1 at $DIR/basic_assignment.rs:+2:9: +2:17
- StorageLive(_3); // scope 2 at $DIR/basic_assignment.rs:+6:16: +6:24
- _3 = _1; // scope 2 at $DIR/basic_assignment.rs:+6:16: +6:24
- _2 = move _3; // scope 2 at $DIR/basic_assignment.rs:+6:5: +6:24
- StorageDead(_3); // scope 2 at $DIR/basic_assignment.rs:+6:23: +6:24
- StorageLive(_4); // scope 2 at $DIR/basic_assignment.rs:+8:9: +8:15
- _4 = Option::<Box<u32>>::None; // scope 2 at $DIR/basic_assignment.rs:+8:36: +8:40
- FakeRead(ForLet(None), _4); // scope 2 at $DIR/basic_assignment.rs:+8:9: +8:15
- AscribeUserType(_4, o, UserTypeProjection { base: UserType(1), projs: [] }); // scope 2 at $DIR/basic_assignment.rs:+8:17: +8:33
- StorageLive(_5); // scope 3 at $DIR/basic_assignment.rs:+9:9: +9:15
- StorageLive(_6); // scope 4 at $DIR/basic_assignment.rs:+13:14: +13:20
- _6 = move _4; // scope 4 at $DIR/basic_assignment.rs:+13:14: +13:20
- drop(_5) -> [return: bb1, unwind: bb2]; // scope 4 at $DIR/basic_assignment.rs:+13:5: +13:11
+ StorageLive(_1);
+ _1 = const false;
+ FakeRead(ForLet(None), _1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = move _3;
+ StorageDead(_3);
+ StorageLive(_4);
+ _4 = Option::<Box<u32>>::None;
+ FakeRead(ForLet(None), _4);
+ AscribeUserType(_4, o, UserTypeProjection { base: UserType(1), projs: [] });
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = move _4;
+ drop(_5) -> [return: bb1, unwind: bb2];
}
bb1: {
- _5 = move _6; // scope 4 at $DIR/basic_assignment.rs:+13:5: +13:11
- drop(_6) -> [return: bb3, unwind: bb6]; // scope 4 at $DIR/basic_assignment.rs:+13:19: +13:20
+ _5 = move _6;
+ drop(_6) -> [return: bb3, unwind: bb6];
}
bb2 (cleanup): {
- _5 = move _6; // scope 4 at $DIR/basic_assignment.rs:+13:5: +13:11
- drop(_6) -> [return: bb6, unwind terminate]; // scope 4 at $DIR/basic_assignment.rs:+13:19: +13:20
+ _5 = move _6;
+ drop(_6) -> [return: bb6, unwind terminate];
}
bb3: {
- StorageDead(_6); // scope 4 at $DIR/basic_assignment.rs:+13:19: +13:20
- _0 = const (); // scope 0 at $DIR/basic_assignment.rs:+0:11: +14:2
- drop(_5) -> [return: bb4, unwind: bb7]; // scope 3 at $DIR/basic_assignment.rs:+14:1: +14:2
+ StorageDead(_6);
+ _0 = const ();
+ drop(_5) -> [return: bb4, unwind: bb7];
}
bb4: {
- StorageDead(_5); // scope 3 at $DIR/basic_assignment.rs:+14:1: +14:2
- drop(_4) -> [return: bb5, unwind: bb8]; // scope 2 at $DIR/basic_assignment.rs:+14:1: +14:2
+ StorageDead(_5);
+ drop(_4) -> [return: bb5, unwind: bb8];
}
bb5: {
- StorageDead(_4); // scope 2 at $DIR/basic_assignment.rs:+14:1: +14:2
- StorageDead(_2); // scope 1 at $DIR/basic_assignment.rs:+14:1: +14:2
- StorageDead(_1); // scope 0 at $DIR/basic_assignment.rs:+14:1: +14:2
- return; // scope 0 at $DIR/basic_assignment.rs:+14:2: +14:2
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
bb6 (cleanup): {
- drop(_5) -> [return: bb7, unwind terminate]; // scope 3 at $DIR/basic_assignment.rs:+14:1: +14:2
+ drop(_5) -> [return: bb7, unwind terminate];
}
bb7 (cleanup): {
- drop(_4) -> [return: bb8, unwind terminate]; // scope 2 at $DIR/basic_assignment.rs:+14:1: +14:2
+ drop(_4) -> [return: bb8, unwind terminate];
}
bb8 (cleanup): {
- resume; // scope 0 at $DIR/basic_assignment.rs:+0:1: +14:2
+ resume;
}
}
diff --git a/tests/mir-opt/bool_compare.opt1.InstSimplify.diff b/tests/mir-opt/bool_compare.opt1.InstSimplify.diff
index 6c9df8f04..8d0011d50 100644
--- a/tests/mir-opt/bool_compare.opt1.InstSimplify.diff
+++ b/tests/mir-opt/bool_compare.opt1.InstSimplify.diff
@@ -2,34 +2,34 @@
+ // MIR for `opt1` after InstSimplify
fn opt1(_1: bool) -> u32 {
- debug x => _1; // in scope 0 at $DIR/bool_compare.rs:+0:9: +0:10
- let mut _0: u32; // return place in scope 0 at $DIR/bool_compare.rs:+0:21: +0:24
- let mut _2: bool; // in scope 0 at $DIR/bool_compare.rs:+1:8: +1:17
- let mut _3: bool; // in scope 0 at $DIR/bool_compare.rs:+1:8: +1:9
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: bool;
+ let mut _3: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:17
- StorageLive(_3); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:9
- _3 = _1; // scope 0 at $DIR/bool_compare.rs:+1:8: +1:9
-- _2 = Ne(move _3, const true); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:17
-+ _2 = Not(move _3); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:17
- StorageDead(_3); // scope 0 at $DIR/bool_compare.rs:+1:16: +1:17
- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/bool_compare.rs:+1:8: +1:17
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = Ne(move _3, const true);
++ _2 = Not(move _3);
+ StorageDead(_3);
+ switchInt(move _2) -> [0: bb2, otherwise: bb1];
}
bb1: {
- _0 = const 0_u32; // scope 0 at $DIR/bool_compare.rs:+1:20: +1:21
- goto -> bb3; // scope 0 at $DIR/bool_compare.rs:+1:5: +1:34
+ _0 = const 0_u32;
+ goto -> bb3;
}
bb2: {
- _0 = const 1_u32; // scope 0 at $DIR/bool_compare.rs:+1:31: +1:32
- goto -> bb3; // scope 0 at $DIR/bool_compare.rs:+1:5: +1:34
+ _0 = const 1_u32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/bool_compare.rs:+1:33: +1:34
- return; // scope 0 at $DIR/bool_compare.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/bool_compare.opt2.InstSimplify.diff b/tests/mir-opt/bool_compare.opt2.InstSimplify.diff
index 9fb398265..35f106870 100644
--- a/tests/mir-opt/bool_compare.opt2.InstSimplify.diff
+++ b/tests/mir-opt/bool_compare.opt2.InstSimplify.diff
@@ -2,34 +2,34 @@
+ // MIR for `opt2` after InstSimplify
fn opt2(_1: bool) -> u32 {
- debug x => _1; // in scope 0 at $DIR/bool_compare.rs:+0:9: +0:10
- let mut _0: u32; // return place in scope 0 at $DIR/bool_compare.rs:+0:21: +0:24
- let mut _2: bool; // in scope 0 at $DIR/bool_compare.rs:+1:8: +1:17
- let mut _3: bool; // in scope 0 at $DIR/bool_compare.rs:+1:16: +1:17
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: bool;
+ let mut _3: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:17
- StorageLive(_3); // scope 0 at $DIR/bool_compare.rs:+1:16: +1:17
- _3 = _1; // scope 0 at $DIR/bool_compare.rs:+1:16: +1:17
-- _2 = Ne(const true, move _3); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:17
-+ _2 = Not(move _3); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:17
- StorageDead(_3); // scope 0 at $DIR/bool_compare.rs:+1:16: +1:17
- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/bool_compare.rs:+1:8: +1:17
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = Ne(const true, move _3);
++ _2 = Not(move _3);
+ StorageDead(_3);
+ switchInt(move _2) -> [0: bb2, otherwise: bb1];
}
bb1: {
- _0 = const 0_u32; // scope 0 at $DIR/bool_compare.rs:+1:20: +1:21
- goto -> bb3; // scope 0 at $DIR/bool_compare.rs:+1:5: +1:34
+ _0 = const 0_u32;
+ goto -> bb3;
}
bb2: {
- _0 = const 1_u32; // scope 0 at $DIR/bool_compare.rs:+1:31: +1:32
- goto -> bb3; // scope 0 at $DIR/bool_compare.rs:+1:5: +1:34
+ _0 = const 1_u32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/bool_compare.rs:+1:33: +1:34
- return; // scope 0 at $DIR/bool_compare.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/bool_compare.opt3.InstSimplify.diff b/tests/mir-opt/bool_compare.opt3.InstSimplify.diff
index 3a47da867..ab15c30ca 100644
--- a/tests/mir-opt/bool_compare.opt3.InstSimplify.diff
+++ b/tests/mir-opt/bool_compare.opt3.InstSimplify.diff
@@ -2,34 +2,34 @@
+ // MIR for `opt3` after InstSimplify
fn opt3(_1: bool) -> u32 {
- debug x => _1; // in scope 0 at $DIR/bool_compare.rs:+0:9: +0:10
- let mut _0: u32; // return place in scope 0 at $DIR/bool_compare.rs:+0:21: +0:24
- let mut _2: bool; // in scope 0 at $DIR/bool_compare.rs:+1:8: +1:18
- let mut _3: bool; // in scope 0 at $DIR/bool_compare.rs:+1:8: +1:9
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: bool;
+ let mut _3: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:18
- StorageLive(_3); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:9
- _3 = _1; // scope 0 at $DIR/bool_compare.rs:+1:8: +1:9
-- _2 = Eq(move _3, const false); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:18
-+ _2 = Not(move _3); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:18
- StorageDead(_3); // scope 0 at $DIR/bool_compare.rs:+1:17: +1:18
- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/bool_compare.rs:+1:8: +1:18
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = Eq(move _3, const false);
++ _2 = Not(move _3);
+ StorageDead(_3);
+ switchInt(move _2) -> [0: bb2, otherwise: bb1];
}
bb1: {
- _0 = const 0_u32; // scope 0 at $DIR/bool_compare.rs:+1:21: +1:22
- goto -> bb3; // scope 0 at $DIR/bool_compare.rs:+1:5: +1:35
+ _0 = const 0_u32;
+ goto -> bb3;
}
bb2: {
- _0 = const 1_u32; // scope 0 at $DIR/bool_compare.rs:+1:32: +1:33
- goto -> bb3; // scope 0 at $DIR/bool_compare.rs:+1:5: +1:35
+ _0 = const 1_u32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/bool_compare.rs:+1:34: +1:35
- return; // scope 0 at $DIR/bool_compare.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/bool_compare.opt4.InstSimplify.diff b/tests/mir-opt/bool_compare.opt4.InstSimplify.diff
index 5319c987d..40fd1cfe1 100644
--- a/tests/mir-opt/bool_compare.opt4.InstSimplify.diff
+++ b/tests/mir-opt/bool_compare.opt4.InstSimplify.diff
@@ -2,34 +2,34 @@
+ // MIR for `opt4` after InstSimplify
fn opt4(_1: bool) -> u32 {
- debug x => _1; // in scope 0 at $DIR/bool_compare.rs:+0:9: +0:10
- let mut _0: u32; // return place in scope 0 at $DIR/bool_compare.rs:+0:21: +0:24
- let mut _2: bool; // in scope 0 at $DIR/bool_compare.rs:+1:8: +1:18
- let mut _3: bool; // in scope 0 at $DIR/bool_compare.rs:+1:17: +1:18
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: bool;
+ let mut _3: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:18
- StorageLive(_3); // scope 0 at $DIR/bool_compare.rs:+1:17: +1:18
- _3 = _1; // scope 0 at $DIR/bool_compare.rs:+1:17: +1:18
-- _2 = Eq(const false, move _3); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:18
-+ _2 = Not(move _3); // scope 0 at $DIR/bool_compare.rs:+1:8: +1:18
- StorageDead(_3); // scope 0 at $DIR/bool_compare.rs:+1:17: +1:18
- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/bool_compare.rs:+1:8: +1:18
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = Eq(const false, move _3);
++ _2 = Not(move _3);
+ StorageDead(_3);
+ switchInt(move _2) -> [0: bb2, otherwise: bb1];
}
bb1: {
- _0 = const 0_u32; // scope 0 at $DIR/bool_compare.rs:+1:21: +1:22
- goto -> bb3; // scope 0 at $DIR/bool_compare.rs:+1:5: +1:35
+ _0 = const 0_u32;
+ goto -> bb3;
}
bb2: {
- _0 = const 1_u32; // scope 0 at $DIR/bool_compare.rs:+1:32: +1:33
- goto -> bb3; // scope 0 at $DIR/bool_compare.rs:+1:5: +1:35
+ _0 = const 1_u32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/bool_compare.rs:+1:34: +1:35
- return; // scope 0 at $DIR/bool_compare.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/box_expr.main.ElaborateDrops.before.mir b/tests/mir-opt/box_expr.main.ElaborateDrops.before.mir
deleted file mode 100644
index bac5b21df..000000000
--- a/tests/mir-opt/box_expr.main.ElaborateDrops.before.mir
+++ /dev/null
@@ -1,80 +0,0 @@
-// MIR for `main` before ElaborateDrops
-
-fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/box_expr.rs:+0:11: +0:11
- let _1: std::boxed::Box<S>; // in scope 0 at $DIR/box_expr.rs:+1:9: +1:10
- let mut _2: usize; // in scope 0 at $DIR/box_expr.rs:+2:5: +2:23
- let mut _3: usize; // in scope 0 at $DIR/box_expr.rs:+2:5: +2:23
- let mut _4: *mut u8; // in scope 0 at $DIR/box_expr.rs:+2:5: +2:23
- let mut _5: std::boxed::Box<S>; // in scope 0 at $DIR/box_expr.rs:+2:5: +2:23
- let _6: (); // in scope 0 at $DIR/box_expr.rs:+3:5: +3:12
- let mut _7: std::boxed::Box<S>; // in scope 0 at $DIR/box_expr.rs:+3:10: +3:11
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/box_expr.rs:+1:9: +1:10
- }
- scope 2 {
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/box_expr.rs:+1:9: +1:10
- _2 = SizeOf(S); // scope 2 at $DIR/box_expr.rs:+2:5: +2:23
- _3 = AlignOf(S); // scope 2 at $DIR/box_expr.rs:+2:5: +2:23
- _4 = alloc::alloc::exchange_malloc(move _2, move _3) -> bb1; // scope 2 at $DIR/box_expr.rs:+2:5: +2:23
- // mir::Constant
- // + span: $DIR/box_expr.rs:8:5: 8:23
- // + literal: Const { ty: unsafe fn(usize, usize) -> *mut u8 {alloc::alloc::exchange_malloc}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageLive(_5); // scope 0 at $DIR/box_expr.rs:+2:5: +2:23
- _5 = ShallowInitBox(move _4, S); // scope 0 at $DIR/box_expr.rs:+2:5: +2:23
- (*_5) = S::new() -> [return: bb2, unwind: bb8]; // scope 0 at $DIR/box_expr.rs:+2:14: +2:22
- // mir::Constant
- // + span: $DIR/box_expr.rs:8:14: 8:20
- // + literal: Const { ty: fn() -> S {S::new}, val: Value(<ZST>) }
- }
-
- bb2: {
- _1 = move _5; // scope 0 at $DIR/box_expr.rs:+2:5: +2:23
- drop(_5) -> bb3; // scope 0 at $DIR/box_expr.rs:+2:22: +2:23
- }
-
- bb3: {
- StorageDead(_5); // scope 0 at $DIR/box_expr.rs:+2:22: +2:23
- StorageLive(_6); // scope 1 at $DIR/box_expr.rs:+3:5: +3:12
- StorageLive(_7); // scope 1 at $DIR/box_expr.rs:+3:10: +3:11
- _7 = move _1; // scope 1 at $DIR/box_expr.rs:+3:10: +3:11
- _6 = std::mem::drop::<Box<S>>(move _7) -> [return: bb4, unwind: bb6]; // scope 1 at $DIR/box_expr.rs:+3:5: +3:12
- // mir::Constant
- // + span: $DIR/box_expr.rs:9:5: 9:9
- // + literal: Const { ty: fn(Box<S>) {std::mem::drop::<Box<S>>}, val: Value(<ZST>) }
- }
-
- bb4: {
- StorageDead(_7); // scope 1 at $DIR/box_expr.rs:+3:11: +3:12
- StorageDead(_6); // scope 1 at $DIR/box_expr.rs:+3:12: +3:13
- _0 = const (); // scope 0 at $DIR/box_expr.rs:+0:11: +4:2
- drop(_1) -> bb5; // scope 0 at $DIR/box_expr.rs:+4:1: +4:2
- }
-
- bb5: {
- StorageDead(_1); // scope 0 at $DIR/box_expr.rs:+4:1: +4:2
- return; // scope 0 at $DIR/box_expr.rs:+4:2: +4:2
- }
-
- bb6 (cleanup): {
- drop(_7) -> [return: bb7, unwind terminate]; // scope 1 at $DIR/box_expr.rs:+3:11: +3:12
- }
-
- bb7 (cleanup): {
- drop(_1) -> [return: bb9, unwind terminate]; // scope 0 at $DIR/box_expr.rs:+4:1: +4:2
- }
-
- bb8 (cleanup): {
- drop(_5) -> [return: bb9, unwind terminate]; // scope 0 at $DIR/box_expr.rs:+2:22: +2:23
- }
-
- bb9 (cleanup): {
- resume; // scope 0 at $DIR/box_expr.rs:+0:1: +4:2
- }
-}
diff --git a/tests/mir-opt/box_expr.main.ElaborateDrops.before.panic-abort.mir b/tests/mir-opt/box_expr.main.ElaborateDrops.before.panic-abort.mir
new file mode 100644
index 000000000..d196b045a
--- /dev/null
+++ b/tests/mir-opt/box_expr.main.ElaborateDrops.before.panic-abort.mir
@@ -0,0 +1,71 @@
+// MIR for `main` before ElaborateDrops
+
+fn main() -> () {
+ let mut _0: ();
+ let _1: std::boxed::Box<S>;
+ let mut _2: usize;
+ let mut _3: usize;
+ let mut _4: *mut u8;
+ let mut _5: std::boxed::Box<S>;
+ let _6: ();
+ let mut _7: std::boxed::Box<S>;
+ scope 1 {
+ debug x => _1;
+ }
+ scope 2 {
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _2 = SizeOf(S);
+ _3 = AlignOf(S);
+ _4 = alloc::alloc::exchange_malloc(move _2, move _3) -> [return: bb1, unwind: bb9];
+ }
+
+ bb1: {
+ StorageLive(_5);
+ _5 = ShallowInitBox(move _4, S);
+ (*_5) = S::new() -> [return: bb2, unwind: bb8];
+ }
+
+ bb2: {
+ _1 = move _5;
+ drop(_5) -> [return: bb3, unwind: bb9];
+ }
+
+ bb3: {
+ StorageDead(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = move _1;
+ _6 = std::mem::drop::<Box<S>>(move _7) -> [return: bb4, unwind: bb6];
+ }
+
+ bb4: {
+ StorageDead(_7);
+ StorageDead(_6);
+ _0 = const ();
+ drop(_1) -> [return: bb5, unwind: bb9];
+ }
+
+ bb5: {
+ StorageDead(_1);
+ return;
+ }
+
+ bb6 (cleanup): {
+ drop(_7) -> [return: bb7, unwind terminate];
+ }
+
+ bb7 (cleanup): {
+ drop(_1) -> [return: bb9, unwind terminate];
+ }
+
+ bb8 (cleanup): {
+ drop(_5) -> [return: bb9, unwind terminate];
+ }
+
+ bb9 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/box_expr.main.ElaborateDrops.before.panic-unwind.mir b/tests/mir-opt/box_expr.main.ElaborateDrops.before.panic-unwind.mir
new file mode 100644
index 000000000..a72d22a9c
--- /dev/null
+++ b/tests/mir-opt/box_expr.main.ElaborateDrops.before.panic-unwind.mir
@@ -0,0 +1,71 @@
+// MIR for `main` before ElaborateDrops
+
+fn main() -> () {
+ let mut _0: ();
+ let _1: std::boxed::Box<S>;
+ let mut _2: usize;
+ let mut _3: usize;
+ let mut _4: *mut u8;
+ let mut _5: std::boxed::Box<S>;
+ let _6: ();
+ let mut _7: std::boxed::Box<S>;
+ scope 1 {
+ debug x => _1;
+ }
+ scope 2 {
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _2 = SizeOf(S);
+ _3 = AlignOf(S);
+ _4 = alloc::alloc::exchange_malloc(move _2, move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageLive(_5);
+ _5 = ShallowInitBox(move _4, S);
+ (*_5) = S::new() -> [return: bb2, unwind: bb8];
+ }
+
+ bb2: {
+ _1 = move _5;
+ drop(_5) -> [return: bb3, unwind continue];
+ }
+
+ bb3: {
+ StorageDead(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = move _1;
+ _6 = std::mem::drop::<Box<S>>(move _7) -> [return: bb4, unwind: bb6];
+ }
+
+ bb4: {
+ StorageDead(_7);
+ StorageDead(_6);
+ _0 = const ();
+ drop(_1) -> [return: bb5, unwind continue];
+ }
+
+ bb5: {
+ StorageDead(_1);
+ return;
+ }
+
+ bb6 (cleanup): {
+ drop(_7) -> [return: bb7, unwind terminate];
+ }
+
+ bb7 (cleanup): {
+ drop(_1) -> [return: bb9, unwind terminate];
+ }
+
+ bb8 (cleanup): {
+ drop(_5) -> [return: bb9, unwind terminate];
+ }
+
+ bb9 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/box_expr.rs b/tests/mir-opt/box_expr.rs
index ad3670b5d..780420bda 100644
--- a/tests/mir-opt/box_expr.rs
+++ b/tests/mir-opt/box_expr.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![feature(rustc_attrs, stmt_expr_attributes)]
diff --git a/tests/mir-opt/building/async_await.a-{closure#0}.generator_resume.0.mir b/tests/mir-opt/building/async_await.a-{closure#0}.generator_resume.0.mir
index accb504c0..074ebddf7 100644
--- a/tests/mir-opt/building/async_await.a-{closure#0}.generator_resume.0.mir
+++ b/tests/mir-opt/building/async_await.a-{closure#0}.generator_resume.0.mir
@@ -10,30 +10,30 @@
} */
fn a::{closure#0}(_1: Pin<&mut [async fn body@$DIR/async_await.rs:11:14: 11:16]>, _2: &mut Context<'_>) -> Poll<()> {
- debug _task_context => _4; // in scope 0 at $DIR/async_await.rs:+0:14: +0:16
- let mut _0: std::task::Poll<()>; // return place in scope 0 at $DIR/async_await.rs:+0:14: +0:16
- let mut _3: (); // in scope 0 at $DIR/async_await.rs:+0:14: +0:16
- let mut _4: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+0:14: +0:16
- let mut _5: u32; // in scope 0 at $DIR/async_await.rs:+0:14: +0:16
+ debug _task_context => _4;
+ let mut _0: std::task::Poll<()>;
+ let mut _3: ();
+ let mut _4: &mut std::task::Context<'_>;
+ let mut _5: u32;
bb0: {
- _5 = discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:11:14: 11:16]))); // scope 0 at $DIR/async_await.rs:+0:14: +0:16
- switchInt(move _5) -> [0: bb1, 1: bb2, otherwise: bb3]; // scope 0 at $DIR/async_await.rs:+0:14: +0:16
+ _5 = discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:11:14: 11:16])));
+ switchInt(move _5) -> [0: bb1, 1: bb2, otherwise: bb3];
}
bb1: {
- _4 = move _2; // scope 0 at $DIR/async_await.rs:+0:14: +0:16
- _3 = const (); // scope 0 at $DIR/async_await.rs:+0:14: +0:16
- _0 = Poll::<()>::Ready(move _3); // scope 0 at $DIR/async_await.rs:+0:16: +0:16
- discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:11:14: 11:16]))) = 1; // scope 0 at $DIR/async_await.rs:+0:16: +0:16
- return; // scope 0 at $DIR/async_await.rs:+0:16: +0:16
+ _4 = move _2;
+ _3 = const ();
+ _0 = Poll::<()>::Ready(move _3);
+ discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:11:14: 11:16]))) = 1;
+ return;
}
bb2: {
- assert(const false, "`async fn` resumed after completion") -> bb2; // scope 0 at $DIR/async_await.rs:+0:14: +0:16
+ assert(const false, "`async fn` resumed after completion") -> [success: bb2, unwind continue];
}
bb3: {
- unreachable; // scope 0 at $DIR/async_await.rs:+0:14: +0:16
+ unreachable;
}
}
diff --git a/tests/mir-opt/building/async_await.b-{closure#0}.generator_resume.0.mir b/tests/mir-opt/building/async_await.b-{closure#0}.generator_resume.0.mir
index a9d1477b9..f774f32eb 100644
--- a/tests/mir-opt/building/async_await.b-{closure#0}.generator_resume.0.mir
+++ b/tests/mir-opt/building/async_await.b-{closure#0}.generator_resume.0.mir
@@ -32,312 +32,288 @@
} */
fn b::{closure#0}(_1: Pin<&mut [async fn body@$DIR/async_await.rs:14:18: 17:2]>, _2: &mut Context<'_>) -> Poll<()> {
- debug _task_context => _38; // in scope 0 at $DIR/async_await.rs:+0:18: +3:2
- let mut _0: std::task::Poll<()>; // return place in scope 0 at $DIR/async_await.rs:+0:18: +3:2
- let _3: (); // in scope 0 at $DIR/async_await.rs:+1:5: +1:14
- let mut _4: impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+1:9: +1:14
- let mut _5: impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+1:5: +1:8
- let mut _6: impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+1:9: +1:14
- let mut _7: (); // in scope 0 at $DIR/async_await.rs:+0:18: +3:2
- let _8: (); // in scope 0 at $DIR/async_await.rs:+1:9: +1:14
- let mut _9: std::task::Poll<()>; // in scope 0 at $DIR/async_await.rs:+1:9: +1:14
- let mut _10: std::pin::Pin<&mut impl std::future::Future<Output = ()>>; // in scope 0 at $DIR/async_await.rs:+1:9: +1:14
- let mut _11: &mut impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+1:9: +1:14
- let mut _12: &mut impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+1:9: +1:14
- let mut _13: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+1:5: +1:14
- let mut _14: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+1:5: +1:14
- let mut _15: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+1:9: +1:14
- let mut _16: isize; // in scope 0 at $DIR/async_await.rs:+1:9: +1:14
- let mut _18: !; // in scope 0 at $DIR/async_await.rs:+1:5: +1:14
- let mut _19: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+1:9: +1:14
- let mut _20: (); // in scope 0 at $DIR/async_await.rs:+1:9: +1:14
- let mut _21: impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+2:9: +2:14
- let mut _22: impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+2:5: +2:8
- let mut _23: impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+2:9: +2:14
- let _24: (); // in scope 0 at $DIR/async_await.rs:+2:9: +2:14
- let mut _25: std::task::Poll<()>; // in scope 0 at $DIR/async_await.rs:+2:9: +2:14
- let mut _26: std::pin::Pin<&mut impl std::future::Future<Output = ()>>; // in scope 0 at $DIR/async_await.rs:+2:9: +2:14
- let mut _27: &mut impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+2:9: +2:14
- let mut _28: &mut impl std::future::Future<Output = ()>; // in scope 0 at $DIR/async_await.rs:+2:9: +2:14
- let mut _29: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+2:5: +2:14
- let mut _30: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+2:5: +2:14
- let mut _31: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+2:9: +2:14
- let mut _32: isize; // in scope 0 at $DIR/async_await.rs:+2:9: +2:14
- let mut _34: !; // in scope 0 at $DIR/async_await.rs:+2:5: +2:14
- let mut _35: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+2:9: +2:14
- let mut _36: (); // in scope 0 at $DIR/async_await.rs:+2:9: +2:14
- let mut _37: (); // in scope 0 at $DIR/async_await.rs:+0:18: +3:2
- let mut _38: &mut std::task::Context<'_>; // in scope 0 at $DIR/async_await.rs:+0:18: +3:2
- let mut _39: u32; // in scope 0 at $DIR/async_await.rs:+0:18: +3:2
+ debug _task_context => _38;
+ let mut _0: std::task::Poll<()>;
+ let _3: ();
+ let mut _4: impl std::future::Future<Output = ()>;
+ let mut _5: impl std::future::Future<Output = ()>;
+ let mut _6: impl std::future::Future<Output = ()>;
+ let mut _7: ();
+ let _8: ();
+ let mut _9: std::task::Poll<()>;
+ let mut _10: std::pin::Pin<&mut impl std::future::Future<Output = ()>>;
+ let mut _11: &mut impl std::future::Future<Output = ()>;
+ let mut _12: &mut impl std::future::Future<Output = ()>;
+ let mut _13: &mut std::task::Context<'_>;
+ let mut _14: &mut std::task::Context<'_>;
+ let mut _15: &mut std::task::Context<'_>;
+ let mut _16: isize;
+ let mut _18: !;
+ let mut _19: &mut std::task::Context<'_>;
+ let mut _20: ();
+ let mut _21: impl std::future::Future<Output = ()>;
+ let mut _22: impl std::future::Future<Output = ()>;
+ let mut _23: impl std::future::Future<Output = ()>;
+ let _24: ();
+ let mut _25: std::task::Poll<()>;
+ let mut _26: std::pin::Pin<&mut impl std::future::Future<Output = ()>>;
+ let mut _27: &mut impl std::future::Future<Output = ()>;
+ let mut _28: &mut impl std::future::Future<Output = ()>;
+ let mut _29: &mut std::task::Context<'_>;
+ let mut _30: &mut std::task::Context<'_>;
+ let mut _31: &mut std::task::Context<'_>;
+ let mut _32: isize;
+ let mut _34: !;
+ let mut _35: &mut std::task::Context<'_>;
+ let mut _36: ();
+ let mut _37: ();
+ let mut _38: &mut std::task::Context<'_>;
+ let mut _39: u32;
scope 1 {
- debug __awaitee => (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#3).0: impl std::future::Future<Output = ()>); // in scope 1 at $DIR/async_await.rs:+1:9: +1:14
- let _17: (); // in scope 1 at $DIR/async_await.rs:+1:5: +1:14
+ debug __awaitee => (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#3).0: impl std::future::Future<Output = ()>);
+ let _17: ();
scope 2 {
}
scope 3 {
- debug result => _17; // in scope 3 at $DIR/async_await.rs:+1:5: +1:14
+ debug result => _17;
}
}
scope 4 {
- debug __awaitee => (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#4).0: impl std::future::Future<Output = ()>); // in scope 4 at $DIR/async_await.rs:+2:9: +2:14
- let _33: (); // in scope 4 at $DIR/async_await.rs:+2:5: +2:14
+ debug __awaitee => (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#4).0: impl std::future::Future<Output = ()>);
+ let _33: ();
scope 5 {
}
scope 6 {
- debug result => _33; // in scope 6 at $DIR/async_await.rs:+2:5: +2:14
+ debug result => _33;
}
}
bb0: {
- _39 = discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
- switchInt(move _39) -> [0: bb1, 1: bb28, 3: bb26, 4: bb27, otherwise: bb29]; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
+ _39 = discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])));
+ switchInt(move _39) -> [0: bb1, 1: bb28, 3: bb26, 4: bb27, otherwise: bb29];
}
bb1: {
- _38 = move _2; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
- StorageLive(_3); // scope 0 at $DIR/async_await.rs:+1:5: +1:14
- StorageLive(_4); // scope 0 at $DIR/async_await.rs:+1:9: +1:14
- StorageLive(_5); // scope 0 at $DIR/async_await.rs:+1:5: +1:8
- _5 = a() -> [return: bb2, unwind unreachable]; // scope 0 at $DIR/async_await.rs:+1:5: +1:8
- // mir::Constant
- // + span: $DIR/async_await.rs:15:5: 15:6
- // + literal: Const { ty: fn() -> impl Future<Output = ()> {a}, val: Value(<ZST>) }
+ _38 = move _2;
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = a() -> [return: bb2, unwind unreachable];
}
bb2: {
- _4 = <impl Future<Output = ()> as IntoFuture>::into_future(move _5) -> [return: bb3, unwind unreachable]; // scope 0 at $DIR/async_await.rs:+1:9: +1:14
- // mir::Constant
- // + span: $DIR/async_await.rs:15:9: 15:14
- // + literal: Const { ty: fn(impl Future<Output = ()>) -> <impl Future<Output = ()> as IntoFuture>::IntoFuture {<impl Future<Output = ()> as IntoFuture>::into_future}, val: Value(<ZST>) }
+ _4 = <impl Future<Output = ()> as IntoFuture>::into_future(move _5) -> [return: bb3, unwind unreachable];
}
bb3: {
- StorageDead(_5); // scope 0 at $DIR/async_await.rs:+1:13: +1:14
- nop; // scope 0 at $DIR/async_await.rs:+1:9: +1:14
- (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#3).0: impl std::future::Future<Output = ()>) = move _4; // scope 0 at $DIR/async_await.rs:+1:9: +1:14
- goto -> bb4; // scope 1 at $DIR/async_await.rs:+1:9: +1:14
+ StorageDead(_5);
+ nop;
+ (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#3).0: impl std::future::Future<Output = ()>) = move _4;
+ goto -> bb4;
}
bb4: {
- StorageLive(_8); // scope 1 at $DIR/async_await.rs:+1:9: +1:14
- StorageLive(_9); // scope 1 at $DIR/async_await.rs:+1:9: +1:14
- StorageLive(_10); // scope 2 at $DIR/async_await.rs:+1:9: +1:14
- StorageLive(_11); // scope 2 at $DIR/async_await.rs:+1:9: +1:14
- StorageLive(_12); // scope 2 at $DIR/async_await.rs:+1:9: +1:14
- _12 = &mut (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#3).0: impl std::future::Future<Output = ()>); // scope 2 at $DIR/async_await.rs:+1:9: +1:14
- _11 = &mut (*_12); // scope 2 at $DIR/async_await.rs:+1:9: +1:14
- _10 = Pin::<&mut impl Future<Output = ()>>::new_unchecked(move _11) -> [return: bb5, unwind unreachable]; // scope 2 at $DIR/async_await.rs:+1:9: +1:14
- // mir::Constant
- // + span: $DIR/async_await.rs:15:9: 15:14
- // + literal: Const { ty: unsafe fn(&mut impl Future<Output = ()>) -> Pin<&mut impl Future<Output = ()>> {Pin::<&mut impl Future<Output = ()>>::new_unchecked}, val: Value(<ZST>) }
+ StorageLive(_8);
+ StorageLive(_9);
+ StorageLive(_10);
+ StorageLive(_11);
+ StorageLive(_12);
+ _12 = &mut (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#3).0: impl std::future::Future<Output = ()>);
+ _11 = &mut (*_12);
+ _10 = Pin::<&mut impl Future<Output = ()>>::new_unchecked(move _11) -> [return: bb5, unwind unreachable];
}
bb5: {
- StorageDead(_11); // scope 2 at $DIR/async_await.rs:+1:13: +1:14
- StorageLive(_13); // scope 2 at $DIR/async_await.rs:+1:5: +1:14
- StorageLive(_14); // scope 2 at $DIR/async_await.rs:+1:5: +1:14
- StorageLive(_15); // scope 2 at $DIR/async_await.rs:+1:9: +1:14
- _15 = _38; // scope 2 at $DIR/async_await.rs:+1:9: +1:14
- _14 = move _15; // scope 2 at $DIR/async_await.rs:+1:5: +1:14
- goto -> bb6; // scope 2 at $DIR/async_await.rs:+1:5: +1:14
+ StorageDead(_11);
+ StorageLive(_13);
+ StorageLive(_14);
+ StorageLive(_15);
+ _15 = _38;
+ _14 = move _15;
+ goto -> bb6;
}
bb6: {
- _13 = &mut (*_14); // scope 2 at $DIR/async_await.rs:+1:5: +1:14
- StorageDead(_15); // scope 2 at $DIR/async_await.rs:+1:13: +1:14
- _9 = <impl Future<Output = ()> as Future>::poll(move _10, move _13) -> [return: bb7, unwind unreachable]; // scope 2 at $DIR/async_await.rs:+1:9: +1:14
- // mir::Constant
- // + span: $DIR/async_await.rs:15:9: 15:14
- // + literal: Const { ty: for<'a, 'b, 'c> fn(Pin<&'a mut impl Future<Output = ()>>, &'b mut Context<'c>) -> Poll<<impl Future<Output = ()> as Future>::Output> {<impl Future<Output = ()> as Future>::poll}, val: Value(<ZST>) }
+ _13 = &mut (*_14);
+ StorageDead(_15);
+ _9 = <impl Future<Output = ()> as Future>::poll(move _10, move _13) -> [return: bb7, unwind unreachable];
}
bb7: {
- StorageDead(_13); // scope 2 at $DIR/async_await.rs:+1:13: +1:14
- StorageDead(_10); // scope 2 at $DIR/async_await.rs:+1:13: +1:14
- _16 = discriminant(_9); // scope 1 at $DIR/async_await.rs:+1:9: +1:14
- switchInt(move _16) -> [0: bb10, 1: bb8, otherwise: bb9]; // scope 1 at $DIR/async_await.rs:+1:9: +1:14
+ StorageDead(_13);
+ StorageDead(_10);
+ _16 = discriminant(_9);
+ switchInt(move _16) -> [0: bb10, 1: bb8, otherwise: bb9];
}
bb8: {
- _8 = const (); // scope 1 at $DIR/async_await.rs:+1:9: +1:14
- StorageDead(_14); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
- StorageDead(_12); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
- StorageDead(_9); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
- StorageDead(_8); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
- StorageLive(_19); // scope 1 at $DIR/async_await.rs:+1:9: +1:14
- StorageLive(_20); // scope 1 at $DIR/async_await.rs:+1:9: +1:14
- _20 = (); // scope 1 at $DIR/async_await.rs:+1:9: +1:14
- _0 = Poll::<()>::Pending; // scope 1 at $DIR/async_await.rs:+1:9: +1:14
- discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))) = 3; // scope 1 at $DIR/async_await.rs:+1:9: +1:14
- return; // scope 1 at $DIR/async_await.rs:+1:9: +1:14
+ _8 = const ();
+ StorageDead(_14);
+ StorageDead(_12);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageLive(_19);
+ StorageLive(_20);
+ _20 = ();
+ _0 = Poll::<()>::Pending;
+ discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))) = 3;
+ return;
}
bb9: {
- unreachable; // scope 1 at $DIR/async_await.rs:+1:9: +1:14
+ unreachable;
}
bb10: {
- StorageLive(_17); // scope 1 at $DIR/async_await.rs:+1:5: +1:14
- _17 = ((_9 as Ready).0: ()); // scope 1 at $DIR/async_await.rs:+1:5: +1:14
- _3 = _17; // scope 3 at $DIR/async_await.rs:+1:5: +1:14
- StorageDead(_17); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
- StorageDead(_14); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
- StorageDead(_12); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
- StorageDead(_9); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
- StorageDead(_8); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
- goto -> bb12; // scope 0 at $DIR/async_await.rs:+1:13: +1:14
+ StorageLive(_17);
+ _17 = ((_9 as Ready).0: ());
+ _3 = _17;
+ StorageDead(_17);
+ StorageDead(_14);
+ StorageDead(_12);
+ StorageDead(_9);
+ StorageDead(_8);
+ goto -> bb12;
}
bb11: {
- StorageDead(_20); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
- _38 = move _19; // scope 1 at $DIR/async_await.rs:+1:9: +1:14
- StorageDead(_19); // scope 1 at $DIR/async_await.rs:+1:13: +1:14
- _7 = const (); // scope 1 at $DIR/async_await.rs:+1:9: +1:14
- goto -> bb4; // scope 1 at $DIR/async_await.rs:+1:9: +1:14
+ StorageDead(_20);
+ _38 = move _19;
+ StorageDead(_19);
+ _7 = const ();
+ goto -> bb4;
}
bb12: {
- nop; // scope 0 at $DIR/async_await.rs:+1:13: +1:14
- goto -> bb13; // scope 0 at $DIR/async_await.rs:+1:14: +1:15
+ nop;
+ goto -> bb13;
}
bb13: {
- StorageDead(_4); // scope 0 at $DIR/async_await.rs:+1:14: +1:15
- StorageDead(_3); // scope 0 at $DIR/async_await.rs:+1:14: +1:15
- StorageLive(_21); // scope 0 at $DIR/async_await.rs:+2:9: +2:14
- StorageLive(_22); // scope 0 at $DIR/async_await.rs:+2:5: +2:8
- _22 = a() -> [return: bb14, unwind unreachable]; // scope 0 at $DIR/async_await.rs:+2:5: +2:8
- // mir::Constant
- // + span: $DIR/async_await.rs:16:5: 16:6
- // + literal: Const { ty: fn() -> impl Future<Output = ()> {a}, val: Value(<ZST>) }
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageLive(_21);
+ StorageLive(_22);
+ _22 = a() -> [return: bb14, unwind unreachable];
}
bb14: {
- _21 = <impl Future<Output = ()> as IntoFuture>::into_future(move _22) -> [return: bb15, unwind unreachable]; // scope 0 at $DIR/async_await.rs:+2:9: +2:14
- // mir::Constant
- // + span: $DIR/async_await.rs:16:9: 16:14
- // + literal: Const { ty: fn(impl Future<Output = ()>) -> <impl Future<Output = ()> as IntoFuture>::IntoFuture {<impl Future<Output = ()> as IntoFuture>::into_future}, val: Value(<ZST>) }
+ _21 = <impl Future<Output = ()> as IntoFuture>::into_future(move _22) -> [return: bb15, unwind unreachable];
}
bb15: {
- StorageDead(_22); // scope 0 at $DIR/async_await.rs:+2:13: +2:14
- nop; // scope 0 at $DIR/async_await.rs:+2:9: +2:14
- (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#4).0: impl std::future::Future<Output = ()>) = move _21; // scope 0 at $DIR/async_await.rs:+2:9: +2:14
- goto -> bb16; // scope 4 at $DIR/async_await.rs:+2:9: +2:14
+ StorageDead(_22);
+ nop;
+ (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#4).0: impl std::future::Future<Output = ()>) = move _21;
+ goto -> bb16;
}
bb16: {
- StorageLive(_24); // scope 4 at $DIR/async_await.rs:+2:9: +2:14
- StorageLive(_25); // scope 4 at $DIR/async_await.rs:+2:9: +2:14
- StorageLive(_26); // scope 5 at $DIR/async_await.rs:+2:9: +2:14
- StorageLive(_27); // scope 5 at $DIR/async_await.rs:+2:9: +2:14
- StorageLive(_28); // scope 5 at $DIR/async_await.rs:+2:9: +2:14
- _28 = &mut (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#4).0: impl std::future::Future<Output = ()>); // scope 5 at $DIR/async_await.rs:+2:9: +2:14
- _27 = &mut (*_28); // scope 5 at $DIR/async_await.rs:+2:9: +2:14
- _26 = Pin::<&mut impl Future<Output = ()>>::new_unchecked(move _27) -> [return: bb17, unwind unreachable]; // scope 5 at $DIR/async_await.rs:+2:9: +2:14
- // mir::Constant
- // + span: $DIR/async_await.rs:16:9: 16:14
- // + literal: Const { ty: unsafe fn(&mut impl Future<Output = ()>) -> Pin<&mut impl Future<Output = ()>> {Pin::<&mut impl Future<Output = ()>>::new_unchecked}, val: Value(<ZST>) }
+ StorageLive(_24);
+ StorageLive(_25);
+ StorageLive(_26);
+ StorageLive(_27);
+ StorageLive(_28);
+ _28 = &mut (((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2])) as variant#4).0: impl std::future::Future<Output = ()>);
+ _27 = &mut (*_28);
+ _26 = Pin::<&mut impl Future<Output = ()>>::new_unchecked(move _27) -> [return: bb17, unwind unreachable];
}
bb17: {
- StorageDead(_27); // scope 5 at $DIR/async_await.rs:+2:13: +2:14
- StorageLive(_29); // scope 5 at $DIR/async_await.rs:+2:5: +2:14
- StorageLive(_30); // scope 5 at $DIR/async_await.rs:+2:5: +2:14
- StorageLive(_31); // scope 5 at $DIR/async_await.rs:+2:9: +2:14
- _31 = _38; // scope 5 at $DIR/async_await.rs:+2:9: +2:14
- _30 = move _31; // scope 5 at $DIR/async_await.rs:+2:5: +2:14
- goto -> bb18; // scope 5 at $DIR/async_await.rs:+2:5: +2:14
+ StorageDead(_27);
+ StorageLive(_29);
+ StorageLive(_30);
+ StorageLive(_31);
+ _31 = _38;
+ _30 = move _31;
+ goto -> bb18;
}
bb18: {
- _29 = &mut (*_30); // scope 5 at $DIR/async_await.rs:+2:5: +2:14
- StorageDead(_31); // scope 5 at $DIR/async_await.rs:+2:13: +2:14
- _25 = <impl Future<Output = ()> as Future>::poll(move _26, move _29) -> [return: bb19, unwind unreachable]; // scope 5 at $DIR/async_await.rs:+2:9: +2:14
- // mir::Constant
- // + span: $DIR/async_await.rs:16:9: 16:14
- // + literal: Const { ty: for<'a, 'b, 'c> fn(Pin<&'a mut impl Future<Output = ()>>, &'b mut Context<'c>) -> Poll<<impl Future<Output = ()> as Future>::Output> {<impl Future<Output = ()> as Future>::poll}, val: Value(<ZST>) }
+ _29 = &mut (*_30);
+ StorageDead(_31);
+ _25 = <impl Future<Output = ()> as Future>::poll(move _26, move _29) -> [return: bb19, unwind unreachable];
}
bb19: {
- StorageDead(_29); // scope 5 at $DIR/async_await.rs:+2:13: +2:14
- StorageDead(_26); // scope 5 at $DIR/async_await.rs:+2:13: +2:14
- _32 = discriminant(_25); // scope 4 at $DIR/async_await.rs:+2:9: +2:14
- switchInt(move _32) -> [0: bb21, 1: bb20, otherwise: bb9]; // scope 4 at $DIR/async_await.rs:+2:9: +2:14
+ StorageDead(_29);
+ StorageDead(_26);
+ _32 = discriminant(_25);
+ switchInt(move _32) -> [0: bb21, 1: bb20, otherwise: bb9];
}
bb20: {
- _24 = const (); // scope 4 at $DIR/async_await.rs:+2:9: +2:14
- StorageDead(_30); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
- StorageDead(_28); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
- StorageDead(_25); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
- StorageDead(_24); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
- StorageLive(_35); // scope 4 at $DIR/async_await.rs:+2:9: +2:14
- StorageLive(_36); // scope 4 at $DIR/async_await.rs:+2:9: +2:14
- _36 = (); // scope 4 at $DIR/async_await.rs:+2:9: +2:14
- _0 = Poll::<()>::Pending; // scope 4 at $DIR/async_await.rs:+2:9: +2:14
- discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))) = 4; // scope 4 at $DIR/async_await.rs:+2:9: +2:14
- return; // scope 4 at $DIR/async_await.rs:+2:9: +2:14
+ _24 = const ();
+ StorageDead(_30);
+ StorageDead(_28);
+ StorageDead(_25);
+ StorageDead(_24);
+ StorageLive(_35);
+ StorageLive(_36);
+ _36 = ();
+ _0 = Poll::<()>::Pending;
+ discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))) = 4;
+ return;
}
bb21: {
- StorageLive(_33); // scope 4 at $DIR/async_await.rs:+2:5: +2:14
- _33 = ((_25 as Ready).0: ()); // scope 4 at $DIR/async_await.rs:+2:5: +2:14
- _37 = _33; // scope 6 at $DIR/async_await.rs:+2:5: +2:14
- StorageDead(_33); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
- StorageDead(_30); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
- StorageDead(_28); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
- StorageDead(_25); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
- StorageDead(_24); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
- goto -> bb23; // scope 0 at $DIR/async_await.rs:+2:13: +2:14
+ StorageLive(_33);
+ _33 = ((_25 as Ready).0: ());
+ _37 = _33;
+ StorageDead(_33);
+ StorageDead(_30);
+ StorageDead(_28);
+ StorageDead(_25);
+ StorageDead(_24);
+ goto -> bb23;
}
bb22: {
- StorageDead(_36); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
- _38 = move _35; // scope 4 at $DIR/async_await.rs:+2:9: +2:14
- StorageDead(_35); // scope 4 at $DIR/async_await.rs:+2:13: +2:14
- _7 = const (); // scope 4 at $DIR/async_await.rs:+2:9: +2:14
- goto -> bb16; // scope 4 at $DIR/async_await.rs:+2:9: +2:14
+ StorageDead(_36);
+ _38 = move _35;
+ StorageDead(_35);
+ _7 = const ();
+ goto -> bb16;
}
bb23: {
- nop; // scope 0 at $DIR/async_await.rs:+2:13: +2:14
- goto -> bb24; // scope 0 at $DIR/async_await.rs:+3:1: +3:2
+ nop;
+ goto -> bb24;
}
bb24: {
- StorageDead(_21); // scope 0 at $DIR/async_await.rs:+3:1: +3:2
- goto -> bb25; // scope 0 at $DIR/async_await.rs:+3:1: +3:2
+ StorageDead(_21);
+ goto -> bb25;
}
bb25: {
- _0 = Poll::<()>::Ready(move _37); // scope 0 at $DIR/async_await.rs:+3:2: +3:2
- discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))) = 1; // scope 0 at $DIR/async_await.rs:+3:2: +3:2
- return; // scope 0 at $DIR/async_await.rs:+3:2: +3:2
+ _0 = Poll::<()>::Ready(move _37);
+ discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))) = 1;
+ return;
}
bb26: {
- StorageLive(_3); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
- StorageLive(_4); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
- StorageLive(_19); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
- StorageLive(_20); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
- _19 = move _2; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
- goto -> bb11; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_19);
+ StorageLive(_20);
+ _19 = move _2;
+ goto -> bb11;
}
bb27: {
- StorageLive(_21); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
- StorageLive(_35); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
- StorageLive(_36); // scope 0 at $DIR/async_await.rs:+0:18: +3:2
- _35 = move _2; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
- goto -> bb22; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
+ StorageLive(_21);
+ StorageLive(_35);
+ StorageLive(_36);
+ _35 = move _2;
+ goto -> bb22;
}
bb28: {
- assert(const false, "`async fn` resumed after completion") -> bb28; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
+ assert(const false, "`async fn` resumed after completion") -> [success: bb28, unwind continue];
}
bb29: {
- unreachable; // scope 0 at $DIR/async_await.rs:+0:18: +3:2
+ unreachable;
}
}
diff --git a/tests/mir-opt/building/custom/aggregate_exprs.adt.built.after.mir b/tests/mir-opt/building/custom/aggregate_exprs.adt.built.after.mir
index 49e8c812c..c14882142 100644
--- a/tests/mir-opt/building/custom/aggregate_exprs.adt.built.after.mir
+++ b/tests/mir-opt/building/custom/aggregate_exprs.adt.built.after.mir
@@ -1,16 +1,16 @@
// MIR for `adt` after built
fn adt() -> Onion {
- let mut _0: Onion; // return place in scope 0 at $DIR/aggregate_exprs.rs:+0:13: +0:18
- let mut _1: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _2: Foo; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: Bar; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: Onion;
+ let mut _1: i32;
+ let mut _2: Foo;
+ let mut _3: Bar;
bb0: {
- _1 = const 1_i32; // scope 0 at $DIR/aggregate_exprs.rs:+6:13: +6:20
- _2 = Foo { a: const 1_i32, b: const 2_i32 }; // scope 0 at $DIR/aggregate_exprs.rs:+7:13: +10:14
- _3 = Bar::Foo(move _2, _1); // scope 0 at $DIR/aggregate_exprs.rs:+11:13: +11:39
- _0 = Onion { neon: ((_3 as variant#0).1: i32) }; // scope 0 at $DIR/aggregate_exprs.rs:+12:13: +12:58
- return; // scope 0 at $DIR/aggregate_exprs.rs:+13:13: +13:21
+ _1 = const 1_i32;
+ _2 = Foo { a: const 1_i32, b: const 2_i32 };
+ _3 = Bar::Foo(move _2, _1);
+ _0 = Onion { neon: ((_3 as variant#0).1: i32) };
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/aggregate_exprs.array.built.after.mir b/tests/mir-opt/building/custom/aggregate_exprs.array.built.after.mir
index 30d128973..fde007aba 100644
--- a/tests/mir-opt/building/custom/aggregate_exprs.array.built.after.mir
+++ b/tests/mir-opt/building/custom/aggregate_exprs.array.built.after.mir
@@ -1,15 +1,15 @@
// MIR for `array` after built
fn array() -> [i32; 2] {
- let mut _0: [i32; 2]; // return place in scope 0 at $DIR/aggregate_exprs.rs:+0:15: +0:23
- let mut _1: [i32; 2]; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _2: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: [i32; 2];
+ let mut _1: [i32; 2];
+ let mut _2: i32;
bb0: {
- _1 = [const 42_i32, const 43_i32]; // scope 0 at $DIR/aggregate_exprs.rs:+5:13: +5:25
- _2 = const 1_i32; // scope 0 at $DIR/aggregate_exprs.rs:+6:13: +6:20
- _1 = [_2, const 2_i32]; // scope 0 at $DIR/aggregate_exprs.rs:+7:13: +7:25
- _0 = move _1; // scope 0 at $DIR/aggregate_exprs.rs:+8:13: +8:26
- return; // scope 0 at $DIR/aggregate_exprs.rs:+9:13: +9:21
+ _1 = [const 42_i32, const 43_i32];
+ _2 = const 1_i32;
+ _1 = [_2, const 2_i32];
+ _0 = move _1;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/aggregate_exprs.tuple.built.after.mir b/tests/mir-opt/building/custom/aggregate_exprs.tuple.built.after.mir
index 5fe45ccc9..060f72c9c 100644
--- a/tests/mir-opt/building/custom/aggregate_exprs.tuple.built.after.mir
+++ b/tests/mir-opt/building/custom/aggregate_exprs.tuple.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `tuple` after built
fn tuple() -> (i32, bool) {
- let mut _0: (i32, bool); // return place in scope 0 at $DIR/aggregate_exprs.rs:+0:15: +0:26
+ let mut _0: (i32, bool);
bb0: {
- _0 = (const 1_i32, const true); // scope 0 at $DIR/aggregate_exprs.rs:+3:13: +3:28
- return; // scope 0 at $DIR/aggregate_exprs.rs:+4:13: +4:21
+ _0 = (const 1_i32, const true);
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/arbitrary_let.arbitrary_let.built.after.mir b/tests/mir-opt/building/custom/arbitrary_let.arbitrary_let.built.after.mir
index 20dd251e7..189996f11 100644
--- a/tests/mir-opt/building/custom/arbitrary_let.arbitrary_let.built.after.mir
+++ b/tests/mir-opt/building/custom/arbitrary_let.arbitrary_let.built.after.mir
@@ -1,22 +1,22 @@
// MIR for `arbitrary_let` after built
fn arbitrary_let(_1: i32) -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/arbitrary_let.rs:+0:29: +0:32
- let mut _2: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: i32;
+ let mut _2: i32;
+ let mut _3: i32;
bb0: {
- _2 = _1; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- goto -> bb2; // scope 0 at $DIR/arbitrary_let.rs:+4:13: +4:25
+ _2 = _1;
+ goto -> bb2;
}
bb1: {
- _0 = _3; // scope 0 at $DIR/arbitrary_let.rs:+7:13: +7:20
- return; // scope 0 at $DIR/arbitrary_let.rs:+8:13: +8:21
+ _0 = _3;
+ return;
}
bb2: {
- _3 = _2; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- goto -> bb1; // scope 0 at $DIR/arbitrary_let.rs:+12:13: +12:24
+ _3 = _2;
+ goto -> bb1;
}
}
diff --git a/tests/mir-opt/building/custom/arrays.arrays.built.after.mir b/tests/mir-opt/building/custom/arrays.arrays.built.after.mir
index 4c9212728..eaeba302f 100644
--- a/tests/mir-opt/building/custom/arrays.arrays.built.after.mir
+++ b/tests/mir-opt/building/custom/arrays.arrays.built.after.mir
@@ -1,14 +1,14 @@
// MIR for `arrays` after built
fn arrays() -> usize {
- let mut _0: usize; // return place in scope 0 at $DIR/arrays.rs:+0:32: +0:37
- let mut _1: [i32; C]; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _2: usize; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: usize;
+ let mut _1: [i32; C];
+ let mut _2: usize;
bb0: {
- _1 = [const 5_i32; C]; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _2 = Len(_1); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _0 = _2; // scope 0 at $DIR/arrays.rs:+4:9: +4:16
- return; // scope 0 at $DIR/arrays.rs:+5:9: +5:17
+ _1 = [const 5_i32; C];
+ _2 = Len(_1);
+ _0 = _2;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/as_cast.float_to_int.built.after.mir b/tests/mir-opt/building/custom/as_cast.float_to_int.built.after.mir
index d0b770783..e3334bc7d 100644
--- a/tests/mir-opt/building/custom/as_cast.float_to_int.built.after.mir
+++ b/tests/mir-opt/building/custom/as_cast.float_to_int.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `float_to_int` after built
fn float_to_int(_1: f32) -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/as_cast.rs:+0:28: +0:31
+ let mut _0: i32;
bb0: {
- _0 = _1 as i32 (FloatToInt); // scope 0 at $DIR/as_cast.rs:+3:13: +3:27
- return; // scope 0 at $DIR/as_cast.rs:+4:13: +4:21
+ _0 = _1 as i32 (FloatToInt);
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/as_cast.int_to_int.built.after.mir b/tests/mir-opt/building/custom/as_cast.int_to_int.built.after.mir
index aaebff0d7..d71cb9d78 100644
--- a/tests/mir-opt/building/custom/as_cast.int_to_int.built.after.mir
+++ b/tests/mir-opt/building/custom/as_cast.int_to_int.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `int_to_int` after built
fn int_to_int(_1: u32) -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/as_cast.rs:+0:26: +0:29
+ let mut _0: i32;
bb0: {
- _0 = _1 as i32 (IntToInt); // scope 0 at $DIR/as_cast.rs:+3:13: +3:27
- return; // scope 0 at $DIR/as_cast.rs:+4:13: +4:21
+ _0 = _1 as i32 (IntToInt);
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/as_cast.int_to_ptr.built.after.mir b/tests/mir-opt/building/custom/as_cast.int_to_ptr.built.after.mir
index f040cf53d..0dc46d61e 100644
--- a/tests/mir-opt/building/custom/as_cast.int_to_ptr.built.after.mir
+++ b/tests/mir-opt/building/custom/as_cast.int_to_ptr.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `int_to_ptr` after built
fn int_to_ptr(_1: usize) -> *const i32 {
- let mut _0: *const i32; // return place in scope 0 at $DIR/as_cast.rs:+0:28: +0:38
+ let mut _0: *const i32;
bb0: {
- _0 = _1 as *const i32 (PointerFromExposedAddress); // scope 0 at $DIR/as_cast.rs:+3:13: +3:34
- return; // scope 0 at $DIR/as_cast.rs:+4:13: +4:21
+ _0 = _1 as *const i32 (PointerFromExposedAddress);
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/composite_return.tuple.built.after.mir b/tests/mir-opt/building/custom/composite_return.tuple.built.after.mir
index d159c1a65..836622ec2 100644
--- a/tests/mir-opt/building/custom/composite_return.tuple.built.after.mir
+++ b/tests/mir-opt/building/custom/composite_return.tuple.built.after.mir
@@ -1,11 +1,11 @@
// MIR for `tuple` after built
fn tuple() -> (i32, bool) {
- let mut _0: (i32, bool); // return place in scope 0 at $DIR/composite_return.rs:+0:15: +0:26
+ let mut _0: (i32, bool);
bb0: {
- (_0.0: i32) = const 1_i32; // scope 0 at $DIR/composite_return.rs:+4:13: +4:22
- (_0.1: bool) = const true; // scope 0 at $DIR/composite_return.rs:+5:13: +5:25
- return; // scope 0 at $DIR/composite_return.rs:+6:13: +6:21
+ (_0.0: i32) = const 1_i32;
+ (_0.1: bool) = const true;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/consts.consts.built.after.mir b/tests/mir-opt/building/custom/consts.consts.built.after.mir
index ba753cfc2..05de272af 100644
--- a/tests/mir-opt/building/custom/consts.consts.built.after.mir
+++ b/tests/mir-opt/building/custom/consts.consts.built.after.mir
@@ -1,22 +1,19 @@
// MIR for `consts` after built
fn consts() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/consts.rs:+0:27: +0:27
- let mut _1: u8; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _2: i8; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: u32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _4: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _5: fn() {consts::<10>}; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: ();
+ let mut _1: u8;
+ let mut _2: i8;
+ let mut _3: u32;
+ let mut _4: i32;
+ let mut _5: fn() {consts::<10>};
bb0: {
- _1 = const 5_u8; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _2 = const _; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _3 = const C; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _4 = const _; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _5 = consts::<10>; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- // mir::Constant
- // + span: $DIR/consts.rs:16:18: 16:30
- // + literal: Const { ty: fn() {consts::<10>}, val: Value(<ZST>) }
- return; // scope 0 at $DIR/consts.rs:+7:9: +7:17
+ _1 = const 5_u8;
+ _2 = const _;
+ _3 = const C;
+ _4 = const _;
+ _5 = consts::<10>;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/consts.statics.built.after.mir b/tests/mir-opt/building/custom/consts.statics.built.after.mir
index bfef976aa..ea394c5b7 100644
--- a/tests/mir-opt/building/custom/consts.statics.built.after.mir
+++ b/tests/mir-opt/building/custom/consts.statics.built.after.mir
@@ -1,20 +1,14 @@
// MIR for `statics` after built
fn statics() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/consts.rs:+0:14: +0:14
- let mut _1: &i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _2: *mut i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: ();
+ let mut _1: &i32;
+ let mut _2: *mut i32;
bb0: {
- _1 = const {alloc1: &i32}; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- // mir::Constant
- // + span: $DIR/consts.rs:27:31: 27:32
- // + literal: Const { ty: &i32, val: Value(Scalar(alloc1)) }
- _2 = const {alloc2: *mut i32}; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- // mir::Constant
- // + span: $DIR/consts.rs:28:38: 28:39
- // + literal: Const { ty: *mut i32, val: Value(Scalar(alloc2)) }
- return; // scope 0 at $DIR/consts.rs:+4:9: +4:17
+ _1 = const {alloc1: &i32};
+ _2 = const {alloc2: *mut i32};
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/enums.set_discr.built.after.mir b/tests/mir-opt/building/custom/enums.set_discr.built.after.mir
index 6d0747365..8cc66e7e5 100644
--- a/tests/mir-opt/building/custom/enums.set_discr.built.after.mir
+++ b/tests/mir-opt/building/custom/enums.set_discr.built.after.mir
@@ -1,11 +1,11 @@
// MIR for `set_discr` after built
fn set_discr(_1: &mut Option<()>) -> () {
- let mut _0: (); // return place in scope 0 at $DIR/enums.rs:+0:39: +0:39
+ let mut _0: ();
bb0: {
- Deinit((*_1)); // scope 0 at $DIR/enums.rs:+2:9: +2:24
- discriminant((*_1)) = 0; // scope 0 at $DIR/enums.rs:+3:9: +3:36
- return; // scope 0 at $DIR/enums.rs:+4:9: +4:17
+ Deinit((*_1));
+ discriminant((*_1)) = 0;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/enums.set_discr_repr.built.after.mir b/tests/mir-opt/building/custom/enums.set_discr_repr.built.after.mir
index 6fdc3d0f4..55ade43ed 100644
--- a/tests/mir-opt/building/custom/enums.set_discr_repr.built.after.mir
+++ b/tests/mir-opt/building/custom/enums.set_discr_repr.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `set_discr_repr` after built
fn set_discr_repr(_1: &mut Bool) -> () {
- let mut _0: (); // return place in scope 0 at $DIR/enums.rs:+0:33: +0:33
+ let mut _0: ();
bb0: {
- discriminant((*_1)) = 0; // scope 0 at $DIR/enums.rs:+2:9: +2:31
- return; // scope 0 at $DIR/enums.rs:+3:9: +3:17
+ discriminant((*_1)) = 0;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/enums.switch_bool.built.after.mir b/tests/mir-opt/building/custom/enums.switch_bool.built.after.mir
index 95c57d2dc..f82e5f1c6 100644
--- a/tests/mir-opt/building/custom/enums.switch_bool.built.after.mir
+++ b/tests/mir-opt/building/custom/enums.switch_bool.built.after.mir
@@ -1,19 +1,19 @@
// MIR for `switch_bool` after built
fn switch_bool(_1: bool) -> u32 {
- let mut _0: u32; // return place in scope 0 at $DIR/enums.rs:+0:32: +0:35
+ let mut _0: u32;
bb0: {
- switchInt(_1) -> [1: bb1, 0: bb2, otherwise: bb2]; // scope 0 at $DIR/enums.rs:+3:13: +7:14
+ switchInt(_1) -> [1: bb1, 0: bb2, otherwise: bb2];
}
bb1: {
- _0 = const 5_u32; // scope 0 at $DIR/enums.rs:+11:13: +11:20
- return; // scope 0 at $DIR/enums.rs:+12:13: +12:21
+ _0 = const 5_u32;
+ return;
}
bb2: {
- _0 = const 10_u32; // scope 0 at $DIR/enums.rs:+16:13: +16:21
- return; // scope 0 at $DIR/enums.rs:+17:13: +17:21
+ _0 = const 10_u32;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/enums.switch_option.built.after.mir b/tests/mir-opt/building/custom/enums.switch_option.built.after.mir
index a659ba7c1..fa03f274b 100644
--- a/tests/mir-opt/building/custom/enums.switch_option.built.after.mir
+++ b/tests/mir-opt/building/custom/enums.switch_option.built.after.mir
@@ -1,21 +1,21 @@
// MIR for `switch_option` after built
fn switch_option(_1: Option<()>) -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/enums.rs:+0:45: +0:49
- let mut _2: isize; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: bool;
+ let mut _2: isize;
bb0: {
- _2 = discriminant(_1); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- switchInt(_2) -> [0: bb1, 1: bb2, otherwise: bb2]; // scope 0 at $DIR/enums.rs:+4:13: +8:14
+ _2 = discriminant(_1);
+ switchInt(_2) -> [0: bb1, 1: bb2, otherwise: bb2];
}
bb1: {
- _0 = const false; // scope 0 at $DIR/enums.rs:+12:13: +12:24
- return; // scope 0 at $DIR/enums.rs:+13:13: +13:21
+ _0 = const false;
+ return;
}
bb2: {
- _0 = const true; // scope 0 at $DIR/enums.rs:+17:13: +17:23
- return; // scope 0 at $DIR/enums.rs:+18:13: +18:21
+ _0 = const true;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/enums.switch_option_repr.built.after.mir b/tests/mir-opt/building/custom/enums.switch_option_repr.built.after.mir
index d60e4b1b7..eec2197a8 100644
--- a/tests/mir-opt/building/custom/enums.switch_option_repr.built.after.mir
+++ b/tests/mir-opt/building/custom/enums.switch_option_repr.built.after.mir
@@ -1,21 +1,21 @@
// MIR for `switch_option_repr` after built
fn switch_option_repr(_1: Bool) -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/enums.rs:+0:40: +0:44
- let mut _2: u8; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: bool;
+ let mut _2: u8;
bb0: {
- _2 = discriminant(_1); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- switchInt(_2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/enums.rs:+4:13: +7:14
+ _2 = discriminant(_1);
+ switchInt(_2) -> [0: bb2, otherwise: bb1];
}
bb1: {
- _0 = const true; // scope 0 at $DIR/enums.rs:+11:13: +11:23
- return; // scope 0 at $DIR/enums.rs:+12:13: +12:21
+ _0 = const true;
+ return;
}
bb2: {
- _0 = const false; // scope 0 at $DIR/enums.rs:+16:13: +16:24
- return; // scope 0 at $DIR/enums.rs:+17:13: +17:21
+ _0 = const false;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/operators.f.built.after.mir b/tests/mir-opt/building/custom/operators.f.built.after.mir
index cb43d5e6e..33eb6b720 100644
--- a/tests/mir-opt/building/custom/operators.f.built.after.mir
+++ b/tests/mir-opt/building/custom/operators.f.built.after.mir
@@ -1,30 +1,30 @@
// MIR for `f` after built
fn f(_1: i32, _2: bool) -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/operators.rs:+0:30: +0:33
- let mut _3: (i32, bool); // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: i32;
+ let mut _3: (i32, bool);
bb0: {
- _1 = Neg(_1); // scope 0 at $DIR/operators.rs:+2:9: +2:15
- _2 = Not(_2); // scope 0 at $DIR/operators.rs:+3:9: +3:15
- _1 = Add(_1, _1); // scope 0 at $DIR/operators.rs:+4:9: +4:18
- _1 = Sub(_1, _1); // scope 0 at $DIR/operators.rs:+5:9: +5:18
- _1 = Mul(_1, _1); // scope 0 at $DIR/operators.rs:+6:9: +6:18
- _1 = Div(_1, _1); // scope 0 at $DIR/operators.rs:+7:9: +7:18
- _1 = Rem(_1, _1); // scope 0 at $DIR/operators.rs:+8:9: +8:18
- _1 = BitXor(_1, _1); // scope 0 at $DIR/operators.rs:+9:9: +9:18
- _1 = BitAnd(_1, _1); // scope 0 at $DIR/operators.rs:+10:9: +10:18
- _1 = Shl(_1, _1); // scope 0 at $DIR/operators.rs:+11:9: +11:19
- _1 = Shr(_1, _1); // scope 0 at $DIR/operators.rs:+12:9: +12:19
- _2 = Eq(_1, _1); // scope 0 at $DIR/operators.rs:+13:9: +13:19
- _2 = Lt(_1, _1); // scope 0 at $DIR/operators.rs:+14:9: +14:18
- _2 = Le(_1, _1); // scope 0 at $DIR/operators.rs:+15:9: +15:19
- _2 = Ge(_1, _1); // scope 0 at $DIR/operators.rs:+16:9: +16:19
- _2 = Gt(_1, _1); // scope 0 at $DIR/operators.rs:+17:9: +17:18
- _3 = CheckedAdd(_1, _1); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _2 = (_3.1: bool); // scope 0 at $DIR/operators.rs:+19:9: +19:18
- _1 = (_3.0: i32); // scope 0 at $DIR/operators.rs:+20:9: +20:18
- _0 = _1; // scope 0 at $DIR/operators.rs:+21:9: +21:16
- return; // scope 0 at $DIR/operators.rs:+22:9: +22:17
+ _1 = Neg(_1);
+ _2 = Not(_2);
+ _1 = Add(_1, _1);
+ _1 = Sub(_1, _1);
+ _1 = Mul(_1, _1);
+ _1 = Div(_1, _1);
+ _1 = Rem(_1, _1);
+ _1 = BitXor(_1, _1);
+ _1 = BitAnd(_1, _1);
+ _1 = Shl(_1, _1);
+ _1 = Shr(_1, _1);
+ _2 = Eq(_1, _1);
+ _2 = Lt(_1, _1);
+ _2 = Le(_1, _1);
+ _2 = Ge(_1, _1);
+ _2 = Gt(_1, _1);
+ _3 = CheckedAdd(_1, _1);
+ _2 = (_3.1: bool);
+ _1 = (_3.0: i32);
+ _0 = _1;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/projections.copy_for_deref.built.after.mir b/tests/mir-opt/building/custom/projections.copy_for_deref.built.after.mir
index 5233d0489..b1ba5f931 100644
--- a/tests/mir-opt/building/custom/projections.copy_for_deref.built.after.mir
+++ b/tests/mir-opt/building/custom/projections.copy_for_deref.built.after.mir
@@ -1,12 +1,12 @@
// MIR for `copy_for_deref` after built
fn copy_for_deref(_1: (&i32, i32)) -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/projections.rs:+0:38: +0:41
- let mut _2: &i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: i32;
+ let mut _2: &i32;
bb0: {
- _2 = deref_copy (_1.0: &i32); // scope 0 at $DIR/projections.rs:+4:13: +4:37
- _0 = (*_2); // scope 0 at $DIR/projections.rs:+5:13: +5:24
- return; // scope 0 at $DIR/projections.rs:+6:13: +6:21
+ _2 = deref_copy (_1.0: &i32);
+ _0 = (*_2);
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/projections.set.built.after.mir b/tests/mir-opt/building/custom/projections.set.built.after.mir
index 2f15176a6..9e756c504 100644
--- a/tests/mir-opt/building/custom/projections.set.built.after.mir
+++ b/tests/mir-opt/building/custom/projections.set.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `set` after built
fn set(_1: &mut Option<i32>) -> () {
- let mut _0: (); // return place in scope 0 at $DIR/projections.rs:+0:31: +0:31
+ let mut _0: ();
bb0: {
- (((*_1) as variant#1).0: i32) = const 10_i32; // scope 0 at $DIR/projections.rs:+2:9: +2:48
- return; // scope 0 at $DIR/projections.rs:+3:9: +3:17
+ (((*_1) as variant#1).0: i32) = const 10_i32;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/projections.simple_index.built.after.mir b/tests/mir-opt/building/custom/projections.simple_index.built.after.mir
index fc422e4b3..f74c61009 100644
--- a/tests/mir-opt/building/custom/projections.simple_index.built.after.mir
+++ b/tests/mir-opt/building/custom/projections.simple_index.built.after.mir
@@ -1,13 +1,13 @@
// MIR for `simple_index` after built
fn simple_index(_1: [i32; 10], _2: &[i32]) -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/projections.rs:+0:45: +0:48
- let mut _3: usize; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: i32;
+ let mut _3: usize;
bb0: {
- _3 = const 3_usize; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _0 = _1[_3]; // scope 0 at $DIR/projections.rs:+3:9: +3:22
- _0 = (*_2)[_3]; // scope 0 at $DIR/projections.rs:+4:9: +4:25
- return; // scope 0 at $DIR/projections.rs:+5:9: +5:17
+ _3 = const 3_usize;
+ _0 = _1[_3];
+ _0 = (*_2)[_3];
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/projections.tuples.built.after.mir b/tests/mir-opt/building/custom/projections.tuples.built.after.mir
index dec575200..a370de2ed 100644
--- a/tests/mir-opt/building/custom/projections.tuples.built.after.mir
+++ b/tests/mir-opt/building/custom/projections.tuples.built.after.mir
@@ -1,11 +1,11 @@
// MIR for `tuples` after built
fn tuples(_1: (u32, i32)) -> (u32, i32) {
- let mut _0: (u32, i32); // return place in scope 0 at $DIR/projections.rs:+0:29: +0:39
+ let mut _0: (u32, i32);
bb0: {
- (_0.0: u32) = (_1.0: u32); // scope 0 at $DIR/projections.rs:+4:13: +4:24
- (_0.1: i32) = (_1.1: i32); // scope 0 at $DIR/projections.rs:+5:13: +5:24
- return; // scope 0 at $DIR/projections.rs:+6:13: +6:21
+ (_0.0: u32) = (_1.0: u32);
+ (_0.1: i32) = (_1.1: i32);
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/projections.unions.built.after.mir b/tests/mir-opt/building/custom/projections.unions.built.after.mir
index 922538a5f..4189b329e 100644
--- a/tests/mir-opt/building/custom/projections.unions.built.after.mir
+++ b/tests/mir-opt/building/custom/projections.unions.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `unions` after built
fn unions(_1: U) -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/projections.rs:+0:20: +0:23
+ let mut _0: i32;
bb0: {
- _0 = (_1.0: i32); // scope 0 at $DIR/projections.rs:+2:9: +2:18
- return; // scope 0 at $DIR/projections.rs:+3:9: +3:17
+ _0 = (_1.0: i32);
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/projections.unwrap.built.after.mir b/tests/mir-opt/building/custom/projections.unwrap.built.after.mir
index 75b03a3c3..0c43bdc9d 100644
--- a/tests/mir-opt/building/custom/projections.unwrap.built.after.mir
+++ b/tests/mir-opt/building/custom/projections.unwrap.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `unwrap` after built
fn unwrap(_1: Option<i32>) -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/projections.rs:+0:32: +0:35
+ let mut _0: i32;
bb0: {
- _0 = ((_1 as variant#1).0: i32); // scope 0 at $DIR/projections.rs:+2:9: +2:40
- return; // scope 0 at $DIR/projections.rs:+3:9: +3:17
+ _0 = ((_1 as variant#1).0: i32);
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/projections.unwrap_deref.built.after.mir b/tests/mir-opt/building/custom/projections.unwrap_deref.built.after.mir
index c6b0f7efa..39e978513 100644
--- a/tests/mir-opt/building/custom/projections.unwrap_deref.built.after.mir
+++ b/tests/mir-opt/building/custom/projections.unwrap_deref.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `unwrap_deref` after built
fn unwrap_deref(_1: Option<&i32>) -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/projections.rs:+0:39: +0:42
+ let mut _0: i32;
bb0: {
- _0 = (*((_1 as variant#1).0: &i32)); // scope 0 at $DIR/projections.rs:+2:9: +2:49
- return; // scope 0 at $DIR/projections.rs:+3:9: +3:17
+ _0 = (*((_1 as variant#1).0: &i32));
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/references.immut_ref.built.after.mir b/tests/mir-opt/building/custom/references.immut_ref.built.after.mir
index f5ee11262..d1e1aab99 100644
--- a/tests/mir-opt/building/custom/references.immut_ref.built.after.mir
+++ b/tests/mir-opt/building/custom/references.immut_ref.built.after.mir
@@ -1,13 +1,13 @@
// MIR for `immut_ref` after built
fn immut_ref(_1: &i32) -> &i32 {
- let mut _0: &i32; // return place in scope 0 at $DIR/references.rs:+0:30: +0:34
- let mut _2: *const i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: &i32;
+ let mut _2: *const i32;
bb0: {
- _2 = &raw const (*_1); // scope 0 at $DIR/references.rs:+5:13: +5:29
- _0 = &(*_2); // scope 0 at $DIR/references.rs:+6:13: +6:23
- Retag(_0); // scope 0 at $DIR/references.rs:+7:13: +7:23
- return; // scope 0 at $DIR/references.rs:+8:13: +8:21
+ _2 = &raw const (*_1);
+ _0 = &(*_2);
+ Retag(_0);
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/references.mut_ref.built.after.mir b/tests/mir-opt/building/custom/references.mut_ref.built.after.mir
index 8e2ffc33b..c82cb3274 100644
--- a/tests/mir-opt/building/custom/references.mut_ref.built.after.mir
+++ b/tests/mir-opt/building/custom/references.mut_ref.built.after.mir
@@ -1,13 +1,13 @@
// MIR for `mut_ref` after built
fn mut_ref(_1: &mut i32) -> &mut i32 {
- let mut _0: &mut i32; // return place in scope 0 at $DIR/references.rs:+0:32: +0:40
- let mut _2: *mut i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: &mut i32;
+ let mut _2: *mut i32;
bb0: {
- _2 = &raw mut (*_1); // scope 0 at $DIR/references.rs:+5:13: +5:33
- _0 = &mut (*_2); // scope 0 at $DIR/references.rs:+6:13: +6:26
- Retag(_0); // scope 0 at $DIR/references.rs:+7:13: +7:23
- return; // scope 0 at $DIR/references.rs:+8:13: +8:21
+ _2 = &raw mut (*_1);
+ _0 = &mut (*_2);
+ Retag(_0);
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/references.raw_pointer.built.after.mir b/tests/mir-opt/building/custom/references.raw_pointer.built.after.mir
index 775e5e3ad..57c7f92a3 100644
--- a/tests/mir-opt/building/custom/references.raw_pointer.built.after.mir
+++ b/tests/mir-opt/building/custom/references.raw_pointer.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `raw_pointer` after built
fn raw_pointer(_1: *const i32) -> *const i32 {
- let mut _0: *const i32; // return place in scope 0 at $DIR/references.rs:+0:38: +0:48
+ let mut _0: *const i32;
bb0: {
- _0 = &raw const (*_1); // scope 0 at $DIR/references.rs:+4:9: +4:27
- return; // scope 0 at $DIR/references.rs:+5:9: +5:17
+ _0 = &raw const (*_1);
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/references.raw_pointer_offset.built.after.mir b/tests/mir-opt/building/custom/references.raw_pointer_offset.built.after.mir
index f614aef40..8046b543e 100644
--- a/tests/mir-opt/building/custom/references.raw_pointer_offset.built.after.mir
+++ b/tests/mir-opt/building/custom/references.raw_pointer_offset.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `raw_pointer_offset` after built
fn raw_pointer_offset(_1: *const i32) -> *const i32 {
- let mut _0: *const i32; // return place in scope 0 at $DIR/references.rs:+0:45: +0:55
+ let mut _0: *const i32;
bb0: {
- _0 = Offset(_1, const 1_isize); // scope 0 at $DIR/references.rs:+2:9: +2:33
- return; // scope 0 at $DIR/references.rs:+3:9: +3:17
+ _0 = Offset(_1, const 1_isize);
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/simple_assign.simple.built.after.mir b/tests/mir-opt/building/custom/simple_assign.simple.built.after.mir
index 743016708..6f7aaeed9 100644
--- a/tests/mir-opt/building/custom/simple_assign.simple.built.after.mir
+++ b/tests/mir-opt/building/custom/simple_assign.simple.built.after.mir
@@ -1,20 +1,20 @@
// MIR for `simple` after built
fn simple(_1: i32) -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/simple_assign.rs:+0:26: +0:29
- let mut _2: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: i32;
+ let mut _2: i32;
+ let mut _3: i32;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/simple_assign.rs:+6:13: +6:31
- _2 = _1; // scope 0 at $DIR/simple_assign.rs:+7:13: +7:22
- goto -> bb1; // scope 0 at $DIR/simple_assign.rs:+8:13: +8:23
+ StorageLive(_2);
+ _2 = _1;
+ goto -> bb1;
}
bb1: {
- _3 = move _2; // scope 0 at $DIR/simple_assign.rs:+12:13: +12:32
- StorageDead(_2); // scope 0 at $DIR/simple_assign.rs:+13:13: +13:31
- _0 = _3; // scope 0 at $DIR/simple_assign.rs:+14:13: +14:24
- return; // scope 0 at $DIR/simple_assign.rs:+15:13: +15:21
+ _3 = move _2;
+ StorageDead(_2);
+ _0 = _3;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/simple_assign.simple_ref.built.after.mir b/tests/mir-opt/building/custom/simple_assign.simple_ref.built.after.mir
index 2b0e8f104..b6d822998 100644
--- a/tests/mir-opt/building/custom/simple_assign.simple_ref.built.after.mir
+++ b/tests/mir-opt/building/custom/simple_assign.simple_ref.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `simple_ref` after built
fn simple_ref(_1: &mut i32) -> &mut i32 {
- let mut _0: &mut i32; // return place in scope 0 at $DIR/simple_assign.rs:+0:35: +0:43
+ let mut _0: &mut i32;
bb0: {
- _0 = move _1; // scope 0 at $DIR/simple_assign.rs:+2:9: +2:22
- return; // scope 0 at $DIR/simple_assign.rs:+3:9: +3:17
+ _0 = move _1;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/terminators.assert_nonzero.built.after.mir b/tests/mir-opt/building/custom/terminators.assert_nonzero.built.after.mir
index a1a27226b..9cf26dff3 100644
--- a/tests/mir-opt/building/custom/terminators.assert_nonzero.built.after.mir
+++ b/tests/mir-opt/building/custom/terminators.assert_nonzero.built.after.mir
@@ -1,17 +1,17 @@
// MIR for `assert_nonzero` after built
fn assert_nonzero(_1: i32) -> () {
- let mut _0: (); // return place in scope 0 at $DIR/terminators.rs:+0:27: +0:27
+ let mut _0: ();
bb0: {
- switchInt(_1) -> [0: bb1, otherwise: bb2]; // scope 0 at $DIR/terminators.rs:+3:13: +6:14
+ switchInt(_1) -> [0: bb1, otherwise: bb2];
}
bb1: {
- unreachable; // scope 0 at $DIR/terminators.rs:+10:13: +10:26
+ unreachable;
}
bb2: {
- return; // scope 0 at $DIR/terminators.rs:+14:13: +14:21
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/terminators.direct_call.built.after.mir b/tests/mir-opt/building/custom/terminators.direct_call.built.after.mir
index 1b2345a96..07044ceae 100644
--- a/tests/mir-opt/building/custom/terminators.direct_call.built.after.mir
+++ b/tests/mir-opt/building/custom/terminators.direct_call.built.after.mir
@@ -1,16 +1,13 @@
// MIR for `direct_call` after built
fn direct_call(_1: i32) -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/terminators.rs:+0:27: +0:30
+ let mut _0: i32;
bb0: {
- _0 = ident::<i32>(_1) -> bb1; // scope 0 at $DIR/terminators.rs:+3:13: +3:42
- // mir::Constant
- // + span: $DIR/terminators.rs:15:33: 15:38
- // + literal: Const { ty: fn(i32) -> i32 {ident::<i32>}, val: Value(<ZST>) }
+ _0 = ident::<i32>(_1) -> [return: bb1, unwind continue];
}
bb1: {
- return; // scope 0 at $DIR/terminators.rs:+7:13: +7:21
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/terminators.drop_first.built.after.mir b/tests/mir-opt/building/custom/terminators.drop_first.built.after.mir
index ada78c0fc..6524f754d 100644
--- a/tests/mir-opt/building/custom/terminators.drop_first.built.after.mir
+++ b/tests/mir-opt/building/custom/terminators.drop_first.built.after.mir
@@ -1,14 +1,14 @@
// MIR for `drop_first` after built
fn drop_first(_1: WriteOnDrop<'_>, _2: WriteOnDrop<'_>) -> () {
- let mut _0: (); // return place in scope 0 at $DIR/terminators.rs:+0:59: +0:59
+ let mut _0: ();
bb0: {
- drop(_1) -> bb1; // scope 0 at $DIR/terminators.rs:+3:13: +3:30
+ drop(_1) -> [return: bb1, unwind continue];
}
bb1: {
- _1 = move _2; // scope 0 at $DIR/terminators.rs:+7:13: +7:24
- return; // scope 0 at $DIR/terminators.rs:+8:13: +8:21
+ _1 = move _2;
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/terminators.drop_second.built.after.mir b/tests/mir-opt/building/custom/terminators.drop_second.built.after.mir
index f14246f2d..ed3728121 100644
--- a/tests/mir-opt/building/custom/terminators.drop_second.built.after.mir
+++ b/tests/mir-opt/building/custom/terminators.drop_second.built.after.mir
@@ -1,13 +1,13 @@
// MIR for `drop_second` after built
fn drop_second(_1: WriteOnDrop<'_>, _2: WriteOnDrop<'_>) -> () {
- let mut _0: (); // return place in scope 0 at $DIR/terminators.rs:+0:60: +0:60
+ let mut _0: ();
bb0: {
- drop(_2) -> bb1; // scope 0 at $DIR/terminators.rs:+3:13: +3:30
+ drop(_2) -> [return: bb1, unwind continue];
}
bb1: {
- return; // scope 0 at $DIR/terminators.rs:+7:13: +7:21
+ return;
}
}
diff --git a/tests/mir-opt/building/custom/terminators.indirect_call.built.after.mir b/tests/mir-opt/building/custom/terminators.indirect_call.built.after.mir
index 2f1b14069..3b849354d 100644
--- a/tests/mir-opt/building/custom/terminators.indirect_call.built.after.mir
+++ b/tests/mir-opt/building/custom/terminators.indirect_call.built.after.mir
@@ -1,13 +1,13 @@
// MIR for `indirect_call` after built
fn indirect_call(_1: i32, _2: fn(i32) -> i32) -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/terminators.rs:+0:48: +0:51
+ let mut _0: i32;
bb0: {
- _0 = _2(_1) -> bb1; // scope 0 at $DIR/terminators.rs:+3:13: +3:38
+ _0 = _2(_1) -> [return: bb1, unwind continue];
}
bb1: {
- return; // scope 0 at $DIR/terminators.rs:+7:13: +7:21
+ return;
}
}
diff --git a/tests/mir-opt/building/enum_cast.bar.built.after.mir b/tests/mir-opt/building/enum_cast.bar.built.after.mir
index 9f14c0284..512c73216 100644
--- a/tests/mir-opt/building/enum_cast.bar.built.after.mir
+++ b/tests/mir-opt/building/enum_cast.bar.built.after.mir
@@ -1,22 +1,22 @@
// MIR for `bar` after built
fn bar(_1: Bar) -> usize {
- debug bar => _1; // in scope 0 at $DIR/enum_cast.rs:+0:8: +0:11
- let mut _0: usize; // return place in scope 0 at $DIR/enum_cast.rs:+0:21: +0:26
- let _2: Bar; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- let mut _3: isize; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- let mut _4: u8; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- let mut _5: bool; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
+ debug bar => _1;
+ let mut _0: usize;
+ let _2: Bar;
+ let mut _3: isize;
+ let mut _4: u8;
+ let mut _5: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- _2 = move _1; // scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- _3 = discriminant(_2); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- _4 = _3 as u8 (IntToInt); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- _5 = Le(_4, const 1_u8); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- assume(move _5); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- _0 = move _3 as usize (IntToInt); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- StorageDead(_2); // scope 0 at $DIR/enum_cast.rs:+1:16: +1:17
- return; // scope 0 at $DIR/enum_cast.rs:+2:2: +2:2
+ StorageLive(_2);
+ _2 = move _1;
+ _3 = discriminant(_2);
+ _4 = _3 as u8 (IntToInt);
+ _5 = Le(_4, const 1_u8);
+ assume(move _5);
+ _0 = move _3 as usize (IntToInt);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/building/enum_cast.boo.built.after.mir b/tests/mir-opt/building/enum_cast.boo.built.after.mir
index 715dedcf2..ad0adf14e 100644
--- a/tests/mir-opt/building/enum_cast.boo.built.after.mir
+++ b/tests/mir-opt/building/enum_cast.boo.built.after.mir
@@ -1,22 +1,22 @@
// MIR for `boo` after built
fn boo(_1: Boo) -> usize {
- debug boo => _1; // in scope 0 at $DIR/enum_cast.rs:+0:8: +0:11
- let mut _0: usize; // return place in scope 0 at $DIR/enum_cast.rs:+0:21: +0:26
- let _2: Boo; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- let mut _3: u8; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- let mut _4: u8; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- let mut _5: bool; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
+ debug boo => _1;
+ let mut _0: usize;
+ let _2: Boo;
+ let mut _3: u8;
+ let mut _4: u8;
+ let mut _5: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- _2 = move _1; // scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- _3 = discriminant(_2); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- _4 = _3 as u8 (IntToInt); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- _5 = Le(_4, const 1_u8); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- assume(move _5); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- _0 = move _3 as usize (IntToInt); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- StorageDead(_2); // scope 0 at $DIR/enum_cast.rs:+1:16: +1:17
- return; // scope 0 at $DIR/enum_cast.rs:+2:2: +2:2
+ StorageLive(_2);
+ _2 = move _1;
+ _3 = discriminant(_2);
+ _4 = _3 as u8 (IntToInt);
+ _5 = Le(_4, const 1_u8);
+ assume(move _5);
+ _0 = move _3 as usize (IntToInt);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/building/enum_cast.droppy.built.after.mir b/tests/mir-opt/building/enum_cast.droppy.built.after.mir
index 6c177c61e..1caf9e4a5 100644
--- a/tests/mir-opt/building/enum_cast.droppy.built.after.mir
+++ b/tests/mir-opt/building/enum_cast.droppy.built.after.mir
@@ -1,71 +1,71 @@
// MIR for `droppy` after built
fn droppy() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/enum_cast.rs:+0:13: +0:13
- let _1: (); // in scope 0 at $DIR/enum_cast.rs:+1:5: +6:6
- let _2: Droppy; // in scope 0 at $DIR/enum_cast.rs:+2:13: +2:14
- let _4: Droppy; // in scope 0 at $DIR/enum_cast.rs:+5:17: +5:18
- let mut _5: isize; // in scope 0 at $DIR/enum_cast.rs:+5:17: +5:18
- let mut _6: u8; // in scope 0 at $DIR/enum_cast.rs:+5:17: +5:27
- let mut _7: bool; // in scope 0 at $DIR/enum_cast.rs:+5:17: +5:27
- let _8: Droppy; // in scope 0 at $DIR/enum_cast.rs:+7:9: +7:10
+ let mut _0: ();
+ let _1: ();
+ let _2: Droppy;
+ let _4: Droppy;
+ let mut _5: isize;
+ let mut _6: u8;
+ let mut _7: bool;
+ let _8: Droppy;
scope 1 {
- debug x => _2; // in scope 1 at $DIR/enum_cast.rs:+2:13: +2:14
+ debug x => _2;
scope 2 {
- debug y => _3; // in scope 2 at $DIR/enum_cast.rs:+5:13: +5:14
+ debug y => _3;
}
scope 3 {
- let _3: usize; // in scope 3 at $DIR/enum_cast.rs:+5:13: +5:14
+ let _3: usize;
}
}
scope 4 {
- debug z => _8; // in scope 4 at $DIR/enum_cast.rs:+7:9: +7:10
+ debug z => _8;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/enum_cast.rs:+1:5: +6:6
- StorageLive(_2); // scope 0 at $DIR/enum_cast.rs:+2:13: +2:14
- _2 = Droppy::C; // scope 0 at $DIR/enum_cast.rs:+2:17: +2:26
- FakeRead(ForLet(None), _2); // scope 0 at $DIR/enum_cast.rs:+2:13: +2:14
- StorageLive(_3); // scope 3 at $DIR/enum_cast.rs:+5:13: +5:14
- StorageLive(_4); // scope 3 at $DIR/enum_cast.rs:+5:17: +5:18
- _4 = move _2; // scope 3 at $DIR/enum_cast.rs:+5:17: +5:18
- _5 = discriminant(_4); // scope 3 at $DIR/enum_cast.rs:+5:17: +5:27
- _6 = _5 as u8 (IntToInt); // scope 3 at $DIR/enum_cast.rs:+5:17: +5:27
- _7 = Le(_6, const 2_u8); // scope 3 at $DIR/enum_cast.rs:+5:17: +5:27
- assume(move _7); // scope 3 at $DIR/enum_cast.rs:+5:17: +5:27
- _3 = move _5 as usize (IntToInt); // scope 3 at $DIR/enum_cast.rs:+5:17: +5:27
- drop(_4) -> [return: bb1, unwind: bb4]; // scope 3 at $DIR/enum_cast.rs:+5:26: +5:27
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = Droppy::C;
+ FakeRead(ForLet(None), _2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = move _2;
+ _5 = discriminant(_4);
+ _6 = _5 as u8 (IntToInt);
+ _7 = Le(_6, const 2_u8);
+ assume(move _7);
+ _3 = move _5 as usize (IntToInt);
+ drop(_4) -> [return: bb1, unwind: bb4];
}
bb1: {
- StorageDead(_4); // scope 3 at $DIR/enum_cast.rs:+5:26: +5:27
- FakeRead(ForLet(None), _3); // scope 3 at $DIR/enum_cast.rs:+5:13: +5:14
- _1 = const (); // scope 0 at $DIR/enum_cast.rs:+1:5: +6:6
- StorageDead(_3); // scope 1 at $DIR/enum_cast.rs:+6:5: +6:6
- drop(_2) -> [return: bb2, unwind: bb5]; // scope 0 at $DIR/enum_cast.rs:+6:5: +6:6
+ StorageDead(_4);
+ FakeRead(ForLet(None), _3);
+ _1 = const ();
+ StorageDead(_3);
+ drop(_2) -> [return: bb2, unwind: bb5];
}
bb2: {
- StorageDead(_2); // scope 0 at $DIR/enum_cast.rs:+6:5: +6:6
- StorageDead(_1); // scope 0 at $DIR/enum_cast.rs:+6:5: +6:6
- StorageLive(_8); // scope 0 at $DIR/enum_cast.rs:+7:9: +7:10
- _8 = Droppy::B; // scope 0 at $DIR/enum_cast.rs:+7:13: +7:22
- FakeRead(ForLet(None), _8); // scope 0 at $DIR/enum_cast.rs:+7:9: +7:10
- _0 = const (); // scope 0 at $DIR/enum_cast.rs:+0:13: +8:2
- drop(_8) -> [return: bb3, unwind: bb5]; // scope 0 at $DIR/enum_cast.rs:+8:1: +8:2
+ StorageDead(_2);
+ StorageDead(_1);
+ StorageLive(_8);
+ _8 = Droppy::B;
+ FakeRead(ForLet(None), _8);
+ _0 = const ();
+ drop(_8) -> [return: bb3, unwind: bb5];
}
bb3: {
- StorageDead(_8); // scope 0 at $DIR/enum_cast.rs:+8:1: +8:2
- return; // scope 0 at $DIR/enum_cast.rs:+8:2: +8:2
+ StorageDead(_8);
+ return;
}
bb4 (cleanup): {
- drop(_2) -> [return: bb5, unwind terminate]; // scope 0 at $DIR/enum_cast.rs:+6:5: +6:6
+ drop(_2) -> [return: bb5, unwind terminate];
}
bb5 (cleanup): {
- resume; // scope 0 at $DIR/enum_cast.rs:+0:1: +8:2
+ resume;
}
}
diff --git a/tests/mir-opt/building/enum_cast.far.built.after.mir b/tests/mir-opt/building/enum_cast.far.built.after.mir
index ab8129ca0..e75803c70 100644
--- a/tests/mir-opt/building/enum_cast.far.built.after.mir
+++ b/tests/mir-opt/building/enum_cast.far.built.after.mir
@@ -1,22 +1,22 @@
// MIR for `far` after built
fn far(_1: Far) -> isize {
- debug far => _1; // in scope 0 at $DIR/enum_cast.rs:+0:8: +0:11
- let mut _0: isize; // return place in scope 0 at $DIR/enum_cast.rs:+0:21: +0:26
- let _2: Far; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- let mut _3: i16; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- let mut _4: u16; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- let mut _5: bool; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
+ debug far => _1;
+ let mut _0: isize;
+ let _2: Far;
+ let mut _3: i16;
+ let mut _4: u16;
+ let mut _5: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- _2 = move _1; // scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- _3 = discriminant(_2); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- _4 = _3 as u16 (IntToInt); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- _5 = Le(_4, const 1_u16); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- assume(move _5); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- _0 = move _3 as isize (IntToInt); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- StorageDead(_2); // scope 0 at $DIR/enum_cast.rs:+1:16: +1:17
- return; // scope 0 at $DIR/enum_cast.rs:+2:2: +2:2
+ StorageLive(_2);
+ _2 = move _1;
+ _3 = discriminant(_2);
+ _4 = _3 as u16 (IntToInt);
+ _5 = Le(_4, const 1_u16);
+ assume(move _5);
+ _0 = move _3 as isize (IntToInt);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/building/enum_cast.foo.built.after.mir b/tests/mir-opt/building/enum_cast.foo.built.after.mir
index 17e0abf2e..d4eea0534 100644
--- a/tests/mir-opt/building/enum_cast.foo.built.after.mir
+++ b/tests/mir-opt/building/enum_cast.foo.built.after.mir
@@ -1,17 +1,17 @@
// MIR for `foo` after built
fn foo(_1: Foo) -> usize {
- debug foo => _1; // in scope 0 at $DIR/enum_cast.rs:+0:8: +0:11
- let mut _0: usize; // return place in scope 0 at $DIR/enum_cast.rs:+0:21: +0:26
- let _2: Foo; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- let mut _3: isize; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
+ debug foo => _1;
+ let mut _0: usize;
+ let _2: Foo;
+ let mut _3: isize;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- _2 = move _1; // scope 0 at $DIR/enum_cast.rs:+1:5: +1:8
- _3 = discriminant(_2); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- _0 = move _3 as usize (IntToInt); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:17
- StorageDead(_2); // scope 0 at $DIR/enum_cast.rs:+1:16: +1:17
- return; // scope 0 at $DIR/enum_cast.rs:+2:2: +2:2
+ StorageLive(_2);
+ _2 = move _1;
+ _3 = discriminant(_2);
+ _0 = move _3 as usize (IntToInt);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/building/enum_cast.offsetty.built.after.mir b/tests/mir-opt/building/enum_cast.offsetty.built.after.mir
index 7b2b583f2..282859d7c 100644
--- a/tests/mir-opt/building/enum_cast.offsetty.built.after.mir
+++ b/tests/mir-opt/building/enum_cast.offsetty.built.after.mir
@@ -1,26 +1,26 @@
// MIR for `offsetty` after built
fn offsetty(_1: NotStartingAtZero) -> u32 {
- debug x => _1; // in scope 0 at $DIR/enum_cast.rs:+0:13: +0:14
- let mut _0: u32; // return place in scope 0 at $DIR/enum_cast.rs:+0:38: +0:41
- let _2: NotStartingAtZero; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:6
- let mut _3: isize; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:6
- let mut _4: u8; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- let mut _5: bool; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- let mut _6: bool; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- let mut _7: bool; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
+ debug x => _1;
+ let mut _0: u32;
+ let _2: NotStartingAtZero;
+ let mut _3: isize;
+ let mut _4: u8;
+ let mut _5: bool;
+ let mut _6: bool;
+ let mut _7: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:6
- _2 = move _1; // scope 0 at $DIR/enum_cast.rs:+1:5: +1:6
- _3 = discriminant(_2); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- _4 = _3 as u8 (IntToInt); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- _5 = Ge(_4, const 4_u8); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- _6 = Le(_4, const 8_u8); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- _7 = BitAnd(move _5, move _6); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- assume(move _7); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- _0 = move _3 as u32 (IntToInt); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- StorageDead(_2); // scope 0 at $DIR/enum_cast.rs:+1:12: +1:13
- return; // scope 0 at $DIR/enum_cast.rs:+2:2: +2:2
+ StorageLive(_2);
+ _2 = move _1;
+ _3 = discriminant(_2);
+ _4 = _3 as u8 (IntToInt);
+ _5 = Ge(_4, const 4_u8);
+ _6 = Le(_4, const 8_u8);
+ _7 = BitAnd(move _5, move _6);
+ assume(move _7);
+ _0 = move _3 as u32 (IntToInt);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/building/enum_cast.signy.built.after.mir b/tests/mir-opt/building/enum_cast.signy.built.after.mir
index ef4fea604..a9f7d6c78 100644
--- a/tests/mir-opt/building/enum_cast.signy.built.after.mir
+++ b/tests/mir-opt/building/enum_cast.signy.built.after.mir
@@ -1,26 +1,26 @@
// MIR for `signy` after built
fn signy(_1: SignedAroundZero) -> i16 {
- debug x => _1; // in scope 0 at $DIR/enum_cast.rs:+0:10: +0:11
- let mut _0: i16; // return place in scope 0 at $DIR/enum_cast.rs:+0:34: +0:37
- let _2: SignedAroundZero; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:6
- let mut _3: i16; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:6
- let mut _4: u16; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- let mut _5: bool; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- let mut _6: bool; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- let mut _7: bool; // in scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
+ debug x => _1;
+ let mut _0: i16;
+ let _2: SignedAroundZero;
+ let mut _3: i16;
+ let mut _4: u16;
+ let mut _5: bool;
+ let mut _6: bool;
+ let mut _7: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:6
- _2 = move _1; // scope 0 at $DIR/enum_cast.rs:+1:5: +1:6
- _3 = discriminant(_2); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- _4 = _3 as u16 (IntToInt); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- _5 = Ge(_4, const 65534_u16); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- _6 = Le(_4, const 2_u16); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- _7 = BitOr(move _5, move _6); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- assume(move _7); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- _0 = move _3 as i16 (IntToInt); // scope 0 at $DIR/enum_cast.rs:+1:5: +1:13
- StorageDead(_2); // scope 0 at $DIR/enum_cast.rs:+1:12: +1:13
- return; // scope 0 at $DIR/enum_cast.rs:+2:2: +2:2
+ StorageLive(_2);
+ _2 = move _1;
+ _3 = discriminant(_2);
+ _4 = _3 as u16 (IntToInt);
+ _5 = Ge(_4, const 65534_u16);
+ _6 = Le(_4, const 2_u16);
+ _7 = BitOr(move _5, move _6);
+ assume(move _7);
+ _0 = move _3 as i16 (IntToInt);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/building/enum_cast.unsigny.built.after.mir b/tests/mir-opt/building/enum_cast.unsigny.built.after.mir
index 7ca147b15..a232ab942 100644
--- a/tests/mir-opt/building/enum_cast.unsigny.built.after.mir
+++ b/tests/mir-opt/building/enum_cast.unsigny.built.after.mir
@@ -1,17 +1,17 @@
// MIR for `unsigny` after built
fn unsigny(_1: UnsignedAroundZero) -> u16 {
- debug x => _1; // in scope 0 at $DIR/enum_cast.rs:+0:12: +0:13
- let mut _0: u16; // return place in scope 0 at $DIR/enum_cast.rs:+0:38: +0:41
- let _2: UnsignedAroundZero; // in scope 0 at $DIR/enum_cast.rs:+2:5: +2:6
- let mut _3: u16; // in scope 0 at $DIR/enum_cast.rs:+2:5: +2:6
+ debug x => _1;
+ let mut _0: u16;
+ let _2: UnsignedAroundZero;
+ let mut _3: u16;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/enum_cast.rs:+2:5: +2:6
- _2 = move _1; // scope 0 at $DIR/enum_cast.rs:+2:5: +2:6
- _3 = discriminant(_2); // scope 0 at $DIR/enum_cast.rs:+2:5: +2:13
- _0 = move _3 as u16 (IntToInt); // scope 0 at $DIR/enum_cast.rs:+2:5: +2:13
- StorageDead(_2); // scope 0 at $DIR/enum_cast.rs:+2:12: +2:13
- return; // scope 0 at $DIR/enum_cast.rs:+3:2: +3:2
+ StorageLive(_2);
+ _2 = move _1;
+ _3 = discriminant(_2);
+ _0 = move _3 as u16 (IntToInt);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/building/issue_101867.main.built.after.mir b/tests/mir-opt/building/issue_101867.main.built.after.mir
index 44c25ce67..915c5ef11 100644
--- a/tests/mir-opt/building/issue_101867.main.built.after.mir
+++ b/tests/mir-opt/building/issue_101867.main.built.after.mir
@@ -5,71 +5,65 @@
| 1: user_ty: Canonical { value: Ty(std::option::Option<u8>), max_universe: U0, variables: [] }, span: $DIR/issue_101867.rs:3:12: 3:22, inferred_ty: std::option::Option<u8>
|
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_101867.rs:+0:11: +0:11
- let _1: std::option::Option<u8> as UserTypeProjection { base: UserType(0), projs: [] }; // in scope 0 at $DIR/issue_101867.rs:+1:9: +1:10
- let mut _2: !; // in scope 0 at $DIR/issue_101867.rs:+2:26: +4:6
- let _3: (); // in scope 0 at $SRC_DIR/std/src/panic.rs:LL:COL
- let mut _4: !; // in scope 0 at $SRC_DIR/std/src/panic.rs:LL:COL
- let mut _6: isize; // in scope 0 at $DIR/issue_101867.rs:+2:9: +2:16
+ let mut _0: ();
+ let _1: std::option::Option<u8> as UserTypeProjection { base: UserType(0), projs: [] };
+ let mut _2: !;
+ let _3: ();
+ let mut _4: !;
+ let mut _6: isize;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/issue_101867.rs:+1:9: +1:10
- let _5: u8; // in scope 1 at $DIR/issue_101867.rs:+2:14: +2:15
+ debug x => _1;
+ let _5: u8;
scope 2 {
- debug y => _5; // in scope 2 at $DIR/issue_101867.rs:+2:14: +2:15
+ debug y => _5;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/issue_101867.rs:+1:9: +1:10
- _1 = Option::<u8>::Some(const 1_u8); // scope 0 at $DIR/issue_101867.rs:+1:25: +1:32
- FakeRead(ForLet(None), _1); // scope 0 at $DIR/issue_101867.rs:+1:9: +1:10
- AscribeUserType(_1, o, UserTypeProjection { base: UserType(1), projs: [] }); // scope 0 at $DIR/issue_101867.rs:+1:12: +1:22
- StorageLive(_5); // scope 1 at $DIR/issue_101867.rs:+2:14: +2:15
- FakeRead(ForMatchedPlace(None), _1); // scope 1 at $DIR/issue_101867.rs:+2:19: +2:20
- _6 = discriminant(_1); // scope 1 at $DIR/issue_101867.rs:+2:19: +2:20
- switchInt(move _6) -> [1: bb4, otherwise: bb3]; // scope 1 at $DIR/issue_101867.rs:+2:9: +2:16
+ StorageLive(_1);
+ _1 = Option::<u8>::Some(const 1_u8);
+ FakeRead(ForLet(None), _1);
+ AscribeUserType(_1, o, UserTypeProjection { base: UserType(1), projs: [] });
+ StorageLive(_5);
+ FakeRead(ForMatchedPlace(None), _1);
+ _6 = discriminant(_1);
+ switchInt(move _6) -> [1: bb4, otherwise: bb3];
}
bb1: {
- StorageLive(_3); // scope 1 at $SRC_DIR/std/src/panic.rs:LL:COL
- StorageLive(_4); // scope 1 at $SRC_DIR/std/src/panic.rs:LL:COL
- _4 = begin_panic::<&str>(const "explicit panic") -> bb7; // scope 1 at $SRC_DIR/std/src/panic.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/std/src/panic.rs:LL:COL
- // + literal: Const { ty: fn(&str) -> ! {begin_panic::<&str>}, val: Value(<ZST>) }
- // mir::Constant
- // + span: $SRC_DIR/std/src/panic.rs:LL:COL
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = begin_panic::<&str>(const "explicit panic") -> bb7;
}
bb2: {
- StorageDead(_4); // scope 1 at $SRC_DIR/std/src/panic.rs:LL:COL
- StorageDead(_3); // scope 1 at $DIR/issue_101867.rs:+3:16: +3:17
- unreachable; // scope 1 at $DIR/issue_101867.rs:+2:26: +4:6
+ StorageDead(_4);
+ StorageDead(_3);
+ unreachable;
}
bb3: {
- goto -> bb6; // scope 1 at $DIR/issue_101867.rs:+2:19: +2:20
+ goto -> bb6;
}
bb4: {
- falseEdge -> [real: bb5, imaginary: bb3]; // scope 1 at $DIR/issue_101867.rs:+2:9: +2:16
+ falseEdge -> [real: bb5, imaginary: bb3];
}
bb5: {
- _5 = ((_1 as Some).0: u8); // scope 1 at $DIR/issue_101867.rs:+2:14: +2:15
- _0 = const (); // scope 0 at $DIR/issue_101867.rs:+0:11: +5:2
- StorageDead(_5); // scope 1 at $DIR/issue_101867.rs:+5:1: +5:2
- StorageDead(_1); // scope 0 at $DIR/issue_101867.rs:+5:1: +5:2
- return; // scope 0 at $DIR/issue_101867.rs:+5:2: +5:2
+ _5 = ((_1 as Some).0: u8);
+ _0 = const ();
+ StorageDead(_5);
+ StorageDead(_1);
+ return;
}
bb6: {
- StorageDead(_5); // scope 1 at $DIR/issue_101867.rs:+5:1: +5:2
- goto -> bb1; // scope 0 at $DIR/issue_101867.rs:+0:11: +5:2
+ StorageDead(_5);
+ goto -> bb1;
}
bb7 (cleanup): {
- resume; // scope 0 at $DIR/issue_101867.rs:+0:1: +5:2
+ resume;
}
}
diff --git a/tests/mir-opt/building/issue_110508.rs b/tests/mir-opt/building/issue_110508.rs
new file mode 100644
index 000000000..bcbb1c298
--- /dev/null
+++ b/tests/mir-opt/building/issue_110508.rs
@@ -0,0 +1,13 @@
+// EMIT_MIR issue_110508.{impl#0}-BAR.built.after.mir
+// EMIT_MIR issue_110508.{impl#0}-SELF_BAR.built.after.mir
+
+enum Foo {
+ Bar(()),
+}
+
+impl Foo {
+ const BAR: Foo = Foo::Bar(());
+ const SELF_BAR: Foo = Self::Bar(());
+}
+
+fn main() {}
diff --git a/tests/mir-opt/building/issue_110508.{impl#0}-BAR.built.after.mir b/tests/mir-opt/building/issue_110508.{impl#0}-BAR.built.after.mir
new file mode 100644
index 000000000..5fc6d911a
--- /dev/null
+++ b/tests/mir-opt/building/issue_110508.{impl#0}-BAR.built.after.mir
@@ -0,0 +1,14 @@
+// MIR for `<impl at $DIR/issue_110508.rs:8:1: 8:9>::BAR` after built
+
+const <impl at $DIR/issue_110508.rs:8:1: 8:9>::BAR: Foo = {
+ let mut _0: Foo;
+ let mut _1: ();
+
+ bb0: {
+ StorageLive(_1);
+ _1 = ();
+ _0 = Foo::Bar(move _1);
+ StorageDead(_1);
+ return;
+ }
+}
diff --git a/tests/mir-opt/building/issue_110508.{impl#0}-SELF_BAR.built.after.mir b/tests/mir-opt/building/issue_110508.{impl#0}-SELF_BAR.built.after.mir
new file mode 100644
index 000000000..1a8925599
--- /dev/null
+++ b/tests/mir-opt/building/issue_110508.{impl#0}-SELF_BAR.built.after.mir
@@ -0,0 +1,14 @@
+// MIR for `<impl at $DIR/issue_110508.rs:8:1: 8:9>::SELF_BAR` after built
+
+const <impl at $DIR/issue_110508.rs:8:1: 8:9>::SELF_BAR: Foo = {
+ let mut _0: Foo;
+ let mut _1: ();
+
+ bb0: {
+ StorageLive(_1);
+ _1 = ();
+ _0 = Foo::Bar(move _1);
+ StorageDead(_1);
+ return;
+ }
+}
diff --git a/tests/mir-opt/building/issue_49232.main.built.after.mir b/tests/mir-opt/building/issue_49232.main.built.after.mir
index cc135f417..f809132bc 100644
--- a/tests/mir-opt/building/issue_49232.main.built.after.mir
+++ b/tests/mir-opt/building/issue_49232.main.built.after.mir
@@ -1,82 +1,79 @@
// MIR for `main` after built
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_49232.rs:+0:11: +0:11
- let mut _1: (); // in scope 0 at $DIR/issue_49232.rs:+0:1: +10:2
- let _2: i32; // in scope 0 at $DIR/issue_49232.rs:+2:13: +2:19
- let mut _3: bool; // in scope 0 at $DIR/issue_49232.rs:+3:19: +3:23
- let mut _4: !; // in scope 0 at $DIR/issue_49232.rs:+5:25: +5:30
- let _5: (); // in scope 0 at $DIR/issue_49232.rs:+8:9: +8:22
- let mut _6: &i32; // in scope 0 at $DIR/issue_49232.rs:+8:14: +8:21
+ let mut _0: ();
+ let mut _1: ();
+ let _2: i32;
+ let mut _3: bool;
+ let mut _4: !;
+ let _5: ();
+ let mut _6: &i32;
scope 1 {
- debug beacon => _2; // in scope 1 at $DIR/issue_49232.rs:+2:13: +2:19
+ debug beacon => _2;
}
bb0: {
- goto -> bb1; // scope 0 at $DIR/issue_49232.rs:+1:5: +9:6
+ goto -> bb1;
}
bb1: {
- falseUnwind -> [real: bb2, unwind: bb11]; // scope 0 at $DIR/issue_49232.rs:+1:5: +9:6
+ falseUnwind -> [real: bb2, unwind: bb11];
}
bb2: {
- StorageLive(_2); // scope 0 at $DIR/issue_49232.rs:+2:13: +2:19
- StorageLive(_3); // scope 0 at $DIR/issue_49232.rs:+3:19: +3:23
- _3 = const true; // scope 0 at $DIR/issue_49232.rs:+3:19: +3:23
- FakeRead(ForMatchedPlace(None), _3); // scope 0 at $DIR/issue_49232.rs:+3:19: +3:23
- switchInt(_3) -> [0: bb3, otherwise: bb4]; // scope 0 at $DIR/issue_49232.rs:+3:13: +3:23
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = const true;
+ FakeRead(ForMatchedPlace(None), _3);
+ switchInt(_3) -> [0: bb3, otherwise: bb4];
}
bb3: {
- falseEdge -> [real: bb5, imaginary: bb4]; // scope 0 at $DIR/issue_49232.rs:+4:17: +4:22
+ falseEdge -> [real: bb5, imaginary: bb4];
}
bb4: {
- _0 = const (); // scope 0 at $DIR/issue_49232.rs:+5:25: +5:30
- goto -> bb10; // scope 0 at $DIR/issue_49232.rs:+5:25: +5:30
+ _0 = const ();
+ goto -> bb10;
}
bb5: {
- _2 = const 4_i32; // scope 0 at $DIR/issue_49232.rs:+4:26: +4:27
- goto -> bb8; // scope 0 at $DIR/issue_49232.rs:+4:26: +4:27
+ _2 = const 4_i32;
+ goto -> bb8;
}
bb6: {
- unreachable; // scope 0 at $DIR/issue_49232.rs:+5:25: +5:30
+ unreachable;
}
bb7: {
- goto -> bb8; // scope 0 at $DIR/issue_49232.rs:+6:13: +6:14
+ goto -> bb8;
}
bb8: {
- FakeRead(ForLet(None), _2); // scope 0 at $DIR/issue_49232.rs:+2:13: +2:19
- StorageDead(_3); // scope 0 at $DIR/issue_49232.rs:+7:10: +7:11
- StorageLive(_5); // scope 1 at $DIR/issue_49232.rs:+8:9: +8:22
- StorageLive(_6); // scope 1 at $DIR/issue_49232.rs:+8:14: +8:21
- _6 = &_2; // scope 1 at $DIR/issue_49232.rs:+8:14: +8:21
- _5 = std::mem::drop::<&i32>(move _6) -> [return: bb9, unwind: bb11]; // scope 1 at $DIR/issue_49232.rs:+8:9: +8:22
- // mir::Constant
- // + span: $DIR/issue_49232.rs:13:9: 13:13
- // + literal: Const { ty: fn(&i32) {std::mem::drop::<&i32>}, val: Value(<ZST>) }
+ FakeRead(ForLet(None), _2);
+ StorageDead(_3);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = &_2;
+ _5 = std::mem::drop::<&i32>(move _6) -> [return: bb9, unwind: bb11];
}
bb9: {
- StorageDead(_6); // scope 1 at $DIR/issue_49232.rs:+8:21: +8:22
- StorageDead(_5); // scope 1 at $DIR/issue_49232.rs:+8:22: +8:23
- _1 = const (); // scope 0 at $DIR/issue_49232.rs:+1:10: +9:6
- StorageDead(_2); // scope 0 at $DIR/issue_49232.rs:+9:5: +9:6
- goto -> bb1; // scope 0 at $DIR/issue_49232.rs:+1:5: +9:6
+ StorageDead(_6);
+ StorageDead(_5);
+ _1 = const ();
+ StorageDead(_2);
+ goto -> bb1;
}
bb10: {
- StorageDead(_3); // scope 0 at $DIR/issue_49232.rs:+7:10: +7:11
- StorageDead(_2); // scope 0 at $DIR/issue_49232.rs:+9:5: +9:6
- return; // scope 0 at $DIR/issue_49232.rs:+10:2: +10:2
+ StorageDead(_3);
+ StorageDead(_2);
+ return;
}
bb11 (cleanup): {
- resume; // scope 0 at $DIR/issue_49232.rs:+0:1: +10:2
+ resume;
}
}
diff --git a/tests/mir-opt/building/match_false_edges.full_tested_match.built.after.mir b/tests/mir-opt/building/match_false_edges.full_tested_match.built.after.mir
index 0e6de839d..bd4cd4eb6 100644
--- a/tests/mir-opt/building/match_false_edges.full_tested_match.built.after.mir
+++ b/tests/mir-opt/building/match_false_edges.full_tested_match.built.after.mir
@@ -1,113 +1,110 @@
// MIR for `full_tested_match` after built
fn full_tested_match() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/match_false_edges.rs:+0:28: +0:28
- let mut _1: (i32, i32); // in scope 0 at $DIR/match_false_edges.rs:+1:13: +5:6
- let mut _2: std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- let mut _3: isize; // in scope 0 at $DIR/match_false_edges.rs:+2:9: +2:16
- let mut _4: &std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- let _5: i32; // in scope 0 at $DIR/match_false_edges.rs:+2:14: +2:15
- let _6: &i32; // in scope 0 at $DIR/match_false_edges.rs:+2:14: +2:15
- let mut _7: bool; // in scope 0 at $DIR/match_false_edges.rs:+2:20: +2:27
- let mut _8: i32; // in scope 0 at $DIR/match_false_edges.rs:+2:35: +2:36
- let _9: i32; // in scope 0 at $DIR/match_false_edges.rs:+3:14: +3:15
- let mut _10: i32; // in scope 0 at $DIR/match_false_edges.rs:+3:24: +3:25
+ let mut _0: ();
+ let mut _1: (i32, i32);
+ let mut _2: std::option::Option<i32>;
+ let mut _3: isize;
+ let mut _4: &std::option::Option<i32>;
+ let _5: i32;
+ let _6: &i32;
+ let mut _7: bool;
+ let mut _8: i32;
+ let _9: i32;
+ let mut _10: i32;
scope 1 {
}
scope 2 {
- debug x => _5; // in scope 2 at $DIR/match_false_edges.rs:+2:14: +2:15
- debug x => _6; // in scope 2 at $DIR/match_false_edges.rs:+2:14: +2:15
+ debug x => _5;
+ debug x => _6;
}
scope 3 {
- debug y => _9; // in scope 3 at $DIR/match_false_edges.rs:+3:14: +3:15
+ debug y => _9;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/match_false_edges.rs:+1:13: +5:6
- StorageLive(_2); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- _2 = Option::<i32>::Some(const 42_i32); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- FakeRead(ForMatchedPlace(None), _2); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- _3 = discriminant(_2); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- switchInt(move _3) -> [0: bb1, 1: bb2, otherwise: bb4]; // scope 0 at $DIR/match_false_edges.rs:+1:13: +1:27
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = Option::<i32>::Some(const 42_i32);
+ FakeRead(ForMatchedPlace(None), _2);
+ _3 = discriminant(_2);
+ switchInt(move _3) -> [0: bb1, 1: bb2, otherwise: bb4];
}
bb1: {
- _1 = (const 3_i32, const 3_i32); // scope 0 at $DIR/match_false_edges.rs:+4:17: +4:23
- goto -> bb11; // scope 0 at $DIR/match_false_edges.rs:+4:17: +4:23
+ _1 = (const 3_i32, const 3_i32);
+ goto -> bb11;
}
bb2: {
- falseEdge -> [real: bb5, imaginary: bb3]; // scope 0 at $DIR/match_false_edges.rs:+2:9: +2:16
+ falseEdge -> [real: bb5, imaginary: bb3];
}
bb3: {
- falseEdge -> [real: bb10, imaginary: bb1]; // scope 0 at $DIR/match_false_edges.rs:+3:9: +3:16
+ falseEdge -> [real: bb10, imaginary: bb1];
}
bb4: {
- unreachable; // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
+ unreachable;
}
bb5: {
- StorageLive(_6); // scope 0 at $DIR/match_false_edges.rs:+2:14: +2:15
- _6 = &((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:+2:14: +2:15
- _4 = &shallow _2; // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- StorageLive(_7); // scope 0 at $DIR/match_false_edges.rs:+2:20: +2:27
- _7 = guard() -> [return: bb6, unwind: bb12]; // scope 0 at $DIR/match_false_edges.rs:+2:20: +2:27
- // mir::Constant
- // + span: $DIR/match_false_edges.rs:14:20: 14:25
- // + literal: Const { ty: fn() -> bool {guard}, val: Value(<ZST>) }
+ StorageLive(_6);
+ _6 = &((_2 as Some).0: i32);
+ _4 = &shallow _2;
+ StorageLive(_7);
+ _7 = guard() -> [return: bb6, unwind: bb12];
}
bb6: {
- switchInt(move _7) -> [0: bb8, otherwise: bb7]; // scope 0 at $DIR/match_false_edges.rs:+2:20: +2:27
+ switchInt(move _7) -> [0: bb8, otherwise: bb7];
}
bb7: {
- StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:+2:26: +2:27
- FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/match_false_edges.rs:+2:26: +2:27
- FakeRead(ForGuardBinding, _6); // scope 0 at $DIR/match_false_edges.rs:+2:26: +2:27
- StorageLive(_5); // scope 0 at $DIR/match_false_edges.rs:+2:14: +2:15
- _5 = ((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:+2:14: +2:15
- StorageLive(_8); // scope 2 at $DIR/match_false_edges.rs:+2:35: +2:36
- _8 = _5; // scope 2 at $DIR/match_false_edges.rs:+2:35: +2:36
- _1 = (const 1_i32, move _8); // scope 2 at $DIR/match_false_edges.rs:+2:31: +2:37
- StorageDead(_8); // scope 2 at $DIR/match_false_edges.rs:+2:36: +2:37
- StorageDead(_5); // scope 0 at $DIR/match_false_edges.rs:+2:36: +2:37
- StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:+2:36: +2:37
- goto -> bb11; // scope 0 at $DIR/match_false_edges.rs:+2:36: +2:37
+ StorageDead(_7);
+ FakeRead(ForMatchGuard, _4);
+ FakeRead(ForGuardBinding, _6);
+ StorageLive(_5);
+ _5 = ((_2 as Some).0: i32);
+ StorageLive(_8);
+ _8 = _5;
+ _1 = (const 1_i32, move _8);
+ StorageDead(_8);
+ StorageDead(_5);
+ StorageDead(_6);
+ goto -> bb11;
}
bb8: {
- goto -> bb9; // scope 0 at $DIR/match_false_edges.rs:+2:20: +2:27
+ goto -> bb9;
}
bb9: {
- StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:+2:26: +2:27
- StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:+2:36: +2:37
- goto -> bb3; // scope 0 at $DIR/match_false_edges.rs:+2:20: +2:27
+ StorageDead(_7);
+ StorageDead(_6);
+ goto -> bb3;
}
bb10: {
- StorageLive(_9); // scope 0 at $DIR/match_false_edges.rs:+3:14: +3:15
- _9 = ((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:+3:14: +3:15
- StorageLive(_10); // scope 3 at $DIR/match_false_edges.rs:+3:24: +3:25
- _10 = _9; // scope 3 at $DIR/match_false_edges.rs:+3:24: +3:25
- _1 = (const 2_i32, move _10); // scope 3 at $DIR/match_false_edges.rs:+3:20: +3:26
- StorageDead(_10); // scope 3 at $DIR/match_false_edges.rs:+3:25: +3:26
- StorageDead(_9); // scope 0 at $DIR/match_false_edges.rs:+3:25: +3:26
- goto -> bb11; // scope 0 at $DIR/match_false_edges.rs:+3:25: +3:26
+ StorageLive(_9);
+ _9 = ((_2 as Some).0: i32);
+ StorageLive(_10);
+ _10 = _9;
+ _1 = (const 2_i32, move _10);
+ StorageDead(_10);
+ StorageDead(_9);
+ goto -> bb11;
}
bb11: {
- PlaceMention(_1); // scope 0 at $DIR/match_false_edges.rs:+1:13: +5:6
- StorageDead(_2); // scope 0 at $DIR/match_false_edges.rs:+5:6: +5:7
- StorageDead(_1); // scope 0 at $DIR/match_false_edges.rs:+5:6: +5:7
- _0 = const (); // scope 0 at $DIR/match_false_edges.rs:+0:28: +6:2
- return; // scope 0 at $DIR/match_false_edges.rs:+6:2: +6:2
+ PlaceMention(_1);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
bb12 (cleanup): {
- resume; // scope 0 at $DIR/match_false_edges.rs:+0:1: +6:2
+ resume;
}
}
diff --git a/tests/mir-opt/building/match_false_edges.full_tested_match2.built.after.mir b/tests/mir-opt/building/match_false_edges.full_tested_match2.built.after.mir
index 37e6b1cd4..595e3ab92 100644
--- a/tests/mir-opt/building/match_false_edges.full_tested_match2.built.after.mir
+++ b/tests/mir-opt/building/match_false_edges.full_tested_match2.built.after.mir
@@ -1,113 +1,110 @@
// MIR for `full_tested_match2` after built
fn full_tested_match2() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/match_false_edges.rs:+0:29: +0:29
- let mut _1: (i32, i32); // in scope 0 at $DIR/match_false_edges.rs:+1:13: +5:6
- let mut _2: std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- let mut _3: isize; // in scope 0 at $DIR/match_false_edges.rs:+2:9: +2:16
- let mut _4: &std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- let _5: i32; // in scope 0 at $DIR/match_false_edges.rs:+2:14: +2:15
- let _6: &i32; // in scope 0 at $DIR/match_false_edges.rs:+2:14: +2:15
- let mut _7: bool; // in scope 0 at $DIR/match_false_edges.rs:+2:20: +2:27
- let mut _8: i32; // in scope 0 at $DIR/match_false_edges.rs:+2:35: +2:36
- let _9: i32; // in scope 0 at $DIR/match_false_edges.rs:+4:14: +4:15
- let mut _10: i32; // in scope 0 at $DIR/match_false_edges.rs:+4:24: +4:25
+ let mut _0: ();
+ let mut _1: (i32, i32);
+ let mut _2: std::option::Option<i32>;
+ let mut _3: isize;
+ let mut _4: &std::option::Option<i32>;
+ let _5: i32;
+ let _6: &i32;
+ let mut _7: bool;
+ let mut _8: i32;
+ let _9: i32;
+ let mut _10: i32;
scope 1 {
}
scope 2 {
- debug x => _5; // in scope 2 at $DIR/match_false_edges.rs:+2:14: +2:15
- debug x => _6; // in scope 2 at $DIR/match_false_edges.rs:+2:14: +2:15
+ debug x => _5;
+ debug x => _6;
}
scope 3 {
- debug y => _9; // in scope 3 at $DIR/match_false_edges.rs:+4:14: +4:15
+ debug y => _9;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/match_false_edges.rs:+1:13: +5:6
- StorageLive(_2); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- _2 = Option::<i32>::Some(const 42_i32); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- FakeRead(ForMatchedPlace(None), _2); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- _3 = discriminant(_2); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- switchInt(move _3) -> [0: bb1, 1: bb2, otherwise: bb4]; // scope 0 at $DIR/match_false_edges.rs:+1:13: +1:27
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = Option::<i32>::Some(const 42_i32);
+ FakeRead(ForMatchedPlace(None), _2);
+ _3 = discriminant(_2);
+ switchInt(move _3) -> [0: bb1, 1: bb2, otherwise: bb4];
}
bb1: {
- falseEdge -> [real: bb10, imaginary: bb3]; // scope 0 at $DIR/match_false_edges.rs:+3:9: +3:13
+ falseEdge -> [real: bb10, imaginary: bb3];
}
bb2: {
- falseEdge -> [real: bb5, imaginary: bb1]; // scope 0 at $DIR/match_false_edges.rs:+2:9: +2:16
+ falseEdge -> [real: bb5, imaginary: bb1];
}
bb3: {
- StorageLive(_9); // scope 0 at $DIR/match_false_edges.rs:+4:14: +4:15
- _9 = ((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:+4:14: +4:15
- StorageLive(_10); // scope 3 at $DIR/match_false_edges.rs:+4:24: +4:25
- _10 = _9; // scope 3 at $DIR/match_false_edges.rs:+4:24: +4:25
- _1 = (const 2_i32, move _10); // scope 3 at $DIR/match_false_edges.rs:+4:20: +4:26
- StorageDead(_10); // scope 3 at $DIR/match_false_edges.rs:+4:25: +4:26
- StorageDead(_9); // scope 0 at $DIR/match_false_edges.rs:+4:25: +4:26
- goto -> bb11; // scope 0 at $DIR/match_false_edges.rs:+4:25: +4:26
+ StorageLive(_9);
+ _9 = ((_2 as Some).0: i32);
+ StorageLive(_10);
+ _10 = _9;
+ _1 = (const 2_i32, move _10);
+ StorageDead(_10);
+ StorageDead(_9);
+ goto -> bb11;
}
bb4: {
- unreachable; // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
+ unreachable;
}
bb5: {
- StorageLive(_6); // scope 0 at $DIR/match_false_edges.rs:+2:14: +2:15
- _6 = &((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:+2:14: +2:15
- _4 = &shallow _2; // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:27
- StorageLive(_7); // scope 0 at $DIR/match_false_edges.rs:+2:20: +2:27
- _7 = guard() -> [return: bb6, unwind: bb12]; // scope 0 at $DIR/match_false_edges.rs:+2:20: +2:27
- // mir::Constant
- // + span: $DIR/match_false_edges.rs:25:20: 25:25
- // + literal: Const { ty: fn() -> bool {guard}, val: Value(<ZST>) }
+ StorageLive(_6);
+ _6 = &((_2 as Some).0: i32);
+ _4 = &shallow _2;
+ StorageLive(_7);
+ _7 = guard() -> [return: bb6, unwind: bb12];
}
bb6: {
- switchInt(move _7) -> [0: bb8, otherwise: bb7]; // scope 0 at $DIR/match_false_edges.rs:+2:20: +2:27
+ switchInt(move _7) -> [0: bb8, otherwise: bb7];
}
bb7: {
- StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:+2:26: +2:27
- FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/match_false_edges.rs:+2:26: +2:27
- FakeRead(ForGuardBinding, _6); // scope 0 at $DIR/match_false_edges.rs:+2:26: +2:27
- StorageLive(_5); // scope 0 at $DIR/match_false_edges.rs:+2:14: +2:15
- _5 = ((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:+2:14: +2:15
- StorageLive(_8); // scope 2 at $DIR/match_false_edges.rs:+2:35: +2:36
- _8 = _5; // scope 2 at $DIR/match_false_edges.rs:+2:35: +2:36
- _1 = (const 1_i32, move _8); // scope 2 at $DIR/match_false_edges.rs:+2:31: +2:37
- StorageDead(_8); // scope 2 at $DIR/match_false_edges.rs:+2:36: +2:37
- StorageDead(_5); // scope 0 at $DIR/match_false_edges.rs:+2:36: +2:37
- StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:+2:36: +2:37
- goto -> bb11; // scope 0 at $DIR/match_false_edges.rs:+2:36: +2:37
+ StorageDead(_7);
+ FakeRead(ForMatchGuard, _4);
+ FakeRead(ForGuardBinding, _6);
+ StorageLive(_5);
+ _5 = ((_2 as Some).0: i32);
+ StorageLive(_8);
+ _8 = _5;
+ _1 = (const 1_i32, move _8);
+ StorageDead(_8);
+ StorageDead(_5);
+ StorageDead(_6);
+ goto -> bb11;
}
bb8: {
- goto -> bb9; // scope 0 at $DIR/match_false_edges.rs:+2:20: +2:27
+ goto -> bb9;
}
bb9: {
- StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:+2:26: +2:27
- StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:+2:36: +2:37
- falseEdge -> [real: bb3, imaginary: bb1]; // scope 0 at $DIR/match_false_edges.rs:+2:20: +2:27
+ StorageDead(_7);
+ StorageDead(_6);
+ falseEdge -> [real: bb3, imaginary: bb1];
}
bb10: {
- _1 = (const 3_i32, const 3_i32); // scope 0 at $DIR/match_false_edges.rs:+3:17: +3:23
- goto -> bb11; // scope 0 at $DIR/match_false_edges.rs:+3:17: +3:23
+ _1 = (const 3_i32, const 3_i32);
+ goto -> bb11;
}
bb11: {
- PlaceMention(_1); // scope 0 at $DIR/match_false_edges.rs:+1:13: +5:6
- StorageDead(_2); // scope 0 at $DIR/match_false_edges.rs:+5:6: +5:7
- StorageDead(_1); // scope 0 at $DIR/match_false_edges.rs:+5:6: +5:7
- _0 = const (); // scope 0 at $DIR/match_false_edges.rs:+0:29: +6:2
- return; // scope 0 at $DIR/match_false_edges.rs:+6:2: +6:2
+ PlaceMention(_1);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
bb12 (cleanup): {
- resume; // scope 0 at $DIR/match_false_edges.rs:+0:1: +6:2
+ resume;
}
}
diff --git a/tests/mir-opt/building/match_false_edges.main.built.after.mir b/tests/mir-opt/building/match_false_edges.main.built.after.mir
index 7b8983138..91fe2f90e 100644
--- a/tests/mir-opt/building/match_false_edges.main.built.after.mir
+++ b/tests/mir-opt/building/match_false_edges.main.built.after.mir
@@ -1,175 +1,169 @@
// MIR for `main` after built
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/match_false_edges.rs:+0:11: +0:11
- let mut _1: i32; // in scope 0 at $DIR/match_false_edges.rs:+1:13: +6:6
- let mut _2: std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:+1:19: +1:26
- let mut _3: isize; // in scope 0 at $DIR/match_false_edges.rs:+4:9: +4:16
- let mut _4: isize; // in scope 0 at $DIR/match_false_edges.rs:+2:9: +2:17
- let mut _5: &std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:+1:19: +1:26
- let _6: i32; // in scope 0 at $DIR/match_false_edges.rs:+2:14: +2:16
- let _7: &i32; // in scope 0 at $DIR/match_false_edges.rs:+2:14: +2:16
- let mut _8: bool; // in scope 0 at $DIR/match_false_edges.rs:+2:21: +2:28
- let _9: std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:+3:9: +3:11
- let _10: i32; // in scope 0 at $DIR/match_false_edges.rs:+4:14: +4:15
- let _11: &i32; // in scope 0 at $DIR/match_false_edges.rs:+4:14: +4:15
- let mut _12: bool; // in scope 0 at $DIR/match_false_edges.rs:+4:20: +4:29
- let mut _13: i32; // in scope 0 at $DIR/match_false_edges.rs:+4:27: +4:28
- let _14: std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:+5:9: +5:11
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _2: std::option::Option<i32>;
+ let mut _3: isize;
+ let mut _4: isize;
+ let mut _5: &std::option::Option<i32>;
+ let _6: i32;
+ let _7: &i32;
+ let mut _8: bool;
+ let _9: std::option::Option<i32>;
+ let _10: i32;
+ let _11: &i32;
+ let mut _12: bool;
+ let mut _13: i32;
+ let _14: std::option::Option<i32>;
scope 1 {
}
scope 2 {
- debug _w => _6; // in scope 2 at $DIR/match_false_edges.rs:+2:14: +2:16
- debug _w => _7; // in scope 2 at $DIR/match_false_edges.rs:+2:14: +2:16
+ debug _w => _6;
+ debug _w => _7;
}
scope 3 {
- debug _x => _9; // in scope 3 at $DIR/match_false_edges.rs:+3:9: +3:11
+ debug _x => _9;
}
scope 4 {
- debug y => _10; // in scope 4 at $DIR/match_false_edges.rs:+4:14: +4:15
- debug y => _11; // in scope 4 at $DIR/match_false_edges.rs:+4:14: +4:15
+ debug y => _10;
+ debug y => _11;
}
scope 5 {
- debug _z => _14; // in scope 5 at $DIR/match_false_edges.rs:+5:9: +5:11
+ debug _z => _14;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/match_false_edges.rs:+1:13: +6:6
- StorageLive(_2); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:26
- _2 = Option::<i32>::Some(const 1_i32); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:26
- FakeRead(ForMatchedPlace(None), _2); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:26
- _4 = discriminant(_2); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:26
- switchInt(move _4) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/match_false_edges.rs:+1:13: +1:26
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = Option::<i32>::Some(const 1_i32);
+ FakeRead(ForMatchedPlace(None), _2);
+ _4 = discriminant(_2);
+ switchInt(move _4) -> [1: bb2, otherwise: bb1];
}
bb1: {
- falseEdge -> [real: bb13, imaginary: bb6]; // scope 0 at $DIR/match_false_edges.rs:+3:9: +3:11
+ falseEdge -> [real: bb13, imaginary: bb6];
}
bb2: {
- falseEdge -> [real: bb8, imaginary: bb1]; // scope 0 at $DIR/match_false_edges.rs:+2:9: +2:17
+ falseEdge -> [real: bb8, imaginary: bb1];
}
bb3: {
- goto -> bb1; // scope 0 at $DIR/match_false_edges.rs:+1:13: +1:26
+ goto -> bb1;
}
bb4: {
- _3 = discriminant(_2); // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:26
- switchInt(move _3) -> [1: bb6, otherwise: bb5]; // scope 0 at $DIR/match_false_edges.rs:+1:13: +1:26
+ _3 = discriminant(_2);
+ switchInt(move _3) -> [1: bb6, otherwise: bb5];
}
bb5: {
- StorageLive(_14); // scope 0 at $DIR/match_false_edges.rs:+5:9: +5:11
- _14 = _2; // scope 0 at $DIR/match_false_edges.rs:+5:9: +5:11
- _1 = const 4_i32; // scope 5 at $DIR/match_false_edges.rs:+5:15: +5:16
- StorageDead(_14); // scope 0 at $DIR/match_false_edges.rs:+5:15: +5:16
- goto -> bb19; // scope 0 at $DIR/match_false_edges.rs:+5:15: +5:16
+ StorageLive(_14);
+ _14 = _2;
+ _1 = const 4_i32;
+ StorageDead(_14);
+ goto -> bb19;
}
bb6: {
- falseEdge -> [real: bb14, imaginary: bb5]; // scope 0 at $DIR/match_false_edges.rs:+4:9: +4:16
+ falseEdge -> [real: bb14, imaginary: bb5];
}
bb7: {
- goto -> bb5; // scope 0 at $DIR/match_false_edges.rs:+1:13: +1:26
+ goto -> bb5;
}
bb8: {
- StorageLive(_7); // scope 0 at $DIR/match_false_edges.rs:+2:14: +2:16
- _7 = &((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:+2:14: +2:16
- _5 = &shallow _2; // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:26
- StorageLive(_8); // scope 0 at $DIR/match_false_edges.rs:+2:21: +2:28
- _8 = guard() -> [return: bb9, unwind: bb20]; // scope 0 at $DIR/match_false_edges.rs:+2:21: +2:28
- // mir::Constant
- // + span: $DIR/match_false_edges.rs:34:21: 34:26
- // + literal: Const { ty: fn() -> bool {guard}, val: Value(<ZST>) }
+ StorageLive(_7);
+ _7 = &((_2 as Some).0: i32);
+ _5 = &shallow _2;
+ StorageLive(_8);
+ _8 = guard() -> [return: bb9, unwind: bb20];
}
bb9: {
- switchInt(move _8) -> [0: bb11, otherwise: bb10]; // scope 0 at $DIR/match_false_edges.rs:+2:21: +2:28
+ switchInt(move _8) -> [0: bb11, otherwise: bb10];
}
bb10: {
- StorageDead(_8); // scope 0 at $DIR/match_false_edges.rs:+2:27: +2:28
- FakeRead(ForMatchGuard, _5); // scope 0 at $DIR/match_false_edges.rs:+2:27: +2:28
- FakeRead(ForGuardBinding, _7); // scope 0 at $DIR/match_false_edges.rs:+2:27: +2:28
- StorageLive(_6); // scope 0 at $DIR/match_false_edges.rs:+2:14: +2:16
- _6 = ((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:+2:14: +2:16
- _1 = const 1_i32; // scope 2 at $DIR/match_false_edges.rs:+2:32: +2:33
- StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:+2:32: +2:33
- StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:+2:32: +2:33
- goto -> bb19; // scope 0 at $DIR/match_false_edges.rs:+2:32: +2:33
+ StorageDead(_8);
+ FakeRead(ForMatchGuard, _5);
+ FakeRead(ForGuardBinding, _7);
+ StorageLive(_6);
+ _6 = ((_2 as Some).0: i32);
+ _1 = const 1_i32;
+ StorageDead(_6);
+ StorageDead(_7);
+ goto -> bb19;
}
bb11: {
- goto -> bb12; // scope 0 at $DIR/match_false_edges.rs:+2:21: +2:28
+ goto -> bb12;
}
bb12: {
- StorageDead(_8); // scope 0 at $DIR/match_false_edges.rs:+2:27: +2:28
- StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:+2:32: +2:33
- falseEdge -> [real: bb3, imaginary: bb1]; // scope 0 at $DIR/match_false_edges.rs:+2:21: +2:28
+ StorageDead(_8);
+ StorageDead(_7);
+ falseEdge -> [real: bb3, imaginary: bb1];
}
bb13: {
- StorageLive(_9); // scope 0 at $DIR/match_false_edges.rs:+3:9: +3:11
- _9 = _2; // scope 0 at $DIR/match_false_edges.rs:+3:9: +3:11
- _1 = const 2_i32; // scope 3 at $DIR/match_false_edges.rs:+3:15: +3:16
- StorageDead(_9); // scope 0 at $DIR/match_false_edges.rs:+3:15: +3:16
- goto -> bb19; // scope 0 at $DIR/match_false_edges.rs:+3:15: +3:16
+ StorageLive(_9);
+ _9 = _2;
+ _1 = const 2_i32;
+ StorageDead(_9);
+ goto -> bb19;
}
bb14: {
- StorageLive(_11); // scope 0 at $DIR/match_false_edges.rs:+4:14: +4:15
- _11 = &((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:+4:14: +4:15
- _5 = &shallow _2; // scope 0 at $DIR/match_false_edges.rs:+1:19: +1:26
- StorageLive(_12); // scope 0 at $DIR/match_false_edges.rs:+4:20: +4:29
- StorageLive(_13); // scope 0 at $DIR/match_false_edges.rs:+4:27: +4:28
- _13 = (*_11); // scope 0 at $DIR/match_false_edges.rs:+4:27: +4:28
- _12 = guard2(move _13) -> [return: bb15, unwind: bb20]; // scope 0 at $DIR/match_false_edges.rs:+4:20: +4:29
- // mir::Constant
- // + span: $DIR/match_false_edges.rs:36:20: 36:26
- // + literal: Const { ty: fn(i32) -> bool {guard2}, val: Value(<ZST>) }
+ StorageLive(_11);
+ _11 = &((_2 as Some).0: i32);
+ _5 = &shallow _2;
+ StorageLive(_12);
+ StorageLive(_13);
+ _13 = (*_11);
+ _12 = guard2(move _13) -> [return: bb15, unwind: bb20];
}
bb15: {
- switchInt(move _12) -> [0: bb17, otherwise: bb16]; // scope 0 at $DIR/match_false_edges.rs:+4:20: +4:29
+ switchInt(move _12) -> [0: bb17, otherwise: bb16];
}
bb16: {
- StorageDead(_13); // scope 0 at $DIR/match_false_edges.rs:+4:28: +4:29
- StorageDead(_12); // scope 0 at $DIR/match_false_edges.rs:+4:28: +4:29
- FakeRead(ForMatchGuard, _5); // scope 0 at $DIR/match_false_edges.rs:+4:28: +4:29
- FakeRead(ForGuardBinding, _11); // scope 0 at $DIR/match_false_edges.rs:+4:28: +4:29
- StorageLive(_10); // scope 0 at $DIR/match_false_edges.rs:+4:14: +4:15
- _10 = ((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:+4:14: +4:15
- _1 = const 3_i32; // scope 4 at $DIR/match_false_edges.rs:+4:33: +4:34
- StorageDead(_10); // scope 0 at $DIR/match_false_edges.rs:+4:33: +4:34
- StorageDead(_11); // scope 0 at $DIR/match_false_edges.rs:+4:33: +4:34
- goto -> bb19; // scope 0 at $DIR/match_false_edges.rs:+4:33: +4:34
+ StorageDead(_13);
+ StorageDead(_12);
+ FakeRead(ForMatchGuard, _5);
+ FakeRead(ForGuardBinding, _11);
+ StorageLive(_10);
+ _10 = ((_2 as Some).0: i32);
+ _1 = const 3_i32;
+ StorageDead(_10);
+ StorageDead(_11);
+ goto -> bb19;
}
bb17: {
- goto -> bb18; // scope 0 at $DIR/match_false_edges.rs:+4:20: +4:29
+ goto -> bb18;
}
bb18: {
- StorageDead(_13); // scope 0 at $DIR/match_false_edges.rs:+4:28: +4:29
- StorageDead(_12); // scope 0 at $DIR/match_false_edges.rs:+4:28: +4:29
- StorageDead(_11); // scope 0 at $DIR/match_false_edges.rs:+4:33: +4:34
- falseEdge -> [real: bb7, imaginary: bb5]; // scope 0 at $DIR/match_false_edges.rs:+4:20: +4:29
+ StorageDead(_13);
+ StorageDead(_12);
+ StorageDead(_11);
+ falseEdge -> [real: bb7, imaginary: bb5];
}
bb19: {
- PlaceMention(_1); // scope 0 at $DIR/match_false_edges.rs:+1:13: +6:6
- StorageDead(_2); // scope 0 at $DIR/match_false_edges.rs:+6:6: +6:7
- StorageDead(_1); // scope 0 at $DIR/match_false_edges.rs:+6:6: +6:7
- _0 = const (); // scope 0 at $DIR/match_false_edges.rs:+0:11: +7:2
- return; // scope 0 at $DIR/match_false_edges.rs:+7:2: +7:2
+ PlaceMention(_1);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
bb20 (cleanup): {
- resume; // scope 0 at $DIR/match_false_edges.rs:+0:1: +7:2
+ resume;
}
}
diff --git a/tests/mir-opt/building/receiver_ptr_mutability.main.built.after.mir b/tests/mir-opt/building/receiver_ptr_mutability.main.built.after.mir
index 7a6944dee..fed5e68c3 100644
--- a/tests/mir-opt/building/receiver_ptr_mutability.main.built.after.mir
+++ b/tests/mir-opt/building/receiver_ptr_mutability.main.built.after.mir
@@ -7,90 +7,81 @@
| 3: user_ty: Canonical { value: Ty(&&&&*mut Test), max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }] }, span: $DIR/receiver_ptr_mutability.rs:18:18: 18:31, inferred_ty: &&&&*mut Test
|
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/receiver_ptr_mutability.rs:+0:11: +0:11
- let _1: *mut Test as UserTypeProjection { base: UserType(0), projs: [] }; // in scope 0 at $DIR/receiver_ptr_mutability.rs:+1:9: +1:12
- let _2: (); // in scope 0 at $DIR/receiver_ptr_mutability.rs:+2:5: +2:12
- let mut _3: *const Test; // in scope 0 at $DIR/receiver_ptr_mutability.rs:+2:5: +2:12
- let mut _4: *mut Test; // in scope 0 at $DIR/receiver_ptr_mutability.rs:+2:5: +2:8
- let _6: &&&&*mut Test; // in scope 0 at $DIR/receiver_ptr_mutability.rs:+5:34: +5:41
- let _7: &&&*mut Test; // in scope 0 at $DIR/receiver_ptr_mutability.rs:+5:35: +5:41
- let _8: &&*mut Test; // in scope 0 at $DIR/receiver_ptr_mutability.rs:+5:36: +5:41
- let _9: &*mut Test; // in scope 0 at $DIR/receiver_ptr_mutability.rs:+5:37: +5:41
- let _10: (); // in scope 0 at $DIR/receiver_ptr_mutability.rs:+6:5: +6:16
- let mut _11: *const Test; // in scope 0 at $DIR/receiver_ptr_mutability.rs:+6:5: +6:16
- let mut _12: *mut Test; // in scope 0 at $DIR/receiver_ptr_mutability.rs:+6:5: +6:16
+ let mut _0: ();
+ let _1: *mut Test as UserTypeProjection { base: UserType(0), projs: [] };
+ let _2: ();
+ let mut _3: *const Test;
+ let mut _4: *mut Test;
+ let _6: &&&&*mut Test;
+ let _7: &&&*mut Test;
+ let _8: &&*mut Test;
+ let _9: &*mut Test;
+ let _10: ();
+ let mut _11: *const Test;
+ let mut _12: *mut Test;
scope 1 {
- debug ptr => _1; // in scope 1 at $DIR/receiver_ptr_mutability.rs:+1:9: +1:12
- let _5: &&&&*mut Test as UserTypeProjection { base: UserType(2), projs: [] }; // in scope 1 at $DIR/receiver_ptr_mutability.rs:+5:9: +5:16
+ debug ptr => _1;
+ let _5: &&&&*mut Test as UserTypeProjection { base: UserType(2), projs: [] };
scope 2 {
- debug ptr_ref => _5; // in scope 2 at $DIR/receiver_ptr_mutability.rs:+5:9: +5:16
+ debug ptr_ref => _5;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/receiver_ptr_mutability.rs:+1:9: +1:12
- _1 = null_mut::<Test>() -> [return: bb1, unwind: bb4]; // scope 0 at $DIR/receiver_ptr_mutability.rs:+1:26: +1:46
- // mir::Constant
- // + span: $DIR/receiver_ptr_mutability.rs:14:26: 14:44
- // + literal: Const { ty: fn() -> *mut Test {null_mut::<Test>}, val: Value(<ZST>) }
+ StorageLive(_1);
+ _1 = null_mut::<Test>() -> [return: bb1, unwind: bb4];
}
bb1: {
- FakeRead(ForLet(None), _1); // scope 0 at $DIR/receiver_ptr_mutability.rs:+1:9: +1:12
- AscribeUserType(_1, o, UserTypeProjection { base: UserType(1), projs: [] }); // scope 0 at $DIR/receiver_ptr_mutability.rs:+1:14: +1:23
- StorageLive(_2); // scope 1 at $DIR/receiver_ptr_mutability.rs:+2:5: +2:12
- StorageLive(_3); // scope 1 at $DIR/receiver_ptr_mutability.rs:+2:5: +2:12
- StorageLive(_4); // scope 1 at $DIR/receiver_ptr_mutability.rs:+2:5: +2:8
- _4 = _1; // scope 1 at $DIR/receiver_ptr_mutability.rs:+2:5: +2:8
- _3 = move _4 as *const Test (Pointer(MutToConstPointer)); // scope 1 at $DIR/receiver_ptr_mutability.rs:+2:5: +2:12
- StorageDead(_4); // scope 1 at $DIR/receiver_ptr_mutability.rs:+2:7: +2:8
- _2 = Test::x(move _3) -> [return: bb2, unwind: bb4]; // scope 1 at $DIR/receiver_ptr_mutability.rs:+2:5: +2:12
- // mir::Constant
- // + span: $DIR/receiver_ptr_mutability.rs:15:9: 15:10
- // + literal: Const { ty: fn(*const Test) {Test::x}, val: Value(<ZST>) }
+ FakeRead(ForLet(None), _1);
+ AscribeUserType(_1, o, UserTypeProjection { base: UserType(1), projs: [] });
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ _3 = move _4 as *const Test (PointerCoercion(MutToConstPointer));
+ StorageDead(_4);
+ _2 = Test::x(move _3) -> [return: bb2, unwind: bb4];
}
bb2: {
- StorageDead(_3); // scope 1 at $DIR/receiver_ptr_mutability.rs:+2:11: +2:12
- StorageDead(_2); // scope 1 at $DIR/receiver_ptr_mutability.rs:+2:12: +2:13
- StorageLive(_5); // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:9: +5:16
- StorageLive(_6); // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:34: +5:41
- StorageLive(_7); // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:35: +5:41
- StorageLive(_8); // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:36: +5:41
- StorageLive(_9); // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:37: +5:41
- _9 = &_1; // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:37: +5:41
- _8 = &_9; // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:36: +5:41
- _7 = &_8; // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:35: +5:41
- _6 = &_7; // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:34: +5:41
- _5 = &(*_6); // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:34: +5:41
- FakeRead(ForLet(None), _5); // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:9: +5:16
- AscribeUserType(_5, o, UserTypeProjection { base: UserType(3), projs: [] }); // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:18: +5:31
- StorageDead(_6); // scope 1 at $DIR/receiver_ptr_mutability.rs:+5:41: +5:42
- StorageLive(_10); // scope 2 at $DIR/receiver_ptr_mutability.rs:+6:5: +6:16
- StorageLive(_11); // scope 2 at $DIR/receiver_ptr_mutability.rs:+6:5: +6:16
- StorageLive(_12); // scope 2 at $DIR/receiver_ptr_mutability.rs:+6:5: +6:16
- _12 = (*(*(*(*_5)))); // scope 2 at $DIR/receiver_ptr_mutability.rs:+6:5: +6:16
- _11 = move _12 as *const Test (Pointer(MutToConstPointer)); // scope 2 at $DIR/receiver_ptr_mutability.rs:+6:5: +6:16
- StorageDead(_12); // scope 2 at $DIR/receiver_ptr_mutability.rs:+6:11: +6:12
- _10 = Test::x(move _11) -> [return: bb3, unwind: bb4]; // scope 2 at $DIR/receiver_ptr_mutability.rs:+6:5: +6:16
- // mir::Constant
- // + span: $DIR/receiver_ptr_mutability.rs:19:13: 19:14
- // + literal: Const { ty: fn(*const Test) {Test::x}, val: Value(<ZST>) }
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ StorageLive(_9);
+ _9 = &_1;
+ _8 = &_9;
+ _7 = &_8;
+ _6 = &_7;
+ _5 = &(*_6);
+ FakeRead(ForLet(None), _5);
+ AscribeUserType(_5, o, UserTypeProjection { base: UserType(3), projs: [] });
+ StorageDead(_6);
+ StorageLive(_10);
+ StorageLive(_11);
+ StorageLive(_12);
+ _12 = (*(*(*(*_5))));
+ _11 = move _12 as *const Test (PointerCoercion(MutToConstPointer));
+ StorageDead(_12);
+ _10 = Test::x(move _11) -> [return: bb3, unwind: bb4];
}
bb3: {
- StorageDead(_11); // scope 2 at $DIR/receiver_ptr_mutability.rs:+6:15: +6:16
- StorageDead(_10); // scope 2 at $DIR/receiver_ptr_mutability.rs:+6:16: +6:17
- _0 = const (); // scope 0 at $DIR/receiver_ptr_mutability.rs:+0:11: +7:2
- StorageDead(_9); // scope 1 at $DIR/receiver_ptr_mutability.rs:+7:1: +7:2
- StorageDead(_8); // scope 1 at $DIR/receiver_ptr_mutability.rs:+7:1: +7:2
- StorageDead(_7); // scope 1 at $DIR/receiver_ptr_mutability.rs:+7:1: +7:2
- StorageDead(_5); // scope 1 at $DIR/receiver_ptr_mutability.rs:+7:1: +7:2
- StorageDead(_1); // scope 0 at $DIR/receiver_ptr_mutability.rs:+7:1: +7:2
- return; // scope 0 at $DIR/receiver_ptr_mutability.rs:+7:2: +7:2
+ StorageDead(_11);
+ StorageDead(_10);
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageDead(_5);
+ StorageDead(_1);
+ return;
}
bb4 (cleanup): {
- resume; // scope 0 at $DIR/receiver_ptr_mutability.rs:+0:1: +7:2
+ resume;
}
}
diff --git a/tests/mir-opt/building/shifts.shift_signed.built.after.mir b/tests/mir-opt/building/shifts.shift_signed.built.after.mir
index 028777cef..8706ee9d4 100644
--- a/tests/mir-opt/building/shifts.shift_signed.built.after.mir
+++ b/tests/mir-opt/building/shifts.shift_signed.built.after.mir
@@ -1,147 +1,147 @@
// MIR for `shift_signed` after built
fn shift_signed(_1: i8, _2: u128, _3: i8, _4: i32, _5: i128) -> ([i8; 3], [u128; 3]) {
- debug small => _1; // in scope 0 at $DIR/shifts.rs:+0:17: +0:22
- debug big => _2; // in scope 0 at $DIR/shifts.rs:+0:28: +0:31
- debug a => _3; // in scope 0 at $DIR/shifts.rs:+0:39: +0:40
- debug b => _4; // in scope 0 at $DIR/shifts.rs:+0:46: +0:47
- debug c => _5; // in scope 0 at $DIR/shifts.rs:+0:54: +0:55
- let mut _0: ([i8; 3], [u128; 3]); // return place in scope 0 at $DIR/shifts.rs:+0:66: +0:86
- let mut _6: [i8; 3]; // in scope 0 at $DIR/shifts.rs:+2:9: +2:45
- let mut _7: i8; // in scope 0 at $DIR/shifts.rs:+2:10: +2:20
- let mut _8: i8; // in scope 0 at $DIR/shifts.rs:+2:10: +2:15
- let mut _9: i8; // in scope 0 at $DIR/shifts.rs:+2:19: +2:20
- let mut _10: u8; // in scope 0 at $DIR/shifts.rs:+2:10: +2:20
- let mut _11: bool; // in scope 0 at $DIR/shifts.rs:+2:10: +2:20
- let mut _12: i8; // in scope 0 at $DIR/shifts.rs:+2:22: +2:32
- let mut _13: i8; // in scope 0 at $DIR/shifts.rs:+2:22: +2:27
- let mut _14: i32; // in scope 0 at $DIR/shifts.rs:+2:31: +2:32
- let mut _15: u32; // in scope 0 at $DIR/shifts.rs:+2:22: +2:32
- let mut _16: bool; // in scope 0 at $DIR/shifts.rs:+2:22: +2:32
- let mut _17: i8; // in scope 0 at $DIR/shifts.rs:+2:34: +2:44
- let mut _18: i8; // in scope 0 at $DIR/shifts.rs:+2:34: +2:39
- let mut _19: i128; // in scope 0 at $DIR/shifts.rs:+2:43: +2:44
- let mut _20: u128; // in scope 0 at $DIR/shifts.rs:+2:34: +2:44
- let mut _21: bool; // in scope 0 at $DIR/shifts.rs:+2:34: +2:44
- let mut _22: [u128; 3]; // in scope 0 at $DIR/shifts.rs:+3:9: +3:39
- let mut _23: u128; // in scope 0 at $DIR/shifts.rs:+3:10: +3:18
- let mut _24: u128; // in scope 0 at $DIR/shifts.rs:+3:10: +3:13
- let mut _25: i8; // in scope 0 at $DIR/shifts.rs:+3:17: +3:18
- let mut _26: u8; // in scope 0 at $DIR/shifts.rs:+3:10: +3:18
- let mut _27: bool; // in scope 0 at $DIR/shifts.rs:+3:10: +3:18
- let mut _28: u128; // in scope 0 at $DIR/shifts.rs:+3:20: +3:28
- let mut _29: u128; // in scope 0 at $DIR/shifts.rs:+3:20: +3:23
- let mut _30: i32; // in scope 0 at $DIR/shifts.rs:+3:27: +3:28
- let mut _31: u32; // in scope 0 at $DIR/shifts.rs:+3:20: +3:28
- let mut _32: bool; // in scope 0 at $DIR/shifts.rs:+3:20: +3:28
- let mut _33: u128; // in scope 0 at $DIR/shifts.rs:+3:30: +3:38
- let mut _34: u128; // in scope 0 at $DIR/shifts.rs:+3:30: +3:33
- let mut _35: i128; // in scope 0 at $DIR/shifts.rs:+3:37: +3:38
- let mut _36: u128; // in scope 0 at $DIR/shifts.rs:+3:30: +3:38
- let mut _37: bool; // in scope 0 at $DIR/shifts.rs:+3:30: +3:38
+ debug small => _1;
+ debug big => _2;
+ debug a => _3;
+ debug b => _4;
+ debug c => _5;
+ let mut _0: ([i8; 3], [u128; 3]);
+ let mut _6: [i8; 3];
+ let mut _7: i8;
+ let mut _8: i8;
+ let mut _9: i8;
+ let mut _10: u8;
+ let mut _11: bool;
+ let mut _12: i8;
+ let mut _13: i8;
+ let mut _14: i32;
+ let mut _15: u32;
+ let mut _16: bool;
+ let mut _17: i8;
+ let mut _18: i8;
+ let mut _19: i128;
+ let mut _20: u128;
+ let mut _21: bool;
+ let mut _22: [u128; 3];
+ let mut _23: u128;
+ let mut _24: u128;
+ let mut _25: i8;
+ let mut _26: u8;
+ let mut _27: bool;
+ let mut _28: u128;
+ let mut _29: u128;
+ let mut _30: i32;
+ let mut _31: u32;
+ let mut _32: bool;
+ let mut _33: u128;
+ let mut _34: u128;
+ let mut _35: i128;
+ let mut _36: u128;
+ let mut _37: bool;
bb0: {
- StorageLive(_6); // scope 0 at $DIR/shifts.rs:+2:9: +2:45
- StorageLive(_7); // scope 0 at $DIR/shifts.rs:+2:10: +2:20
- StorageLive(_8); // scope 0 at $DIR/shifts.rs:+2:10: +2:15
- _8 = _1; // scope 0 at $DIR/shifts.rs:+2:10: +2:15
- StorageLive(_9); // scope 0 at $DIR/shifts.rs:+2:19: +2:20
- _9 = _3; // scope 0 at $DIR/shifts.rs:+2:19: +2:20
- _10 = _9 as u8 (IntToInt); // scope 0 at $DIR/shifts.rs:+2:10: +2:20
- _11 = Lt(move _10, const 8_u8); // scope 0 at $DIR/shifts.rs:+2:10: +2:20
- assert(move _11, "attempt to shift right by `{}`, which would overflow", _9) -> [success: bb1, unwind: bb7]; // scope 0 at $DIR/shifts.rs:+2:10: +2:20
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = _1;
+ StorageLive(_9);
+ _9 = _3;
+ _10 = _9 as u8 (IntToInt);
+ _11 = Lt(move _10, const 8_u8);
+ assert(move _11, "attempt to shift right by `{}`, which would overflow", _9) -> [success: bb1, unwind: bb7];
}
bb1: {
- _7 = Shr(move _8, move _9); // scope 0 at $DIR/shifts.rs:+2:10: +2:20
- StorageDead(_9); // scope 0 at $DIR/shifts.rs:+2:19: +2:20
- StorageDead(_8); // scope 0 at $DIR/shifts.rs:+2:19: +2:20
- StorageLive(_12); // scope 0 at $DIR/shifts.rs:+2:22: +2:32
- StorageLive(_13); // scope 0 at $DIR/shifts.rs:+2:22: +2:27
- _13 = _1; // scope 0 at $DIR/shifts.rs:+2:22: +2:27
- StorageLive(_14); // scope 0 at $DIR/shifts.rs:+2:31: +2:32
- _14 = _4; // scope 0 at $DIR/shifts.rs:+2:31: +2:32
- _15 = _14 as u32 (IntToInt); // scope 0 at $DIR/shifts.rs:+2:22: +2:32
- _16 = Lt(move _15, const 8_u32); // scope 0 at $DIR/shifts.rs:+2:22: +2:32
- assert(move _16, "attempt to shift right by `{}`, which would overflow", _14) -> [success: bb2, unwind: bb7]; // scope 0 at $DIR/shifts.rs:+2:22: +2:32
+ _7 = Shr(move _8, move _9);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageLive(_12);
+ StorageLive(_13);
+ _13 = _1;
+ StorageLive(_14);
+ _14 = _4;
+ _15 = _14 as u32 (IntToInt);
+ _16 = Lt(move _15, const 8_u32);
+ assert(move _16, "attempt to shift right by `{}`, which would overflow", _14) -> [success: bb2, unwind: bb7];
}
bb2: {
- _12 = Shr(move _13, move _14); // scope 0 at $DIR/shifts.rs:+2:22: +2:32
- StorageDead(_14); // scope 0 at $DIR/shifts.rs:+2:31: +2:32
- StorageDead(_13); // scope 0 at $DIR/shifts.rs:+2:31: +2:32
- StorageLive(_17); // scope 0 at $DIR/shifts.rs:+2:34: +2:44
- StorageLive(_18); // scope 0 at $DIR/shifts.rs:+2:34: +2:39
- _18 = _1; // scope 0 at $DIR/shifts.rs:+2:34: +2:39
- StorageLive(_19); // scope 0 at $DIR/shifts.rs:+2:43: +2:44
- _19 = _5; // scope 0 at $DIR/shifts.rs:+2:43: +2:44
- _20 = _19 as u128 (IntToInt); // scope 0 at $DIR/shifts.rs:+2:34: +2:44
- _21 = Lt(move _20, const 8_u128); // scope 0 at $DIR/shifts.rs:+2:34: +2:44
- assert(move _21, "attempt to shift right by `{}`, which would overflow", _19) -> [success: bb3, unwind: bb7]; // scope 0 at $DIR/shifts.rs:+2:34: +2:44
+ _12 = Shr(move _13, move _14);
+ StorageDead(_14);
+ StorageDead(_13);
+ StorageLive(_17);
+ StorageLive(_18);
+ _18 = _1;
+ StorageLive(_19);
+ _19 = _5;
+ _20 = _19 as u128 (IntToInt);
+ _21 = Lt(move _20, const 8_u128);
+ assert(move _21, "attempt to shift right by `{}`, which would overflow", _19) -> [success: bb3, unwind: bb7];
}
bb3: {
- _17 = Shr(move _18, move _19); // scope 0 at $DIR/shifts.rs:+2:34: +2:44
- StorageDead(_19); // scope 0 at $DIR/shifts.rs:+2:43: +2:44
- StorageDead(_18); // scope 0 at $DIR/shifts.rs:+2:43: +2:44
- _6 = [move _7, move _12, move _17]; // scope 0 at $DIR/shifts.rs:+2:9: +2:45
- StorageDead(_17); // scope 0 at $DIR/shifts.rs:+2:44: +2:45
- StorageDead(_12); // scope 0 at $DIR/shifts.rs:+2:44: +2:45
- StorageDead(_7); // scope 0 at $DIR/shifts.rs:+2:44: +2:45
- StorageLive(_22); // scope 0 at $DIR/shifts.rs:+3:9: +3:39
- StorageLive(_23); // scope 0 at $DIR/shifts.rs:+3:10: +3:18
- StorageLive(_24); // scope 0 at $DIR/shifts.rs:+3:10: +3:13
- _24 = _2; // scope 0 at $DIR/shifts.rs:+3:10: +3:13
- StorageLive(_25); // scope 0 at $DIR/shifts.rs:+3:17: +3:18
- _25 = _3; // scope 0 at $DIR/shifts.rs:+3:17: +3:18
- _26 = _25 as u8 (IntToInt); // scope 0 at $DIR/shifts.rs:+3:10: +3:18
- _27 = Lt(move _26, const 128_u8); // scope 0 at $DIR/shifts.rs:+3:10: +3:18
- assert(move _27, "attempt to shift left by `{}`, which would overflow", _25) -> [success: bb4, unwind: bb7]; // scope 0 at $DIR/shifts.rs:+3:10: +3:18
+ _17 = Shr(move _18, move _19);
+ StorageDead(_19);
+ StorageDead(_18);
+ _6 = [move _7, move _12, move _17];
+ StorageDead(_17);
+ StorageDead(_12);
+ StorageDead(_7);
+ StorageLive(_22);
+ StorageLive(_23);
+ StorageLive(_24);
+ _24 = _2;
+ StorageLive(_25);
+ _25 = _3;
+ _26 = _25 as u8 (IntToInt);
+ _27 = Lt(move _26, const 128_u8);
+ assert(move _27, "attempt to shift left by `{}`, which would overflow", _25) -> [success: bb4, unwind: bb7];
}
bb4: {
- _23 = Shl(move _24, move _25); // scope 0 at $DIR/shifts.rs:+3:10: +3:18
- StorageDead(_25); // scope 0 at $DIR/shifts.rs:+3:17: +3:18
- StorageDead(_24); // scope 0 at $DIR/shifts.rs:+3:17: +3:18
- StorageLive(_28); // scope 0 at $DIR/shifts.rs:+3:20: +3:28
- StorageLive(_29); // scope 0 at $DIR/shifts.rs:+3:20: +3:23
- _29 = _2; // scope 0 at $DIR/shifts.rs:+3:20: +3:23
- StorageLive(_30); // scope 0 at $DIR/shifts.rs:+3:27: +3:28
- _30 = _4; // scope 0 at $DIR/shifts.rs:+3:27: +3:28
- _31 = _30 as u32 (IntToInt); // scope 0 at $DIR/shifts.rs:+3:20: +3:28
- _32 = Lt(move _31, const 128_u32); // scope 0 at $DIR/shifts.rs:+3:20: +3:28
- assert(move _32, "attempt to shift left by `{}`, which would overflow", _30) -> [success: bb5, unwind: bb7]; // scope 0 at $DIR/shifts.rs:+3:20: +3:28
+ _23 = Shl(move _24, move _25);
+ StorageDead(_25);
+ StorageDead(_24);
+ StorageLive(_28);
+ StorageLive(_29);
+ _29 = _2;
+ StorageLive(_30);
+ _30 = _4;
+ _31 = _30 as u32 (IntToInt);
+ _32 = Lt(move _31, const 128_u32);
+ assert(move _32, "attempt to shift left by `{}`, which would overflow", _30) -> [success: bb5, unwind: bb7];
}
bb5: {
- _28 = Shl(move _29, move _30); // scope 0 at $DIR/shifts.rs:+3:20: +3:28
- StorageDead(_30); // scope 0 at $DIR/shifts.rs:+3:27: +3:28
- StorageDead(_29); // scope 0 at $DIR/shifts.rs:+3:27: +3:28
- StorageLive(_33); // scope 0 at $DIR/shifts.rs:+3:30: +3:38
- StorageLive(_34); // scope 0 at $DIR/shifts.rs:+3:30: +3:33
- _34 = _2; // scope 0 at $DIR/shifts.rs:+3:30: +3:33
- StorageLive(_35); // scope 0 at $DIR/shifts.rs:+3:37: +3:38
- _35 = _5; // scope 0 at $DIR/shifts.rs:+3:37: +3:38
- _36 = _35 as u128 (IntToInt); // scope 0 at $DIR/shifts.rs:+3:30: +3:38
- _37 = Lt(move _36, const 128_u128); // scope 0 at $DIR/shifts.rs:+3:30: +3:38
- assert(move _37, "attempt to shift left by `{}`, which would overflow", _35) -> [success: bb6, unwind: bb7]; // scope 0 at $DIR/shifts.rs:+3:30: +3:38
+ _28 = Shl(move _29, move _30);
+ StorageDead(_30);
+ StorageDead(_29);
+ StorageLive(_33);
+ StorageLive(_34);
+ _34 = _2;
+ StorageLive(_35);
+ _35 = _5;
+ _36 = _35 as u128 (IntToInt);
+ _37 = Lt(move _36, const 128_u128);
+ assert(move _37, "attempt to shift left by `{}`, which would overflow", _35) -> [success: bb6, unwind: bb7];
}
bb6: {
- _33 = Shl(move _34, move _35); // scope 0 at $DIR/shifts.rs:+3:30: +3:38
- StorageDead(_35); // scope 0 at $DIR/shifts.rs:+3:37: +3:38
- StorageDead(_34); // scope 0 at $DIR/shifts.rs:+3:37: +3:38
- _22 = [move _23, move _28, move _33]; // scope 0 at $DIR/shifts.rs:+3:9: +3:39
- StorageDead(_33); // scope 0 at $DIR/shifts.rs:+3:38: +3:39
- StorageDead(_28); // scope 0 at $DIR/shifts.rs:+3:38: +3:39
- StorageDead(_23); // scope 0 at $DIR/shifts.rs:+3:38: +3:39
- _0 = (move _6, move _22); // scope 0 at $DIR/shifts.rs:+1:5: +4:6
- StorageDead(_22); // scope 0 at $DIR/shifts.rs:+4:5: +4:6
- StorageDead(_6); // scope 0 at $DIR/shifts.rs:+4:5: +4:6
- return; // scope 0 at $DIR/shifts.rs:+5:2: +5:2
+ _33 = Shl(move _34, move _35);
+ StorageDead(_35);
+ StorageDead(_34);
+ _22 = [move _23, move _28, move _33];
+ StorageDead(_33);
+ StorageDead(_28);
+ StorageDead(_23);
+ _0 = (move _6, move _22);
+ StorageDead(_22);
+ StorageDead(_6);
+ return;
}
bb7 (cleanup): {
- resume; // scope 0 at $DIR/shifts.rs:+0:1: +5:2
+ resume;
}
}
diff --git a/tests/mir-opt/building/shifts.shift_unsigned.built.after.mir b/tests/mir-opt/building/shifts.shift_unsigned.built.after.mir
index 04da2d20d..dfd3b5b35 100644
--- a/tests/mir-opt/building/shifts.shift_unsigned.built.after.mir
+++ b/tests/mir-opt/building/shifts.shift_unsigned.built.after.mir
@@ -1,135 +1,135 @@
// MIR for `shift_unsigned` after built
fn shift_unsigned(_1: u8, _2: i128, _3: u8, _4: u32, _5: u128) -> ([u8; 3], [i128; 3]) {
- debug small => _1; // in scope 0 at $DIR/shifts.rs:+0:19: +0:24
- debug big => _2; // in scope 0 at $DIR/shifts.rs:+0:30: +0:33
- debug a => _3; // in scope 0 at $DIR/shifts.rs:+0:41: +0:42
- debug b => _4; // in scope 0 at $DIR/shifts.rs:+0:48: +0:49
- debug c => _5; // in scope 0 at $DIR/shifts.rs:+0:56: +0:57
- let mut _0: ([u8; 3], [i128; 3]); // return place in scope 0 at $DIR/shifts.rs:+0:68: +0:88
- let mut _6: [u8; 3]; // in scope 0 at $DIR/shifts.rs:+2:9: +2:45
- let mut _7: u8; // in scope 0 at $DIR/shifts.rs:+2:10: +2:20
- let mut _8: u8; // in scope 0 at $DIR/shifts.rs:+2:10: +2:15
- let mut _9: u8; // in scope 0 at $DIR/shifts.rs:+2:19: +2:20
- let mut _10: bool; // in scope 0 at $DIR/shifts.rs:+2:10: +2:20
- let mut _11: u8; // in scope 0 at $DIR/shifts.rs:+2:22: +2:32
- let mut _12: u8; // in scope 0 at $DIR/shifts.rs:+2:22: +2:27
- let mut _13: u32; // in scope 0 at $DIR/shifts.rs:+2:31: +2:32
- let mut _14: bool; // in scope 0 at $DIR/shifts.rs:+2:22: +2:32
- let mut _15: u8; // in scope 0 at $DIR/shifts.rs:+2:34: +2:44
- let mut _16: u8; // in scope 0 at $DIR/shifts.rs:+2:34: +2:39
- let mut _17: u128; // in scope 0 at $DIR/shifts.rs:+2:43: +2:44
- let mut _18: bool; // in scope 0 at $DIR/shifts.rs:+2:34: +2:44
- let mut _19: [i128; 3]; // in scope 0 at $DIR/shifts.rs:+3:9: +3:39
- let mut _20: i128; // in scope 0 at $DIR/shifts.rs:+3:10: +3:18
- let mut _21: i128; // in scope 0 at $DIR/shifts.rs:+3:10: +3:13
- let mut _22: u8; // in scope 0 at $DIR/shifts.rs:+3:17: +3:18
- let mut _23: bool; // in scope 0 at $DIR/shifts.rs:+3:10: +3:18
- let mut _24: i128; // in scope 0 at $DIR/shifts.rs:+3:20: +3:28
- let mut _25: i128; // in scope 0 at $DIR/shifts.rs:+3:20: +3:23
- let mut _26: u32; // in scope 0 at $DIR/shifts.rs:+3:27: +3:28
- let mut _27: bool; // in scope 0 at $DIR/shifts.rs:+3:20: +3:28
- let mut _28: i128; // in scope 0 at $DIR/shifts.rs:+3:30: +3:38
- let mut _29: i128; // in scope 0 at $DIR/shifts.rs:+3:30: +3:33
- let mut _30: u128; // in scope 0 at $DIR/shifts.rs:+3:37: +3:38
- let mut _31: bool; // in scope 0 at $DIR/shifts.rs:+3:30: +3:38
+ debug small => _1;
+ debug big => _2;
+ debug a => _3;
+ debug b => _4;
+ debug c => _5;
+ let mut _0: ([u8; 3], [i128; 3]);
+ let mut _6: [u8; 3];
+ let mut _7: u8;
+ let mut _8: u8;
+ let mut _9: u8;
+ let mut _10: bool;
+ let mut _11: u8;
+ let mut _12: u8;
+ let mut _13: u32;
+ let mut _14: bool;
+ let mut _15: u8;
+ let mut _16: u8;
+ let mut _17: u128;
+ let mut _18: bool;
+ let mut _19: [i128; 3];
+ let mut _20: i128;
+ let mut _21: i128;
+ let mut _22: u8;
+ let mut _23: bool;
+ let mut _24: i128;
+ let mut _25: i128;
+ let mut _26: u32;
+ let mut _27: bool;
+ let mut _28: i128;
+ let mut _29: i128;
+ let mut _30: u128;
+ let mut _31: bool;
bb0: {
- StorageLive(_6); // scope 0 at $DIR/shifts.rs:+2:9: +2:45
- StorageLive(_7); // scope 0 at $DIR/shifts.rs:+2:10: +2:20
- StorageLive(_8); // scope 0 at $DIR/shifts.rs:+2:10: +2:15
- _8 = _1; // scope 0 at $DIR/shifts.rs:+2:10: +2:15
- StorageLive(_9); // scope 0 at $DIR/shifts.rs:+2:19: +2:20
- _9 = _3; // scope 0 at $DIR/shifts.rs:+2:19: +2:20
- _10 = Lt(_9, const 8_u8); // scope 0 at $DIR/shifts.rs:+2:10: +2:20
- assert(move _10, "attempt to shift right by `{}`, which would overflow", _9) -> [success: bb1, unwind: bb7]; // scope 0 at $DIR/shifts.rs:+2:10: +2:20
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = _1;
+ StorageLive(_9);
+ _9 = _3;
+ _10 = Lt(_9, const 8_u8);
+ assert(move _10, "attempt to shift right by `{}`, which would overflow", _9) -> [success: bb1, unwind: bb7];
}
bb1: {
- _7 = Shr(move _8, move _9); // scope 0 at $DIR/shifts.rs:+2:10: +2:20
- StorageDead(_9); // scope 0 at $DIR/shifts.rs:+2:19: +2:20
- StorageDead(_8); // scope 0 at $DIR/shifts.rs:+2:19: +2:20
- StorageLive(_11); // scope 0 at $DIR/shifts.rs:+2:22: +2:32
- StorageLive(_12); // scope 0 at $DIR/shifts.rs:+2:22: +2:27
- _12 = _1; // scope 0 at $DIR/shifts.rs:+2:22: +2:27
- StorageLive(_13); // scope 0 at $DIR/shifts.rs:+2:31: +2:32
- _13 = _4; // scope 0 at $DIR/shifts.rs:+2:31: +2:32
- _14 = Lt(_13, const 8_u32); // scope 0 at $DIR/shifts.rs:+2:22: +2:32
- assert(move _14, "attempt to shift right by `{}`, which would overflow", _13) -> [success: bb2, unwind: bb7]; // scope 0 at $DIR/shifts.rs:+2:22: +2:32
+ _7 = Shr(move _8, move _9);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageLive(_11);
+ StorageLive(_12);
+ _12 = _1;
+ StorageLive(_13);
+ _13 = _4;
+ _14 = Lt(_13, const 8_u32);
+ assert(move _14, "attempt to shift right by `{}`, which would overflow", _13) -> [success: bb2, unwind: bb7];
}
bb2: {
- _11 = Shr(move _12, move _13); // scope 0 at $DIR/shifts.rs:+2:22: +2:32
- StorageDead(_13); // scope 0 at $DIR/shifts.rs:+2:31: +2:32
- StorageDead(_12); // scope 0 at $DIR/shifts.rs:+2:31: +2:32
- StorageLive(_15); // scope 0 at $DIR/shifts.rs:+2:34: +2:44
- StorageLive(_16); // scope 0 at $DIR/shifts.rs:+2:34: +2:39
- _16 = _1; // scope 0 at $DIR/shifts.rs:+2:34: +2:39
- StorageLive(_17); // scope 0 at $DIR/shifts.rs:+2:43: +2:44
- _17 = _5; // scope 0 at $DIR/shifts.rs:+2:43: +2:44
- _18 = Lt(_17, const 8_u128); // scope 0 at $DIR/shifts.rs:+2:34: +2:44
- assert(move _18, "attempt to shift right by `{}`, which would overflow", _17) -> [success: bb3, unwind: bb7]; // scope 0 at $DIR/shifts.rs:+2:34: +2:44
+ _11 = Shr(move _12, move _13);
+ StorageDead(_13);
+ StorageDead(_12);
+ StorageLive(_15);
+ StorageLive(_16);
+ _16 = _1;
+ StorageLive(_17);
+ _17 = _5;
+ _18 = Lt(_17, const 8_u128);
+ assert(move _18, "attempt to shift right by `{}`, which would overflow", _17) -> [success: bb3, unwind: bb7];
}
bb3: {
- _15 = Shr(move _16, move _17); // scope 0 at $DIR/shifts.rs:+2:34: +2:44
- StorageDead(_17); // scope 0 at $DIR/shifts.rs:+2:43: +2:44
- StorageDead(_16); // scope 0 at $DIR/shifts.rs:+2:43: +2:44
- _6 = [move _7, move _11, move _15]; // scope 0 at $DIR/shifts.rs:+2:9: +2:45
- StorageDead(_15); // scope 0 at $DIR/shifts.rs:+2:44: +2:45
- StorageDead(_11); // scope 0 at $DIR/shifts.rs:+2:44: +2:45
- StorageDead(_7); // scope 0 at $DIR/shifts.rs:+2:44: +2:45
- StorageLive(_19); // scope 0 at $DIR/shifts.rs:+3:9: +3:39
- StorageLive(_20); // scope 0 at $DIR/shifts.rs:+3:10: +3:18
- StorageLive(_21); // scope 0 at $DIR/shifts.rs:+3:10: +3:13
- _21 = _2; // scope 0 at $DIR/shifts.rs:+3:10: +3:13
- StorageLive(_22); // scope 0 at $DIR/shifts.rs:+3:17: +3:18
- _22 = _3; // scope 0 at $DIR/shifts.rs:+3:17: +3:18
- _23 = Lt(_22, const 128_u8); // scope 0 at $DIR/shifts.rs:+3:10: +3:18
- assert(move _23, "attempt to shift left by `{}`, which would overflow", _22) -> [success: bb4, unwind: bb7]; // scope 0 at $DIR/shifts.rs:+3:10: +3:18
+ _15 = Shr(move _16, move _17);
+ StorageDead(_17);
+ StorageDead(_16);
+ _6 = [move _7, move _11, move _15];
+ StorageDead(_15);
+ StorageDead(_11);
+ StorageDead(_7);
+ StorageLive(_19);
+ StorageLive(_20);
+ StorageLive(_21);
+ _21 = _2;
+ StorageLive(_22);
+ _22 = _3;
+ _23 = Lt(_22, const 128_u8);
+ assert(move _23, "attempt to shift left by `{}`, which would overflow", _22) -> [success: bb4, unwind: bb7];
}
bb4: {
- _20 = Shl(move _21, move _22); // scope 0 at $DIR/shifts.rs:+3:10: +3:18
- StorageDead(_22); // scope 0 at $DIR/shifts.rs:+3:17: +3:18
- StorageDead(_21); // scope 0 at $DIR/shifts.rs:+3:17: +3:18
- StorageLive(_24); // scope 0 at $DIR/shifts.rs:+3:20: +3:28
- StorageLive(_25); // scope 0 at $DIR/shifts.rs:+3:20: +3:23
- _25 = _2; // scope 0 at $DIR/shifts.rs:+3:20: +3:23
- StorageLive(_26); // scope 0 at $DIR/shifts.rs:+3:27: +3:28
- _26 = _4; // scope 0 at $DIR/shifts.rs:+3:27: +3:28
- _27 = Lt(_26, const 128_u32); // scope 0 at $DIR/shifts.rs:+3:20: +3:28
- assert(move _27, "attempt to shift left by `{}`, which would overflow", _26) -> [success: bb5, unwind: bb7]; // scope 0 at $DIR/shifts.rs:+3:20: +3:28
+ _20 = Shl(move _21, move _22);
+ StorageDead(_22);
+ StorageDead(_21);
+ StorageLive(_24);
+ StorageLive(_25);
+ _25 = _2;
+ StorageLive(_26);
+ _26 = _4;
+ _27 = Lt(_26, const 128_u32);
+ assert(move _27, "attempt to shift left by `{}`, which would overflow", _26) -> [success: bb5, unwind: bb7];
}
bb5: {
- _24 = Shl(move _25, move _26); // scope 0 at $DIR/shifts.rs:+3:20: +3:28
- StorageDead(_26); // scope 0 at $DIR/shifts.rs:+3:27: +3:28
- StorageDead(_25); // scope 0 at $DIR/shifts.rs:+3:27: +3:28
- StorageLive(_28); // scope 0 at $DIR/shifts.rs:+3:30: +3:38
- StorageLive(_29); // scope 0 at $DIR/shifts.rs:+3:30: +3:33
- _29 = _2; // scope 0 at $DIR/shifts.rs:+3:30: +3:33
- StorageLive(_30); // scope 0 at $DIR/shifts.rs:+3:37: +3:38
- _30 = _5; // scope 0 at $DIR/shifts.rs:+3:37: +3:38
- _31 = Lt(_30, const 128_u128); // scope 0 at $DIR/shifts.rs:+3:30: +3:38
- assert(move _31, "attempt to shift left by `{}`, which would overflow", _30) -> [success: bb6, unwind: bb7]; // scope 0 at $DIR/shifts.rs:+3:30: +3:38
+ _24 = Shl(move _25, move _26);
+ StorageDead(_26);
+ StorageDead(_25);
+ StorageLive(_28);
+ StorageLive(_29);
+ _29 = _2;
+ StorageLive(_30);
+ _30 = _5;
+ _31 = Lt(_30, const 128_u128);
+ assert(move _31, "attempt to shift left by `{}`, which would overflow", _30) -> [success: bb6, unwind: bb7];
}
bb6: {
- _28 = Shl(move _29, move _30); // scope 0 at $DIR/shifts.rs:+3:30: +3:38
- StorageDead(_30); // scope 0 at $DIR/shifts.rs:+3:37: +3:38
- StorageDead(_29); // scope 0 at $DIR/shifts.rs:+3:37: +3:38
- _19 = [move _20, move _24, move _28]; // scope 0 at $DIR/shifts.rs:+3:9: +3:39
- StorageDead(_28); // scope 0 at $DIR/shifts.rs:+3:38: +3:39
- StorageDead(_24); // scope 0 at $DIR/shifts.rs:+3:38: +3:39
- StorageDead(_20); // scope 0 at $DIR/shifts.rs:+3:38: +3:39
- _0 = (move _6, move _19); // scope 0 at $DIR/shifts.rs:+1:5: +4:6
- StorageDead(_19); // scope 0 at $DIR/shifts.rs:+4:5: +4:6
- StorageDead(_6); // scope 0 at $DIR/shifts.rs:+4:5: +4:6
- return; // scope 0 at $DIR/shifts.rs:+5:2: +5:2
+ _28 = Shl(move _29, move _30);
+ StorageDead(_30);
+ StorageDead(_29);
+ _19 = [move _20, move _24, move _28];
+ StorageDead(_28);
+ StorageDead(_24);
+ StorageDead(_20);
+ _0 = (move _6, move _19);
+ StorageDead(_19);
+ StorageDead(_6);
+ return;
}
bb7 (cleanup): {
- resume; // scope 0 at $DIR/shifts.rs:+0:1: +5:2
+ resume;
}
}
diff --git a/tests/mir-opt/building/simple_match.match_bool.built.after.mir b/tests/mir-opt/building/simple_match.match_bool.built.after.mir
index aa2fd4632..c89ea2b6c 100644
--- a/tests/mir-opt/building/simple_match.match_bool.built.after.mir
+++ b/tests/mir-opt/building/simple_match.match_bool.built.after.mir
@@ -1,29 +1,29 @@
// MIR for `match_bool` after built
fn match_bool(_1: bool) -> usize {
- debug x => _1; // in scope 0 at $DIR/simple_match.rs:+0:15: +0:16
- let mut _0: usize; // return place in scope 0 at $DIR/simple_match.rs:+0:27: +0:32
+ debug x => _1;
+ let mut _0: usize;
bb0: {
- FakeRead(ForMatchedPlace(None), _1); // scope 0 at $DIR/simple_match.rs:+1:11: +1:12
- switchInt(_1) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/simple_match.rs:+1:5: +1:12
+ FakeRead(ForMatchedPlace(None), _1);
+ switchInt(_1) -> [0: bb2, otherwise: bb1];
}
bb1: {
- falseEdge -> [real: bb3, imaginary: bb2]; // scope 0 at $DIR/simple_match.rs:+2:9: +2:13
+ falseEdge -> [real: bb3, imaginary: bb2];
}
bb2: {
- _0 = const 20_usize; // scope 0 at $DIR/simple_match.rs:+3:14: +3:16
- goto -> bb4; // scope 0 at $DIR/simple_match.rs:+3:14: +3:16
+ _0 = const 20_usize;
+ goto -> bb4;
}
bb3: {
- _0 = const 10_usize; // scope 0 at $DIR/simple_match.rs:+2:17: +2:19
- goto -> bb4; // scope 0 at $DIR/simple_match.rs:+2:17: +2:19
+ _0 = const 10_usize;
+ goto -> bb4;
}
bb4: {
- return; // scope 0 at $DIR/simple_match.rs:+5:2: +5:2
+ return;
}
}
diff --git a/tests/mir-opt/building/storage_live_dead_in_statics.XXX.built.after.mir b/tests/mir-opt/building/storage_live_dead_in_statics.XXX.built.after.mir
index 1d3f77e07..683f63065 100644
--- a/tests/mir-opt/building/storage_live_dead_in_statics.XXX.built.after.mir
+++ b/tests/mir-opt/building/storage_live_dead_in_statics.XXX.built.after.mir
@@ -1,203 +1,200 @@
// MIR for `XXX` after built
static XXX: &Foo = {
- let mut _0: &Foo; // return place in scope 0 at $DIR/storage_live_dead_in_statics.rs:+0:13: +0:25
- let _1: &Foo; // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+0:28: +18:2
- let _2: Foo; // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+0:29: +18:2
- let mut _3: &[(u32, u32)]; // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+2:11: +17:6
- let mut _4: &[(u32, u32); 42]; // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+2:11: +17:6
- let _5: &[(u32, u32); 42]; // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+2:11: +17:6
- let _6: [(u32, u32); 42]; // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+2:12: +17:6
- let mut _7: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+3:9: +3:15
- let mut _8: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+3:17: +3:23
- let mut _9: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+3:25: +3:31
- let mut _10: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+4:9: +4:15
- let mut _11: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+4:17: +4:23
- let mut _12: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+4:25: +4:31
- let mut _13: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+5:9: +5:15
- let mut _14: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+5:17: +5:23
- let mut _15: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+5:25: +5:31
- let mut _16: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+6:9: +6:15
- let mut _17: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+6:17: +6:23
- let mut _18: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+6:25: +6:31
- let mut _19: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+7:9: +7:15
- let mut _20: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+7:17: +7:23
- let mut _21: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+7:25: +7:31
- let mut _22: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+8:9: +8:15
- let mut _23: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+8:17: +8:23
- let mut _24: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+8:25: +8:31
- let mut _25: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+9:9: +9:15
- let mut _26: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+9:17: +9:23
- let mut _27: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+9:25: +9:31
- let mut _28: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+10:9: +10:15
- let mut _29: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+10:17: +10:23
- let mut _30: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+10:25: +10:31
- let mut _31: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+11:9: +11:15
- let mut _32: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+11:17: +11:23
- let mut _33: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+11:25: +11:31
- let mut _34: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+12:9: +12:15
- let mut _35: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+12:17: +12:23
- let mut _36: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+12:25: +12:31
- let mut _37: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+13:9: +13:15
- let mut _38: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+13:17: +13:23
- let mut _39: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+13:25: +13:31
- let mut _40: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+14:9: +14:15
- let mut _41: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+14:17: +14:23
- let mut _42: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+14:25: +14:31
- let mut _43: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+15:9: +15:15
- let mut _44: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+15:17: +15:23
- let mut _45: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+15:25: +15:31
- let mut _46: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+16:9: +16:15
- let mut _47: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+16:17: +16:23
- let mut _48: (u32, u32); // in scope 0 at $DIR/storage_live_dead_in_statics.rs:+16:25: +16:31
+ let mut _0: &Foo;
+ let _1: &Foo;
+ let _2: Foo;
+ let mut _3: &[(u32, u32)];
+ let mut _4: &[(u32, u32); 42];
+ let _5: &[(u32, u32); 42];
+ let _6: [(u32, u32); 42];
+ let mut _7: (u32, u32);
+ let mut _8: (u32, u32);
+ let mut _9: (u32, u32);
+ let mut _10: (u32, u32);
+ let mut _11: (u32, u32);
+ let mut _12: (u32, u32);
+ let mut _13: (u32, u32);
+ let mut _14: (u32, u32);
+ let mut _15: (u32, u32);
+ let mut _16: (u32, u32);
+ let mut _17: (u32, u32);
+ let mut _18: (u32, u32);
+ let mut _19: (u32, u32);
+ let mut _20: (u32, u32);
+ let mut _21: (u32, u32);
+ let mut _22: (u32, u32);
+ let mut _23: (u32, u32);
+ let mut _24: (u32, u32);
+ let mut _25: (u32, u32);
+ let mut _26: (u32, u32);
+ let mut _27: (u32, u32);
+ let mut _28: (u32, u32);
+ let mut _29: (u32, u32);
+ let mut _30: (u32, u32);
+ let mut _31: (u32, u32);
+ let mut _32: (u32, u32);
+ let mut _33: (u32, u32);
+ let mut _34: (u32, u32);
+ let mut _35: (u32, u32);
+ let mut _36: (u32, u32);
+ let mut _37: (u32, u32);
+ let mut _38: (u32, u32);
+ let mut _39: (u32, u32);
+ let mut _40: (u32, u32);
+ let mut _41: (u32, u32);
+ let mut _42: (u32, u32);
+ let mut _43: (u32, u32);
+ let mut _44: (u32, u32);
+ let mut _45: (u32, u32);
+ let mut _46: (u32, u32);
+ let mut _47: (u32, u32);
+ let mut _48: (u32, u32);
bb0: {
- StorageLive(_1); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+0:28: +18:2
- StorageLive(_2); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+0:29: +18:2
- StorageLive(_3); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+2:11: +17:6
- StorageLive(_4); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+2:11: +17:6
- StorageLive(_5); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+2:11: +17:6
- StorageLive(_6); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+2:12: +17:6
- StorageLive(_7); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+3:9: +3:15
- _7 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+3:9: +3:15
- StorageLive(_8); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+3:17: +3:23
- _8 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+3:17: +3:23
- StorageLive(_9); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+3:25: +3:31
- _9 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+3:25: +3:31
- StorageLive(_10); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+4:9: +4:15
- _10 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+4:9: +4:15
- StorageLive(_11); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+4:17: +4:23
- _11 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+4:17: +4:23
- StorageLive(_12); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+4:25: +4:31
- _12 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+4:25: +4:31
- StorageLive(_13); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+5:9: +5:15
- _13 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+5:9: +5:15
- StorageLive(_14); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+5:17: +5:23
- _14 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+5:17: +5:23
- StorageLive(_15); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+5:25: +5:31
- _15 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+5:25: +5:31
- StorageLive(_16); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+6:9: +6:15
- _16 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+6:9: +6:15
- StorageLive(_17); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+6:17: +6:23
- _17 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+6:17: +6:23
- StorageLive(_18); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+6:25: +6:31
- _18 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+6:25: +6:31
- StorageLive(_19); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+7:9: +7:15
- _19 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+7:9: +7:15
- StorageLive(_20); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+7:17: +7:23
- _20 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+7:17: +7:23
- StorageLive(_21); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+7:25: +7:31
- _21 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+7:25: +7:31
- StorageLive(_22); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+8:9: +8:15
- _22 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+8:9: +8:15
- StorageLive(_23); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+8:17: +8:23
- _23 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+8:17: +8:23
- StorageLive(_24); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+8:25: +8:31
- _24 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+8:25: +8:31
- StorageLive(_25); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+9:9: +9:15
- _25 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+9:9: +9:15
- StorageLive(_26); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+9:17: +9:23
- _26 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+9:17: +9:23
- StorageLive(_27); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+9:25: +9:31
- _27 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+9:25: +9:31
- StorageLive(_28); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+10:9: +10:15
- _28 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+10:9: +10:15
- StorageLive(_29); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+10:17: +10:23
- _29 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+10:17: +10:23
- StorageLive(_30); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+10:25: +10:31
- _30 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+10:25: +10:31
- StorageLive(_31); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+11:9: +11:15
- _31 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+11:9: +11:15
- StorageLive(_32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+11:17: +11:23
- _32 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+11:17: +11:23
- StorageLive(_33); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+11:25: +11:31
- _33 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+11:25: +11:31
- StorageLive(_34); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+12:9: +12:15
- _34 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+12:9: +12:15
- StorageLive(_35); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+12:17: +12:23
- _35 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+12:17: +12:23
- StorageLive(_36); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+12:25: +12:31
- _36 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+12:25: +12:31
- StorageLive(_37); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+13:9: +13:15
- _37 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+13:9: +13:15
- StorageLive(_38); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+13:17: +13:23
- _38 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+13:17: +13:23
- StorageLive(_39); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+13:25: +13:31
- _39 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+13:25: +13:31
- StorageLive(_40); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+14:9: +14:15
- _40 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+14:9: +14:15
- StorageLive(_41); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+14:17: +14:23
- _41 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+14:17: +14:23
- StorageLive(_42); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+14:25: +14:31
- _42 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+14:25: +14:31
- StorageLive(_43); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+15:9: +15:15
- _43 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+15:9: +15:15
- StorageLive(_44); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+15:17: +15:23
- _44 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+15:17: +15:23
- StorageLive(_45); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+15:25: +15:31
- _45 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+15:25: +15:31
- StorageLive(_46); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+16:9: +16:15
- _46 = (const 0_u32, const 1_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+16:9: +16:15
- StorageLive(_47); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+16:17: +16:23
- _47 = (const 0_u32, const 2_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+16:17: +16:23
- StorageLive(_48); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+16:25: +16:31
- _48 = (const 0_u32, const 3_u32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+16:25: +16:31
- _6 = [move _7, move _8, move _9, move _10, move _11, move _12, move _13, move _14, move _15, move _16, move _17, move _18, move _19, move _20, move _21, move _22, move _23, move _24, move _25, move _26, move _27, move _28, move _29, move _30, move _31, move _32, move _33, move _34, move _35, move _36, move _37, move _38, move _39, move _40, move _41, move _42, move _43, move _44, move _45, move _46, move _47, move _48]; // scope 0 at $DIR/storage_live_dead_in_statics.rs:+2:12: +17:6
- StorageDead(_48); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_47); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_46); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_45); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_44); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_43); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_42); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_41); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_40); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_39); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_38); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_37); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_36); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_35); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_34); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_33); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_32); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_31); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_30); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_29); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_28); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_27); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_26); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_25); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_24); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_23); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_22); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_21); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_20); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_19); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_18); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_17); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_16); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_15); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_14); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_13); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_12); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_11); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_10); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_9); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_8); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- StorageDead(_7); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- _5 = &_6; // scope 0 at $DIR/storage_live_dead_in_statics.rs:+2:11: +17:6
- _4 = &(*_5); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+2:11: +17:6
- _3 = move _4 as &[(u32, u32)] (Pointer(Unsize)); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+2:11: +17:6
- StorageDead(_4); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+17:5: +17:6
- _2 = Foo { tup: const "hi", data: move _3 }; // scope 0 at $DIR/storage_live_dead_in_statics.rs:+0:29: +18:2
- // mir::Constant
- // + span: $DIR/storage_live_dead_in_statics.rs:6:10: 6:14
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- StorageDead(_3); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+18:1: +18:2
- _1 = &_2; // scope 0 at $DIR/storage_live_dead_in_statics.rs:+0:28: +18:2
- _0 = &(*_1); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+0:28: +18:2
- StorageDead(_5); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+18:1: +18:2
- StorageDead(_1); // scope 0 at $DIR/storage_live_dead_in_statics.rs:+18:1: +18:2
- return; // scope 0 at $DIR/storage_live_dead_in_statics.rs:+0:1: +18:3
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = (const 0_u32, const 1_u32);
+ StorageLive(_8);
+ _8 = (const 0_u32, const 2_u32);
+ StorageLive(_9);
+ _9 = (const 0_u32, const 3_u32);
+ StorageLive(_10);
+ _10 = (const 0_u32, const 1_u32);
+ StorageLive(_11);
+ _11 = (const 0_u32, const 2_u32);
+ StorageLive(_12);
+ _12 = (const 0_u32, const 3_u32);
+ StorageLive(_13);
+ _13 = (const 0_u32, const 1_u32);
+ StorageLive(_14);
+ _14 = (const 0_u32, const 2_u32);
+ StorageLive(_15);
+ _15 = (const 0_u32, const 3_u32);
+ StorageLive(_16);
+ _16 = (const 0_u32, const 1_u32);
+ StorageLive(_17);
+ _17 = (const 0_u32, const 2_u32);
+ StorageLive(_18);
+ _18 = (const 0_u32, const 3_u32);
+ StorageLive(_19);
+ _19 = (const 0_u32, const 1_u32);
+ StorageLive(_20);
+ _20 = (const 0_u32, const 2_u32);
+ StorageLive(_21);
+ _21 = (const 0_u32, const 3_u32);
+ StorageLive(_22);
+ _22 = (const 0_u32, const 1_u32);
+ StorageLive(_23);
+ _23 = (const 0_u32, const 2_u32);
+ StorageLive(_24);
+ _24 = (const 0_u32, const 3_u32);
+ StorageLive(_25);
+ _25 = (const 0_u32, const 1_u32);
+ StorageLive(_26);
+ _26 = (const 0_u32, const 2_u32);
+ StorageLive(_27);
+ _27 = (const 0_u32, const 3_u32);
+ StorageLive(_28);
+ _28 = (const 0_u32, const 1_u32);
+ StorageLive(_29);
+ _29 = (const 0_u32, const 2_u32);
+ StorageLive(_30);
+ _30 = (const 0_u32, const 3_u32);
+ StorageLive(_31);
+ _31 = (const 0_u32, const 1_u32);
+ StorageLive(_32);
+ _32 = (const 0_u32, const 2_u32);
+ StorageLive(_33);
+ _33 = (const 0_u32, const 3_u32);
+ StorageLive(_34);
+ _34 = (const 0_u32, const 1_u32);
+ StorageLive(_35);
+ _35 = (const 0_u32, const 2_u32);
+ StorageLive(_36);
+ _36 = (const 0_u32, const 3_u32);
+ StorageLive(_37);
+ _37 = (const 0_u32, const 1_u32);
+ StorageLive(_38);
+ _38 = (const 0_u32, const 2_u32);
+ StorageLive(_39);
+ _39 = (const 0_u32, const 3_u32);
+ StorageLive(_40);
+ _40 = (const 0_u32, const 1_u32);
+ StorageLive(_41);
+ _41 = (const 0_u32, const 2_u32);
+ StorageLive(_42);
+ _42 = (const 0_u32, const 3_u32);
+ StorageLive(_43);
+ _43 = (const 0_u32, const 1_u32);
+ StorageLive(_44);
+ _44 = (const 0_u32, const 2_u32);
+ StorageLive(_45);
+ _45 = (const 0_u32, const 3_u32);
+ StorageLive(_46);
+ _46 = (const 0_u32, const 1_u32);
+ StorageLive(_47);
+ _47 = (const 0_u32, const 2_u32);
+ StorageLive(_48);
+ _48 = (const 0_u32, const 3_u32);
+ _6 = [move _7, move _8, move _9, move _10, move _11, move _12, move _13, move _14, move _15, move _16, move _17, move _18, move _19, move _20, move _21, move _22, move _23, move _24, move _25, move _26, move _27, move _28, move _29, move _30, move _31, move _32, move _33, move _34, move _35, move _36, move _37, move _38, move _39, move _40, move _41, move _42, move _43, move _44, move _45, move _46, move _47, move _48];
+ StorageDead(_48);
+ StorageDead(_47);
+ StorageDead(_46);
+ StorageDead(_45);
+ StorageDead(_44);
+ StorageDead(_43);
+ StorageDead(_42);
+ StorageDead(_41);
+ StorageDead(_40);
+ StorageDead(_39);
+ StorageDead(_38);
+ StorageDead(_37);
+ StorageDead(_36);
+ StorageDead(_35);
+ StorageDead(_34);
+ StorageDead(_33);
+ StorageDead(_32);
+ StorageDead(_31);
+ StorageDead(_30);
+ StorageDead(_29);
+ StorageDead(_28);
+ StorageDead(_27);
+ StorageDead(_26);
+ StorageDead(_25);
+ StorageDead(_24);
+ StorageDead(_23);
+ StorageDead(_22);
+ StorageDead(_21);
+ StorageDead(_20);
+ StorageDead(_19);
+ StorageDead(_18);
+ StorageDead(_17);
+ StorageDead(_16);
+ StorageDead(_15);
+ StorageDead(_14);
+ StorageDead(_13);
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_7);
+ _5 = &_6;
+ _4 = &(*_5);
+ _3 = move _4 as &[(u32, u32)] (PointerCoercion(Unsize));
+ StorageDead(_4);
+ _2 = Foo { tup: const "hi", data: move _3 };
+ StorageDead(_3);
+ _1 = &_2;
+ _0 = &(*_1);
+ StorageDead(_5);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/building/uniform_array_move_out.move_out_by_subslice.built.after.mir b/tests/mir-opt/building/uniform_array_move_out.move_out_by_subslice.built.after.mir
index 54f0ea2d8..fea1138ba 100644
--- a/tests/mir-opt/building/uniform_array_move_out.move_out_by_subslice.built.after.mir
+++ b/tests/mir-opt/building/uniform_array_move_out.move_out_by_subslice.built.after.mir
@@ -1,23 +1,23 @@
// MIR for `move_out_by_subslice` after built
fn move_out_by_subslice() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/uniform_array_move_out.rs:+0:27: +0:27
- let _1: [std::boxed::Box<i32>; 2]; // in scope 0 at $DIR/uniform_array_move_out.rs:+1:9: +1:10
- let mut _2: std::boxed::Box<i32>; // in scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- let mut _3: usize; // in scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- let mut _4: usize; // in scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- let mut _5: *mut u8; // in scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- let mut _6: std::boxed::Box<i32>; // in scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- let mut _7: std::boxed::Box<i32>; // in scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- let mut _8: usize; // in scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- let mut _9: usize; // in scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- let mut _10: *mut u8; // in scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- let mut _11: std::boxed::Box<i32>; // in scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
+ let mut _0: ();
+ let _1: [std::boxed::Box<i32>; 2];
+ let mut _2: std::boxed::Box<i32>;
+ let mut _3: usize;
+ let mut _4: usize;
+ let mut _5: *mut u8;
+ let mut _6: std::boxed::Box<i32>;
+ let mut _7: std::boxed::Box<i32>;
+ let mut _8: usize;
+ let mut _9: usize;
+ let mut _10: *mut u8;
+ let mut _11: std::boxed::Box<i32>;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/uniform_array_move_out.rs:+1:9: +1:10
- let _12: [std::boxed::Box<i32>; 2]; // in scope 1 at $DIR/uniform_array_move_out.rs:+7:10: +7:12
+ debug a => _1;
+ let _12: [std::boxed::Box<i32>; 2];
scope 4 {
- debug _y => _12; // in scope 4 at $DIR/uniform_array_move_out.rs:+7:10: +7:12
+ debug _y => _12;
}
}
scope 2 {
@@ -26,87 +26,81 @@ fn move_out_by_subslice() -> () {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/uniform_array_move_out.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- _3 = SizeOf(i32); // scope 2 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- _4 = AlignOf(i32); // scope 2 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- _5 = alloc::alloc::exchange_malloc(move _3, move _4) -> [return: bb1, unwind: bb12]; // scope 2 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- // mir::Constant
- // + span: $DIR/uniform_array_move_out.rs:18:9: 18:20
- // + literal: Const { ty: unsafe fn(usize, usize) -> *mut u8 {alloc::alloc::exchange_malloc}, val: Value(<ZST>) }
+ StorageLive(_1);
+ StorageLive(_2);
+ _3 = SizeOf(i32);
+ _4 = AlignOf(i32);
+ _5 = alloc::alloc::exchange_malloc(move _3, move _4) -> [return: bb1, unwind: bb12];
}
bb1: {
- StorageLive(_6); // scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- _6 = ShallowInitBox(move _5, i32); // scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- (*_6) = const 1_i32; // scope 0 at $DIR/uniform_array_move_out.rs:+3:18: +3:19
- _2 = move _6; // scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- drop(_6) -> [return: bb2, unwind: bb11]; // scope 0 at $DIR/uniform_array_move_out.rs:+3:19: +3:20
+ StorageLive(_6);
+ _6 = ShallowInitBox(move _5, i32);
+ (*_6) = const 1_i32;
+ _2 = move _6;
+ drop(_6) -> [return: bb2, unwind: bb11];
}
bb2: {
- StorageDead(_6); // scope 0 at $DIR/uniform_array_move_out.rs:+3:19: +3:20
- StorageLive(_7); // scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- _8 = SizeOf(i32); // scope 3 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- _9 = AlignOf(i32); // scope 3 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- _10 = alloc::alloc::exchange_malloc(move _8, move _9) -> [return: bb3, unwind: bb11]; // scope 3 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- // mir::Constant
- // + span: $DIR/uniform_array_move_out.rs:20:9: 20:20
- // + literal: Const { ty: unsafe fn(usize, usize) -> *mut u8 {alloc::alloc::exchange_malloc}, val: Value(<ZST>) }
+ StorageDead(_6);
+ StorageLive(_7);
+ _8 = SizeOf(i32);
+ _9 = AlignOf(i32);
+ _10 = alloc::alloc::exchange_malloc(move _8, move _9) -> [return: bb3, unwind: bb11];
}
bb3: {
- StorageLive(_11); // scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- _11 = ShallowInitBox(move _10, i32); // scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- (*_11) = const 2_i32; // scope 0 at $DIR/uniform_array_move_out.rs:+5:18: +5:19
- _7 = move _11; // scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- drop(_11) -> [return: bb4, unwind: bb10]; // scope 0 at $DIR/uniform_array_move_out.rs:+5:19: +5:20
+ StorageLive(_11);
+ _11 = ShallowInitBox(move _10, i32);
+ (*_11) = const 2_i32;
+ _7 = move _11;
+ drop(_11) -> [return: bb4, unwind: bb10];
}
bb4: {
- StorageDead(_11); // scope 0 at $DIR/uniform_array_move_out.rs:+5:19: +5:20
- _1 = [move _2, move _7]; // scope 0 at $DIR/uniform_array_move_out.rs:+1:13: +6:6
- drop(_7) -> [return: bb5, unwind: bb11]; // scope 0 at $DIR/uniform_array_move_out.rs:+6:5: +6:6
+ StorageDead(_11);
+ _1 = [move _2, move _7];
+ drop(_7) -> [return: bb5, unwind: bb11];
}
bb5: {
- StorageDead(_7); // scope 0 at $DIR/uniform_array_move_out.rs:+6:5: +6:6
- drop(_2) -> [return: bb6, unwind: bb12]; // scope 0 at $DIR/uniform_array_move_out.rs:+6:5: +6:6
+ StorageDead(_7);
+ drop(_2) -> [return: bb6, unwind: bb12];
}
bb6: {
- StorageDead(_2); // scope 0 at $DIR/uniform_array_move_out.rs:+6:5: +6:6
- FakeRead(ForLet(None), _1); // scope 0 at $DIR/uniform_array_move_out.rs:+1:9: +1:10
- PlaceMention(_1); // scope 1 at $DIR/uniform_array_move_out.rs:+7:21: +7:22
- StorageLive(_12); // scope 1 at $DIR/uniform_array_move_out.rs:+7:10: +7:12
- _12 = move _1[0..2]; // scope 1 at $DIR/uniform_array_move_out.rs:+7:10: +7:12
- _0 = const (); // scope 0 at $DIR/uniform_array_move_out.rs:+0:27: +8:2
- drop(_12) -> [return: bb7, unwind: bb9]; // scope 1 at $DIR/uniform_array_move_out.rs:+8:1: +8:2
+ StorageDead(_2);
+ FakeRead(ForLet(None), _1);
+ PlaceMention(_1);
+ StorageLive(_12);
+ _12 = move _1[0..2];
+ _0 = const ();
+ drop(_12) -> [return: bb7, unwind: bb9];
}
bb7: {
- StorageDead(_12); // scope 1 at $DIR/uniform_array_move_out.rs:+8:1: +8:2
- drop(_1) -> [return: bb8, unwind: bb12]; // scope 0 at $DIR/uniform_array_move_out.rs:+8:1: +8:2
+ StorageDead(_12);
+ drop(_1) -> [return: bb8, unwind: bb12];
}
bb8: {
- StorageDead(_1); // scope 0 at $DIR/uniform_array_move_out.rs:+8:1: +8:2
- return; // scope 0 at $DIR/uniform_array_move_out.rs:+8:2: +8:2
+ StorageDead(_1);
+ return;
}
bb9 (cleanup): {
- drop(_1) -> [return: bb12, unwind terminate]; // scope 0 at $DIR/uniform_array_move_out.rs:+8:1: +8:2
+ drop(_1) -> [return: bb12, unwind terminate];
}
bb10 (cleanup): {
- drop(_7) -> [return: bb11, unwind terminate]; // scope 0 at $DIR/uniform_array_move_out.rs:+6:5: +6:6
+ drop(_7) -> [return: bb11, unwind terminate];
}
bb11 (cleanup): {
- drop(_2) -> [return: bb12, unwind terminate]; // scope 0 at $DIR/uniform_array_move_out.rs:+6:5: +6:6
+ drop(_2) -> [return: bb12, unwind terminate];
}
bb12 (cleanup): {
- resume; // scope 0 at $DIR/uniform_array_move_out.rs:+0:1: +8:2
+ resume;
}
}
diff --git a/tests/mir-opt/building/uniform_array_move_out.move_out_from_end.built.after.mir b/tests/mir-opt/building/uniform_array_move_out.move_out_from_end.built.after.mir
index 5090a4ba6..3def40a85 100644
--- a/tests/mir-opt/building/uniform_array_move_out.move_out_from_end.built.after.mir
+++ b/tests/mir-opt/building/uniform_array_move_out.move_out_from_end.built.after.mir
@@ -1,23 +1,23 @@
// MIR for `move_out_from_end` after built
fn move_out_from_end() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/uniform_array_move_out.rs:+0:24: +0:24
- let _1: [std::boxed::Box<i32>; 2]; // in scope 0 at $DIR/uniform_array_move_out.rs:+1:9: +1:10
- let mut _2: std::boxed::Box<i32>; // in scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- let mut _3: usize; // in scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- let mut _4: usize; // in scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- let mut _5: *mut u8; // in scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- let mut _6: std::boxed::Box<i32>; // in scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- let mut _7: std::boxed::Box<i32>; // in scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- let mut _8: usize; // in scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- let mut _9: usize; // in scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- let mut _10: *mut u8; // in scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- let mut _11: std::boxed::Box<i32>; // in scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
+ let mut _0: ();
+ let _1: [std::boxed::Box<i32>; 2];
+ let mut _2: std::boxed::Box<i32>;
+ let mut _3: usize;
+ let mut _4: usize;
+ let mut _5: *mut u8;
+ let mut _6: std::boxed::Box<i32>;
+ let mut _7: std::boxed::Box<i32>;
+ let mut _8: usize;
+ let mut _9: usize;
+ let mut _10: *mut u8;
+ let mut _11: std::boxed::Box<i32>;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/uniform_array_move_out.rs:+1:9: +1:10
- let _12: std::boxed::Box<i32>; // in scope 1 at $DIR/uniform_array_move_out.rs:+7:14: +7:16
+ debug a => _1;
+ let _12: std::boxed::Box<i32>;
scope 4 {
- debug _y => _12; // in scope 4 at $DIR/uniform_array_move_out.rs:+7:14: +7:16
+ debug _y => _12;
}
}
scope 2 {
@@ -26,87 +26,81 @@ fn move_out_from_end() -> () {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/uniform_array_move_out.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- _3 = SizeOf(i32); // scope 2 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- _4 = AlignOf(i32); // scope 2 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- _5 = alloc::alloc::exchange_malloc(move _3, move _4) -> [return: bb1, unwind: bb12]; // scope 2 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- // mir::Constant
- // + span: $DIR/uniform_array_move_out.rs:7:9: 7:20
- // + literal: Const { ty: unsafe fn(usize, usize) -> *mut u8 {alloc::alloc::exchange_malloc}, val: Value(<ZST>) }
+ StorageLive(_1);
+ StorageLive(_2);
+ _3 = SizeOf(i32);
+ _4 = AlignOf(i32);
+ _5 = alloc::alloc::exchange_malloc(move _3, move _4) -> [return: bb1, unwind: bb12];
}
bb1: {
- StorageLive(_6); // scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- _6 = ShallowInitBox(move _5, i32); // scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- (*_6) = const 1_i32; // scope 0 at $DIR/uniform_array_move_out.rs:+3:18: +3:19
- _2 = move _6; // scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20
- drop(_6) -> [return: bb2, unwind: bb11]; // scope 0 at $DIR/uniform_array_move_out.rs:+3:19: +3:20
+ StorageLive(_6);
+ _6 = ShallowInitBox(move _5, i32);
+ (*_6) = const 1_i32;
+ _2 = move _6;
+ drop(_6) -> [return: bb2, unwind: bb11];
}
bb2: {
- StorageDead(_6); // scope 0 at $DIR/uniform_array_move_out.rs:+3:19: +3:20
- StorageLive(_7); // scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- _8 = SizeOf(i32); // scope 3 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- _9 = AlignOf(i32); // scope 3 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- _10 = alloc::alloc::exchange_malloc(move _8, move _9) -> [return: bb3, unwind: bb11]; // scope 3 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- // mir::Constant
- // + span: $DIR/uniform_array_move_out.rs:9:9: 9:20
- // + literal: Const { ty: unsafe fn(usize, usize) -> *mut u8 {alloc::alloc::exchange_malloc}, val: Value(<ZST>) }
+ StorageDead(_6);
+ StorageLive(_7);
+ _8 = SizeOf(i32);
+ _9 = AlignOf(i32);
+ _10 = alloc::alloc::exchange_malloc(move _8, move _9) -> [return: bb3, unwind: bb11];
}
bb3: {
- StorageLive(_11); // scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- _11 = ShallowInitBox(move _10, i32); // scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- (*_11) = const 2_i32; // scope 0 at $DIR/uniform_array_move_out.rs:+5:18: +5:19
- _7 = move _11; // scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20
- drop(_11) -> [return: bb4, unwind: bb10]; // scope 0 at $DIR/uniform_array_move_out.rs:+5:19: +5:20
+ StorageLive(_11);
+ _11 = ShallowInitBox(move _10, i32);
+ (*_11) = const 2_i32;
+ _7 = move _11;
+ drop(_11) -> [return: bb4, unwind: bb10];
}
bb4: {
- StorageDead(_11); // scope 0 at $DIR/uniform_array_move_out.rs:+5:19: +5:20
- _1 = [move _2, move _7]; // scope 0 at $DIR/uniform_array_move_out.rs:+1:13: +6:6
- drop(_7) -> [return: bb5, unwind: bb11]; // scope 0 at $DIR/uniform_array_move_out.rs:+6:5: +6:6
+ StorageDead(_11);
+ _1 = [move _2, move _7];
+ drop(_7) -> [return: bb5, unwind: bb11];
}
bb5: {
- StorageDead(_7); // scope 0 at $DIR/uniform_array_move_out.rs:+6:5: +6:6
- drop(_2) -> [return: bb6, unwind: bb12]; // scope 0 at $DIR/uniform_array_move_out.rs:+6:5: +6:6
+ StorageDead(_7);
+ drop(_2) -> [return: bb6, unwind: bb12];
}
bb6: {
- StorageDead(_2); // scope 0 at $DIR/uniform_array_move_out.rs:+6:5: +6:6
- FakeRead(ForLet(None), _1); // scope 0 at $DIR/uniform_array_move_out.rs:+1:9: +1:10
- PlaceMention(_1); // scope 1 at $DIR/uniform_array_move_out.rs:+7:20: +7:21
- StorageLive(_12); // scope 1 at $DIR/uniform_array_move_out.rs:+7:14: +7:16
- _12 = move _1[1 of 2]; // scope 1 at $DIR/uniform_array_move_out.rs:+7:14: +7:16
- _0 = const (); // scope 0 at $DIR/uniform_array_move_out.rs:+0:24: +8:2
- drop(_12) -> [return: bb7, unwind: bb9]; // scope 1 at $DIR/uniform_array_move_out.rs:+8:1: +8:2
+ StorageDead(_2);
+ FakeRead(ForLet(None), _1);
+ PlaceMention(_1);
+ StorageLive(_12);
+ _12 = move _1[1 of 2];
+ _0 = const ();
+ drop(_12) -> [return: bb7, unwind: bb9];
}
bb7: {
- StorageDead(_12); // scope 1 at $DIR/uniform_array_move_out.rs:+8:1: +8:2
- drop(_1) -> [return: bb8, unwind: bb12]; // scope 0 at $DIR/uniform_array_move_out.rs:+8:1: +8:2
+ StorageDead(_12);
+ drop(_1) -> [return: bb8, unwind: bb12];
}
bb8: {
- StorageDead(_1); // scope 0 at $DIR/uniform_array_move_out.rs:+8:1: +8:2
- return; // scope 0 at $DIR/uniform_array_move_out.rs:+8:2: +8:2
+ StorageDead(_1);
+ return;
}
bb9 (cleanup): {
- drop(_1) -> [return: bb12, unwind terminate]; // scope 0 at $DIR/uniform_array_move_out.rs:+8:1: +8:2
+ drop(_1) -> [return: bb12, unwind terminate];
}
bb10 (cleanup): {
- drop(_7) -> [return: bb11, unwind terminate]; // scope 0 at $DIR/uniform_array_move_out.rs:+6:5: +6:6
+ drop(_7) -> [return: bb11, unwind terminate];
}
bb11 (cleanup): {
- drop(_2) -> [return: bb12, unwind terminate]; // scope 0 at $DIR/uniform_array_move_out.rs:+6:5: +6:6
+ drop(_2) -> [return: bb12, unwind terminate];
}
bb12 (cleanup): {
- resume; // scope 0 at $DIR/uniform_array_move_out.rs:+0:1: +8:2
+ resume;
}
}
diff --git a/tests/mir-opt/byte_slice.main.SimplifyCfg-elaborate-drops.after.mir b/tests/mir-opt/byte_slice.main.SimplifyCfg-elaborate-drops.after.mir
index 73f5655a1..9b17b4b63 100644
--- a/tests/mir-opt/byte_slice.main.SimplifyCfg-elaborate-drops.after.mir
+++ b/tests/mir-opt/byte_slice.main.SimplifyCfg-elaborate-drops.after.mir
@@ -1,28 +1,25 @@
// MIR for `main` after SimplifyCfg-elaborate-drops
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/byte_slice.rs:+0:11: +0:11
- let _1: &[u8; 3]; // in scope 0 at $DIR/byte_slice.rs:+1:9: +1:10
+ let mut _0: ();
+ let _1: &[u8; 3];
scope 1 {
- debug x => _1; // in scope 1 at $DIR/byte_slice.rs:+1:9: +1:10
- let _2: [u8; 2]; // in scope 1 at $DIR/byte_slice.rs:+2:9: +2:10
+ debug x => _1;
+ let _2: [u8; 2];
scope 2 {
- debug y => _2; // in scope 2 at $DIR/byte_slice.rs:+2:9: +2:10
+ debug y => _2;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/byte_slice.rs:+1:9: +1:10
- _1 = const b"foo"; // scope 0 at $DIR/byte_slice.rs:+1:13: +1:19
- // mir::Constant
- // + span: $DIR/byte_slice.rs:5:13: 5:19
- // + literal: Const { ty: &[u8; 3], val: Value(Scalar(alloc1)) }
- StorageLive(_2); // scope 1 at $DIR/byte_slice.rs:+2:9: +2:10
- _2 = [const 5_u8, const 120_u8]; // scope 1 at $DIR/byte_slice.rs:+2:13: +2:24
- _0 = const (); // scope 0 at $DIR/byte_slice.rs:+0:11: +3:2
- StorageDead(_2); // scope 1 at $DIR/byte_slice.rs:+3:1: +3:2
- StorageDead(_1); // scope 0 at $DIR/byte_slice.rs:+3:1: +3:2
- return; // scope 0 at $DIR/byte_slice.rs:+3:2: +3:2
+ StorageLive(_1);
+ _1 = const b"foo";
+ StorageLive(_2);
+ _2 = [const 5_u8, const 120_u8];
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/casts.redundant.InstSimplify.diff b/tests/mir-opt/casts.redundant.InstSimplify.diff
index a641b69de..ff6d11c45 100644
--- a/tests/mir-opt/casts.redundant.InstSimplify.diff
+++ b/tests/mir-opt/casts.redundant.InstSimplify.diff
@@ -2,24 +2,24 @@
+ // MIR for `redundant` after InstSimplify
fn redundant(_1: *const &u8) -> *const &u8 {
- debug x => _1; // in scope 0 at $DIR/casts.rs:+0:30: +0:31
- let mut _0: *const &u8; // return place in scope 0 at $DIR/casts.rs:+0:51: +0:64
- let mut _2: *const &u8; // in scope 0 at $DIR/casts.rs:+1:5: +1:55
- let mut _3: *const &u8; // in scope 0 at $DIR/casts.rs:+1:36: +1:37
- scope 1 (inlined generic_cast::<&u8, &u8>) { // at $DIR/casts.rs:6:5: 6:38
- debug x => _3; // in scope 1 at $DIR/casts.rs:10:23: 10:24
+ debug x => _1;
+ let mut _0: *const &u8;
+ let mut _2: *const &u8;
+ let mut _3: *const &u8;
+ scope 1 (inlined generic_cast::<&u8, &u8>) {
+ debug x => _3;
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/casts.rs:+1:5: +1:55
- StorageLive(_3); // scope 0 at $DIR/casts.rs:+1:36: +1:37
- _3 = _1; // scope 0 at $DIR/casts.rs:+1:36: +1:37
-- _2 = _3 as *const &u8 (PtrToPtr); // scope 1 at $DIR/casts.rs:11:5: 11:18
-+ _2 = _3; // scope 1 at $DIR/casts.rs:11:5: 11:18
- StorageDead(_3); // scope 0 at $DIR/casts.rs:+1:37: +1:38
- _0 = _2; // scope 0 at $DIR/casts.rs:+1:5: +1:55
- StorageDead(_2); // scope 0 at $DIR/casts.rs:+2:1: +2:2
- return; // scope 0 at $DIR/casts.rs:+2:2: +2:2
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = _3 as *const &u8 (PtrToPtr);
++ _2 = _3;
+ StorageDead(_3);
+ _0 = _2;
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/casts.redundant.PreCodegen.after.mir b/tests/mir-opt/casts.redundant.PreCodegen.after.mir
index 21a470ea3..2084f44f2 100644
--- a/tests/mir-opt/casts.redundant.PreCodegen.after.mir
+++ b/tests/mir-opt/casts.redundant.PreCodegen.after.mir
@@ -1,14 +1,14 @@
// MIR for `redundant` after PreCodegen
fn redundant(_1: *const &u8) -> *const &u8 {
- debug x => _1; // in scope 0 at $DIR/casts.rs:+0:30: +0:31
- let mut _0: *const &u8; // return place in scope 0 at $DIR/casts.rs:+0:51: +0:64
- scope 1 (inlined generic_cast::<&u8, &u8>) { // at $DIR/casts.rs:6:5: 6:38
- debug x => _1; // in scope 1 at $DIR/casts.rs:10:23: 10:24
+ debug x => _1;
+ let mut _0: *const &u8;
+ scope 1 (inlined generic_cast::<&u8, &u8>) {
+ debug x => _1;
}
bb0: {
- _0 = _1; // scope 0 at $DIR/casts.rs:+1:5: +1:55
- return; // scope 0 at $DIR/casts.rs:+2:2: +2:2
+ _0 = _1;
+ return;
}
}
diff --git a/tests/mir-opt/casts.roundtrip.PreCodegen.after.mir b/tests/mir-opt/casts.roundtrip.PreCodegen.after.mir
index 0c793984c..f0c35fe97 100644
--- a/tests/mir-opt/casts.roundtrip.PreCodegen.after.mir
+++ b/tests/mir-opt/casts.roundtrip.PreCodegen.after.mir
@@ -1,15 +1,15 @@
// MIR for `roundtrip` after PreCodegen
fn roundtrip(_1: *const u8) -> *const u8 {
- debug x => _1; // in scope 0 at $DIR/casts.rs:+0:18: +0:19
- let mut _0: *const u8; // return place in scope 0 at $DIR/casts.rs:+0:35: +0:44
- let mut _2: *mut u8; // in scope 0 at $DIR/casts.rs:+1:5: +1:17
+ debug x => _1;
+ let mut _0: *const u8;
+ let mut _2: *mut u8;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/casts.rs:+1:5: +1:17
- _2 = _1 as *mut u8 (PtrToPtr); // scope 0 at $DIR/casts.rs:+1:5: +1:17
- _0 = move _2 as *const u8 (Pointer(MutToConstPointer)); // scope 0 at $DIR/casts.rs:+1:5: +1:17
- StorageDead(_2); // scope 0 at $DIR/casts.rs:+1:16: +1:17
- return; // scope 0 at $DIR/casts.rs:+2:2: +2:2
+ StorageLive(_2);
+ _2 = _1 as *mut u8 (PtrToPtr);
+ _0 = move _2 as *const u8 (PointerCoercion(MutToConstPointer));
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/combine_array_len.norm2.InstSimplify.diff b/tests/mir-opt/combine_array_len.norm2.InstSimplify.diff
deleted file mode 100644
index 0777007ce..000000000
--- a/tests/mir-opt/combine_array_len.norm2.InstSimplify.diff
+++ /dev/null
@@ -1,77 +0,0 @@
-- // MIR for `norm2` before InstSimplify
-+ // MIR for `norm2` after InstSimplify
-
- fn norm2(_1: [f32; 2]) -> f32 {
- debug x => _1; // in scope 0 at $DIR/combine_array_len.rs:+0:10: +0:11
- let mut _0: f32; // return place in scope 0 at $DIR/combine_array_len.rs:+0:26: +0:29
- let _2: f32; // in scope 0 at $DIR/combine_array_len.rs:+1:9: +1:10
- let _3: usize; // in scope 0 at $DIR/combine_array_len.rs:+1:15: +1:16
- let mut _4: usize; // in scope 0 at $DIR/combine_array_len.rs:+1:13: +1:17
- let mut _5: bool; // in scope 0 at $DIR/combine_array_len.rs:+1:13: +1:17
- let _7: usize; // in scope 0 at $DIR/combine_array_len.rs:+2:15: +2:16
- let mut _8: usize; // in scope 0 at $DIR/combine_array_len.rs:+2:13: +2:17
- let mut _9: bool; // in scope 0 at $DIR/combine_array_len.rs:+2:13: +2:17
- let mut _10: f32; // in scope 0 at $DIR/combine_array_len.rs:+3:5: +3:8
- let mut _11: f32; // in scope 0 at $DIR/combine_array_len.rs:+3:5: +3:6
- let mut _12: f32; // in scope 0 at $DIR/combine_array_len.rs:+3:7: +3:8
- let mut _13: f32; // in scope 0 at $DIR/combine_array_len.rs:+3:11: +3:14
- let mut _14: f32; // in scope 0 at $DIR/combine_array_len.rs:+3:11: +3:12
- let mut _15: f32; // in scope 0 at $DIR/combine_array_len.rs:+3:13: +3:14
- scope 1 {
- debug a => _2; // in scope 1 at $DIR/combine_array_len.rs:+1:9: +1:10
- let _6: f32; // in scope 1 at $DIR/combine_array_len.rs:+2:9: +2:10
- scope 2 {
- debug b => _6; // in scope 2 at $DIR/combine_array_len.rs:+2:9: +2:10
- }
- }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/combine_array_len.rs:+1:9: +1:10
- StorageLive(_3); // scope 0 at $DIR/combine_array_len.rs:+1:15: +1:16
- _3 = const 0_usize; // scope 0 at $DIR/combine_array_len.rs:+1:15: +1:16
-- _4 = Len(_1); // scope 0 at $DIR/combine_array_len.rs:+1:13: +1:17
-+ _4 = const 2_usize; // scope 0 at $DIR/combine_array_len.rs:+1:13: +1:17
- _5 = Lt(_3, _4); // scope 0 at $DIR/combine_array_len.rs:+1:13: +1:17
- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> bb1; // scope 0 at $DIR/combine_array_len.rs:+1:13: +1:17
- }
-
- bb1: {
- _2 = _1[_3]; // scope 0 at $DIR/combine_array_len.rs:+1:13: +1:17
- StorageDead(_3); // scope 0 at $DIR/combine_array_len.rs:+1:17: +1:18
- StorageLive(_6); // scope 1 at $DIR/combine_array_len.rs:+2:9: +2:10
- StorageLive(_7); // scope 1 at $DIR/combine_array_len.rs:+2:15: +2:16
- _7 = const 1_usize; // scope 1 at $DIR/combine_array_len.rs:+2:15: +2:16
-- _8 = Len(_1); // scope 1 at $DIR/combine_array_len.rs:+2:13: +2:17
-+ _8 = const 2_usize; // scope 1 at $DIR/combine_array_len.rs:+2:13: +2:17
- _9 = Lt(_7, _8); // scope 1 at $DIR/combine_array_len.rs:+2:13: +2:17
- assert(move _9, "index out of bounds: the length is {} but the index is {}", move _8, _7) -> bb2; // scope 1 at $DIR/combine_array_len.rs:+2:13: +2:17
- }
-
- bb2: {
- _6 = _1[_7]; // scope 1 at $DIR/combine_array_len.rs:+2:13: +2:17
- StorageDead(_7); // scope 1 at $DIR/combine_array_len.rs:+2:17: +2:18
- StorageLive(_10); // scope 2 at $DIR/combine_array_len.rs:+3:5: +3:8
- StorageLive(_11); // scope 2 at $DIR/combine_array_len.rs:+3:5: +3:6
- _11 = _2; // scope 2 at $DIR/combine_array_len.rs:+3:5: +3:6
- StorageLive(_12); // scope 2 at $DIR/combine_array_len.rs:+3:7: +3:8
- _12 = _2; // scope 2 at $DIR/combine_array_len.rs:+3:7: +3:8
- _10 = Mul(move _11, move _12); // scope 2 at $DIR/combine_array_len.rs:+3:5: +3:8
- StorageDead(_12); // scope 2 at $DIR/combine_array_len.rs:+3:7: +3:8
- StorageDead(_11); // scope 2 at $DIR/combine_array_len.rs:+3:7: +3:8
- StorageLive(_13); // scope 2 at $DIR/combine_array_len.rs:+3:11: +3:14
- StorageLive(_14); // scope 2 at $DIR/combine_array_len.rs:+3:11: +3:12
- _14 = _6; // scope 2 at $DIR/combine_array_len.rs:+3:11: +3:12
- StorageLive(_15); // scope 2 at $DIR/combine_array_len.rs:+3:13: +3:14
- _15 = _6; // scope 2 at $DIR/combine_array_len.rs:+3:13: +3:14
- _13 = Mul(move _14, move _15); // scope 2 at $DIR/combine_array_len.rs:+3:11: +3:14
- StorageDead(_15); // scope 2 at $DIR/combine_array_len.rs:+3:13: +3:14
- StorageDead(_14); // scope 2 at $DIR/combine_array_len.rs:+3:13: +3:14
- _0 = Add(move _10, move _13); // scope 2 at $DIR/combine_array_len.rs:+3:5: +3:14
- StorageDead(_13); // scope 2 at $DIR/combine_array_len.rs:+3:13: +3:14
- StorageDead(_10); // scope 2 at $DIR/combine_array_len.rs:+3:13: +3:14
- StorageDead(_6); // scope 1 at $DIR/combine_array_len.rs:+4:1: +4:2
- StorageDead(_2); // scope 0 at $DIR/combine_array_len.rs:+4:1: +4:2
- return; // scope 0 at $DIR/combine_array_len.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/combine_array_len.norm2.InstSimplify.panic-abort.diff b/tests/mir-opt/combine_array_len.norm2.InstSimplify.panic-abort.diff
new file mode 100644
index 000000000..3e7d0ce51
--- /dev/null
+++ b/tests/mir-opt/combine_array_len.norm2.InstSimplify.panic-abort.diff
@@ -0,0 +1,77 @@
+- // MIR for `norm2` before InstSimplify
++ // MIR for `norm2` after InstSimplify
+
+ fn norm2(_1: [f32; 2]) -> f32 {
+ debug x => _1;
+ let mut _0: f32;
+ let _2: f32;
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
+ let _7: usize;
+ let mut _8: usize;
+ let mut _9: bool;
+ let mut _10: f32;
+ let mut _11: f32;
+ let mut _12: f32;
+ let mut _13: f32;
+ let mut _14: f32;
+ let mut _15: f32;
+ scope 1 {
+ debug a => _2;
+ let _6: f32;
+ scope 2 {
+ debug b => _6;
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = const 0_usize;
+- _4 = Len(_1);
++ _4 = const 2_usize;
+ _5 = Lt(_3, _4);
+ assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _2 = _1[_3];
+ StorageDead(_3);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = const 1_usize;
+- _8 = Len(_1);
++ _8 = const 2_usize;
+ _9 = Lt(_7, _8);
+ assert(move _9, "index out of bounds: the length is {} but the index is {}", move _8, _7) -> [success: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ _6 = _1[_7];
+ StorageDead(_7);
+ StorageLive(_10);
+ StorageLive(_11);
+ _11 = _2;
+ StorageLive(_12);
+ _12 = _2;
+ _10 = Mul(move _11, move _12);
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageLive(_13);
+ StorageLive(_14);
+ _14 = _6;
+ StorageLive(_15);
+ _15 = _6;
+ _13 = Mul(move _14, move _15);
+ StorageDead(_15);
+ StorageDead(_14);
+ _0 = Add(move _10, move _13);
+ StorageDead(_13);
+ StorageDead(_10);
+ StorageDead(_6);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/combine_array_len.norm2.InstSimplify.panic-unwind.diff b/tests/mir-opt/combine_array_len.norm2.InstSimplify.panic-unwind.diff
new file mode 100644
index 000000000..4833c1089
--- /dev/null
+++ b/tests/mir-opt/combine_array_len.norm2.InstSimplify.panic-unwind.diff
@@ -0,0 +1,77 @@
+- // MIR for `norm2` before InstSimplify
++ // MIR for `norm2` after InstSimplify
+
+ fn norm2(_1: [f32; 2]) -> f32 {
+ debug x => _1;
+ let mut _0: f32;
+ let _2: f32;
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
+ let _7: usize;
+ let mut _8: usize;
+ let mut _9: bool;
+ let mut _10: f32;
+ let mut _11: f32;
+ let mut _12: f32;
+ let mut _13: f32;
+ let mut _14: f32;
+ let mut _15: f32;
+ scope 1 {
+ debug a => _2;
+ let _6: f32;
+ scope 2 {
+ debug b => _6;
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = const 0_usize;
+- _4 = Len(_1);
++ _4 = const 2_usize;
+ _5 = Lt(_3, _4);
+ assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+ _2 = _1[_3];
+ StorageDead(_3);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = const 1_usize;
+- _8 = Len(_1);
++ _8 = const 2_usize;
+ _9 = Lt(_7, _8);
+ assert(move _9, "index out of bounds: the length is {} but the index is {}", move _8, _7) -> [success: bb2, unwind continue];
+ }
+
+ bb2: {
+ _6 = _1[_7];
+ StorageDead(_7);
+ StorageLive(_10);
+ StorageLive(_11);
+ _11 = _2;
+ StorageLive(_12);
+ _12 = _2;
+ _10 = Mul(move _11, move _12);
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageLive(_13);
+ StorageLive(_14);
+ _14 = _6;
+ StorageLive(_15);
+ _15 = _6;
+ _13 = Mul(move _14, move _15);
+ StorageDead(_15);
+ StorageDead(_14);
+ _0 = Add(move _10, move _13);
+ StorageDead(_13);
+ StorageDead(_10);
+ StorageDead(_6);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/combine_array_len.rs b/tests/mir-opt/combine_array_len.rs
index 970cafafc..e971ab478 100644
--- a/tests/mir-opt/combine_array_len.rs
+++ b/tests/mir-opt/combine_array_len.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: InstSimplify
// EMIT_MIR combine_array_len.norm2.InstSimplify.diff
diff --git a/tests/mir-opt/combine_clone_of_primitives.rs b/tests/mir-opt/combine_clone_of_primitives.rs
index 1deee9dd6..c19f9ee10 100644
--- a/tests/mir-opt/combine_clone_of_primitives.rs
+++ b/tests/mir-opt/combine_clone_of_primitives.rs
@@ -1,5 +1,5 @@
// unit-test: InstSimplify
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// EMIT_MIR combine_clone_of_primitives.{impl#0}-clone.InstSimplify.diff
diff --git a/tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.diff b/tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.diff
deleted file mode 100644
index bb0811a7a..000000000
--- a/tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.diff
+++ /dev/null
@@ -1,82 +0,0 @@
-- // MIR for `<impl at $DIR/combine_clone_of_primitives.rs:6:10: 6:15>::clone` before InstSimplify
-+ // MIR for `<impl at $DIR/combine_clone_of_primitives.rs:6:10: 6:15>::clone` after InstSimplify
-
- fn <impl at $DIR/combine_clone_of_primitives.rs:6:10: 6:15>::clone(_1: &MyThing<T>) -> MyThing<T> {
- debug self => _1; // in scope 0 at $DIR/combine_clone_of_primitives.rs:+0:10: +0:15
- let mut _0: MyThing<T>; // return place in scope 0 at $DIR/combine_clone_of_primitives.rs:+0:10: +0:15
- let mut _2: T; // in scope 0 at $DIR/combine_clone_of_primitives.rs:8:5: 8:9
- let mut _3: &T; // in scope 0 at $DIR/combine_clone_of_primitives.rs:8:5: 8:9
- let _4: &T; // in scope 0 at $DIR/combine_clone_of_primitives.rs:8:5: 8:9
- let mut _5: u64; // in scope 0 at $DIR/combine_clone_of_primitives.rs:9:5: 9:11
- let mut _6: &u64; // in scope 0 at $DIR/combine_clone_of_primitives.rs:9:5: 9:11
- let _7: &u64; // in scope 0 at $DIR/combine_clone_of_primitives.rs:9:5: 9:11
- let mut _8: [f32; 3]; // in scope 0 at $DIR/combine_clone_of_primitives.rs:10:5: 10:16
- let mut _9: &[f32; 3]; // in scope 0 at $DIR/combine_clone_of_primitives.rs:10:5: 10:16
- let _10: &[f32; 3]; // in scope 0 at $DIR/combine_clone_of_primitives.rs:10:5: 10:16
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/combine_clone_of_primitives.rs:8:5: 8:9
- StorageLive(_3); // scope 0 at $DIR/combine_clone_of_primitives.rs:8:5: 8:9
- StorageLive(_4); // scope 0 at $DIR/combine_clone_of_primitives.rs:8:5: 8:9
- _4 = &((*_1).0: T); // scope 0 at $DIR/combine_clone_of_primitives.rs:8:5: 8:9
-- _3 = &(*_4); // scope 0 at $DIR/combine_clone_of_primitives.rs:8:5: 8:9
-+ _3 = _4; // scope 0 at $DIR/combine_clone_of_primitives.rs:8:5: 8:9
- _2 = <T as Clone>::clone(move _3) -> bb1; // scope 0 at $DIR/combine_clone_of_primitives.rs:8:5: 8:9
- // mir::Constant
- // + span: $DIR/combine_clone_of_primitives.rs:8:5: 8:9
- // + literal: Const { ty: for<'a> fn(&'a T) -> T {<T as Clone>::clone}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_3); // scope 0 at $DIR/combine_clone_of_primitives.rs:8:8: 8:9
- StorageLive(_5); // scope 0 at $DIR/combine_clone_of_primitives.rs:9:5: 9:11
- StorageLive(_6); // scope 0 at $DIR/combine_clone_of_primitives.rs:9:5: 9:11
- StorageLive(_7); // scope 0 at $DIR/combine_clone_of_primitives.rs:9:5: 9:11
- _7 = &((*_1).1: u64); // scope 0 at $DIR/combine_clone_of_primitives.rs:9:5: 9:11
-- _6 = &(*_7); // scope 0 at $DIR/combine_clone_of_primitives.rs:9:5: 9:11
-- _5 = <u64 as Clone>::clone(move _6) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/combine_clone_of_primitives.rs:9:5: 9:11
-- // mir::Constant
-- // + span: $DIR/combine_clone_of_primitives.rs:9:5: 9:11
-- // + literal: Const { ty: for<'a> fn(&'a u64) -> u64 {<u64 as Clone>::clone}, val: Value(<ZST>) }
-+ _6 = _7; // scope 0 at $DIR/combine_clone_of_primitives.rs:9:5: 9:11
-+ _5 = (*_6); // scope 0 at $DIR/combine_clone_of_primitives.rs:9:5: 9:11
-+ goto -> bb2; // scope 0 at $DIR/combine_clone_of_primitives.rs:9:5: 9:11
- }
-
- bb2: {
- StorageDead(_6); // scope 0 at $DIR/combine_clone_of_primitives.rs:9:10: 9:11
- StorageLive(_8); // scope 0 at $DIR/combine_clone_of_primitives.rs:10:5: 10:16
- StorageLive(_9); // scope 0 at $DIR/combine_clone_of_primitives.rs:10:5: 10:16
- StorageLive(_10); // scope 0 at $DIR/combine_clone_of_primitives.rs:10:5: 10:16
- _10 = &((*_1).2: [f32; 3]); // scope 0 at $DIR/combine_clone_of_primitives.rs:10:5: 10:16
-- _9 = &(*_10); // scope 0 at $DIR/combine_clone_of_primitives.rs:10:5: 10:16
-- _8 = <[f32; 3] as Clone>::clone(move _9) -> [return: bb3, unwind: bb4]; // scope 0 at $DIR/combine_clone_of_primitives.rs:10:5: 10:16
-- // mir::Constant
-- // + span: $DIR/combine_clone_of_primitives.rs:10:5: 10:16
-- // + literal: Const { ty: for<'a> fn(&'a [f32; 3]) -> [f32; 3] {<[f32; 3] as Clone>::clone}, val: Value(<ZST>) }
-+ _9 = _10; // scope 0 at $DIR/combine_clone_of_primitives.rs:10:5: 10:16
-+ _8 = (*_9); // scope 0 at $DIR/combine_clone_of_primitives.rs:10:5: 10:16
-+ goto -> bb3; // scope 0 at $DIR/combine_clone_of_primitives.rs:10:5: 10:16
- }
-
- bb3: {
- StorageDead(_9); // scope 0 at $DIR/combine_clone_of_primitives.rs:10:15: 10:16
- _0 = MyThing::<T> { v: move _2, i: move _5, a: move _8 }; // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:10: +0:15
- StorageDead(_8); // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:14: +0:15
- StorageDead(_5); // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:14: +0:15
- StorageDead(_2); // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:14: +0:15
- StorageDead(_10); // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:14: +0:15
- StorageDead(_7); // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:14: +0:15
- StorageDead(_4); // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:14: +0:15
- return; // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:15: +0:15
- }
-
- bb4 (cleanup): {
- drop(_2) -> [return: bb5, unwind terminate]; // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:14: +0:15
- }
-
- bb5 (cleanup): {
- resume; // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:10: +0:15
- }
- }
-
diff --git a/tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.panic-abort.diff b/tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.panic-abort.diff
new file mode 100644
index 000000000..124c2dc7e
--- /dev/null
+++ b/tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.panic-abort.diff
@@ -0,0 +1,65 @@
+- // MIR for `<impl at $DIR/combine_clone_of_primitives.rs:6:10: 6:15>::clone` before InstSimplify
++ // MIR for `<impl at $DIR/combine_clone_of_primitives.rs:6:10: 6:15>::clone` after InstSimplify
+
+ fn <impl at $DIR/combine_clone_of_primitives.rs:6:10: 6:15>::clone(_1: &MyThing<T>) -> MyThing<T> {
+ debug self => _1;
+ let mut _0: MyThing<T>;
+ let mut _2: T;
+ let mut _3: &T;
+ let _4: &T;
+ let mut _5: u64;
+ let mut _6: &u64;
+ let _7: &u64;
+ let mut _8: [f32; 3];
+ let mut _9: &[f32; 3];
+ let _10: &[f32; 3];
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &((*_1).0: T);
+- _3 = &(*_4);
++ _3 = _4;
+ _2 = <T as Clone>::clone(move _3) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &((*_1).1: u64);
+- _6 = &(*_7);
+- _5 = <u64 as Clone>::clone(move _6) -> [return: bb2, unwind unreachable];
++ _6 = _7;
++ _5 = (*_6);
++ goto -> bb2;
+ }
+
+ bb2: {
+ StorageDead(_6);
+ StorageLive(_8);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = &((*_1).2: [f32; 3]);
+- _9 = &(*_10);
+- _8 = <[f32; 3] as Clone>::clone(move _9) -> [return: bb3, unwind unreachable];
++ _9 = _10;
++ _8 = (*_9);
++ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_9);
+ _0 = MyThing::<T> { v: move _2, i: move _5, a: move _8 };
+ StorageDead(_8);
+ StorageDead(_5);
+ StorageDead(_2);
+ StorageDead(_10);
+ StorageDead(_7);
+ StorageDead(_4);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.panic-unwind.diff b/tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.panic-unwind.diff
new file mode 100644
index 000000000..1a4372afe
--- /dev/null
+++ b/tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.panic-unwind.diff
@@ -0,0 +1,73 @@
+- // MIR for `<impl at $DIR/combine_clone_of_primitives.rs:6:10: 6:15>::clone` before InstSimplify
++ // MIR for `<impl at $DIR/combine_clone_of_primitives.rs:6:10: 6:15>::clone` after InstSimplify
+
+ fn <impl at $DIR/combine_clone_of_primitives.rs:6:10: 6:15>::clone(_1: &MyThing<T>) -> MyThing<T> {
+ debug self => _1;
+ let mut _0: MyThing<T>;
+ let mut _2: T;
+ let mut _3: &T;
+ let _4: &T;
+ let mut _5: u64;
+ let mut _6: &u64;
+ let _7: &u64;
+ let mut _8: [f32; 3];
+ let mut _9: &[f32; 3];
+ let _10: &[f32; 3];
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &((*_1).0: T);
+- _3 = &(*_4);
++ _3 = _4;
+ _2 = <T as Clone>::clone(move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &((*_1).1: u64);
+- _6 = &(*_7);
+- _5 = <u64 as Clone>::clone(move _6) -> [return: bb2, unwind: bb4];
++ _6 = _7;
++ _5 = (*_6);
++ goto -> bb2;
+ }
+
+ bb2: {
+ StorageDead(_6);
+ StorageLive(_8);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = &((*_1).2: [f32; 3]);
+- _9 = &(*_10);
+- _8 = <[f32; 3] as Clone>::clone(move _9) -> [return: bb3, unwind: bb4];
++ _9 = _10;
++ _8 = (*_9);
++ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_9);
+ _0 = MyThing::<T> { v: move _2, i: move _5, a: move _8 };
+ StorageDead(_8);
+ StorageDead(_5);
+ StorageDead(_2);
+ StorageDead(_10);
+ StorageDead(_7);
+ StorageDead(_4);
+ return;
+ }
+
+ bb4 (cleanup): {
+ drop(_2) -> [return: bb5, unwind terminate];
+ }
+
+ bb5 (cleanup): {
+ resume;
+ }
+ }
+
diff --git a/tests/mir-opt/combine_transmutes.adt_transmutes.InstSimplify.diff b/tests/mir-opt/combine_transmutes.adt_transmutes.InstSimplify.diff
index 15117ea89..cb623e83f 100644
--- a/tests/mir-opt/combine_transmutes.adt_transmutes.InstSimplify.diff
+++ b/tests/mir-opt/combine_transmutes.adt_transmutes.InstSimplify.diff
@@ -2,31 +2,31 @@
+ // MIR for `adt_transmutes` after InstSimplify
fn adt_transmutes() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/combine_transmutes.rs:+0:32: +0:32
- let _1: u8; // in scope 0 at $DIR/combine_transmutes.rs:+1:9: +1:11
- let mut _2: std::option::Option<std::num::NonZeroU8>; // in scope 0 at $DIR/combine_transmutes.rs:+1:28: +1:58
- let mut _4: std::num::Wrapping<i16>; // in scope 0 at $DIR/combine_transmutes.rs:+2:29: +2:54
- let mut _6: std::num::Wrapping<i16>; // in scope 0 at $DIR/combine_transmutes.rs:+3:29: +3:54
- let mut _8: Union32; // in scope 0 at $DIR/combine_transmutes.rs:+4:29: +4:47
- let mut _10: Union32; // in scope 0 at $DIR/combine_transmutes.rs:+5:29: +5:47
- let mut _12: std::mem::MaybeUninit<std::string::String>; // in scope 0 at $DIR/combine_transmutes.rs:+6:46: +6:77
+ let mut _0: ();
+ let _1: u8;
+ let mut _2: std::option::Option<std::num::NonZeroU8>;
+ let mut _4: std::num::Wrapping<i16>;
+ let mut _6: std::num::Wrapping<i16>;
+ let mut _8: Union32;
+ let mut _10: Union32;
+ let mut _12: std::mem::MaybeUninit<std::string::String>;
scope 1 {
- debug _a => _1; // in scope 1 at $DIR/combine_transmutes.rs:+1:9: +1:11
- let _3: i16; // in scope 1 at $DIR/combine_transmutes.rs:+2:9: +2:11
+ debug _a => _1;
+ let _3: i16;
scope 2 {
- debug _a => _3; // in scope 2 at $DIR/combine_transmutes.rs:+2:9: +2:11
- let _5: u16; // in scope 2 at $DIR/combine_transmutes.rs:+3:9: +3:11
+ debug _a => _3;
+ let _5: u16;
scope 3 {
- debug _a => _5; // in scope 3 at $DIR/combine_transmutes.rs:+3:9: +3:11
- let _7: u32; // in scope 3 at $DIR/combine_transmutes.rs:+4:9: +4:11
+ debug _a => _5;
+ let _7: u32;
scope 4 {
- debug _a => _7; // in scope 4 at $DIR/combine_transmutes.rs:+4:9: +4:11
- let _9: i32; // in scope 4 at $DIR/combine_transmutes.rs:+5:9: +5:11
+ debug _a => _7;
+ let _9: i32;
scope 5 {
- debug _a => _9; // in scope 5 at $DIR/combine_transmutes.rs:+5:9: +5:11
- let _11: std::mem::ManuallyDrop<std::string::String>; // in scope 5 at $DIR/combine_transmutes.rs:+6:9: +6:11
+ debug _a => _9;
+ let _11: std::mem::ManuallyDrop<std::string::String>;
scope 6 {
- debug _a => _11; // in scope 6 at $DIR/combine_transmutes.rs:+6:9: +6:11
+ debug _a => _11;
}
}
}
@@ -35,56 +35,49 @@
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/combine_transmutes.rs:+1:9: +1:11
- StorageLive(_2); // scope 0 at $DIR/combine_transmutes.rs:+1:28: +1:58
- _2 = Option::<NonZeroU8>::Some(const _); // scope 0 at $DIR/combine_transmutes.rs:+1:28: +1:58
- // mir::Constant
- // + span: $DIR/combine_transmutes.rs:35:33: 35:57
- // + literal: Const { ty: NonZeroU8, val: Unevaluated(NonZeroU8::MAX, [], None) }
- _1 = move _2 as u8 (Transmute); // scope 0 at $DIR/combine_transmutes.rs:+1:18: +1:59
- StorageDead(_2); // scope 0 at $DIR/combine_transmutes.rs:+1:58: +1:59
- StorageLive(_3); // scope 1 at $DIR/combine_transmutes.rs:+2:9: +2:11
- StorageLive(_4); // scope 1 at $DIR/combine_transmutes.rs:+2:29: +2:54
- _4 = Wrapping::<i16>(const 0_i16); // scope 1 at $DIR/combine_transmutes.rs:+2:29: +2:54
-- _3 = move _4 as i16 (Transmute); // scope 1 at $DIR/combine_transmutes.rs:+2:19: +2:55
-+ _3 = move (_4.0: i16); // scope 1 at $DIR/combine_transmutes.rs:+2:19: +2:55
- StorageDead(_4); // scope 1 at $DIR/combine_transmutes.rs:+2:54: +2:55
- StorageLive(_5); // scope 2 at $DIR/combine_transmutes.rs:+3:9: +3:11
- StorageLive(_6); // scope 2 at $DIR/combine_transmutes.rs:+3:29: +3:54
- _6 = Wrapping::<i16>(const 0_i16); // scope 2 at $DIR/combine_transmutes.rs:+3:29: +3:54
- _5 = move _6 as u16 (Transmute); // scope 2 at $DIR/combine_transmutes.rs:+3:19: +3:55
- StorageDead(_6); // scope 2 at $DIR/combine_transmutes.rs:+3:54: +3:55
- StorageLive(_7); // scope 3 at $DIR/combine_transmutes.rs:+4:9: +4:11
- StorageLive(_8); // scope 3 at $DIR/combine_transmutes.rs:+4:29: +4:47
- _8 = Union32 { u32: const 0_i32 }; // scope 3 at $DIR/combine_transmutes.rs:+4:29: +4:47
- _7 = move _8 as u32 (Transmute); // scope 3 at $DIR/combine_transmutes.rs:+4:19: +4:48
- StorageDead(_8); // scope 3 at $DIR/combine_transmutes.rs:+4:47: +4:48
- StorageLive(_9); // scope 4 at $DIR/combine_transmutes.rs:+5:9: +5:11
- StorageLive(_10); // scope 4 at $DIR/combine_transmutes.rs:+5:29: +5:47
- _10 = Union32 { u32: const 0_u32 }; // scope 4 at $DIR/combine_transmutes.rs:+5:29: +5:47
- _9 = move _10 as i32 (Transmute); // scope 4 at $DIR/combine_transmutes.rs:+5:19: +5:48
- StorageDead(_10); // scope 4 at $DIR/combine_transmutes.rs:+5:47: +5:48
- StorageLive(_11); // scope 5 at $DIR/combine_transmutes.rs:+6:9: +6:11
- StorageLive(_12); // scope 5 at $DIR/combine_transmutes.rs:+6:46: +6:77
- _12 = MaybeUninit::<String>::uninit() -> [return: bb1, unwind unreachable]; // scope 5 at $DIR/combine_transmutes.rs:+6:46: +6:77
- // mir::Constant
- // + span: $DIR/combine_transmutes.rs:40:46: 40:75
- // + user_ty: UserType(11)
- // + literal: Const { ty: fn() -> MaybeUninit<String> {MaybeUninit::<String>::uninit}, val: Value(<ZST>) }
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = Option::<NonZeroU8>::Some(const _);
+ _1 = move _2 as u8 (Transmute);
+ StorageDead(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = Wrapping::<i16>(const 0_i16);
+- _3 = move _4 as i16 (Transmute);
++ _3 = move (_4.0: i16);
+ StorageDead(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = Wrapping::<i16>(const 0_i16);
+ _5 = move _6 as u16 (Transmute);
+ StorageDead(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = Union32 { u32: const 0_i32 };
+ _7 = move _8 as u32 (Transmute);
+ StorageDead(_8);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = Union32 { u32: const 0_u32 };
+ _9 = move _10 as i32 (Transmute);
+ StorageDead(_10);
+ StorageLive(_11);
+ StorageLive(_12);
+ _12 = MaybeUninit::<String>::uninit() -> [return: bb1, unwind unreachable];
}
bb1: {
-- _11 = move _12 as std::mem::ManuallyDrop<std::string::String> (Transmute); // scope 5 at $DIR/combine_transmutes.rs:+6:36: +6:78
-+ _11 = move (_12.1: std::mem::ManuallyDrop<std::string::String>); // scope 5 at $DIR/combine_transmutes.rs:+6:36: +6:78
- StorageDead(_12); // scope 5 at $DIR/combine_transmutes.rs:+6:77: +6:78
- _0 = const (); // scope 0 at $DIR/combine_transmutes.rs:+0:32: +7:2
- StorageDead(_11); // scope 5 at $DIR/combine_transmutes.rs:+7:1: +7:2
- StorageDead(_9); // scope 4 at $DIR/combine_transmutes.rs:+7:1: +7:2
- StorageDead(_7); // scope 3 at $DIR/combine_transmutes.rs:+7:1: +7:2
- StorageDead(_5); // scope 2 at $DIR/combine_transmutes.rs:+7:1: +7:2
- StorageDead(_3); // scope 1 at $DIR/combine_transmutes.rs:+7:1: +7:2
- StorageDead(_1); // scope 0 at $DIR/combine_transmutes.rs:+7:1: +7:2
- return; // scope 0 at $DIR/combine_transmutes.rs:+7:2: +7:2
+- _11 = move _12 as std::mem::ManuallyDrop<std::string::String> (Transmute);
++ _11 = move (_12.1: std::mem::ManuallyDrop<std::string::String>);
+ StorageDead(_12);
+ _0 = const ();
+ StorageDead(_11);
+ StorageDead(_9);
+ StorageDead(_7);
+ StorageDead(_5);
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/combine_transmutes.identity_transmutes.InstSimplify.diff b/tests/mir-opt/combine_transmutes.identity_transmutes.InstSimplify.diff
index 57d9f4b14..58ae59190 100644
--- a/tests/mir-opt/combine_transmutes.identity_transmutes.InstSimplify.diff
+++ b/tests/mir-opt/combine_transmutes.identity_transmutes.InstSimplify.diff
@@ -2,42 +2,38 @@
+ // MIR for `identity_transmutes` after InstSimplify
fn identity_transmutes() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/combine_transmutes.rs:+0:37: +0:37
- let _1: i32; // in scope 0 at $DIR/combine_transmutes.rs:+2:9: +2:11
- let mut _3: std::vec::Vec<i32>; // in scope 0 at $DIR/combine_transmutes.rs:+3:46: +3:56
+ let mut _0: ();
+ let _1: i32;
+ let mut _3: std::vec::Vec<i32>;
scope 1 {
- debug _a => _1; // in scope 1 at $DIR/combine_transmutes.rs:+2:9: +2:11
- let _2: std::vec::Vec<i32>; // in scope 1 at $DIR/combine_transmutes.rs:+3:9: +3:11
+ debug _a => _1;
+ let _2: std::vec::Vec<i32>;
scope 2 {
- debug _a => _2; // in scope 2 at $DIR/combine_transmutes.rs:+3:9: +3:11
+ debug _a => _2;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/combine_transmutes.rs:+2:9: +2:11
-- _1 = const 1_i32 as i32 (Transmute); // scope 0 at $DIR/combine_transmutes.rs:+2:14: +2:38
-+ _1 = const 1_i32; // scope 0 at $DIR/combine_transmutes.rs:+2:14: +2:38
- StorageLive(_2); // scope 1 at $DIR/combine_transmutes.rs:+3:9: +3:11
- StorageLive(_3); // scope 1 at $DIR/combine_transmutes.rs:+3:46: +3:56
- _3 = Vec::<i32>::new() -> [return: bb1, unwind unreachable]; // scope 1 at $DIR/combine_transmutes.rs:+3:46: +3:56
- // mir::Constant
- // + span: $DIR/combine_transmutes.rs:15:46: 15:54
- // + user_ty: UserType(0)
- // + literal: Const { ty: fn() -> Vec<i32> {Vec::<i32>::new}, val: Value(<ZST>) }
+ StorageLive(_1);
+- _1 = const 1_i32 as i32 (Transmute);
++ _1 = const 1_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = Vec::<i32>::new() -> [return: bb1, unwind unreachable];
}
bb1: {
-- _2 = move _3 as std::vec::Vec<i32> (Transmute); // scope 1 at $DIR/combine_transmutes.rs:+3:14: +3:57
-+ _2 = move _3; // scope 1 at $DIR/combine_transmutes.rs:+3:14: +3:57
- StorageDead(_3); // scope 1 at $DIR/combine_transmutes.rs:+3:56: +3:57
- _0 = const (); // scope 0 at $DIR/combine_transmutes.rs:+0:37: +4:2
- drop(_2) -> [return: bb2, unwind unreachable]; // scope 1 at $DIR/combine_transmutes.rs:+4:1: +4:2
+- _2 = move _3 as std::vec::Vec<i32> (Transmute);
++ _2 = move _3;
+ StorageDead(_3);
+ _0 = const ();
+ drop(_2) -> [return: bb2, unwind unreachable];
}
bb2: {
- StorageDead(_2); // scope 1 at $DIR/combine_transmutes.rs:+4:1: +4:2
- StorageDead(_1); // scope 0 at $DIR/combine_transmutes.rs:+4:1: +4:2
- return; // scope 0 at $DIR/combine_transmutes.rs:+4:2: +4:2
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/combine_transmutes.integer_transmutes.InstSimplify.diff b/tests/mir-opt/combine_transmutes.integer_transmutes.InstSimplify.diff
index ec7c982c1..8eff802dd 100644
--- a/tests/mir-opt/combine_transmutes.integer_transmutes.InstSimplify.diff
+++ b/tests/mir-opt/combine_transmutes.integer_transmutes.InstSimplify.diff
@@ -2,23 +2,23 @@
+ // MIR for `integer_transmutes` after InstSimplify
fn integer_transmutes() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/combine_transmutes.rs:+0:36: +0:36
- let mut _1: u32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _2: i64; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: i64; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _4: u32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _5: usize; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: ();
+ let mut _1: u32;
+ let mut _2: i64;
+ let mut _3: i64;
+ let mut _4: u32;
+ let mut _5: usize;
bb0: {
-- _1 = const 1_i32 as u32 (Transmute); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-+ _1 = const 1_i32 as u32 (IntToInt); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _2 = const 1_i32 as i64 (Transmute); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-- _3 = const 1_u64 as i64 (Transmute); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-+ _3 = const 1_u64 as i64 (IntToInt); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _4 = const 1_u64 as u32 (Transmute); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-- _5 = const 1_isize as usize (Transmute); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-+ _5 = const 1_isize as usize (IntToInt); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- return; // scope 0 at $DIR/combine_transmutes.rs:+8:13: +8:21
+- _1 = const 1_i32 as u32 (Transmute);
++ _1 = const 1_i32 as u32 (IntToInt);
+ _2 = const 1_i32 as i64 (Transmute);
+- _3 = const 1_u64 as i64 (Transmute);
++ _3 = const 1_u64 as i64 (IntToInt);
+ _4 = const 1_u64 as u32 (Transmute);
+- _5 = const 1_isize as usize (Transmute);
++ _5 = const 1_isize as usize (IntToInt);
+ return;
}
}
diff --git a/tests/mir-opt/const_allocation.main.ConstProp.after.32bit.mir b/tests/mir-opt/const_allocation.main.ConstProp.after.32bit.mir
index 169e99dee..3797dbabb 100644
--- a/tests/mir-opt/const_allocation.main.ConstProp.after.32bit.mir
+++ b/tests/mir-opt/const_allocation.main.ConstProp.after.32bit.mir
@@ -1,22 +1,19 @@
// MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/const_allocation.rs:+0:11: +0:11
- let _1: &[(std::option::Option<i32>, &[&str])]; // in scope 0 at $DIR/const_allocation.rs:+1:5: +1:8
- let mut _2: &&[(std::option::Option<i32>, &[&str])]; // in scope 0 at $DIR/const_allocation.rs:+1:5: +1:8
+ let mut _0: ();
+ let _1: &[(std::option::Option<i32>, &[&str])];
+ let mut _2: &&[(std::option::Option<i32>, &[&str])];
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_allocation.rs:+1:5: +1:8
- StorageLive(_2); // scope 0 at $DIR/const_allocation.rs:+1:5: +1:8
- _2 = const {alloc1: &&[(Option<i32>, &[&str])]}; // scope 0 at $DIR/const_allocation.rs:+1:5: +1:8
- // mir::Constant
- // + span: $DIR/const_allocation.rs:9:5: 9:8
- // + literal: Const { ty: &&[(Option<i32>, &[&str])], val: Value(Scalar(alloc1)) }
- _1 = (*_2); // scope 0 at $DIR/const_allocation.rs:+1:5: +1:8
- StorageDead(_2); // scope 0 at $DIR/const_allocation.rs:+1:8: +1:9
- StorageDead(_1); // scope 0 at $DIR/const_allocation.rs:+1:8: +1:9
- _0 = const (); // scope 0 at $DIR/const_allocation.rs:+0:11: +2:2
- return; // scope 0 at $DIR/const_allocation.rs:+2:2: +2:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const {alloc1: &&[(Option<i32>, &[&str])]};
+ _1 = (*_2);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/const_allocation.main.ConstProp.after.64bit.mir b/tests/mir-opt/const_allocation.main.ConstProp.after.64bit.mir
index db1f96488..dc16c0640 100644
--- a/tests/mir-opt/const_allocation.main.ConstProp.after.64bit.mir
+++ b/tests/mir-opt/const_allocation.main.ConstProp.after.64bit.mir
@@ -1,22 +1,19 @@
// MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/const_allocation.rs:+0:11: +0:11
- let _1: &[(std::option::Option<i32>, &[&str])]; // in scope 0 at $DIR/const_allocation.rs:+1:5: +1:8
- let mut _2: &&[(std::option::Option<i32>, &[&str])]; // in scope 0 at $DIR/const_allocation.rs:+1:5: +1:8
+ let mut _0: ();
+ let _1: &[(std::option::Option<i32>, &[&str])];
+ let mut _2: &&[(std::option::Option<i32>, &[&str])];
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_allocation.rs:+1:5: +1:8
- StorageLive(_2); // scope 0 at $DIR/const_allocation.rs:+1:5: +1:8
- _2 = const {alloc1: &&[(Option<i32>, &[&str])]}; // scope 0 at $DIR/const_allocation.rs:+1:5: +1:8
- // mir::Constant
- // + span: $DIR/const_allocation.rs:9:5: 9:8
- // + literal: Const { ty: &&[(Option<i32>, &[&str])], val: Value(Scalar(alloc1)) }
- _1 = (*_2); // scope 0 at $DIR/const_allocation.rs:+1:5: +1:8
- StorageDead(_2); // scope 0 at $DIR/const_allocation.rs:+1:8: +1:9
- StorageDead(_1); // scope 0 at $DIR/const_allocation.rs:+1:8: +1:9
- _0 = const (); // scope 0 at $DIR/const_allocation.rs:+0:11: +2:2
- return; // scope 0 at $DIR/const_allocation.rs:+2:2: +2:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const {alloc1: &&[(Option<i32>, &[&str])]};
+ _1 = (*_2);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/const_allocation2.main.ConstProp.after.32bit.mir b/tests/mir-opt/const_allocation2.main.ConstProp.after.32bit.mir
index 999acb48a..c5f6902b4 100644
--- a/tests/mir-opt/const_allocation2.main.ConstProp.after.32bit.mir
+++ b/tests/mir-opt/const_allocation2.main.ConstProp.after.32bit.mir
@@ -1,22 +1,19 @@
// MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/const_allocation2.rs:+0:11: +0:11
- let _1: &[(std::option::Option<i32>, &[&u8])]; // in scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8
- let mut _2: &&[(std::option::Option<i32>, &[&u8])]; // in scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8
+ let mut _0: ();
+ let _1: &[(std::option::Option<i32>, &[&u8])];
+ let mut _2: &&[(std::option::Option<i32>, &[&u8])];
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8
- StorageLive(_2); // scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8
- _2 = const {alloc1: &&[(Option<i32>, &[&u8])]}; // scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8
- // mir::Constant
- // + span: $DIR/const_allocation2.rs:6:5: 6:8
- // + literal: Const { ty: &&[(Option<i32>, &[&u8])], val: Value(Scalar(alloc1)) }
- _1 = (*_2); // scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8
- StorageDead(_2); // scope 0 at $DIR/const_allocation2.rs:+1:8: +1:9
- StorageDead(_1); // scope 0 at $DIR/const_allocation2.rs:+1:8: +1:9
- _0 = const (); // scope 0 at $DIR/const_allocation2.rs:+0:11: +2:2
- return; // scope 0 at $DIR/const_allocation2.rs:+2:2: +2:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const {alloc1: &&[(Option<i32>, &[&u8])]};
+ _1 = (*_2);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/const_allocation2.main.ConstProp.after.64bit.mir b/tests/mir-opt/const_allocation2.main.ConstProp.after.64bit.mir
index 30311890e..b95b8c787 100644
--- a/tests/mir-opt/const_allocation2.main.ConstProp.after.64bit.mir
+++ b/tests/mir-opt/const_allocation2.main.ConstProp.after.64bit.mir
@@ -1,22 +1,19 @@
// MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/const_allocation2.rs:+0:11: +0:11
- let _1: &[(std::option::Option<i32>, &[&u8])]; // in scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8
- let mut _2: &&[(std::option::Option<i32>, &[&u8])]; // in scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8
+ let mut _0: ();
+ let _1: &[(std::option::Option<i32>, &[&u8])];
+ let mut _2: &&[(std::option::Option<i32>, &[&u8])];
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8
- StorageLive(_2); // scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8
- _2 = const {alloc1: &&[(Option<i32>, &[&u8])]}; // scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8
- // mir::Constant
- // + span: $DIR/const_allocation2.rs:6:5: 6:8
- // + literal: Const { ty: &&[(Option<i32>, &[&u8])], val: Value(Scalar(alloc1)) }
- _1 = (*_2); // scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8
- StorageDead(_2); // scope 0 at $DIR/const_allocation2.rs:+1:8: +1:9
- StorageDead(_1); // scope 0 at $DIR/const_allocation2.rs:+1:8: +1:9
- _0 = const (); // scope 0 at $DIR/const_allocation2.rs:+0:11: +2:2
- return; // scope 0 at $DIR/const_allocation2.rs:+2:2: +2:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const {alloc1: &&[(Option<i32>, &[&u8])]};
+ _1 = (*_2);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/const_allocation3.main.ConstProp.after.32bit.mir b/tests/mir-opt/const_allocation3.main.ConstProp.after.32bit.mir
index d592e59fa..e172c7540 100644
--- a/tests/mir-opt/const_allocation3.main.ConstProp.after.32bit.mir
+++ b/tests/mir-opt/const_allocation3.main.ConstProp.after.32bit.mir
@@ -1,22 +1,19 @@
// MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/const_allocation3.rs:+0:11: +0:11
- let _1: &Packed; // in scope 0 at $DIR/const_allocation3.rs:+1:5: +1:8
- let mut _2: &&Packed; // in scope 0 at $DIR/const_allocation3.rs:+1:5: +1:8
+ let mut _0: ();
+ let _1: &Packed;
+ let mut _2: &&Packed;
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_allocation3.rs:+1:5: +1:8
- StorageLive(_2); // scope 0 at $DIR/const_allocation3.rs:+1:5: +1:8
- _2 = const {alloc1: &&Packed}; // scope 0 at $DIR/const_allocation3.rs:+1:5: +1:8
- // mir::Constant
- // + span: $DIR/const_allocation3.rs:6:5: 6:8
- // + literal: Const { ty: &&Packed, val: Value(Scalar(alloc1)) }
- _1 = (*_2); // scope 0 at $DIR/const_allocation3.rs:+1:5: +1:8
- StorageDead(_2); // scope 0 at $DIR/const_allocation3.rs:+1:8: +1:9
- StorageDead(_1); // scope 0 at $DIR/const_allocation3.rs:+1:8: +1:9
- _0 = const (); // scope 0 at $DIR/const_allocation3.rs:+0:11: +2:2
- return; // scope 0 at $DIR/const_allocation3.rs:+2:2: +2:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const {alloc1: &&Packed};
+ _1 = (*_2);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/const_allocation3.main.ConstProp.after.64bit.mir b/tests/mir-opt/const_allocation3.main.ConstProp.after.64bit.mir
index ca53b28be..d5feea723 100644
--- a/tests/mir-opt/const_allocation3.main.ConstProp.after.64bit.mir
+++ b/tests/mir-opt/const_allocation3.main.ConstProp.after.64bit.mir
@@ -1,22 +1,19 @@
// MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/const_allocation3.rs:+0:11: +0:11
- let _1: &Packed; // in scope 0 at $DIR/const_allocation3.rs:+1:5: +1:8
- let mut _2: &&Packed; // in scope 0 at $DIR/const_allocation3.rs:+1:5: +1:8
+ let mut _0: ();
+ let _1: &Packed;
+ let mut _2: &&Packed;
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_allocation3.rs:+1:5: +1:8
- StorageLive(_2); // scope 0 at $DIR/const_allocation3.rs:+1:5: +1:8
- _2 = const {alloc1: &&Packed}; // scope 0 at $DIR/const_allocation3.rs:+1:5: +1:8
- // mir::Constant
- // + span: $DIR/const_allocation3.rs:6:5: 6:8
- // + literal: Const { ty: &&Packed, val: Value(Scalar(alloc1)) }
- _1 = (*_2); // scope 0 at $DIR/const_allocation3.rs:+1:5: +1:8
- StorageDead(_2); // scope 0 at $DIR/const_allocation3.rs:+1:8: +1:9
- StorageDead(_1); // scope 0 at $DIR/const_allocation3.rs:+1:8: +1:9
- _0 = const (); // scope 0 at $DIR/const_allocation3.rs:+0:11: +2:2
- return; // scope 0 at $DIR/const_allocation3.rs:+2:2: +2:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const {alloc1: &&Packed};
+ _1 = (*_2);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/const_debuginfo.main.ConstDebugInfo.diff b/tests/mir-opt/const_debuginfo.main.ConstDebugInfo.diff
index f1f53a481..255ec9481 100644
--- a/tests/mir-opt/const_debuginfo.main.ConstDebugInfo.diff
+++ b/tests/mir-opt/const_debuginfo.main.ConstDebugInfo.diff
@@ -2,49 +2,49 @@
+ // MIR for `main` after ConstDebugInfo
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/const_debuginfo.rs:+0:11: +0:11
- let _1: u8; // in scope 0 at $DIR/const_debuginfo.rs:+1:9: +1:10
- let mut _5: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:15: +4:20
- let mut _6: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:15: +4:16
- let mut _7: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:19: +4:20
- let mut _8: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:23: +4:24
- let mut _12: u32; // in scope 0 at $DIR/const_debuginfo.rs:+13:13: +13:16
- let mut _13: u32; // in scope 0 at $DIR/const_debuginfo.rs:+13:19: +13:22
+ let mut _0: ();
+ let _1: u8;
+ let mut _5: u8;
+ let mut _6: u8;
+ let mut _7: u8;
+ let mut _8: u8;
+ let mut _12: u32;
+ let mut _13: u32;
scope 1 {
-- debug x => _1; // in scope 1 at $DIR/const_debuginfo.rs:+1:9: +1:10
-+ debug x => const 1_u8; // in scope 1 at $DIR/const_debuginfo.rs:+1:9: +1:10
- let _2: u8; // in scope 1 at $DIR/const_debuginfo.rs:+2:9: +2:10
+- debug x => _1;
++ debug x => const 1_u8;
+ let _2: u8;
scope 2 {
-- debug y => _2; // in scope 2 at $DIR/const_debuginfo.rs:+2:9: +2:10
-+ debug y => const 2_u8; // in scope 2 at $DIR/const_debuginfo.rs:+2:9: +2:10
- let _3: u8; // in scope 2 at $DIR/const_debuginfo.rs:+3:9: +3:10
+- debug y => _2;
++ debug y => const 2_u8;
+ let _3: u8;
scope 3 {
-- debug z => _3; // in scope 3 at $DIR/const_debuginfo.rs:+3:9: +3:10
-+ debug z => const 3_u8; // in scope 3 at $DIR/const_debuginfo.rs:+3:9: +3:10
- let _4: u8; // in scope 3 at $DIR/const_debuginfo.rs:+4:9: +4:12
+- debug z => _3;
++ debug z => const 3_u8;
+ let _4: u8;
scope 4 {
-- debug sum => _4; // in scope 4 at $DIR/const_debuginfo.rs:+4:9: +4:12
-+ debug sum => const 6_u8; // in scope 4 at $DIR/const_debuginfo.rs:+4:9: +4:12
- let _9: &str; // in scope 4 at $DIR/const_debuginfo.rs:+6:9: +6:10
+- debug sum => _4;
++ debug sum => const 6_u8;
+ let _9: &str;
scope 5 {
-- debug s => _9; // in scope 5 at $DIR/const_debuginfo.rs:+6:9: +6:10
-+ debug s => const "hello, world!"; // in scope 5 at $DIR/const_debuginfo.rs:+6:9: +6:10
- let _14: bool; // in scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
- let _15: bool; // in scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
- let _16: u32; // in scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
+- debug s => _9;
++ debug s => const "hello, world!";
+ let _14: bool;
+ let _15: bool;
+ let _16: u32;
scope 6 {
- debug f => (bool, bool, u32){ .0 => _14, .1 => _15, .2 => _16, }; // in scope 6 at $DIR/const_debuginfo.rs:+8:9: +8:10
- let _10: std::option::Option<u16>; // in scope 6 at $DIR/const_debuginfo.rs:+10:9: +10:10
+ debug f => (bool, bool, u32){ .0 => _14, .1 => _15, .2 => _16, };
+ let _10: std::option::Option<u16>;
scope 7 {
- debug o => _10; // in scope 7 at $DIR/const_debuginfo.rs:+10:9: +10:10
- let _17: u32; // in scope 7 at $DIR/const_debuginfo.rs:+12:9: +12:10
- let _18: u32; // in scope 7 at $DIR/const_debuginfo.rs:+12:9: +12:10
+ debug o => _10;
+ let _17: u32;
+ let _18: u32;
scope 8 {
- debug p => Point{ .0 => _17, .1 => _18, }; // in scope 8 at $DIR/const_debuginfo.rs:+12:9: +12:10
- let _11: u32; // in scope 8 at $DIR/const_debuginfo.rs:+13:9: +13:10
+ debug p => Point{ .0 => _17, .1 => _18, };
+ let _11: u32;
scope 9 {
-- debug a => _11; // in scope 9 at $DIR/const_debuginfo.rs:+13:9: +13:10
-+ debug a => const 64_u32; // in scope 9 at $DIR/const_debuginfo.rs:+13:9: +13:10
+- debug a => _11;
++ debug a => const 64_u32;
}
}
}
@@ -56,39 +56,36 @@
}
bb0: {
- _1 = const 1_u8; // scope 0 at $DIR/const_debuginfo.rs:+1:13: +1:16
- _2 = const 2_u8; // scope 1 at $DIR/const_debuginfo.rs:+2:13: +2:16
- _3 = const 3_u8; // scope 2 at $DIR/const_debuginfo.rs:+3:13: +3:16
- StorageLive(_4); // scope 3 at $DIR/const_debuginfo.rs:+4:9: +4:12
- StorageLive(_5); // scope 3 at $DIR/const_debuginfo.rs:+4:15: +4:20
- _5 = const 3_u8; // scope 3 at $DIR/const_debuginfo.rs:+4:15: +4:20
- _4 = const 6_u8; // scope 3 at $DIR/const_debuginfo.rs:+4:15: +4:24
- StorageDead(_5); // scope 3 at $DIR/const_debuginfo.rs:+4:23: +4:24
- StorageLive(_9); // scope 4 at $DIR/const_debuginfo.rs:+6:9: +6:10
- _9 = const "hello, world!"; // scope 4 at $DIR/const_debuginfo.rs:+6:13: +6:28
- // mir::Constant
- // + span: $DIR/const_debuginfo.rs:14:13: 14:28
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- StorageLive(_14); // scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
- StorageLive(_15); // scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
- StorageLive(_16); // scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
- _14 = const true; // scope 5 at $DIR/const_debuginfo.rs:+8:13: +8:34
- _15 = const false; // scope 5 at $DIR/const_debuginfo.rs:+8:13: +8:34
- _16 = const 123_u32; // scope 5 at $DIR/const_debuginfo.rs:+8:13: +8:34
- StorageLive(_10); // scope 6 at $DIR/const_debuginfo.rs:+10:9: +10:10
- _10 = Option::<u16>::Some(const 99_u16); // scope 6 at $DIR/const_debuginfo.rs:+10:13: +10:24
- _17 = const 32_u32; // scope 7 at $DIR/const_debuginfo.rs:+12:13: +12:35
- _18 = const 32_u32; // scope 7 at $DIR/const_debuginfo.rs:+12:13: +12:35
- StorageLive(_11); // scope 8 at $DIR/const_debuginfo.rs:+13:9: +13:10
- _11 = const 64_u32; // scope 8 at $DIR/const_debuginfo.rs:+13:13: +13:22
- StorageDead(_11); // scope 8 at $DIR/const_debuginfo.rs:+14:1: +14:2
- StorageDead(_10); // scope 6 at $DIR/const_debuginfo.rs:+14:1: +14:2
- StorageDead(_14); // scope 5 at $DIR/const_debuginfo.rs:+14:1: +14:2
- StorageDead(_15); // scope 5 at $DIR/const_debuginfo.rs:+14:1: +14:2
- StorageDead(_16); // scope 5 at $DIR/const_debuginfo.rs:+14:1: +14:2
- StorageDead(_9); // scope 4 at $DIR/const_debuginfo.rs:+14:1: +14:2
- StorageDead(_4); // scope 3 at $DIR/const_debuginfo.rs:+14:1: +14:2
- return; // scope 0 at $DIR/const_debuginfo.rs:+14:2: +14:2
+ _1 = const 1_u8;
+ _2 = const 2_u8;
+ _3 = const 3_u8;
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = const 3_u8;
+ _4 = const 6_u8;
+ StorageDead(_5);
+ StorageLive(_9);
+ _9 = const "hello, world!";
+ StorageLive(_14);
+ StorageLive(_15);
+ StorageLive(_16);
+ _14 = const true;
+ _15 = const false;
+ _16 = const 123_u32;
+ StorageLive(_10);
+ _10 = Option::<u16>::Some(const 99_u16);
+ _17 = const 32_u32;
+ _18 = const 32_u32;
+ StorageLive(_11);
+ _11 = const 64_u32;
+ StorageDead(_11);
+ StorageDead(_10);
+ StorageDead(_14);
+ StorageDead(_15);
+ StorageDead(_16);
+ StorageDead(_9);
+ StorageDead(_4);
+ return;
}
}
diff --git a/tests/mir-opt/const_goto.issue_77355_opt.ConstGoto.diff b/tests/mir-opt/const_goto.issue_77355_opt.ConstGoto.diff
index a717d1bbd..43bdb4311 100644
--- a/tests/mir-opt/const_goto.issue_77355_opt.ConstGoto.diff
+++ b/tests/mir-opt/const_goto.issue_77355_opt.ConstGoto.diff
@@ -2,51 +2,49 @@
+ // MIR for `issue_77355_opt` after ConstGoto
fn issue_77355_opt(_1: Foo) -> u64 {
- debug num => _1; // in scope 0 at $DIR/const_goto.rs:+0:20: +0:23
- let mut _0: u64; // return place in scope 0 at $DIR/const_goto.rs:+0:33: +0:36
-- let mut _2: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-- let mut _3: isize; // in scope 0 at $DIR/const_goto.rs:+1:22: +1:28
-+ let mut _2: isize; // in scope 0 at $DIR/const_goto.rs:+1:22: +1:28
+ debug num => _1;
+ let mut _0: u64;
+- let mut _2: bool;
+- let mut _3: isize;
++ let mut _2: isize;
bb0: {
-- StorageLive(_2); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-- _3 = discriminant(_1); // scope 0 at $DIR/const_goto.rs:+1:17: +1:20
-- switchInt(move _3) -> [1: bb2, 2: bb2, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-+ _2 = discriminant(_1); // scope 0 at $DIR/const_goto.rs:+1:17: +1:20
-+ switchInt(move _2) -> [1: bb2, 2: bb2, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+- StorageLive(_2);
+- _3 = discriminant(_1);
+- switchInt(move _3) -> [1: bb2, 2: bb2, otherwise: bb1];
++ _2 = discriminant(_1);
++ switchInt(move _2) -> [1: bb2, 2: bb2, otherwise: bb1];
}
bb1: {
-- _2 = const false; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-+ _0 = const 42_u64; // scope 0 at $DIR/const_goto.rs:+1:53: +1:55
-+ goto -> bb3; // scope 0 at $DIR/const_goto.rs:+1:5: +1:57
+- _2 = const false;
++ _0 = const 42_u64;
+ goto -> bb3;
}
bb2: {
-- _2 = const true; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+- _2 = const true;
++ _0 = const 23_u64;
+ goto -> bb3;
+ }
+
+ bb3: {
+- switchInt(move _2) -> [0: bb5, otherwise: bb4];
- }
-
-- bb3: {
-- switchInt(move _2) -> [0: bb5, otherwise: bb4]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+- bb4: {
+- _0 = const 23_u64;
+- goto -> bb6;
- }
-
-- bb4: {
- _0 = const 23_u64; // scope 0 at $DIR/const_goto.rs:+1:41: +1:43
-- goto -> bb6; // scope 0 at $DIR/const_goto.rs:+1:5: +1:57
-+ goto -> bb3; // scope 0 at $DIR/const_goto.rs:+1:5: +1:57
- }
-
- bb5: {
-- _0 = const 42_u64; // scope 0 at $DIR/const_goto.rs:+1:53: +1:55
-- goto -> bb6; // scope 0 at $DIR/const_goto.rs:+1:5: +1:57
+- _0 = const 42_u64;
+- goto -> bb6;
- }
-
- bb6: {
-- StorageDead(_2); // scope 0 at $DIR/const_goto.rs:+1:56: +1:57
-+ bb3: {
- return; // scope 0 at $DIR/const_goto.rs:+2:2: +2:2
+- StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/const_goto_const_eval_fail.f.ConstGoto.diff b/tests/mir-opt/const_goto_const_eval_fail.f.ConstGoto.diff
index 24be8c9b8..84a13f28a 100644
--- a/tests/mir-opt/const_goto_const_eval_fail.f.ConstGoto.diff
+++ b/tests/mir-opt/const_goto_const_eval_fail.f.ConstGoto.diff
@@ -2,50 +2,50 @@
+ // MIR for `f` after ConstGoto
fn f() -> u64 {
- let mut _0: u64; // return place in scope 0 at $DIR/const_goto_const_eval_fail.rs:+0:44: +0:47
- let mut _1: bool; // in scope 0 at $DIR/const_goto_const_eval_fail.rs:+1:11: +6:6
- let mut _2: i32; // in scope 0 at $DIR/const_goto_const_eval_fail.rs:+2:15: +2:16
+ let mut _0: u64;
+ let mut _1: bool;
+ let mut _2: i32;
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_goto_const_eval_fail.rs:+1:11: +6:6
- StorageLive(_2); // scope 0 at $DIR/const_goto_const_eval_fail.rs:+2:15: +2:16
- _2 = const A; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+2:15: +2:16
- switchInt(_2) -> [1: bb2, 2: bb2, 3: bb2, otherwise: bb1]; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+2:9: +2:16
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const A;
+ switchInt(_2) -> [1: bb2, 2: bb2, 3: bb2, otherwise: bb1];
}
bb1: {
- _1 = const true; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+4:18: +4:22
- goto -> bb3; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+4:18: +4:22
+ _1 = const true;
+ goto -> bb3;
}
bb2: {
- _1 = const B; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+3:26: +3:27
-- goto -> bb3; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+3:26: +3:27
-+ switchInt(_1) -> [0: bb4, otherwise: bb3]; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+1:5: +6:6
+ _1 = const B;
+- goto -> bb3;
++ switchInt(_1) -> [0: bb4, otherwise: bb3];
}
bb3: {
-- switchInt(_1) -> [0: bb5, otherwise: bb4]; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+1:5: +6:6
+- switchInt(_1) -> [0: bb5, otherwise: bb4];
- }
-
- bb4: {
- _0 = const 2_u64; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+8:17: +8:18
-- goto -> bb6; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+8:17: +8:18
-+ goto -> bb5; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+8:17: +8:18
+ _0 = const 2_u64;
+- goto -> bb6;
++ goto -> bb5;
}
- bb5: {
+ bb4: {
- _0 = const 1_u64; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+7:18: +7:19
-- goto -> bb6; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+7:18: +7:19
-+ goto -> bb5; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+7:18: +7:19
+ _0 = const 1_u64;
+- goto -> bb6;
++ goto -> bb5;
}
- bb6: {
+ bb5: {
- StorageDead(_2); // scope 0 at $DIR/const_goto_const_eval_fail.rs:+10:1: +10:2
- StorageDead(_1); // scope 0 at $DIR/const_goto_const_eval_fail.rs:+10:1: +10:2
- return; // scope 0 at $DIR/const_goto_const_eval_fail.rs:+10:2: +10:2
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_goto_const_eval_fail.rs b/tests/mir-opt/const_goto_const_eval_fail.rs
index 3b85fe6ab..b2357663a 100644
--- a/tests/mir-opt/const_goto_const_eval_fail.rs
+++ b/tests/mir-opt/const_goto_const_eval_fail.rs
@@ -1,6 +1,8 @@
#![feature(min_const_generics)]
#![crate_type = "lib"]
+// compile-flags: -Zunsound-mir-opts
+
// If const eval fails, then don't crash
// EMIT_MIR const_goto_const_eval_fail.f.ConstGoto.diff
pub fn f<const A: i32, const B: bool>() -> u64 {
diff --git a/tests/mir-opt/const_goto_storage.match_nested_if.ConstGoto.diff b/tests/mir-opt/const_goto_storage.match_nested_if.ConstGoto.diff
index 4dc98f856..d1dbc7089 100644
--- a/tests/mir-opt/const_goto_storage.match_nested_if.ConstGoto.diff
+++ b/tests/mir-opt/const_goto_storage.match_nested_if.ConstGoto.diff
@@ -2,102 +2,99 @@
+ // MIR for `match_nested_if` after ConstGoto
fn match_nested_if() -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/const_goto_storage.rs:+0:25: +0:29
- let _1: bool; // in scope 0 at $DIR/const_goto_storage.rs:+1:9: +1:12
-- let mut _2: (); // in scope 0 at $DIR/const_goto_storage.rs:+1:21: +1:23
-- let mut _3: bool; // in scope 0 at $DIR/const_goto_storage.rs:+2:15: +6:10
-- let mut _4: bool; // in scope 0 at $DIR/const_goto_storage.rs:+2:18: +2:76
-- let mut _5: bool; // in scope 0 at $DIR/const_goto_storage.rs:+2:21: +2:52
-- let mut _6: bool; // in scope 0 at $DIR/const_goto_storage.rs:+2:24: +2:28
-+ let mut _2: bool; // in scope 0 at $DIR/const_goto_storage.rs:+2:24: +2:28
+ let mut _0: bool;
+ let _1: bool;
+- let mut _2: ();
+- let mut _3: bool;
+- let mut _4: bool;
+- let mut _5: bool;
+- let mut _6: bool;
++ let mut _2: bool;
scope 1 {
- debug val => _1; // in scope 1 at $DIR/const_goto_storage.rs:+1:9: +1:12
+ debug val => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_goto_storage.rs:+1:9: +1:12
-- StorageLive(_2); // scope 0 at $DIR/const_goto_storage.rs:+1:21: +1:23
-- _2 = (); // scope 0 at $DIR/const_goto_storage.rs:+1:21: +1:23
-- StorageLive(_3); // scope 0 at $DIR/const_goto_storage.rs:+2:15: +6:10
-- StorageLive(_4); // scope 0 at $DIR/const_goto_storage.rs:+2:18: +2:76
-- StorageLive(_5); // scope 0 at $DIR/const_goto_storage.rs:+2:21: +2:52
-- StorageLive(_6); // scope 0 at $DIR/const_goto_storage.rs:+2:24: +2:28
-- _6 = const true; // scope 0 at $DIR/const_goto_storage.rs:+2:24: +2:28
-- switchInt(move _6) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/const_goto_storage.rs:+2:24: +2:28
-+ StorageLive(_2); // scope 0 at $DIR/const_goto_storage.rs:+2:24: +2:28
-+ _2 = const true; // scope 0 at $DIR/const_goto_storage.rs:+2:24: +2:28
-+ switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/const_goto_storage.rs:+2:24: +2:28
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = ();
+- StorageLive(_3);
+- StorageLive(_4);
+- StorageLive(_5);
+- StorageLive(_6);
+- _6 = const true;
+- switchInt(move _6) -> [0: bb2, otherwise: bb1];
++ _2 = const true;
++ switchInt(move _2) -> [0: bb2, otherwise: bb1];
}
bb1: {
-- _5 = const true; // scope 0 at $DIR/const_goto_storage.rs:+2:31: +2:35
-- goto -> bb3; // scope 0 at $DIR/const_goto_storage.rs:+2:21: +2:52
-- }
--
-- bb2: {
-- _5 = const false; // scope 0 at $DIR/const_goto_storage.rs:+2:45: +2:50
-- goto -> bb3; // scope 0 at $DIR/const_goto_storage.rs:+2:21: +2:52
-- }
--
-- bb3: {
-- StorageDead(_6); // scope 0 at $DIR/const_goto_storage.rs:+2:51: +2:52
-- switchInt(move _5) -> [0: bb5, otherwise: bb4]; // scope 0 at $DIR/const_goto_storage.rs:+2:21: +2:52
+- _5 = const true;
++ StorageDead(_2);
++ _1 = const true;
+ goto -> bb3;
+ }
+
+ bb2: {
+- _5 = const false;
++ StorageDead(_2);
++ _1 = const false;
+ goto -> bb3;
+ }
+
+ bb3: {
+- StorageDead(_6);
+- switchInt(move _5) -> [0: bb5, otherwise: bb4];
- }
-
- bb4: {
-- _4 = const true; // scope 0 at $DIR/const_goto_storage.rs:+2:55: +2:59
-- goto -> bb6; // scope 0 at $DIR/const_goto_storage.rs:+2:18: +2:76
+- _4 = const true;
+- goto -> bb6;
- }
-
- bb5: {
-- _4 = const false; // scope 0 at $DIR/const_goto_storage.rs:+2:69: +2:74
-- goto -> bb6; // scope 0 at $DIR/const_goto_storage.rs:+2:18: +2:76
+- _4 = const false;
+- goto -> bb6;
- }
-
- bb6: {
-- StorageDead(_5); // scope 0 at $DIR/const_goto_storage.rs:+2:75: +2:76
-- switchInt(move _4) -> [0: bb8, otherwise: bb7]; // scope 0 at $DIR/const_goto_storage.rs:+2:18: +2:76
+- StorageDead(_5);
+- switchInt(move _4) -> [0: bb8, otherwise: bb7];
- }
-
- bb7: {
-- _3 = const true; // scope 0 at $DIR/const_goto_storage.rs:+3:13: +3:17
-- goto -> bb9; // scope 0 at $DIR/const_goto_storage.rs:+2:15: +6:10
+- _3 = const true;
+- goto -> bb9;
- }
-
- bb8: {
-- _3 = const false; // scope 0 at $DIR/const_goto_storage.rs:+5:13: +5:18
-- goto -> bb9; // scope 0 at $DIR/const_goto_storage.rs:+2:15: +6:10
+- _3 = const false;
+- goto -> bb9;
- }
-
- bb9: {
-- switchInt(move _3) -> [0: bb11, otherwise: bb10]; // scope 0 at $DIR/const_goto_storage.rs:+2:15: +6:10
+- switchInt(move _3) -> [0: bb11, otherwise: bb10];
- }
-
- bb10: {
-- StorageDead(_4); // scope 0 at $DIR/const_goto_storage.rs:+6:9: +6:10
-- StorageDead(_3); // scope 0 at $DIR/const_goto_storage.rs:+6:9: +6:10
-+ StorageDead(_2); // scope 0 at $DIR/const_goto_storage.rs:+2:51: +2:52
- _1 = const true; // scope 0 at $DIR/const_goto_storage.rs:+8:17: +8:21
-- goto -> bb12; // scope 0 at $DIR/const_goto_storage.rs:+8:17: +8:21
-+ goto -> bb3; // scope 0 at $DIR/const_goto_storage.rs:+8:17: +8:21
- }
-
+- StorageDead(_4);
+- StorageDead(_3);
+- _1 = const true;
+- goto -> bb12;
+- }
+-
- bb11: {
-- StorageDead(_4); // scope 0 at $DIR/const_goto_storage.rs:+6:9: +6:10
-- StorageDead(_3); // scope 0 at $DIR/const_goto_storage.rs:+6:9: +6:10
-+ bb2: {
-+ StorageDead(_2); // scope 0 at $DIR/const_goto_storage.rs:+2:51: +2:52
- _1 = const false; // scope 0 at $DIR/const_goto_storage.rs:+10:14: +10:19
-- goto -> bb12; // scope 0 at $DIR/const_goto_storage.rs:+10:14: +10:19
-+ goto -> bb3; // scope 0 at $DIR/const_goto_storage.rs:+10:14: +10:19
- }
-
+- StorageDead(_4);
+- StorageDead(_3);
+- _1 = const false;
+- goto -> bb12;
+- }
+-
- bb12: {
-- StorageDead(_2); // scope 0 at $DIR/const_goto_storage.rs:+11:6: +11:7
-+ bb3: {
- _0 = _1; // scope 1 at $DIR/const_goto_storage.rs:+12:5: +12:8
- StorageDead(_1); // scope 0 at $DIR/const_goto_storage.rs:+13:1: +13:2
- return; // scope 0 at $DIR/const_goto_storage.rs:+13:2: +13:2
+- StorageDead(_2);
+ _0 = _1;
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_promotion_extern_static.BAR-promoted[0].SimplifyCfg-elaborate-drops.after.mir b/tests/mir-opt/const_promotion_extern_static.BAR-promoted[0].SimplifyCfg-elaborate-drops.after.mir
index 028480bdc..5b8d3ca78 100644
--- a/tests/mir-opt/const_promotion_extern_static.BAR-promoted[0].SimplifyCfg-elaborate-drops.after.mir
+++ b/tests/mir-opt/const_promotion_extern_static.BAR-promoted[0].SimplifyCfg-elaborate-drops.after.mir
@@ -1,20 +1,17 @@
// MIR for `BAR::promoted[0]` after SimplifyCfg-elaborate-drops
promoted[0] in BAR: &[&i32; 1] = {
- let mut _0: &[&i32; 1]; // return place in scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
- let mut _1: [&i32; 1]; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:35
- let mut _2: &i32; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:32: +0:34
- let mut _3: &i32; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:33: +0:34
+ let mut _0: &[&i32; 1];
+ let mut _1: [&i32; 1];
+ let mut _2: &i32;
+ let mut _3: &i32;
bb0: {
- _3 = const {alloc1: &i32}; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:33: +0:34
- // mir::Constant
- // + span: $DIR/const_promotion_extern_static.rs:9:33: 9:34
- // + literal: Const { ty: &i32, val: Value(Scalar(alloc1)) }
- _2 = &(*_3); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:32: +0:34
- _1 = [move _2]; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:35
- _0 = &_1; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
- return; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
+ _3 = const {alloc1: &i32};
+ _2 = &(*_3);
+ _1 = [move _2];
+ _0 = &_1;
+ return;
}
}
diff --git a/tests/mir-opt/const_promotion_extern_static.BAR.PromoteTemps.diff b/tests/mir-opt/const_promotion_extern_static.BAR.PromoteTemps.diff
index 2ef437811..14d2d7fc8 100644
--- a/tests/mir-opt/const_promotion_extern_static.BAR.PromoteTemps.diff
+++ b/tests/mir-opt/const_promotion_extern_static.BAR.PromoteTemps.diff
@@ -2,49 +2,41 @@
+ // MIR for `BAR` after PromoteTemps
static mut BAR: *const &i32 = {
- let mut _0: *const &i32; // return place in scope 0 at $DIR/const_promotion_extern_static.rs:+0:17: +0:28
- let mut _1: &[&i32]; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
- let mut _2: &[&i32; 1]; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
- let _3: [&i32; 1]; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:35
- let mut _4: &i32; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:32: +0:34
- let _5: &i32; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:33: +0:34
-+ let mut _6: &[&i32; 1]; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
+ let mut _0: *const &i32;
+ let mut _1: &[&i32];
+ let mut _2: &[&i32; 1];
+ let _3: [&i32; 1];
+ let mut _4: &i32;
+ let _5: &i32;
++ let mut _6: &[&i32; 1];
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
- StorageLive(_2); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
-- StorageLive(_3); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:35
-- StorageLive(_4); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:32: +0:34
-- StorageLive(_5); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:33: +0:34
-- _5 = const {alloc1: &i32}; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:33: +0:34
-+ _6 = const _; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
- // mir::Constant
-- // + span: $DIR/const_promotion_extern_static.rs:9:33: 9:34
-- // + literal: Const { ty: &i32, val: Value(Scalar(alloc1)) }
-- _4 = &(*_5); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:32: +0:34
-- _3 = [move _4]; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:35
-- _2 = &_3; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
-+ // + span: $DIR/const_promotion_extern_static.rs:9:31: 9:44
-+ // + literal: Const { ty: &[&i32; 1], val: Unevaluated(BAR, [], Some(promoted[0])) }
-+ _2 = &(*_6); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
- _1 = move _2 as &[&i32] (Pointer(Unsize)); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
-- StorageDead(_4); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:34: +0:35
- StorageDead(_2); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:34: +0:35
- _0 = core::slice::<impl [&i32]>::as_ptr(move _1) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:44
- // mir::Constant
- // + span: $DIR/const_promotion_extern_static.rs:9:36: 9:42
- // + literal: Const { ty: for<'a> fn(&'a [&i32]) -> *const &i32 {core::slice::<impl [&i32]>::as_ptr}, val: Value(<ZST>) }
+ StorageLive(_1);
+ StorageLive(_2);
+- StorageLive(_3);
+- StorageLive(_4);
+- StorageLive(_5);
+- _5 = const {alloc1: &i32};
+- _4 = &(*_5);
+- _3 = [move _4];
+- _2 = &_3;
++ _6 = const _;
++ _2 = &(*_6);
+ _1 = move _2 as &[&i32] (PointerCoercion(Unsize));
+- StorageDead(_4);
+ StorageDead(_2);
+ _0 = core::slice::<impl [&i32]>::as_ptr(move _1) -> [return: bb1, unwind: bb2];
}
bb1: {
-- StorageDead(_5); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:43: +0:44
-- StorageDead(_3); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:43: +0:44
- StorageDead(_1); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:43: +0:44
- return; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:1: +0:45
+- StorageDead(_5);
+- StorageDead(_3);
+ StorageDead(_1);
+ return;
}
bb2 (cleanup): {
- resume; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:1: +0:45
+ resume;
}
- }
-
diff --git a/tests/mir-opt/const_promotion_extern_static.BOP.built.after.mir b/tests/mir-opt/const_promotion_extern_static.BOP.built.after.mir
index 476fc49a1..ff80d5eed 100644
--- a/tests/mir-opt/const_promotion_extern_static.BOP.built.after.mir
+++ b/tests/mir-opt/const_promotion_extern_static.BOP.built.after.mir
@@ -1,17 +1,17 @@
// MIR for `BOP` after built
static BOP: &i32 = {
- let mut _0: &i32; // return place in scope 0 at $DIR/const_promotion_extern_static.rs:+0:13: +0:17
- let _1: &i32; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:20: +0:23
- let _2: i32; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:21: +0:23
+ let mut _0: &i32;
+ let _1: &i32;
+ let _2: i32;
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:20: +0:23
- StorageLive(_2); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:21: +0:23
- _2 = const 13_i32; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:21: +0:23
- _1 = &_2; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:20: +0:23
- _0 = &(*_1); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:20: +0:23
- StorageDead(_1); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:22: +0:23
- return; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:1: +0:24
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const 13_i32;
+ _1 = &_2;
+ _0 = &(*_1);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_promotion_extern_static.FOO-promoted[0].SimplifyCfg-elaborate-drops.after.mir b/tests/mir-opt/const_promotion_extern_static.FOO-promoted[0].SimplifyCfg-elaborate-drops.after.mir
index 41657b53f..85355389b 100644
--- a/tests/mir-opt/const_promotion_extern_static.FOO-promoted[0].SimplifyCfg-elaborate-drops.after.mir
+++ b/tests/mir-opt/const_promotion_extern_static.FOO-promoted[0].SimplifyCfg-elaborate-drops.after.mir
@@ -1,20 +1,17 @@
// MIR for `FOO::promoted[0]` after SimplifyCfg-elaborate-drops
promoted[0] in FOO: &[&i32; 1] = {
- let mut _0: &[&i32; 1]; // return place in scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
- let mut _1: [&i32; 1]; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:46
- let mut _2: &i32; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:32: +0:45
- let mut _3: *const i32; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:42: +0:43
+ let mut _0: &[&i32; 1];
+ let mut _1: [&i32; 1];
+ let mut _2: &i32;
+ let mut _3: *const i32;
bb0: {
- _3 = const {alloc3: *const i32}; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:42: +0:43
- // mir::Constant
- // + span: $DIR/const_promotion_extern_static.rs:13:42: 13:43
- // + literal: Const { ty: *const i32, val: Value(Scalar(alloc3)) }
- _2 = &(*_3); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:41: +0:43
- _1 = [move _2]; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:46
- _0 = &_1; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
- return; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
+ _3 = const {alloc3: *const i32};
+ _2 = &(*_3);
+ _1 = [move _2];
+ _0 = &_1;
+ return;
}
}
diff --git a/tests/mir-opt/const_promotion_extern_static.FOO.PromoteTemps.diff b/tests/mir-opt/const_promotion_extern_static.FOO.PromoteTemps.diff
index 25ba0face..ffdd195ec 100644
--- a/tests/mir-opt/const_promotion_extern_static.FOO.PromoteTemps.diff
+++ b/tests/mir-opt/const_promotion_extern_static.FOO.PromoteTemps.diff
@@ -2,51 +2,43 @@
+ // MIR for `FOO` after PromoteTemps
static mut FOO: *const &i32 = {
- let mut _0: *const &i32; // return place in scope 0 at $DIR/const_promotion_extern_static.rs:+0:17: +0:28
- let mut _1: &[&i32]; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
- let mut _2: &[&i32; 1]; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
- let _3: [&i32; 1]; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:46
- let mut _4: &i32; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:32: +0:45
- let _5: *const i32; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:42: +0:43
-+ let mut _6: &[&i32; 1]; // in scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
+ let mut _0: *const &i32;
+ let mut _1: &[&i32];
+ let mut _2: &[&i32; 1];
+ let _3: [&i32; 1];
+ let mut _4: &i32;
+ let _5: *const i32;
++ let mut _6: &[&i32; 1];
scope 1 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
- StorageLive(_2); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
-- StorageLive(_3); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:46
-- StorageLive(_4); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:32: +0:45
-- StorageLive(_5); // scope 1 at $DIR/const_promotion_extern_static.rs:+0:42: +0:43
-- _5 = const {alloc3: *const i32}; // scope 1 at $DIR/const_promotion_extern_static.rs:+0:42: +0:43
-+ _6 = const _; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
- // mir::Constant
-- // + span: $DIR/const_promotion_extern_static.rs:13:42: 13:43
-- // + literal: Const { ty: *const i32, val: Value(Scalar(alloc3)) }
-- _4 = &(*_5); // scope 1 at $DIR/const_promotion_extern_static.rs:+0:41: +0:43
-- _3 = [move _4]; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:46
-- _2 = &_3; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
-+ // + span: $DIR/const_promotion_extern_static.rs:13:31: 13:55
-+ // + literal: Const { ty: &[&i32; 1], val: Unevaluated(FOO, [], Some(promoted[0])) }
-+ _2 = &(*_6); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
- _1 = move _2 as &[&i32] (Pointer(Unsize)); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
-- StorageDead(_4); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:45: +0:46
- StorageDead(_2); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:45: +0:46
- _0 = core::slice::<impl [&i32]>::as_ptr(move _1) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:31: +0:55
- // mir::Constant
- // + span: $DIR/const_promotion_extern_static.rs:13:47: 13:53
- // + literal: Const { ty: for<'a> fn(&'a [&i32]) -> *const &i32 {core::slice::<impl [&i32]>::as_ptr}, val: Value(<ZST>) }
+ StorageLive(_1);
+ StorageLive(_2);
+- StorageLive(_3);
+- StorageLive(_4);
+- StorageLive(_5);
+- _5 = const {alloc3: *const i32};
+- _4 = &(*_5);
+- _3 = [move _4];
+- _2 = &_3;
++ _6 = const _;
++ _2 = &(*_6);
+ _1 = move _2 as &[&i32] (PointerCoercion(Unsize));
+- StorageDead(_4);
+ StorageDead(_2);
+ _0 = core::slice::<impl [&i32]>::as_ptr(move _1) -> [return: bb1, unwind: bb2];
}
bb1: {
-- StorageDead(_5); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:54: +0:55
-- StorageDead(_3); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:54: +0:55
- StorageDead(_1); // scope 0 at $DIR/const_promotion_extern_static.rs:+0:54: +0:55
- return; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:1: +0:56
+- StorageDead(_5);
+- StorageDead(_3);
+ StorageDead(_1);
+ return;
}
bb2 (cleanup): {
- resume; // scope 0 at $DIR/const_promotion_extern_static.rs:+0:1: +0:56
+ resume;
}
}
-
diff --git a/tests/mir-opt/const_prop/address_of_pair.fn0.ConstProp.diff b/tests/mir-opt/const_prop/address_of_pair.fn0.ConstProp.diff
index d50b12044..6b96c24d4 100644
--- a/tests/mir-opt/const_prop/address_of_pair.fn0.ConstProp.diff
+++ b/tests/mir-opt/const_prop/address_of_pair.fn0.ConstProp.diff
@@ -2,45 +2,45 @@
+ // MIR for `fn0` after ConstProp
fn fn0() -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/address_of_pair.rs:+0:17: +0:21
- let mut _1: !; // in scope 0 at $DIR/address_of_pair.rs:+0:22: +9:2
- let mut _2: (i32, bool); // in scope 0 at $DIR/address_of_pair.rs:+1:9: +1:17
- let _4: (); // in scope 0 at $DIR/address_of_pair.rs:+4:5: +6:6
- let mut _6: bool; // in scope 0 at $DIR/address_of_pair.rs:+7:16: +7:22
+ let mut _0: bool;
+ let mut _1: !;
+ let mut _2: (i32, bool);
+ let _4: ();
+ let mut _6: bool;
scope 1 {
- debug pair => _2; // in scope 1 at $DIR/address_of_pair.rs:+1:9: +1:17
- let _3: *mut bool; // in scope 1 at $DIR/address_of_pair.rs:+2:9: +2:12
+ debug pair => _2;
+ let _3: *mut bool;
scope 2 {
- debug ptr => _3; // in scope 2 at $DIR/address_of_pair.rs:+2:9: +2:12
- let _5: bool; // in scope 2 at $DIR/address_of_pair.rs:+7:9: +7:12
+ debug ptr => _3;
+ let _5: bool;
scope 3 {
}
scope 4 {
- debug ret => _5; // in scope 4 at $DIR/address_of_pair.rs:+7:9: +7:12
+ debug ret => _5;
}
}
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/address_of_pair.rs:+1:9: +1:17
- _2 = (const 1_i32, const false); // scope 0 at $DIR/address_of_pair.rs:+1:20: +1:30
- StorageLive(_3); // scope 1 at $DIR/address_of_pair.rs:+2:9: +2:12
- _3 = &raw mut (_2.1: bool); // scope 1 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- _2 = (const 1_i32, const false); // scope 2 at $DIR/address_of_pair.rs:+3:5: +3:22
- StorageLive(_4); // scope 2 at $DIR/address_of_pair.rs:+4:5: +6:6
- (*_3) = const true; // scope 3 at $DIR/address_of_pair.rs:+5:9: +5:20
- _4 = const (); // scope 3 at $DIR/address_of_pair.rs:+4:5: +6:6
- StorageDead(_4); // scope 2 at $DIR/address_of_pair.rs:+6:5: +6:6
- StorageLive(_5); // scope 2 at $DIR/address_of_pair.rs:+7:9: +7:12
- StorageLive(_6); // scope 2 at $DIR/address_of_pair.rs:+7:16: +7:22
- _6 = (_2.1: bool); // scope 2 at $DIR/address_of_pair.rs:+7:16: +7:22
- _5 = Not(move _6); // scope 2 at $DIR/address_of_pair.rs:+7:15: +7:22
- StorageDead(_6); // scope 2 at $DIR/address_of_pair.rs:+7:21: +7:22
- _0 = _5; // scope 4 at $DIR/address_of_pair.rs:+8:12: +8:15
- StorageDead(_5); // scope 2 at $DIR/address_of_pair.rs:+9:1: +9:2
- StorageDead(_3); // scope 1 at $DIR/address_of_pair.rs:+9:1: +9:2
- StorageDead(_2); // scope 0 at $DIR/address_of_pair.rs:+9:1: +9:2
- return; // scope 0 at $DIR/address_of_pair.rs:+9:2: +9:2
+ StorageLive(_2);
+ _2 = (const 1_i32, const false);
+ StorageLive(_3);
+ _3 = &raw mut (_2.1: bool);
+ _2 = (const 1_i32, const false);
+ StorageLive(_4);
+ (*_3) = const true;
+ _4 = const ();
+ StorageDead(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = (_2.1: bool);
+ _5 = Not(move _6);
+ StorageDead(_6);
+ _0 = _5;
+ StorageDead(_5);
+ StorageDead(_3);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/aggregate.foo.ConstProp.diff b/tests/mir-opt/const_prop/aggregate.foo.ConstProp.diff
deleted file mode 100644
index 6ac460db8..000000000
--- a/tests/mir-opt/const_prop/aggregate.foo.ConstProp.diff
+++ /dev/null
@@ -1,55 +0,0 @@
-- // MIR for `foo` before ConstProp
-+ // MIR for `foo` after ConstProp
-
- fn foo(_1: u8) -> () {
- debug x => _1; // in scope 0 at $DIR/aggregate.rs:+0:8: +0:9
- let mut _0: (); // return place in scope 0 at $DIR/aggregate.rs:+0:15: +0:15
- let _2: i32; // in scope 0 at $DIR/aggregate.rs:+2:9: +2:14
- let mut _3: i32; // in scope 0 at $DIR/aggregate.rs:+2:17: +2:25
- let mut _4: (i32, u8); // in scope 0 at $DIR/aggregate.rs:+2:17: +2:23
- let mut _5: u8; // in scope 0 at $DIR/aggregate.rs:+2:21: +2:22
- let mut _7: i32; // in scope 0 at $DIR/aggregate.rs:+3:18: +3:26
- let mut _8: (u8, i32); // in scope 0 at $DIR/aggregate.rs:+3:18: +3:24
- let mut _9: u8; // in scope 0 at $DIR/aggregate.rs:+3:19: +3:20
- scope 1 {
- debug first => _2; // in scope 1 at $DIR/aggregate.rs:+2:9: +2:14
- let _6: i32; // in scope 1 at $DIR/aggregate.rs:+3:9: +3:15
- scope 2 {
- debug second => _6; // in scope 2 at $DIR/aggregate.rs:+3:9: +3:15
- }
- }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/aggregate.rs:+2:9: +2:14
- StorageLive(_3); // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
- StorageLive(_4); // scope 0 at $DIR/aggregate.rs:+2:17: +2:23
- StorageLive(_5); // scope 0 at $DIR/aggregate.rs:+2:21: +2:22
- _5 = _1; // scope 0 at $DIR/aggregate.rs:+2:21: +2:22
- _4 = (const 0_i32, move _5); // scope 0 at $DIR/aggregate.rs:+2:17: +2:23
- StorageDead(_5); // scope 0 at $DIR/aggregate.rs:+2:22: +2:23
-- _3 = (_4.0: i32); // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
-- _2 = Add(move _3, const 1_i32); // scope 0 at $DIR/aggregate.rs:+2:17: +2:29
-+ _3 = const 0_i32; // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
-+ _2 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+2:17: +2:29
- StorageDead(_3); // scope 0 at $DIR/aggregate.rs:+2:28: +2:29
- StorageDead(_4); // scope 0 at $DIR/aggregate.rs:+2:29: +2:30
- StorageLive(_6); // scope 1 at $DIR/aggregate.rs:+3:9: +3:15
- StorageLive(_7); // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
- StorageLive(_8); // scope 1 at $DIR/aggregate.rs:+3:18: +3:24
- StorageLive(_9); // scope 1 at $DIR/aggregate.rs:+3:19: +3:20
- _9 = _1; // scope 1 at $DIR/aggregate.rs:+3:19: +3:20
- _8 = (move _9, const 1_i32); // scope 1 at $DIR/aggregate.rs:+3:18: +3:24
- StorageDead(_9); // scope 1 at $DIR/aggregate.rs:+3:23: +3:24
-- _7 = (_8.1: i32); // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
-- _6 = Add(move _7, const 2_i32); // scope 1 at $DIR/aggregate.rs:+3:18: +3:30
-+ _7 = const 1_i32; // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
-+ _6 = const 3_i32; // scope 1 at $DIR/aggregate.rs:+3:18: +3:30
- StorageDead(_7); // scope 1 at $DIR/aggregate.rs:+3:29: +3:30
- StorageDead(_8); // scope 1 at $DIR/aggregate.rs:+3:30: +3:31
- _0 = const (); // scope 0 at $DIR/aggregate.rs:+0:15: +4:2
- StorageDead(_6); // scope 1 at $DIR/aggregate.rs:+4:1: +4:2
- StorageDead(_2); // scope 0 at $DIR/aggregate.rs:+4:1: +4:2
- return; // scope 0 at $DIR/aggregate.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/aggregate.foo.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/aggregate.foo.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..5e2db148d
--- /dev/null
+++ b/tests/mir-opt/const_prop/aggregate.foo.ConstProp.panic-abort.diff
@@ -0,0 +1,55 @@
+- // MIR for `foo` before ConstProp
++ // MIR for `foo` after ConstProp
+
+ fn foo(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: i32;
+ let mut _3: i32;
+ let mut _4: (i32, u8);
+ let mut _5: u8;
+ let mut _7: i32;
+ let mut _8: (u8, i32);
+ let mut _9: u8;
+ scope 1 {
+ debug first => _2;
+ let _6: i32;
+ scope 2 {
+ debug second => _6;
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _1;
+ _4 = (const 0_i32, move _5);
+ StorageDead(_5);
+- _3 = (_4.0: i32);
+- _2 = Add(move _3, const 1_i32);
++ _3 = const 0_i32;
++ _2 = const 1_i32;
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ StorageLive(_9);
+ _9 = _1;
+ _8 = (move _9, const 1_i32);
+ StorageDead(_9);
+- _7 = (_8.1: i32);
+- _6 = Add(move _7, const 2_i32);
++ _7 = const 1_i32;
++ _6 = const 3_i32;
+ StorageDead(_7);
+ StorageDead(_8);
+ _0 = const ();
+ StorageDead(_6);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/aggregate.foo.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/aggregate.foo.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..5e2db148d
--- /dev/null
+++ b/tests/mir-opt/const_prop/aggregate.foo.ConstProp.panic-unwind.diff
@@ -0,0 +1,55 @@
+- // MIR for `foo` before ConstProp
++ // MIR for `foo` after ConstProp
+
+ fn foo(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: i32;
+ let mut _3: i32;
+ let mut _4: (i32, u8);
+ let mut _5: u8;
+ let mut _7: i32;
+ let mut _8: (u8, i32);
+ let mut _9: u8;
+ scope 1 {
+ debug first => _2;
+ let _6: i32;
+ scope 2 {
+ debug second => _6;
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _1;
+ _4 = (const 0_i32, move _5);
+ StorageDead(_5);
+- _3 = (_4.0: i32);
+- _2 = Add(move _3, const 1_i32);
++ _3 = const 0_i32;
++ _2 = const 1_i32;
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ StorageLive(_9);
+ _9 = _1;
+ _8 = (move _9, const 1_i32);
+ StorageDead(_9);
+- _7 = (_8.1: i32);
+- _6 = Add(move _7, const 2_i32);
++ _7 = const 1_i32;
++ _6 = const 3_i32;
+ StorageDead(_7);
+ StorageDead(_8);
+ _0 = const ();
+ StorageDead(_6);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.mir b/tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.mir
deleted file mode 100644
index 2ef6d74e5..000000000
--- a/tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.mir
+++ /dev/null
@@ -1,49 +0,0 @@
-// MIR for `foo` after PreCodegen
-
-fn foo(_1: u8) -> () {
- debug x => _1; // in scope 0 at $DIR/aggregate.rs:+0:8: +0:9
- let mut _0: (); // return place in scope 0 at $DIR/aggregate.rs:+0:15: +0:15
- let _2: i32; // in scope 0 at $DIR/aggregate.rs:+2:9: +2:14
- let mut _3: i32; // in scope 0 at $DIR/aggregate.rs:+2:17: +2:25
- let mut _4: (i32, u8); // in scope 0 at $DIR/aggregate.rs:+2:17: +2:23
- let mut _5: u8; // in scope 0 at $DIR/aggregate.rs:+2:21: +2:22
- let mut _7: i32; // in scope 0 at $DIR/aggregate.rs:+3:18: +3:26
- let mut _8: (u8, i32); // in scope 0 at $DIR/aggregate.rs:+3:18: +3:24
- let mut _9: u8; // in scope 0 at $DIR/aggregate.rs:+3:19: +3:20
- scope 1 {
- debug first => _2; // in scope 1 at $DIR/aggregate.rs:+2:9: +2:14
- let _6: i32; // in scope 1 at $DIR/aggregate.rs:+3:9: +3:15
- scope 2 {
- debug second => _6; // in scope 2 at $DIR/aggregate.rs:+3:9: +3:15
- }
- }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/aggregate.rs:+2:9: +2:14
- StorageLive(_3); // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
- StorageLive(_4); // scope 0 at $DIR/aggregate.rs:+2:17: +2:23
- StorageLive(_5); // scope 0 at $DIR/aggregate.rs:+2:21: +2:22
- _5 = _1; // scope 0 at $DIR/aggregate.rs:+2:21: +2:22
- _4 = (const 0_i32, move _5); // scope 0 at $DIR/aggregate.rs:+2:17: +2:23
- StorageDead(_5); // scope 0 at $DIR/aggregate.rs:+2:22: +2:23
- _3 = const 0_i32; // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
- _2 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+2:17: +2:29
- StorageDead(_3); // scope 0 at $DIR/aggregate.rs:+2:28: +2:29
- StorageDead(_4); // scope 0 at $DIR/aggregate.rs:+2:29: +2:30
- StorageLive(_6); // scope 1 at $DIR/aggregate.rs:+3:9: +3:15
- StorageLive(_7); // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
- StorageLive(_8); // scope 1 at $DIR/aggregate.rs:+3:18: +3:24
- StorageLive(_9); // scope 1 at $DIR/aggregate.rs:+3:19: +3:20
- _9 = _1; // scope 1 at $DIR/aggregate.rs:+3:19: +3:20
- _8 = (move _9, const 1_i32); // scope 1 at $DIR/aggregate.rs:+3:18: +3:24
- StorageDead(_9); // scope 1 at $DIR/aggregate.rs:+3:23: +3:24
- _7 = const 1_i32; // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
- _6 = const 3_i32; // scope 1 at $DIR/aggregate.rs:+3:18: +3:30
- StorageDead(_7); // scope 1 at $DIR/aggregate.rs:+3:29: +3:30
- StorageDead(_8); // scope 1 at $DIR/aggregate.rs:+3:30: +3:31
- _0 = const (); // scope 0 at $DIR/aggregate.rs:+0:15: +4:2
- StorageDead(_6); // scope 1 at $DIR/aggregate.rs:+4:1: +4:2
- StorageDead(_2); // scope 0 at $DIR/aggregate.rs:+4:1: +4:2
- return; // scope 0 at $DIR/aggregate.rs:+4:2: +4:2
- }
-}
diff --git a/tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.panic-abort.mir b/tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..b9c5859ca
--- /dev/null
+++ b/tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,49 @@
+// MIR for `foo` after PreCodegen
+
+fn foo(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: i32;
+ let mut _3: i32;
+ let mut _4: (i32, u8);
+ let mut _5: u8;
+ let mut _7: i32;
+ let mut _8: (u8, i32);
+ let mut _9: u8;
+ scope 1 {
+ debug first => _2;
+ let _6: i32;
+ scope 2 {
+ debug second => _6;
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _1;
+ _4 = (const 0_i32, move _5);
+ StorageDead(_5);
+ _3 = const 0_i32;
+ _2 = const 1_i32;
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ StorageLive(_9);
+ _9 = _1;
+ _8 = (move _9, const 1_i32);
+ StorageDead(_9);
+ _7 = const 1_i32;
+ _6 = const 3_i32;
+ StorageDead(_7);
+ StorageDead(_8);
+ _0 = const ();
+ StorageDead(_6);
+ StorageDead(_2);
+ return;
+ }
+}
diff --git a/tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..b9c5859ca
--- /dev/null
+++ b/tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,49 @@
+// MIR for `foo` after PreCodegen
+
+fn foo(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: i32;
+ let mut _3: i32;
+ let mut _4: (i32, u8);
+ let mut _5: u8;
+ let mut _7: i32;
+ let mut _8: (u8, i32);
+ let mut _9: u8;
+ scope 1 {
+ debug first => _2;
+ let _6: i32;
+ scope 2 {
+ debug second => _6;
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _1;
+ _4 = (const 0_i32, move _5);
+ StorageDead(_5);
+ _3 = const 0_i32;
+ _2 = const 1_i32;
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ StorageLive(_9);
+ _9 = _1;
+ _8 = (move _9, const 1_i32);
+ StorageDead(_9);
+ _7 = const 1_i32;
+ _6 = const 3_i32;
+ StorageDead(_7);
+ StorageDead(_8);
+ _0 = const ();
+ StorageDead(_6);
+ StorageDead(_2);
+ return;
+ }
+}
diff --git a/tests/mir-opt/const_prop/aggregate.main.ConstProp.diff b/tests/mir-opt/const_prop/aggregate.main.ConstProp.diff
deleted file mode 100644
index 041197266..000000000
--- a/tests/mir-opt/const_prop/aggregate.main.ConstProp.diff
+++ /dev/null
@@ -1,44 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/aggregate.rs:+0:11: +0:11
- let _1: u8; // in scope 0 at $DIR/aggregate.rs:+1:9: +1:10
- let mut _2: u8; // in scope 0 at $DIR/aggregate.rs:+1:13: +1:24
- let mut _3: (i32, u8, i32); // in scope 0 at $DIR/aggregate.rs:+1:13: +1:22
- let _4: (); // in scope 0 at $DIR/aggregate.rs:+2:5: +2:11
- let mut _5: u8; // in scope 0 at $DIR/aggregate.rs:+2:9: +2:10
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/aggregate.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/aggregate.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
- StorageLive(_3); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
- _3 = (const 0_i32, const 1_u8, const 2_i32); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
-- _2 = (_3.1: u8); // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
-- _1 = Add(move _2, const 0_u8); // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
-+ _2 = const 1_u8; // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
-+ _1 = const 1_u8; // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
- StorageDead(_2); // scope 0 at $DIR/aggregate.rs:+1:27: +1:28
- StorageDead(_3); // scope 0 at $DIR/aggregate.rs:+1:28: +1:29
- StorageLive(_4); // scope 1 at $DIR/aggregate.rs:+2:5: +2:11
- StorageLive(_5); // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
-- _5 = _1; // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
-+ _5 = const 1_u8; // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
- _4 = foo(move _5) -> bb1; // scope 1 at $DIR/aggregate.rs:+2:5: +2:11
- // mir::Constant
- // + span: $DIR/aggregate.rs:9:5: 9:8
- // + literal: Const { ty: fn(u8) {foo}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_5); // scope 1 at $DIR/aggregate.rs:+2:10: +2:11
- StorageDead(_4); // scope 1 at $DIR/aggregate.rs:+2:11: +2:12
- _0 = const (); // scope 0 at $DIR/aggregate.rs:+0:11: +3:2
- StorageDead(_1); // scope 0 at $DIR/aggregate.rs:+3:1: +3:2
- return; // scope 0 at $DIR/aggregate.rs:+3:2: +3:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/aggregate.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/aggregate.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..0fad23104
--- /dev/null
+++ b/tests/mir-opt/const_prop/aggregate.main.ConstProp.panic-abort.diff
@@ -0,0 +1,41 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u8;
+ let mut _2: u8;
+ let mut _3: (i32, u8, i32);
+ let _4: ();
+ let mut _5: u8;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = (const 0_i32, const 1_u8, const 2_i32);
+- _2 = (_3.1: u8);
+- _1 = Add(move _2, const 0_u8);
++ _2 = const 1_u8;
++ _1 = const 1_u8;
+ StorageDead(_2);
+ StorageDead(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+- _5 = _1;
++ _5 = const 1_u8;
+ _4 = foo(move _5) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/aggregate.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/aggregate.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..e4650046b
--- /dev/null
+++ b/tests/mir-opt/const_prop/aggregate.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,41 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u8;
+ let mut _2: u8;
+ let mut _3: (i32, u8, i32);
+ let _4: ();
+ let mut _5: u8;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = (const 0_i32, const 1_u8, const 2_i32);
+- _2 = (_3.1: u8);
+- _1 = Add(move _2, const 0_u8);
++ _2 = const 1_u8;
++ _1 = const 1_u8;
+ StorageDead(_2);
+ StorageDead(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+- _5 = _1;
++ _5 = const 1_u8;
+ _4 = foo(move _5) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.mir b/tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.mir
deleted file mode 100644
index 05d4bf8b5..000000000
--- a/tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.mir
+++ /dev/null
@@ -1,39 +0,0 @@
-// MIR for `main` after PreCodegen
-
-fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/aggregate.rs:+0:11: +0:11
- let _1: u8; // in scope 0 at $DIR/aggregate.rs:+1:9: +1:10
- let mut _2: u8; // in scope 0 at $DIR/aggregate.rs:+1:13: +1:24
- let mut _3: (i32, u8, i32); // in scope 0 at $DIR/aggregate.rs:+1:13: +1:22
- let _4: (); // in scope 0 at $DIR/aggregate.rs:+2:5: +2:11
- let mut _5: u8; // in scope 0 at $DIR/aggregate.rs:+2:9: +2:10
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/aggregate.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/aggregate.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
- StorageLive(_3); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
- _3 = (const 0_i32, const 1_u8, const 2_i32); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
- _2 = const 1_u8; // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
- _1 = const 1_u8; // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
- StorageDead(_2); // scope 0 at $DIR/aggregate.rs:+1:27: +1:28
- StorageDead(_3); // scope 0 at $DIR/aggregate.rs:+1:28: +1:29
- StorageLive(_4); // scope 1 at $DIR/aggregate.rs:+2:5: +2:11
- StorageLive(_5); // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
- _5 = const 1_u8; // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
- _4 = foo(move _5) -> bb1; // scope 1 at $DIR/aggregate.rs:+2:5: +2:11
- // mir::Constant
- // + span: $DIR/aggregate.rs:9:5: 9:8
- // + literal: Const { ty: fn(u8) {foo}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_5); // scope 1 at $DIR/aggregate.rs:+2:10: +2:11
- StorageDead(_4); // scope 1 at $DIR/aggregate.rs:+2:11: +2:12
- _0 = const (); // scope 0 at $DIR/aggregate.rs:+0:11: +3:2
- StorageDead(_1); // scope 0 at $DIR/aggregate.rs:+3:1: +3:2
- return; // scope 0 at $DIR/aggregate.rs:+3:2: +3:2
- }
-}
diff --git a/tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.panic-abort.mir b/tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..2ab6c1bf3
--- /dev/null
+++ b/tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,36 @@
+// MIR for `main` after PreCodegen
+
+fn main() -> () {
+ let mut _0: ();
+ let _1: u8;
+ let mut _2: u8;
+ let mut _3: (i32, u8, i32);
+ let _4: ();
+ let mut _5: u8;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = (const 0_i32, const 1_u8, const 2_i32);
+ _2 = const 1_u8;
+ _1 = const 1_u8;
+ StorageDead(_2);
+ StorageDead(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = const 1_u8;
+ _4 = foo(move _5) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+}
diff --git a/tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..9590c7f90
--- /dev/null
+++ b/tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,36 @@
+// MIR for `main` after PreCodegen
+
+fn main() -> () {
+ let mut _0: ();
+ let _1: u8;
+ let mut _2: u8;
+ let mut _3: (i32, u8, i32);
+ let _4: ();
+ let mut _5: u8;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = (const 0_i32, const 1_u8, const 2_i32);
+ _2 = const 1_u8;
+ _1 = const 1_u8;
+ StorageDead(_2);
+ StorageDead(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = const 1_u8;
+ _4 = foo(move _5) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+}
diff --git a/tests/mir-opt/const_prop/aggregate.rs b/tests/mir-opt/const_prop/aggregate.rs
index ed5a4ab59..62cd3dd68 100644
--- a/tests/mir-opt/const_prop/aggregate.rs
+++ b/tests/mir-opt/const_prop/aggregate.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// compile-flags: -O
diff --git a/tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.diff b/tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.diff
deleted file mode 100644
index 439b2a3e1..000000000
--- a/tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.diff
+++ /dev/null
@@ -1,39 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/array_index.rs:+0:11: +0:11
- let _1: u32; // in scope 0 at $DIR/array_index.rs:+1:9: +1:10
- let mut _2: [u32; 4]; // in scope 0 at $DIR/array_index.rs:+1:18: +1:30
- let _3: usize; // in scope 0 at $DIR/array_index.rs:+1:31: +1:32
- let mut _4: usize; // in scope 0 at $DIR/array_index.rs:+1:18: +1:33
- let mut _5: bool; // in scope 0 at $DIR/array_index.rs:+1:18: +1:33
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/array_index.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/array_index.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/array_index.rs:+1:18: +1:30
- _2 = [const 0_u32, const 1_u32, const 2_u32, const 3_u32]; // scope 0 at $DIR/array_index.rs:+1:18: +1:30
- StorageLive(_3); // scope 0 at $DIR/array_index.rs:+1:31: +1:32
- _3 = const 2_usize; // scope 0 at $DIR/array_index.rs:+1:31: +1:32
-- _4 = Len(_2); // scope 0 at $DIR/array_index.rs:+1:18: +1:33
-- _5 = Lt(_3, _4); // scope 0 at $DIR/array_index.rs:+1:18: +1:33
-- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> bb1; // scope 0 at $DIR/array_index.rs:+1:18: +1:33
-+ _4 = const 4_usize; // scope 0 at $DIR/array_index.rs:+1:18: +1:33
-+ _5 = const true; // scope 0 at $DIR/array_index.rs:+1:18: +1:33
-+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> bb1; // scope 0 at $DIR/array_index.rs:+1:18: +1:33
- }
-
- bb1: {
-- _1 = _2[_3]; // scope 0 at $DIR/array_index.rs:+1:18: +1:33
-+ _1 = const 2_u32; // scope 0 at $DIR/array_index.rs:+1:18: +1:33
- StorageDead(_3); // scope 0 at $DIR/array_index.rs:+1:33: +1:34
- StorageDead(_2); // scope 0 at $DIR/array_index.rs:+1:33: +1:34
- _0 = const (); // scope 0 at $DIR/array_index.rs:+0:11: +2:2
- StorageDead(_1); // scope 0 at $DIR/array_index.rs:+2:1: +2:2
- return; // scope 0 at $DIR/array_index.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.panic-abort.diff b/tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.panic-abort.diff
new file mode 100644
index 000000000..012b11e0e
--- /dev/null
+++ b/tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.panic-abort.diff
@@ -0,0 +1,39 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: [u32; 4];
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = [const 0_u32, const 1_u32, const 2_u32, const 3_u32];
+ StorageLive(_3);
+ _3 = const 2_usize;
+- _4 = Len(_2);
+- _5 = Lt(_3, _4);
+- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
++ _4 = const 4_usize;
++ _5 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = _2[_3];
++ _1 = const 2_u32;
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.panic-unwind.diff b/tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.panic-unwind.diff
new file mode 100644
index 000000000..ec11395c3
--- /dev/null
+++ b/tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.panic-unwind.diff
@@ -0,0 +1,39 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: [u32; 4];
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = [const 0_u32, const 1_u32, const 2_u32, const 3_u32];
+ StorageLive(_3);
+ _3 = const 2_usize;
+- _4 = Len(_2);
+- _5 = Lt(_3, _4);
+- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
++ _4 = const 4_usize;
++ _5 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _1 = _2[_3];
++ _1 = const 2_u32;
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.diff b/tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.diff
deleted file mode 100644
index 439b2a3e1..000000000
--- a/tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.diff
+++ /dev/null
@@ -1,39 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/array_index.rs:+0:11: +0:11
- let _1: u32; // in scope 0 at $DIR/array_index.rs:+1:9: +1:10
- let mut _2: [u32; 4]; // in scope 0 at $DIR/array_index.rs:+1:18: +1:30
- let _3: usize; // in scope 0 at $DIR/array_index.rs:+1:31: +1:32
- let mut _4: usize; // in scope 0 at $DIR/array_index.rs:+1:18: +1:33
- let mut _5: bool; // in scope 0 at $DIR/array_index.rs:+1:18: +1:33
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/array_index.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/array_index.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/array_index.rs:+1:18: +1:30
- _2 = [const 0_u32, const 1_u32, const 2_u32, const 3_u32]; // scope 0 at $DIR/array_index.rs:+1:18: +1:30
- StorageLive(_3); // scope 0 at $DIR/array_index.rs:+1:31: +1:32
- _3 = const 2_usize; // scope 0 at $DIR/array_index.rs:+1:31: +1:32
-- _4 = Len(_2); // scope 0 at $DIR/array_index.rs:+1:18: +1:33
-- _5 = Lt(_3, _4); // scope 0 at $DIR/array_index.rs:+1:18: +1:33
-- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> bb1; // scope 0 at $DIR/array_index.rs:+1:18: +1:33
-+ _4 = const 4_usize; // scope 0 at $DIR/array_index.rs:+1:18: +1:33
-+ _5 = const true; // scope 0 at $DIR/array_index.rs:+1:18: +1:33
-+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> bb1; // scope 0 at $DIR/array_index.rs:+1:18: +1:33
- }
-
- bb1: {
-- _1 = _2[_3]; // scope 0 at $DIR/array_index.rs:+1:18: +1:33
-+ _1 = const 2_u32; // scope 0 at $DIR/array_index.rs:+1:18: +1:33
- StorageDead(_3); // scope 0 at $DIR/array_index.rs:+1:33: +1:34
- StorageDead(_2); // scope 0 at $DIR/array_index.rs:+1:33: +1:34
- _0 = const (); // scope 0 at $DIR/array_index.rs:+0:11: +2:2
- StorageDead(_1); // scope 0 at $DIR/array_index.rs:+2:1: +2:2
- return; // scope 0 at $DIR/array_index.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.panic-abort.diff b/tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.panic-abort.diff
new file mode 100644
index 000000000..012b11e0e
--- /dev/null
+++ b/tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.panic-abort.diff
@@ -0,0 +1,39 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: [u32; 4];
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = [const 0_u32, const 1_u32, const 2_u32, const 3_u32];
+ StorageLive(_3);
+ _3 = const 2_usize;
+- _4 = Len(_2);
+- _5 = Lt(_3, _4);
+- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
++ _4 = const 4_usize;
++ _5 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = _2[_3];
++ _1 = const 2_u32;
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.panic-unwind.diff b/tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.panic-unwind.diff
new file mode 100644
index 000000000..ec11395c3
--- /dev/null
+++ b/tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.panic-unwind.diff
@@ -0,0 +1,39 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: [u32; 4];
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = [const 0_u32, const 1_u32, const 2_u32, const 3_u32];
+ StorageLive(_3);
+ _3 = const 2_usize;
+- _4 = Len(_2);
+- _5 = Lt(_3, _4);
+- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
++ _4 = const 4_usize;
++ _5 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _1 = _2[_3];
++ _1 = const 2_u32;
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/array_index.rs b/tests/mir-opt/const_prop/array_index.rs
index f36cf2213..f85d23b97 100644
--- a/tests/mir-opt/const_prop/array_index.rs
+++ b/tests/mir-opt/const_prop/array_index.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// EMIT_MIR_FOR_EACH_BIT_WIDTH
diff --git a/tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.diff b/tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.diff
deleted file mode 100644
index 900061a48..000000000
--- a/tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.diff
+++ /dev/null
@@ -1,53 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/bad_op_div_by_zero.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/bad_op_div_by_zero.rs:+1:9: +1:10
- let mut _3: i32; // in scope 0 at $DIR/bad_op_div_by_zero.rs:+2:18: +2:19
- let mut _4: bool; // in scope 0 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
- let mut _5: bool; // in scope 0 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
- let mut _6: bool; // in scope 0 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
- let mut _7: bool; // in scope 0 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
- scope 1 {
- debug y => _1; // in scope 1 at $DIR/bad_op_div_by_zero.rs:+1:9: +1:10
- let _2: i32; // in scope 1 at $DIR/bad_op_div_by_zero.rs:+2:9: +2:11
- scope 2 {
- debug _z => _2; // in scope 2 at $DIR/bad_op_div_by_zero.rs:+2:9: +2:11
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/bad_op_div_by_zero.rs:+1:9: +1:10
- _1 = const 0_i32; // scope 0 at $DIR/bad_op_div_by_zero.rs:+1:13: +1:14
- StorageLive(_2); // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:9: +2:11
- StorageLive(_3); // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:18: +2:19
-- _3 = _1; // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:18: +2:19
-- _4 = Eq(_3, const 0_i32); // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
-- assert(!move _4, "attempt to divide `{}` by zero", const 1_i32) -> bb1; // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
-+ _3 = const 0_i32; // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:18: +2:19
-+ _4 = const true; // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
-+ assert(!const true, "attempt to divide `{}` by zero", const 1_i32) -> bb1; // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
- }
-
- bb1: {
-- _5 = Eq(_3, const -1_i32); // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
-- _6 = Eq(const 1_i32, const i32::MIN); // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
-- _7 = BitAnd(move _5, move _6); // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
-- assert(!move _7, "attempt to compute `{} / {}`, which would overflow", const 1_i32, _3) -> bb2; // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
-+ _5 = const false; // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
-+ _6 = const false; // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
-+ _7 = const false; // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
-+ assert(!const false, "attempt to compute `{} / {}`, which would overflow", const 1_i32, _3) -> bb2; // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
- }
-
- bb2: {
- _2 = Div(const 1_i32, move _3); // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:14: +2:19
- StorageDead(_3); // scope 1 at $DIR/bad_op_div_by_zero.rs:+2:18: +2:19
- _0 = const (); // scope 0 at $DIR/bad_op_div_by_zero.rs:+0:11: +3:2
- StorageDead(_2); // scope 1 at $DIR/bad_op_div_by_zero.rs:+3:1: +3:2
- StorageDead(_1); // scope 0 at $DIR/bad_op_div_by_zero.rs:+3:1: +3:2
- return; // scope 0 at $DIR/bad_op_div_by_zero.rs:+3:2: +3:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..34163d4d8
--- /dev/null
+++ b/tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.panic-abort.diff
@@ -0,0 +1,53 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _3: i32;
+ let mut _4: bool;
+ let mut _5: bool;
+ let mut _6: bool;
+ let mut _7: bool;
+ scope 1 {
+ debug y => _1;
+ let _2: i32;
+ scope 2 {
+ debug _z => _2;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 0_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = _1;
+- _4 = Eq(_3, const 0_i32);
+- assert(!move _4, "attempt to divide `{}` by zero", const 1_i32) -> [success: bb1, unwind unreachable];
++ _3 = const 0_i32;
++ _4 = const true;
++ assert(!const true, "attempt to divide `{}` by zero", const 1_i32) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _5 = Eq(_3, const -1_i32);
+- _6 = Eq(const 1_i32, const i32::MIN);
+- _7 = BitAnd(move _5, move _6);
+- assert(!move _7, "attempt to compute `{} / {}`, which would overflow", const 1_i32, _3) -> [success: bb2, unwind unreachable];
++ _5 = const false;
++ _6 = const false;
++ _7 = const false;
++ assert(!const false, "attempt to compute `{} / {}`, which would overflow", const 1_i32, _3) -> [success: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ _2 = Div(const 1_i32, move _3);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..a5b51681e
--- /dev/null
+++ b/tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,53 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _3: i32;
+ let mut _4: bool;
+ let mut _5: bool;
+ let mut _6: bool;
+ let mut _7: bool;
+ scope 1 {
+ debug y => _1;
+ let _2: i32;
+ scope 2 {
+ debug _z => _2;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 0_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = _1;
+- _4 = Eq(_3, const 0_i32);
+- assert(!move _4, "attempt to divide `{}` by zero", const 1_i32) -> [success: bb1, unwind continue];
++ _3 = const 0_i32;
++ _4 = const true;
++ assert(!const true, "attempt to divide `{}` by zero", const 1_i32) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _5 = Eq(_3, const -1_i32);
+- _6 = Eq(const 1_i32, const i32::MIN);
+- _7 = BitAnd(move _5, move _6);
+- assert(!move _7, "attempt to compute `{} / {}`, which would overflow", const 1_i32, _3) -> [success: bb2, unwind continue];
++ _5 = const false;
++ _6 = const false;
++ _7 = const false;
++ assert(!const false, "attempt to compute `{} / {}`, which would overflow", const 1_i32, _3) -> [success: bb2, unwind continue];
+ }
+
+ bb2: {
+ _2 = Div(const 1_i32, move _3);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/bad_op_div_by_zero.rs b/tests/mir-opt/const_prop/bad_op_div_by_zero.rs
index 38f1a993d..963084bf7 100644
--- a/tests/mir-opt/const_prop/bad_op_div_by_zero.rs
+++ b/tests/mir-opt/const_prop/bad_op_div_by_zero.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// EMIT_MIR bad_op_div_by_zero.main.ConstProp.diff
#[allow(unconditional_panic)]
diff --git a/tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.diff b/tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.diff
deleted file mode 100644
index 85d6b5e3d..000000000
--- a/tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.diff
+++ /dev/null
@@ -1,53 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/bad_op_mod_by_zero.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/bad_op_mod_by_zero.rs:+1:9: +1:10
- let mut _3: i32; // in scope 0 at $DIR/bad_op_mod_by_zero.rs:+2:18: +2:19
- let mut _4: bool; // in scope 0 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
- let mut _5: bool; // in scope 0 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
- let mut _6: bool; // in scope 0 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
- let mut _7: bool; // in scope 0 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
- scope 1 {
- debug y => _1; // in scope 1 at $DIR/bad_op_mod_by_zero.rs:+1:9: +1:10
- let _2: i32; // in scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:9: +2:11
- scope 2 {
- debug _z => _2; // in scope 2 at $DIR/bad_op_mod_by_zero.rs:+2:9: +2:11
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/bad_op_mod_by_zero.rs:+1:9: +1:10
- _1 = const 0_i32; // scope 0 at $DIR/bad_op_mod_by_zero.rs:+1:13: +1:14
- StorageLive(_2); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:9: +2:11
- StorageLive(_3); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:18: +2:19
-- _3 = _1; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:18: +2:19
-- _4 = Eq(_3, const 0_i32); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
-- assert(!move _4, "attempt to calculate the remainder of `{}` with a divisor of zero", const 1_i32) -> bb1; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
-+ _3 = const 0_i32; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:18: +2:19
-+ _4 = const true; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
-+ assert(!const true, "attempt to calculate the remainder of `{}` with a divisor of zero", const 1_i32) -> bb1; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
- }
-
- bb1: {
-- _5 = Eq(_3, const -1_i32); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
-- _6 = Eq(const 1_i32, const i32::MIN); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
-- _7 = BitAnd(move _5, move _6); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
-- assert(!move _7, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, _3) -> bb2; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
-+ _5 = const false; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
-+ _6 = const false; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
-+ _7 = const false; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
-+ assert(!const false, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, _3) -> bb2; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
- }
-
- bb2: {
- _2 = Rem(const 1_i32, move _3); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
- StorageDead(_3); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:18: +2:19
- _0 = const (); // scope 0 at $DIR/bad_op_mod_by_zero.rs:+0:11: +3:2
- StorageDead(_2); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+3:1: +3:2
- StorageDead(_1); // scope 0 at $DIR/bad_op_mod_by_zero.rs:+3:1: +3:2
- return; // scope 0 at $DIR/bad_op_mod_by_zero.rs:+3:2: +3:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..eb1c7d34f
--- /dev/null
+++ b/tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.panic-abort.diff
@@ -0,0 +1,53 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _3: i32;
+ let mut _4: bool;
+ let mut _5: bool;
+ let mut _6: bool;
+ let mut _7: bool;
+ scope 1 {
+ debug y => _1;
+ let _2: i32;
+ scope 2 {
+ debug _z => _2;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 0_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = _1;
+- _4 = Eq(_3, const 0_i32);
+- assert(!move _4, "attempt to calculate the remainder of `{}` with a divisor of zero", const 1_i32) -> [success: bb1, unwind unreachable];
++ _3 = const 0_i32;
++ _4 = const true;
++ assert(!const true, "attempt to calculate the remainder of `{}` with a divisor of zero", const 1_i32) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _5 = Eq(_3, const -1_i32);
+- _6 = Eq(const 1_i32, const i32::MIN);
+- _7 = BitAnd(move _5, move _6);
+- assert(!move _7, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, _3) -> [success: bb2, unwind unreachable];
++ _5 = const false;
++ _6 = const false;
++ _7 = const false;
++ assert(!const false, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, _3) -> [success: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ _2 = Rem(const 1_i32, move _3);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..4afddf3c9
--- /dev/null
+++ b/tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,53 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _3: i32;
+ let mut _4: bool;
+ let mut _5: bool;
+ let mut _6: bool;
+ let mut _7: bool;
+ scope 1 {
+ debug y => _1;
+ let _2: i32;
+ scope 2 {
+ debug _z => _2;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 0_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = _1;
+- _4 = Eq(_3, const 0_i32);
+- assert(!move _4, "attempt to calculate the remainder of `{}` with a divisor of zero", const 1_i32) -> [success: bb1, unwind continue];
++ _3 = const 0_i32;
++ _4 = const true;
++ assert(!const true, "attempt to calculate the remainder of `{}` with a divisor of zero", const 1_i32) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _5 = Eq(_3, const -1_i32);
+- _6 = Eq(const 1_i32, const i32::MIN);
+- _7 = BitAnd(move _5, move _6);
+- assert(!move _7, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, _3) -> [success: bb2, unwind continue];
++ _5 = const false;
++ _6 = const false;
++ _7 = const false;
++ assert(!const false, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, _3) -> [success: bb2, unwind continue];
+ }
+
+ bb2: {
+ _2 = Rem(const 1_i32, move _3);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/bad_op_mod_by_zero.rs b/tests/mir-opt/const_prop/bad_op_mod_by_zero.rs
index 93d558250..9d7d2aa10 100644
--- a/tests/mir-opt/const_prop/bad_op_mod_by_zero.rs
+++ b/tests/mir-opt/const_prop/bad_op_mod_by_zero.rs
@@ -1,5 +1,5 @@
// unit-test: ConstProp
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// EMIT_MIR bad_op_mod_by_zero.main.ConstProp.diff
#[allow(unconditional_panic)]
fn main() {
diff --git a/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.diff b/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.diff
deleted file mode 100644
index d72675c2d..000000000
--- a/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.diff
+++ /dev/null
@@ -1,57 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+0:11: +0:11
- let _1: *const [i32]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:9: +1:10
- let mut _2: *const [i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- let _3: &[i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- let _4: [i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:26: +1:35
- let _6: usize; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:23: +3:24
- let mut _7: usize; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
- let mut _8: bool; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
- let mut _9: &[i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- scope 1 {
- debug a => _1; // in scope 1 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:9: +1:10
- scope 2 {
- let _5: i32; // in scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:13: +3:15
- scope 3 {
- debug _b => _5; // in scope 3 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:13: +3:15
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- StorageLive(_3); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- _9 = const _; // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- // mir::Constant
- // + span: $DIR/bad_op_unsafe_oob_for_slices.rs:9:25: 9:35
- // + literal: Const { ty: &[i32; 3], val: Unevaluated(main, [], Some(promoted[0])) }
- _3 = &(*_9); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- _2 = &raw const (*_3); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- _1 = move _2 as *const [i32] (Pointer(Unsize)); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- StorageDead(_2); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:34: +1:35
- StorageDead(_3); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:35: +1:36
- StorageLive(_5); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:13: +3:15
- StorageLive(_6); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:23: +3:24
- _6 = const 3_usize; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:23: +3:24
- _7 = const 3_usize; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
-- _8 = Lt(_6, _7); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
-- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb1; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
-+ _8 = const false; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
-+ assert(const false, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb1; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
- }
-
- bb1: {
-- _5 = (*_1)[_6]; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
-+ _5 = (*_1)[3 of 4]; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
- StorageDead(_6); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:25: +3:26
- _0 = const (); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+2:5: +4:6
- StorageDead(_5); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+4:5: +4:6
- StorageDead(_1); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+5:1: +5:2
- return; // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.panic-abort.diff b/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.panic-abort.diff
new file mode 100644
index 000000000..30402df47
--- /dev/null
+++ b/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.panic-abort.diff
@@ -0,0 +1,54 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: *const [i32];
+ let mut _2: *const [i32; 3];
+ let _3: &[i32; 3];
+ let _4: [i32; 3];
+ let _6: usize;
+ let mut _7: usize;
+ let mut _8: bool;
+ let mut _9: &[i32; 3];
+ scope 1 {
+ debug a => _1;
+ scope 2 {
+ let _5: i32;
+ scope 3 {
+ debug _b => _5;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _9 = const _;
+ _3 = &(*_9);
+ _2 = &raw const (*_3);
+ _1 = move _2 as *const [i32] (PointerCoercion(Unsize));
+ StorageDead(_2);
+ StorageDead(_3);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = const 3_usize;
+ _7 = const 3_usize;
+- _8 = Lt(_6, _7);
+- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable];
++ _8 = const false;
++ assert(const false, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _5 = (*_1)[_6];
++ _5 = (*_1)[3 of 4];
+ StorageDead(_6);
+ _0 = const ();
+ StorageDead(_5);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.panic-unwind.diff b/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.panic-unwind.diff
new file mode 100644
index 000000000..16d62daed
--- /dev/null
+++ b/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.panic-unwind.diff
@@ -0,0 +1,54 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: *const [i32];
+ let mut _2: *const [i32; 3];
+ let _3: &[i32; 3];
+ let _4: [i32; 3];
+ let _6: usize;
+ let mut _7: usize;
+ let mut _8: bool;
+ let mut _9: &[i32; 3];
+ scope 1 {
+ debug a => _1;
+ scope 2 {
+ let _5: i32;
+ scope 3 {
+ debug _b => _5;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _9 = const _;
+ _3 = &(*_9);
+ _2 = &raw const (*_3);
+ _1 = move _2 as *const [i32] (PointerCoercion(Unsize));
+ StorageDead(_2);
+ StorageDead(_3);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = const 3_usize;
+ _7 = const 3_usize;
+- _8 = Lt(_6, _7);
+- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue];
++ _8 = const false;
++ assert(const false, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _5 = (*_1)[_6];
++ _5 = (*_1)[3 of 4];
+ StorageDead(_6);
+ _0 = const ();
+ StorageDead(_5);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.diff b/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.diff
deleted file mode 100644
index d72675c2d..000000000
--- a/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.diff
+++ /dev/null
@@ -1,57 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+0:11: +0:11
- let _1: *const [i32]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:9: +1:10
- let mut _2: *const [i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- let _3: &[i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- let _4: [i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:26: +1:35
- let _6: usize; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:23: +3:24
- let mut _7: usize; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
- let mut _8: bool; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
- let mut _9: &[i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- scope 1 {
- debug a => _1; // in scope 1 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:9: +1:10
- scope 2 {
- let _5: i32; // in scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:13: +3:15
- scope 3 {
- debug _b => _5; // in scope 3 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:13: +3:15
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- StorageLive(_3); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- _9 = const _; // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- // mir::Constant
- // + span: $DIR/bad_op_unsafe_oob_for_slices.rs:9:25: 9:35
- // + literal: Const { ty: &[i32; 3], val: Unevaluated(main, [], Some(promoted[0])) }
- _3 = &(*_9); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- _2 = &raw const (*_3); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- _1 = move _2 as *const [i32] (Pointer(Unsize)); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
- StorageDead(_2); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:34: +1:35
- StorageDead(_3); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:35: +1:36
- StorageLive(_5); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:13: +3:15
- StorageLive(_6); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:23: +3:24
- _6 = const 3_usize; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:23: +3:24
- _7 = const 3_usize; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
-- _8 = Lt(_6, _7); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
-- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb1; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
-+ _8 = const false; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
-+ assert(const false, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb1; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
- }
-
- bb1: {
-- _5 = (*_1)[_6]; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
-+ _5 = (*_1)[3 of 4]; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
- StorageDead(_6); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:25: +3:26
- _0 = const (); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+2:5: +4:6
- StorageDead(_5); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+4:5: +4:6
- StorageDead(_1); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+5:1: +5:2
- return; // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.panic-abort.diff b/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.panic-abort.diff
new file mode 100644
index 000000000..30402df47
--- /dev/null
+++ b/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.panic-abort.diff
@@ -0,0 +1,54 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: *const [i32];
+ let mut _2: *const [i32; 3];
+ let _3: &[i32; 3];
+ let _4: [i32; 3];
+ let _6: usize;
+ let mut _7: usize;
+ let mut _8: bool;
+ let mut _9: &[i32; 3];
+ scope 1 {
+ debug a => _1;
+ scope 2 {
+ let _5: i32;
+ scope 3 {
+ debug _b => _5;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _9 = const _;
+ _3 = &(*_9);
+ _2 = &raw const (*_3);
+ _1 = move _2 as *const [i32] (PointerCoercion(Unsize));
+ StorageDead(_2);
+ StorageDead(_3);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = const 3_usize;
+ _7 = const 3_usize;
+- _8 = Lt(_6, _7);
+- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable];
++ _8 = const false;
++ assert(const false, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _5 = (*_1)[_6];
++ _5 = (*_1)[3 of 4];
+ StorageDead(_6);
+ _0 = const ();
+ StorageDead(_5);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.panic-unwind.diff b/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.panic-unwind.diff
new file mode 100644
index 000000000..16d62daed
--- /dev/null
+++ b/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.panic-unwind.diff
@@ -0,0 +1,54 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: *const [i32];
+ let mut _2: *const [i32; 3];
+ let _3: &[i32; 3];
+ let _4: [i32; 3];
+ let _6: usize;
+ let mut _7: usize;
+ let mut _8: bool;
+ let mut _9: &[i32; 3];
+ scope 1 {
+ debug a => _1;
+ scope 2 {
+ let _5: i32;
+ scope 3 {
+ debug _b => _5;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _9 = const _;
+ _3 = &(*_9);
+ _2 = &raw const (*_3);
+ _1 = move _2 as *const [i32] (PointerCoercion(Unsize));
+ StorageDead(_2);
+ StorageDead(_3);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = const 3_usize;
+ _7 = const 3_usize;
+- _8 = Lt(_6, _7);
+- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue];
++ _8 = const false;
++ assert(const false, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _5 = (*_1)[_6];
++ _5 = (*_1)[3 of 4];
+ StorageDead(_6);
+ _0 = const ();
+ StorageDead(_5);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.rs b/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.rs
index ef148d16d..7931c4f02 100644
--- a/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.rs
+++ b/tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.rs
@@ -1,5 +1,5 @@
// unit-test: ConstProp
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// compile-flags: -Zmir-enable-passes=+NormalizeArrayLen
// EMIT_MIR_FOR_EACH_BIT_WIDTH
diff --git a/tests/mir-opt/const_prop/boolean_identities.test.ConstProp.diff b/tests/mir-opt/const_prop/boolean_identities.test.ConstProp.diff
index 549b4711e..d80534199 100644
--- a/tests/mir-opt/const_prop/boolean_identities.test.ConstProp.diff
+++ b/tests/mir-opt/const_prop/boolean_identities.test.ConstProp.diff
@@ -2,26 +2,26 @@
+ // MIR for `test` after ConstProp
fn test(_1: bool, _2: bool) -> bool {
- debug x => _1; // in scope 0 at $DIR/boolean_identities.rs:+0:13: +0:14
- debug y => _2; // in scope 0 at $DIR/boolean_identities.rs:+0:22: +0:23
- let mut _0: bool; // return place in scope 0 at $DIR/boolean_identities.rs:+0:34: +0:38
- let mut _3: bool; // in scope 0 at $DIR/boolean_identities.rs:+1:5: +1:15
- let mut _4: bool; // in scope 0 at $DIR/boolean_identities.rs:+1:6: +1:7
- let mut _5: bool; // in scope 0 at $DIR/boolean_identities.rs:+1:18: +1:29
- let mut _6: bool; // in scope 0 at $DIR/boolean_identities.rs:+1:19: +1:20
+ debug x => _1;
+ debug y => _2;
+ let mut _0: bool;
+ let mut _3: bool;
+ let mut _4: bool;
+ let mut _5: bool;
+ let mut _6: bool;
bb0: {
- StorageLive(_3); // scope 0 at $DIR/boolean_identities.rs:+1:5: +1:15
-- _3 = BitOr(_2, const true); // scope 0 at $DIR/boolean_identities.rs:+1:5: +1:15
-+ _3 = const true; // scope 0 at $DIR/boolean_identities.rs:+1:5: +1:15
- StorageLive(_5); // scope 0 at $DIR/boolean_identities.rs:+1:18: +1:29
-- _5 = BitAnd(_1, const false); // scope 0 at $DIR/boolean_identities.rs:+1:18: +1:29
-- _0 = BitAnd(move _3, move _5); // scope 0 at $DIR/boolean_identities.rs:+1:5: +1:29
-+ _5 = const false; // scope 0 at $DIR/boolean_identities.rs:+1:18: +1:29
-+ _0 = const false; // scope 0 at $DIR/boolean_identities.rs:+1:5: +1:29
- StorageDead(_5); // scope 0 at $DIR/boolean_identities.rs:+1:28: +1:29
- StorageDead(_3); // scope 0 at $DIR/boolean_identities.rs:+1:28: +1:29
- return; // scope 0 at $DIR/boolean_identities.rs:+2:2: +2:2
+ StorageLive(_3);
+- _3 = BitOr(_2, const true);
++ _3 = const true;
+ StorageLive(_5);
+- _5 = BitAnd(_1, const false);
+- _0 = BitAnd(move _3, move _5);
++ _5 = const false;
++ _0 = const false;
+ StorageDead(_5);
+ StorageDead(_3);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/boxes.main.ConstProp.diff b/tests/mir-opt/const_prop/boxes.main.ConstProp.diff
deleted file mode 100644
index b0e86e753..000000000
--- a/tests/mir-opt/const_prop/boxes.main.ConstProp.diff
+++ /dev/null
@@ -1,60 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/boxes.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/boxes.rs:+1:9: +1:10
- let mut _2: i32; // in scope 0 at $DIR/boxes.rs:+1:13: +2:18
- let mut _3: std::boxed::Box<i32>; // in scope 0 at $DIR/boxes.rs:+1:14: +2:18
- let mut _4: usize; // in scope 0 at $DIR/boxes.rs:+1:14: +2:18
- let mut _5: usize; // in scope 0 at $DIR/boxes.rs:+1:14: +2:18
- let mut _6: *mut u8; // in scope 0 at $DIR/boxes.rs:+1:14: +2:18
- let mut _7: std::boxed::Box<i32>; // in scope 0 at $DIR/boxes.rs:+1:14: +2:18
- let mut _8: *const i32; // in scope 0 at $DIR/boxes.rs:+1:14: +2:18
- let mut _9: *const i32; // in scope 0 at $DIR/boxes.rs:+1:14: +2:18
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/boxes.rs:+1:9: +1:10
- }
- scope 2 {
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/boxes.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/boxes.rs:+1:13: +2:18
- StorageLive(_3); // scope 0 at $DIR/boxes.rs:+1:14: +2:18
-- _4 = SizeOf(i32); // scope 2 at $DIR/boxes.rs:+1:14: +2:18
-- _5 = AlignOf(i32); // scope 2 at $DIR/boxes.rs:+1:14: +2:18
-+ _4 = const 4_usize; // scope 2 at $DIR/boxes.rs:+1:14: +2:18
-+ _5 = const 4_usize; // scope 2 at $DIR/boxes.rs:+1:14: +2:18
- _6 = alloc::alloc::exchange_malloc(move _4, move _5) -> bb1; // scope 2 at $DIR/boxes.rs:+1:14: +2:18
- // mir::Constant
- // + span: $DIR/boxes.rs:13:14: 14:18
- // + literal: Const { ty: unsafe fn(usize, usize) -> *mut u8 {alloc::alloc::exchange_malloc}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageLive(_7); // scope 0 at $DIR/boxes.rs:+1:14: +2:18
- _7 = ShallowInitBox(move _6, i32); // scope 0 at $DIR/boxes.rs:+1:14: +2:18
- _8 = (((_7.0: std::ptr::Unique<i32>).0: std::ptr::NonNull<i32>).0: *const i32); // scope 0 at $DIR/boxes.rs:+2:14: +2:16
- (*_8) = const 42_i32; // scope 0 at $DIR/boxes.rs:+2:14: +2:16
- _3 = move _7; // scope 0 at $DIR/boxes.rs:+1:14: +2:18
- StorageDead(_7); // scope 0 at $DIR/boxes.rs:+2:17: +2:18
- _9 = (((_3.0: std::ptr::Unique<i32>).0: std::ptr::NonNull<i32>).0: *const i32); // scope 0 at $DIR/boxes.rs:+1:13: +2:18
- _2 = (*_9); // scope 0 at $DIR/boxes.rs:+1:13: +2:18
- _1 = Add(move _2, const 0_i32); // scope 0 at $DIR/boxes.rs:+1:13: +3:12
- StorageDead(_2); // scope 0 at $DIR/boxes.rs:+3:11: +3:12
- drop(_3) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/boxes.rs:+3:12: +3:13
- }
-
- bb2: {
- StorageDead(_3); // scope 0 at $DIR/boxes.rs:+3:12: +3:13
- _0 = const (); // scope 0 at $DIR/boxes.rs:+0:11: +4:2
- StorageDead(_1); // scope 0 at $DIR/boxes.rs:+4:1: +4:2
- return; // scope 0 at $DIR/boxes.rs:+4:2: +4:2
- }
-
- bb3 (cleanup): {
- resume; // scope 0 at $DIR/boxes.rs:+0:1: +4:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/boxes.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/boxes.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..24b479694
--- /dev/null
+++ b/tests/mir-opt/const_prop/boxes.main.ConstProp.panic-abort.diff
@@ -0,0 +1,53 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: i32;
+ let mut _3: std::boxed::Box<i32>;
+ let mut _4: usize;
+ let mut _5: usize;
+ let mut _6: *mut u8;
+ let mut _7: std::boxed::Box<i32>;
+ let mut _8: *const i32;
+ let mut _9: *const i32;
+ scope 1 {
+ debug x => _1;
+ }
+ scope 2 {
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+- _4 = SizeOf(i32);
+- _5 = AlignOf(i32);
++ _4 = const 4_usize;
++ _5 = const 4_usize;
+ _6 = alloc::alloc::exchange_malloc(move _4, move _5) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageLive(_7);
+ _7 = ShallowInitBox(move _6, i32);
+ _8 = (((_7.0: std::ptr::Unique<i32>).0: std::ptr::NonNull<i32>).0: *const i32);
+ (*_8) = const 42_i32;
+ _3 = move _7;
+ StorageDead(_7);
+ _9 = (((_3.0: std::ptr::Unique<i32>).0: std::ptr::NonNull<i32>).0: *const i32);
+ _2 = (*_9);
+ _1 = Add(move _2, const 0_i32);
+ StorageDead(_2);
+ drop(_3) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/boxes.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/boxes.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..6214766c7
--- /dev/null
+++ b/tests/mir-opt/const_prop/boxes.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,57 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: i32;
+ let mut _3: std::boxed::Box<i32>;
+ let mut _4: usize;
+ let mut _5: usize;
+ let mut _6: *mut u8;
+ let mut _7: std::boxed::Box<i32>;
+ let mut _8: *const i32;
+ let mut _9: *const i32;
+ scope 1 {
+ debug x => _1;
+ }
+ scope 2 {
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+- _4 = SizeOf(i32);
+- _5 = AlignOf(i32);
++ _4 = const 4_usize;
++ _5 = const 4_usize;
+ _6 = alloc::alloc::exchange_malloc(move _4, move _5) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageLive(_7);
+ _7 = ShallowInitBox(move _6, i32);
+ _8 = (((_7.0: std::ptr::Unique<i32>).0: std::ptr::NonNull<i32>).0: *const i32);
+ (*_8) = const 42_i32;
+ _3 = move _7;
+ StorageDead(_7);
+ _9 = (((_3.0: std::ptr::Unique<i32>).0: std::ptr::NonNull<i32>).0: *const i32);
+ _2 = (*_9);
+ _1 = Add(move _2, const 0_i32);
+ StorageDead(_2);
+ drop(_3) -> [return: bb2, unwind: bb3];
+ }
+
+ bb2: {
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+
+ bb3 (cleanup): {
+ resume;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/boxes.rs b/tests/mir-opt/const_prop/boxes.rs
index 66e8c24d4..9407759cb 100644
--- a/tests/mir-opt/const_prop/boxes.rs
+++ b/tests/mir-opt/const_prop/boxes.rs
@@ -1,7 +1,7 @@
// unit-test: ConstProp
// compile-flags: -O
// ignore-emscripten compiled with panic=abort by default
-// ignore-wasm32
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// ignore-wasm64
#![feature(rustc_attrs, stmt_expr_attributes)]
diff --git a/tests/mir-opt/const_prop/cast.main.ConstProp.diff b/tests/mir-opt/const_prop/cast.main.ConstProp.diff
index 1d4dfc29f..c63adcf11 100644
--- a/tests/mir-opt/const_prop/cast.main.ConstProp.diff
+++ b/tests/mir-opt/const_prop/cast.main.ConstProp.diff
@@ -2,27 +2,27 @@
+ // MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/cast.rs:+0:11: +0:11
- let _1: u32; // in scope 0 at $DIR/cast.rs:+1:9: +1:10
+ let mut _0: ();
+ let _1: u32;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/cast.rs:+1:9: +1:10
- let _2: u8; // in scope 1 at $DIR/cast.rs:+3:9: +3:10
+ debug x => _1;
+ let _2: u8;
scope 2 {
- debug y => _2; // in scope 2 at $DIR/cast.rs:+3:9: +3:10
+ debug y => _2;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/cast.rs:+1:9: +1:10
-- _1 = const 42_u8 as u32 (IntToInt); // scope 0 at $DIR/cast.rs:+1:13: +1:24
-+ _1 = const 42_u32; // scope 0 at $DIR/cast.rs:+1:13: +1:24
- StorageLive(_2); // scope 1 at $DIR/cast.rs:+3:9: +3:10
-- _2 = const 42_u32 as u8 (IntToInt); // scope 1 at $DIR/cast.rs:+3:13: +3:24
-+ _2 = const 42_u8; // scope 1 at $DIR/cast.rs:+3:13: +3:24
- _0 = const (); // scope 0 at $DIR/cast.rs:+0:11: +4:2
- StorageDead(_2); // scope 1 at $DIR/cast.rs:+4:1: +4:2
- StorageDead(_1); // scope 0 at $DIR/cast.rs:+4:1: +4:2
- return; // scope 0 at $DIR/cast.rs:+4:2: +4:2
+ StorageLive(_1);
+- _1 = const 42_u8 as u32 (IntToInt);
++ _1 = const 42_u32;
+ StorageLive(_2);
+- _2 = const 42_u32 as u8 (IntToInt);
++ _2 = const 42_u8;
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/checked_add.main.ConstProp.diff b/tests/mir-opt/const_prop/checked_add.main.ConstProp.diff
deleted file mode 100644
index 96d0d2566..000000000
--- a/tests/mir-opt/const_prop/checked_add.main.ConstProp.diff
+++ /dev/null
@@ -1,28 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/checked_add.rs:+0:11: +0:11
- let _1: u32; // in scope 0 at $DIR/checked_add.rs:+1:9: +1:10
- let mut _2: (u32, bool); // in scope 0 at $DIR/checked_add.rs:+1:18: +1:23
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/checked_add.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/checked_add.rs:+1:9: +1:10
-- _2 = CheckedAdd(const 1_u32, const 1_u32); // scope 0 at $DIR/checked_add.rs:+1:18: +1:23
-- assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 1_u32, const 1_u32) -> bb1; // scope 0 at $DIR/checked_add.rs:+1:18: +1:23
-+ _2 = const (2_u32, false); // scope 0 at $DIR/checked_add.rs:+1:18: +1:23
-+ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 1_u32, const 1_u32) -> bb1; // scope 0 at $DIR/checked_add.rs:+1:18: +1:23
- }
-
- bb1: {
-- _1 = move (_2.0: u32); // scope 0 at $DIR/checked_add.rs:+1:18: +1:23
-+ _1 = const 2_u32; // scope 0 at $DIR/checked_add.rs:+1:18: +1:23
- _0 = const (); // scope 0 at $DIR/checked_add.rs:+0:11: +2:2
- StorageDead(_1); // scope 0 at $DIR/checked_add.rs:+2:1: +2:2
- return; // scope 0 at $DIR/checked_add.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/checked_add.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/checked_add.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..6daef87dd
--- /dev/null
+++ b/tests/mir-opt/const_prop/checked_add.main.ConstProp.panic-abort.diff
@@ -0,0 +1,28 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: (u32, bool);
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _2 = CheckedAdd(const 1_u32, const 1_u32);
+- assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 1_u32, const 1_u32) -> [success: bb1, unwind unreachable];
++ _2 = const (2_u32, false);
++ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 1_u32, const 1_u32) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = move (_2.0: u32);
++ _1 = const 2_u32;
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/checked_add.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/checked_add.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..125407bf2
--- /dev/null
+++ b/tests/mir-opt/const_prop/checked_add.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,28 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: (u32, bool);
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _2 = CheckedAdd(const 1_u32, const 1_u32);
+- assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 1_u32, const 1_u32) -> [success: bb1, unwind continue];
++ _2 = const (2_u32, false);
++ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 1_u32, const 1_u32) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _1 = move (_2.0: u32);
++ _1 = const 2_u32;
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/checked_add.rs b/tests/mir-opt/const_prop/checked_add.rs
index 007defd10..fd40876cb 100644
--- a/tests/mir-opt/const_prop/checked_add.rs
+++ b/tests/mir-opt/const_prop/checked_add.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// compile-flags: -C overflow-checks=on
diff --git a/tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.diff b/tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.diff
deleted file mode 100644
index d75fae30b..000000000
--- a/tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.diff
+++ /dev/null
@@ -1,44 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/const_prop_fails_gracefully.rs:+0:11: +0:11
- let _1: usize; // in scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:9: +2:10
- let mut _2: *const i32; // in scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:30
- let _3: &i32; // in scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:16
- let _4: (); // in scope 0 at $DIR/const_prop_fails_gracefully.rs:+3:5: +3:12
- let mut _5: usize; // in scope 0 at $DIR/const_prop_fails_gracefully.rs:+3:10: +3:11
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/const_prop_fails_gracefully.rs:+2:9: +2:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:9: +2:10
- StorageLive(_2); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:30
- StorageLive(_3); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:16
- _3 = const _; // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:16
- // mir::Constant
- // + span: $DIR/const_prop_fails_gracefully.rs:9:13: 9:16
- // + literal: Const { ty: &i32, val: Unevaluated(FOO, [], None) }
- _2 = &raw const (*_3); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:16
- _1 = move _2 as usize (PointerExposeAddress); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:39
- StorageDead(_2); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:38: +2:39
- StorageDead(_3); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:39: +2:40
- StorageLive(_4); // scope 1 at $DIR/const_prop_fails_gracefully.rs:+3:5: +3:12
- StorageLive(_5); // scope 1 at $DIR/const_prop_fails_gracefully.rs:+3:10: +3:11
- _5 = _1; // scope 1 at $DIR/const_prop_fails_gracefully.rs:+3:10: +3:11
- _4 = read(move _5) -> bb1; // scope 1 at $DIR/const_prop_fails_gracefully.rs:+3:5: +3:12
- // mir::Constant
- // + span: $DIR/const_prop_fails_gracefully.rs:10:5: 10:9
- // + literal: Const { ty: fn(usize) {read}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_5); // scope 1 at $DIR/const_prop_fails_gracefully.rs:+3:11: +3:12
- StorageDead(_4); // scope 1 at $DIR/const_prop_fails_gracefully.rs:+3:12: +3:13
- _0 = const (); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+0:11: +4:2
- StorageDead(_1); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+4:1: +4:2
- return; // scope 0 at $DIR/const_prop_fails_gracefully.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..bd1de7476
--- /dev/null
+++ b/tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.panic-abort.diff
@@ -0,0 +1,38 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: usize;
+ let mut _2: *const i32;
+ let _3: &i32;
+ let _4: ();
+ let mut _5: usize;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = const _;
+ _2 = &raw const (*_3);
+ _1 = move _2 as usize (PointerExposeAddress);
+ StorageDead(_2);
+ StorageDead(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _1;
+ _4 = read(move _5) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..850b743fe
--- /dev/null
+++ b/tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,38 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: usize;
+ let mut _2: *const i32;
+ let _3: &i32;
+ let _4: ();
+ let mut _5: usize;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = const _;
+ _2 = &raw const (*_3);
+ _1 = move _2 as usize (PointerExposeAddress);
+ StorageDead(_2);
+ StorageDead(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _1;
+ _4 = read(move _5) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/const_prop_fails_gracefully.rs b/tests/mir-opt/const_prop/const_prop_fails_gracefully.rs
index 44d487842..c92831f92 100644
--- a/tests/mir-opt/const_prop/const_prop_fails_gracefully.rs
+++ b/tests/mir-opt/const_prop/const_prop_fails_gracefully.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
#[inline(never)]
fn read(_: usize) { }
diff --git a/tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.diff b/tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.diff
deleted file mode 100644
index 7e77c18d5..000000000
--- a/tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-- // MIR for `hello` before ConstProp
-+ // MIR for `hello` after ConstProp
-
- fn hello() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/control_flow_simplification.rs:+0:14: +0:14
- let mut _1: bool; // in scope 0 at $DIR/control_flow_simplification.rs:+1:8: +1:21
- let mut _2: !; // in scope 0 at $SRC_DIR/std/src/panic.rs:LL:COL
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/control_flow_simplification.rs:+1:8: +1:21
- _1 = const _; // scope 0 at $DIR/control_flow_simplification.rs:+1:8: +1:21
-- switchInt(move _1) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/control_flow_simplification.rs:+1:8: +1:21
-+ switchInt(const false) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/control_flow_simplification.rs:+1:8: +1:21
- }
-
- bb1: {
- _2 = begin_panic::<&str>(const "explicit panic"); // scope 0 at $SRC_DIR/std/src/panic.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/std/src/panic.rs:LL:COL
- // + literal: Const { ty: fn(&str) -> ! {begin_panic::<&str>}, val: Value(<ZST>) }
- // mir::Constant
- // + span: $SRC_DIR/std/src/panic.rs:LL:COL
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- }
-
- bb2: {
- StorageDead(_1); // scope 0 at $DIR/control_flow_simplification.rs:+3:5: +3:6
- return; // scope 0 at $DIR/control_flow_simplification.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..e77c09848
--- /dev/null
+++ b/tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.panic-abort.diff
@@ -0,0 +1,25 @@
+- // MIR for `hello` before ConstProp
++ // MIR for `hello` after ConstProp
+
+ fn hello() -> () {
+ let mut _0: ();
+ let mut _1: bool;
+ let mut _2: !;
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const _;
+- switchInt(move _1) -> [0: bb2, otherwise: bb1];
++ switchInt(const false) -> [0: bb2, otherwise: bb1];
+ }
+
+ bb1: {
+ _2 = begin_panic::<&str>(const "explicit panic") -> unwind unreachable;
+ }
+
+ bb2: {
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..7496d2543
--- /dev/null
+++ b/tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.panic-unwind.diff
@@ -0,0 +1,25 @@
+- // MIR for `hello` before ConstProp
++ // MIR for `hello` after ConstProp
+
+ fn hello() -> () {
+ let mut _0: ();
+ let mut _1: bool;
+ let mut _2: !;
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const _;
+- switchInt(move _1) -> [0: bb2, otherwise: bb1];
++ switchInt(const false) -> [0: bb2, otherwise: bb1];
+ }
+
+ bb1: {
+ _2 = begin_panic::<&str>(const "explicit panic") -> unwind continue;
+ }
+
+ bb2: {
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.mir b/tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.mir
deleted file mode 100644
index 9f7528f0c..000000000
--- a/tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.mir
+++ /dev/null
@@ -1,9 +0,0 @@
-// MIR for `hello` before PreCodegen
-
-fn hello() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/control_flow_simplification.rs:+0:14: +0:14
-
- bb0: {
- return; // scope 0 at $DIR/control_flow_simplification.rs:+4:2: +4:2
- }
-}
diff --git a/tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.panic-abort.mir b/tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.panic-abort.mir
new file mode 100644
index 000000000..2b90410f9
--- /dev/null
+++ b/tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.panic-abort.mir
@@ -0,0 +1,9 @@
+// MIR for `hello` before PreCodegen
+
+fn hello() -> () {
+ let mut _0: ();
+
+ bb0: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.panic-unwind.mir b/tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.panic-unwind.mir
new file mode 100644
index 000000000..2b90410f9
--- /dev/null
+++ b/tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.panic-unwind.mir
@@ -0,0 +1,9 @@
+// MIR for `hello` before PreCodegen
+
+fn hello() -> () {
+ let mut _0: ();
+
+ bb0: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/const_prop/control_flow_simplification.rs b/tests/mir-opt/const_prop/control_flow_simplification.rs
index b2ca045e8..21d727b3e 100644
--- a/tests/mir-opt/const_prop/control_flow_simplification.rs
+++ b/tests/mir-opt/const_prop/control_flow_simplification.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// compile-flags: -Zmir-opt-level=1
diff --git a/tests/mir-opt/const_prop/discriminant.main.ConstProp.32bit.diff b/tests/mir-opt/const_prop/discriminant.main.ConstProp.32bit.diff
index 6d8738aa6..e02e7f320 100644
--- a/tests/mir-opt/const_prop/discriminant.main.ConstProp.32bit.diff
+++ b/tests/mir-opt/const_prop/discriminant.main.ConstProp.32bit.diff
@@ -2,54 +2,51 @@
+ // MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/discriminant.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/discriminant.rs:+1:9: +1:10
- let mut _2: i32; // in scope 0 at $DIR/discriminant.rs:+1:13: +1:64
- let mut _3: std::option::Option<bool>; // in scope 0 at $DIR/discriminant.rs:+1:34: +1:44
- let mut _4: isize; // in scope 0 at $DIR/discriminant.rs:+1:21: +1:31
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: i32;
+ let mut _3: std::option::Option<bool>;
+ let mut _4: isize;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/discriminant.rs:+1:9: +1:10
+ debug x => _1;
}
scope 2 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/discriminant.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/discriminant.rs:+1:13: +1:64
- StorageLive(_3); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
-- _3 = Option::<bool>::Some(const true); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
-- _4 = discriminant(_3); // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
-- switchInt(move _4) -> [1: bb1, otherwise: bb3]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
-+ _3 = const Option::<bool>::Some(true); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: Option<bool>, val: Value(Scalar(0x01)) }
-+ _4 = const 1_isize; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
-+ switchInt(const 1_isize) -> [1: bb1, otherwise: bb3]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = Option::<bool>::Some(const true);
+- _4 = discriminant(_3);
+- switchInt(move _4) -> [1: bb1, otherwise: bb3];
++ _3 = const Option::<bool>::Some(true);
++ _4 = const 1_isize;
++ switchInt(const 1_isize) -> [1: bb1, otherwise: bb3];
}
bb1: {
-- switchInt(((_3 as Some).0: bool)) -> [0: bb3, otherwise: bb2]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
-+ switchInt(const true) -> [0: bb3, otherwise: bb2]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
+- switchInt(((_3 as Some).0: bool)) -> [0: bb3, otherwise: bb2];
++ switchInt(const true) -> [0: bb3, otherwise: bb2];
}
bb2: {
- _2 = const 42_i32; // scope 2 at $DIR/discriminant.rs:+1:47: +1:49
- goto -> bb4; // scope 0 at $DIR/discriminant.rs:+1:13: +1:64
+ _2 = const 42_i32;
+ goto -> bb4;
}
bb3: {
- _2 = const 10_i32; // scope 0 at $DIR/discriminant.rs:+1:59: +1:61
- goto -> bb4; // scope 0 at $DIR/discriminant.rs:+1:13: +1:64
+ _2 = const 10_i32;
+ goto -> bb4;
}
bb4: {
- _1 = Add(move _2, const 0_i32); // scope 0 at $DIR/discriminant.rs:+1:13: +1:68
- StorageDead(_2); // scope 0 at $DIR/discriminant.rs:+1:67: +1:68
- StorageDead(_3); // scope 0 at $DIR/discriminant.rs:+1:68: +1:69
- _0 = const (); // scope 0 at $DIR/discriminant.rs:+0:11: +2:2
- StorageDead(_1); // scope 0 at $DIR/discriminant.rs:+2:1: +2:2
- return; // scope 0 at $DIR/discriminant.rs:+2:2: +2:2
+ _1 = Add(move _2, const 0_i32);
+ StorageDead(_2);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/discriminant.main.ConstProp.64bit.diff b/tests/mir-opt/const_prop/discriminant.main.ConstProp.64bit.diff
index 6d8738aa6..e02e7f320 100644
--- a/tests/mir-opt/const_prop/discriminant.main.ConstProp.64bit.diff
+++ b/tests/mir-opt/const_prop/discriminant.main.ConstProp.64bit.diff
@@ -2,54 +2,51 @@
+ // MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/discriminant.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/discriminant.rs:+1:9: +1:10
- let mut _2: i32; // in scope 0 at $DIR/discriminant.rs:+1:13: +1:64
- let mut _3: std::option::Option<bool>; // in scope 0 at $DIR/discriminant.rs:+1:34: +1:44
- let mut _4: isize; // in scope 0 at $DIR/discriminant.rs:+1:21: +1:31
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: i32;
+ let mut _3: std::option::Option<bool>;
+ let mut _4: isize;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/discriminant.rs:+1:9: +1:10
+ debug x => _1;
}
scope 2 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/discriminant.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/discriminant.rs:+1:13: +1:64
- StorageLive(_3); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
-- _3 = Option::<bool>::Some(const true); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
-- _4 = discriminant(_3); // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
-- switchInt(move _4) -> [1: bb1, otherwise: bb3]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
-+ _3 = const Option::<bool>::Some(true); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: Option<bool>, val: Value(Scalar(0x01)) }
-+ _4 = const 1_isize; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
-+ switchInt(const 1_isize) -> [1: bb1, otherwise: bb3]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = Option::<bool>::Some(const true);
+- _4 = discriminant(_3);
+- switchInt(move _4) -> [1: bb1, otherwise: bb3];
++ _3 = const Option::<bool>::Some(true);
++ _4 = const 1_isize;
++ switchInt(const 1_isize) -> [1: bb1, otherwise: bb3];
}
bb1: {
-- switchInt(((_3 as Some).0: bool)) -> [0: bb3, otherwise: bb2]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
-+ switchInt(const true) -> [0: bb3, otherwise: bb2]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
+- switchInt(((_3 as Some).0: bool)) -> [0: bb3, otherwise: bb2];
++ switchInt(const true) -> [0: bb3, otherwise: bb2];
}
bb2: {
- _2 = const 42_i32; // scope 2 at $DIR/discriminant.rs:+1:47: +1:49
- goto -> bb4; // scope 0 at $DIR/discriminant.rs:+1:13: +1:64
+ _2 = const 42_i32;
+ goto -> bb4;
}
bb3: {
- _2 = const 10_i32; // scope 0 at $DIR/discriminant.rs:+1:59: +1:61
- goto -> bb4; // scope 0 at $DIR/discriminant.rs:+1:13: +1:64
+ _2 = const 10_i32;
+ goto -> bb4;
}
bb4: {
- _1 = Add(move _2, const 0_i32); // scope 0 at $DIR/discriminant.rs:+1:13: +1:68
- StorageDead(_2); // scope 0 at $DIR/discriminant.rs:+1:67: +1:68
- StorageDead(_3); // scope 0 at $DIR/discriminant.rs:+1:68: +1:69
- _0 = const (); // scope 0 at $DIR/discriminant.rs:+0:11: +2:2
- StorageDead(_1); // scope 0 at $DIR/discriminant.rs:+2:1: +2:2
- return; // scope 0 at $DIR/discriminant.rs:+2:2: +2:2
+ _1 = Add(move _2, const 0_i32);
+ StorageDead(_2);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/indirect.main.ConstProp.diff b/tests/mir-opt/const_prop/indirect.main.ConstProp.diff
deleted file mode 100644
index f4c0c5c5e..000000000
--- a/tests/mir-opt/const_prop/indirect.main.ConstProp.diff
+++ /dev/null
@@ -1,33 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/indirect.rs:+0:11: +0:11
- let _1: u8; // in scope 0 at $DIR/indirect.rs:+1:9: +1:10
- let mut _2: u8; // in scope 0 at $DIR/indirect.rs:+1:13: +1:25
- let mut _3: (u8, bool); // in scope 0 at $DIR/indirect.rs:+1:13: +1:29
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/indirect.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/indirect.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/indirect.rs:+1:13: +1:25
-- _2 = const 2_u32 as u8 (IntToInt); // scope 0 at $DIR/indirect.rs:+1:13: +1:25
-- _3 = CheckedAdd(_2, const 1_u8); // scope 0 at $DIR/indirect.rs:+1:13: +1:29
-- assert(!move (_3.1: bool), "attempt to compute `{} + {}`, which would overflow", move _2, const 1_u8) -> bb1; // scope 0 at $DIR/indirect.rs:+1:13: +1:29
-+ _2 = const 2_u8; // scope 0 at $DIR/indirect.rs:+1:13: +1:25
-+ _3 = const (3_u8, false); // scope 0 at $DIR/indirect.rs:+1:13: +1:29
-+ assert(!const false, "attempt to compute `{} + {}`, which would overflow", move _2, const 1_u8) -> bb1; // scope 0 at $DIR/indirect.rs:+1:13: +1:29
- }
-
- bb1: {
-- _1 = move (_3.0: u8); // scope 0 at $DIR/indirect.rs:+1:13: +1:29
-+ _1 = const 3_u8; // scope 0 at $DIR/indirect.rs:+1:13: +1:29
- StorageDead(_2); // scope 0 at $DIR/indirect.rs:+1:28: +1:29
- _0 = const (); // scope 0 at $DIR/indirect.rs:+0:11: +2:2
- StorageDead(_1); // scope 0 at $DIR/indirect.rs:+2:1: +2:2
- return; // scope 0 at $DIR/indirect.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/indirect.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/indirect.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..eef9282c2
--- /dev/null
+++ b/tests/mir-opt/const_prop/indirect.main.ConstProp.panic-abort.diff
@@ -0,0 +1,33 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u8;
+ let mut _2: u8;
+ let mut _3: (u8, bool);
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = const 2_u32 as u8 (IntToInt);
+- _3 = CheckedAdd(_2, const 1_u8);
+- assert(!move (_3.1: bool), "attempt to compute `{} + {}`, which would overflow", move _2, const 1_u8) -> [success: bb1, unwind unreachable];
++ _2 = const 2_u8;
++ _3 = const (3_u8, false);
++ assert(!const false, "attempt to compute `{} + {}`, which would overflow", move _2, const 1_u8) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = move (_3.0: u8);
++ _1 = const 3_u8;
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/indirect.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/indirect.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..ccfa35f00
--- /dev/null
+++ b/tests/mir-opt/const_prop/indirect.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,33 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u8;
+ let mut _2: u8;
+ let mut _3: (u8, bool);
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = const 2_u32 as u8 (IntToInt);
+- _3 = CheckedAdd(_2, const 1_u8);
+- assert(!move (_3.1: bool), "attempt to compute `{} + {}`, which would overflow", move _2, const 1_u8) -> [success: bb1, unwind continue];
++ _2 = const 2_u8;
++ _3 = const (3_u8, false);
++ assert(!const false, "attempt to compute `{} + {}`, which would overflow", move _2, const 1_u8) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _1 = move (_3.0: u8);
++ _1 = const 3_u8;
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/indirect.rs b/tests/mir-opt/const_prop/indirect.rs
index 46fd8082d..72af6cd95 100644
--- a/tests/mir-opt/const_prop/indirect.rs
+++ b/tests/mir-opt/const_prop/indirect.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// compile-flags: -C overflow-checks=on
diff --git a/tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.diff b/tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.diff
deleted file mode 100644
index 0ac7fa43d..000000000
--- a/tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.diff
+++ /dev/null
@@ -1,39 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inherit_overflow.rs:+0:11: +0:11
- let mut _1: u8; // in scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- let mut _2: u8; // in scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- let mut _3: u8; // in scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- scope 1 {
- }
- scope 2 (inlined <u8 as Add>::add) { // at $DIR/inherit_overflow.rs:9:13: 9:47
- debug self => _2; // in scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
- debug other => _3; // in scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
- let mut _4: (u8, bool); // in scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- StorageLive(_2); // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- _2 = const u8::MAX; // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- StorageLive(_3); // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- _3 = const 1_u8; // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
-- _4 = CheckedAdd(_2, _3); // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
-- assert(!move (_4.1: bool), "attempt to compute `{} + {}`, which would overflow", _2, _3) -> bb1; // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
-+ _4 = const (0_u8, true); // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
-+ assert(!const true, "attempt to compute `{} + {}`, which would overflow", _2, _3) -> bb1; // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
- }
-
- bb1: {
-- _1 = move (_4.0: u8); // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
-+ _1 = const 0_u8; // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
- StorageDead(_3); // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- StorageDead(_2); // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- StorageDead(_1); // scope 0 at $DIR/inherit_overflow.rs:+3:47: +3:48
- _0 = const (); // scope 0 at $DIR/inherit_overflow.rs:+0:11: +4:2
- return; // scope 0 at $DIR/inherit_overflow.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..e0467e3fc
--- /dev/null
+++ b/tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.panic-abort.diff
@@ -0,0 +1,39 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: u8;
+ let mut _2: u8;
+ let mut _3: u8;
+ scope 1 {
+ }
+ scope 2 (inlined <u8 as Add>::add) {
+ debug self => _2;
+ debug other => _3;
+ let mut _4: (u8, bool);
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const u8::MAX;
+ StorageLive(_3);
+ _3 = const 1_u8;
+- _4 = CheckedAdd(_2, _3);
+- assert(!move (_4.1: bool), "attempt to compute `{} + {}`, which would overflow", _2, _3) -> [success: bb1, unwind unreachable];
++ _4 = const (0_u8, true);
++ assert(!const true, "attempt to compute `{} + {}`, which would overflow", _2, _3) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = move (_4.0: u8);
++ _1 = const 0_u8;
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..4f8e0f0f5
--- /dev/null
+++ b/tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,39 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: u8;
+ let mut _2: u8;
+ let mut _3: u8;
+ scope 1 {
+ }
+ scope 2 (inlined <u8 as Add>::add) {
+ debug self => _2;
+ debug other => _3;
+ let mut _4: (u8, bool);
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const u8::MAX;
+ StorageLive(_3);
+ _3 = const 1_u8;
+- _4 = CheckedAdd(_2, _3);
+- assert(!move (_4.1: bool), "attempt to compute `{} + {}`, which would overflow", _2, _3) -> [success: bb1, unwind continue];
++ _4 = const (0_u8, true);
++ assert(!const true, "attempt to compute `{} + {}`, which would overflow", _2, _3) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _1 = move (_4.0: u8);
++ _1 = const 0_u8;
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/inherit_overflow.rs b/tests/mir-opt/const_prop/inherit_overflow.rs
index 4e905d00d..6ebd36412 100644
--- a/tests/mir-opt/const_prop/inherit_overflow.rs
+++ b/tests/mir-opt/const_prop/inherit_overflow.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// compile-flags: -Zmir-enable-passes=+Inline
diff --git a/tests/mir-opt/const_prop/invalid_constant.main.ConstProp.diff b/tests/mir-opt/const_prop/invalid_constant.main.ConstProp.diff
index 1752d222f..0c9d1f4a3 100644
--- a/tests/mir-opt/const_prop/invalid_constant.main.ConstProp.diff
+++ b/tests/mir-opt/const_prop/invalid_constant.main.ConstProp.diff
@@ -2,24 +2,24 @@
+ // MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/invalid_constant.rs:+0:11: +0:11
- let _1: char; // in scope 0 at $DIR/invalid_constant.rs:+6:9: +6:22
- let mut _2: main::InvalidChar; // in scope 0 at $DIR/invalid_constant.rs:+6:34: +6:63
- let mut _4: E; // in scope 0 at $DIR/invalid_constant.rs:+13:25: +13:59
- let mut _5: main::InvalidTag; // in scope 0 at $DIR/invalid_constant.rs:+13:34: +13:55
- let mut _7: Empty; // in scope 0 at $DIR/invalid_constant.rs:+20:35: +20:73
- let mut _8: main::NoVariants; // in scope 0 at $DIR/invalid_constant.rs:+20:44: +20:65
+ let mut _0: ();
+ let _1: char;
+ let mut _2: main::InvalidChar;
+ let mut _4: E;
+ let mut _5: main::InvalidTag;
+ let mut _7: Empty;
+ let mut _8: main::NoVariants;
scope 1 {
- debug _invalid_char => _1; // in scope 1 at $DIR/invalid_constant.rs:+6:9: +6:22
- let _3: [E; 1]; // in scope 1 at $DIR/invalid_constant.rs:+13:9: +13:21
+ debug _invalid_char => _1;
+ let _3: [E; 1];
scope 3 {
- debug _invalid_tag => _3; // in scope 3 at $DIR/invalid_constant.rs:+13:9: +13:21
- let _6: [Empty; 1]; // in scope 3 at $DIR/invalid_constant.rs:+20:9: +20:31
+ debug _invalid_tag => _3;
+ let _6: [Empty; 1];
scope 5 {
- debug _enum_without_variants => const [ZeroSized: Empty]; // in scope 5 at $DIR/invalid_constant.rs:+20:9: +20:31
- let _9: main::Str<"���">; // in scope 5 at $DIR/invalid_constant.rs:+24:9: +24:22
+ debug _enum_without_variants => const [ZeroSized: Empty];
+ let _9: main::Str<"���">;
scope 7 {
- debug _non_utf8_str => const Str::<"���">; // in scope 7 at $DIR/invalid_constant.rs:+24:9: +24:22
+ debug _non_utf8_str => const Str::<"���">;
}
}
scope 6 {
@@ -32,39 +32,36 @@
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/invalid_constant.rs:+6:9: +6:22
- StorageLive(_2); // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:63
- _2 = InvalidChar { int: const 1114113_u32 }; // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:63
-- _1 = (_2.1: char); // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:67
-+ _1 = const {transmute(0x00110001): char}; // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:67
- StorageDead(_2); // scope 0 at $DIR/invalid_constant.rs:+6:69: +6:70
- StorageLive(_3); // scope 1 at $DIR/invalid_constant.rs:+13:9: +13:21
- StorageLive(_4); // scope 1 at $DIR/invalid_constant.rs:+13:25: +13:59
- StorageLive(_5); // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:55
- _5 = InvalidTag { int: const 4_u32 }; // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:55
-- _4 = (_5.1: E); // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:57
-+ _4 = const Scalar(0x00000004): E; // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:57
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: E, val: Value(Scalar(0x00000004)) }
- _3 = [move _4]; // scope 1 at $DIR/invalid_constant.rs:+13:24: +13:60
- StorageDead(_4); // scope 1 at $DIR/invalid_constant.rs:+13:59: +13:60
- StorageDead(_5); // scope 1 at $DIR/invalid_constant.rs:+13:60: +13:61
- nop; // scope 3 at $DIR/invalid_constant.rs:+20:9: +20:31
- nop; // scope 3 at $DIR/invalid_constant.rs:+20:35: +20:73
- StorageLive(_8); // scope 6 at $DIR/invalid_constant.rs:+20:44: +20:65
- _8 = NoVariants { int: const 0_u32 }; // scope 6 at $DIR/invalid_constant.rs:+20:44: +20:65
- nop; // scope 6 at $DIR/invalid_constant.rs:+20:44: +20:71
- nop; // scope 3 at $DIR/invalid_constant.rs:+20:34: +20:74
- nop; // scope 3 at $DIR/invalid_constant.rs:+20:73: +20:74
- StorageDead(_8); // scope 3 at $DIR/invalid_constant.rs:+20:74: +20:75
- nop; // scope 5 at $DIR/invalid_constant.rs:+24:9: +24:22
- nop; // scope 0 at $DIR/invalid_constant.rs:+0:11: +27:2
- nop; // scope 5 at $DIR/invalid_constant.rs:+27:1: +27:2
- nop; // scope 3 at $DIR/invalid_constant.rs:+27:1: +27:2
- StorageDead(_3); // scope 1 at $DIR/invalid_constant.rs:+27:1: +27:2
- StorageDead(_1); // scope 0 at $DIR/invalid_constant.rs:+27:1: +27:2
- return; // scope 0 at $DIR/invalid_constant.rs:+27:2: +27:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = InvalidChar { int: const 1114113_u32 };
+- _1 = (_2.1: char);
++ _1 = const {transmute(0x00110001): char};
+ StorageDead(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = InvalidTag { int: const 4_u32 };
+- _4 = (_5.1: E);
++ _4 = const Scalar(0x00000004): E;
+ _3 = [move _4];
+ StorageDead(_4);
+ StorageDead(_5);
+ nop;
+ nop;
+ StorageLive(_8);
+ _8 = NoVariants { int: const 0_u32 };
+ nop;
+ nop;
+ nop;
+ StorageDead(_8);
+ nop;
+ nop;
+ nop;
+ nop;
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/invalid_constant.main.RemoveZsts.diff b/tests/mir-opt/const_prop/invalid_constant.main.RemoveZsts.diff
index e31c2bc39..455c2375e 100644
--- a/tests/mir-opt/const_prop/invalid_constant.main.RemoveZsts.diff
+++ b/tests/mir-opt/const_prop/invalid_constant.main.RemoveZsts.diff
@@ -2,26 +2,26 @@
+ // MIR for `main` after RemoveZsts
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/invalid_constant.rs:+0:11: +0:11
- let _1: char; // in scope 0 at $DIR/invalid_constant.rs:+6:9: +6:22
- let mut _2: main::InvalidChar; // in scope 0 at $DIR/invalid_constant.rs:+6:34: +6:63
- let mut _4: E; // in scope 0 at $DIR/invalid_constant.rs:+13:25: +13:59
- let mut _5: main::InvalidTag; // in scope 0 at $DIR/invalid_constant.rs:+13:34: +13:55
- let mut _7: Empty; // in scope 0 at $DIR/invalid_constant.rs:+20:35: +20:73
- let mut _8: main::NoVariants; // in scope 0 at $DIR/invalid_constant.rs:+20:44: +20:65
+ let mut _0: ();
+ let _1: char;
+ let mut _2: main::InvalidChar;
+ let mut _4: E;
+ let mut _5: main::InvalidTag;
+ let mut _7: Empty;
+ let mut _8: main::NoVariants;
scope 1 {
- debug _invalid_char => _1; // in scope 1 at $DIR/invalid_constant.rs:+6:9: +6:22
- let _3: [E; 1]; // in scope 1 at $DIR/invalid_constant.rs:+13:9: +13:21
+ debug _invalid_char => _1;
+ let _3: [E; 1];
scope 3 {
- debug _invalid_tag => _3; // in scope 3 at $DIR/invalid_constant.rs:+13:9: +13:21
- let _6: [Empty; 1]; // in scope 3 at $DIR/invalid_constant.rs:+20:9: +20:31
+ debug _invalid_tag => _3;
+ let _6: [Empty; 1];
scope 5 {
-- debug _enum_without_variants => _6; // in scope 5 at $DIR/invalid_constant.rs:+20:9: +20:31
-+ debug _enum_without_variants => const [ZeroSized: Empty]; // in scope 5 at $DIR/invalid_constant.rs:+20:9: +20:31
- let _9: main::Str<"���">; // in scope 5 at $DIR/invalid_constant.rs:+24:9: +24:22
+- debug _enum_without_variants => _6;
++ debug _enum_without_variants => const [ZeroSized: Empty];
+ let _9: main::Str<"���">;
scope 7 {
-- debug _non_utf8_str => _9; // in scope 7 at $DIR/invalid_constant.rs:+24:9: +24:22
-+ debug _non_utf8_str => const Str::<"���">; // in scope 7 at $DIR/invalid_constant.rs:+24:9: +24:22
+- debug _non_utf8_str => _9;
++ debug _non_utf8_str => const Str::<"���">;
}
}
scope 6 {
@@ -34,43 +34,43 @@
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/invalid_constant.rs:+6:9: +6:22
- StorageLive(_2); // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:63
- _2 = InvalidChar { int: const 1114113_u32 }; // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:63
- _1 = (_2.1: char); // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:67
- StorageDead(_2); // scope 0 at $DIR/invalid_constant.rs:+6:69: +6:70
- StorageLive(_3); // scope 1 at $DIR/invalid_constant.rs:+13:9: +13:21
- StorageLive(_4); // scope 1 at $DIR/invalid_constant.rs:+13:25: +13:59
- StorageLive(_5); // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:55
- _5 = InvalidTag { int: const 4_u32 }; // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:55
- _4 = (_5.1: E); // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:57
- _3 = [move _4]; // scope 1 at $DIR/invalid_constant.rs:+13:24: +13:60
- StorageDead(_4); // scope 1 at $DIR/invalid_constant.rs:+13:59: +13:60
- StorageDead(_5); // scope 1 at $DIR/invalid_constant.rs:+13:60: +13:61
-- StorageLive(_6); // scope 3 at $DIR/invalid_constant.rs:+20:9: +20:31
-- StorageLive(_7); // scope 3 at $DIR/invalid_constant.rs:+20:35: +20:73
-+ nop; // scope 3 at $DIR/invalid_constant.rs:+20:9: +20:31
-+ nop; // scope 3 at $DIR/invalid_constant.rs:+20:35: +20:73
- StorageLive(_8); // scope 6 at $DIR/invalid_constant.rs:+20:44: +20:65
- _8 = NoVariants { int: const 0_u32 }; // scope 6 at $DIR/invalid_constant.rs:+20:44: +20:65
-- _7 = (_8.1: Empty); // scope 6 at $DIR/invalid_constant.rs:+20:44: +20:71
-- _6 = [move _7]; // scope 3 at $DIR/invalid_constant.rs:+20:34: +20:74
-- StorageDead(_7); // scope 3 at $DIR/invalid_constant.rs:+20:73: +20:74
-+ nop; // scope 6 at $DIR/invalid_constant.rs:+20:44: +20:71
-+ nop; // scope 3 at $DIR/invalid_constant.rs:+20:34: +20:74
-+ nop; // scope 3 at $DIR/invalid_constant.rs:+20:73: +20:74
- StorageDead(_8); // scope 3 at $DIR/invalid_constant.rs:+20:74: +20:75
-- StorageLive(_9); // scope 5 at $DIR/invalid_constant.rs:+24:9: +24:22
-- _0 = const (); // scope 0 at $DIR/invalid_constant.rs:+0:11: +27:2
-- StorageDead(_9); // scope 5 at $DIR/invalid_constant.rs:+27:1: +27:2
-- StorageDead(_6); // scope 3 at $DIR/invalid_constant.rs:+27:1: +27:2
-+ nop; // scope 5 at $DIR/invalid_constant.rs:+24:9: +24:22
-+ nop; // scope 0 at $DIR/invalid_constant.rs:+0:11: +27:2
-+ nop; // scope 5 at $DIR/invalid_constant.rs:+27:1: +27:2
-+ nop; // scope 3 at $DIR/invalid_constant.rs:+27:1: +27:2
- StorageDead(_3); // scope 1 at $DIR/invalid_constant.rs:+27:1: +27:2
- StorageDead(_1); // scope 0 at $DIR/invalid_constant.rs:+27:1: +27:2
- return; // scope 0 at $DIR/invalid_constant.rs:+27:2: +27:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = InvalidChar { int: const 1114113_u32 };
+ _1 = (_2.1: char);
+ StorageDead(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = InvalidTag { int: const 4_u32 };
+ _4 = (_5.1: E);
+ _3 = [move _4];
+ StorageDead(_4);
+ StorageDead(_5);
+- StorageLive(_6);
+- StorageLive(_7);
++ nop;
++ nop;
+ StorageLive(_8);
+ _8 = NoVariants { int: const 0_u32 };
+- _7 = (_8.1: Empty);
+- _6 = [move _7];
+- StorageDead(_7);
++ nop;
++ nop;
++ nop;
+ StorageDead(_8);
+- StorageLive(_9);
+- _0 = const ();
+- StorageDead(_9);
+- StorageDead(_6);
++ nop;
++ nop;
++ nop;
++ nop;
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/issue_66971.main.ConstProp.diff b/tests/mir-opt/const_prop/issue_66971.main.ConstProp.diff
deleted file mode 100644
index 265269409..000000000
--- a/tests/mir-opt/const_prop/issue_66971.main.ConstProp.diff
+++ /dev/null
@@ -1,23 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_66971.rs:+0:11: +0:11
- let _1: (); // in scope 0 at $DIR/issue_66971.rs:+1:5: +1:23
- let mut _2: ((), u8, u8); // in scope 0 at $DIR/issue_66971.rs:+1:12: +1:22
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_66971.rs:+1:12: +1:22
- _2 = (const (), const 0_u8, const 0_u8); // scope 0 at $DIR/issue_66971.rs:+1:12: +1:22
- _1 = encode(move _2) -> bb1; // scope 0 at $DIR/issue_66971.rs:+1:5: +1:23
- // mir::Constant
- // + span: $DIR/issue_66971.rs:18:5: 18:11
- // + literal: Const { ty: fn(((), u8, u8)) {encode}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_2); // scope 0 at $DIR/issue_66971.rs:+1:22: +1:23
- return; // scope 0 at $DIR/issue_66971.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/issue_66971.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/issue_66971.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..516f13586
--- /dev/null
+++ b/tests/mir-opt/const_prop/issue_66971.main.ConstProp.panic-abort.diff
@@ -0,0 +1,20 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
+ let mut _2: ((), u8, u8);
+
+ bb0: {
+ StorageLive(_2);
+ _2 = (const (), const 0_u8, const 0_u8);
+ _1 = encode(move _2) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/issue_66971.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/issue_66971.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..5e3443228
--- /dev/null
+++ b/tests/mir-opt/const_prop/issue_66971.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,20 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
+ let mut _2: ((), u8, u8);
+
+ bb0: {
+ StorageLive(_2);
+ _2 = (const (), const 0_u8, const 0_u8);
+ _1 = encode(move _2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/issue_66971.rs b/tests/mir-opt/const_prop/issue_66971.rs
index af95c9ca2..a0242ec63 100644
--- a/tests/mir-opt/const_prop/issue_66971.rs
+++ b/tests/mir-opt/const_prop/issue_66971.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// compile-flags: -Z mir-opt-level=3
diff --git a/tests/mir-opt/const_prop/issue_67019.main.ConstProp.diff b/tests/mir-opt/const_prop/issue_67019.main.ConstProp.diff
deleted file mode 100644
index 54c9200d6..000000000
--- a/tests/mir-opt/const_prop/issue_67019.main.ConstProp.diff
+++ /dev/null
@@ -1,28 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_67019.rs:+0:11: +0:11
- let _1: (); // in scope 0 at $DIR/issue_67019.rs:+1:5: +1:20
- let mut _2: ((u8, u8),); // in scope 0 at $DIR/issue_67019.rs:+1:10: +1:19
- let mut _3: (u8, u8); // in scope 0 at $DIR/issue_67019.rs:+1:11: +1:17
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_67019.rs:+1:10: +1:19
- StorageLive(_3); // scope 0 at $DIR/issue_67019.rs:+1:11: +1:17
-- _3 = (const 1_u8, const 2_u8); // scope 0 at $DIR/issue_67019.rs:+1:11: +1:17
-+ _3 = const (1_u8, 2_u8); // scope 0 at $DIR/issue_67019.rs:+1:11: +1:17
- _2 = (move _3,); // scope 0 at $DIR/issue_67019.rs:+1:10: +1:19
- StorageDead(_3); // scope 0 at $DIR/issue_67019.rs:+1:18: +1:19
- _1 = test(move _2) -> bb1; // scope 0 at $DIR/issue_67019.rs:+1:5: +1:20
- // mir::Constant
- // + span: $DIR/issue_67019.rs:13:5: 13:9
- // + literal: Const { ty: fn(((u8, u8),)) {test}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_2); // scope 0 at $DIR/issue_67019.rs:+1:19: +1:20
- return; // scope 0 at $DIR/issue_67019.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/issue_67019.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/issue_67019.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..96b409372
--- /dev/null
+++ b/tests/mir-opt/const_prop/issue_67019.main.ConstProp.panic-abort.diff
@@ -0,0 +1,25 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
+ let mut _2: ((u8, u8),);
+ let mut _3: (u8, u8);
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = (const 1_u8, const 2_u8);
++ _3 = const (1_u8, 2_u8);
+ _2 = (move _3,);
+ StorageDead(_3);
+ _1 = test(move _2) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/issue_67019.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/issue_67019.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..957760301
--- /dev/null
+++ b/tests/mir-opt/const_prop/issue_67019.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,25 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
+ let mut _2: ((u8, u8),);
+ let mut _3: (u8, u8);
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = (const 1_u8, const 2_u8);
++ _3 = const (1_u8, 2_u8);
+ _2 = (move _3,);
+ StorageDead(_3);
+ _1 = test(move _2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/issue_67019.rs b/tests/mir-opt/const_prop/issue_67019.rs
index 08c7d4805..66b577f5b 100644
--- a/tests/mir-opt/const_prop/issue_67019.rs
+++ b/tests/mir-opt/const_prop/issue_67019.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// compile-flags: -Z mir-opt-level=3
diff --git a/tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.diff b/tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.diff
deleted file mode 100644
index 33bbad2f4..000000000
--- a/tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.diff
+++ /dev/null
@@ -1,39 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/large_array_index.rs:+0:11: +0:11
- let _1: u8; // in scope 0 at $DIR/large_array_index.rs:+2:9: +2:10
- let mut _2: [u8; 5000]; // in scope 0 at $DIR/large_array_index.rs:+2:17: +2:29
- let _3: usize; // in scope 0 at $DIR/large_array_index.rs:+2:30: +2:31
- let mut _4: usize; // in scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
- let mut _5: bool; // in scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/large_array_index.rs:+2:9: +2:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/large_array_index.rs:+2:9: +2:10
- StorageLive(_2); // scope 0 at $DIR/large_array_index.rs:+2:17: +2:29
- _2 = [const 0_u8; 5000]; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:29
- StorageLive(_3); // scope 0 at $DIR/large_array_index.rs:+2:30: +2:31
- _3 = const 2_usize; // scope 0 at $DIR/large_array_index.rs:+2:30: +2:31
-- _4 = Len(_2); // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
-- _5 = Lt(_3, _4); // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
-- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> bb1; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
-+ _4 = const 5000_usize; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
-+ _5 = const true; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
-+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> bb1; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
- }
-
- bb1: {
-- _1 = _2[_3]; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
-+ _1 = _2[2 of 3]; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
- StorageDead(_3); // scope 0 at $DIR/large_array_index.rs:+2:32: +2:33
- StorageDead(_2); // scope 0 at $DIR/large_array_index.rs:+2:32: +2:33
- _0 = const (); // scope 0 at $DIR/large_array_index.rs:+0:11: +3:2
- StorageDead(_1); // scope 0 at $DIR/large_array_index.rs:+3:1: +3:2
- return; // scope 0 at $DIR/large_array_index.rs:+3:2: +3:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.panic-abort.diff b/tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.panic-abort.diff
new file mode 100644
index 000000000..61ba52fb0
--- /dev/null
+++ b/tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.panic-abort.diff
@@ -0,0 +1,39 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u8;
+ let mut _2: [u8; 5000];
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = [const 0_u8; 5000];
+ StorageLive(_3);
+ _3 = const 2_usize;
+- _4 = Len(_2);
+- _5 = Lt(_3, _4);
+- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
++ _4 = const 5000_usize;
++ _5 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = _2[_3];
++ _1 = _2[2 of 3];
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.panic-unwind.diff b/tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.panic-unwind.diff
new file mode 100644
index 000000000..658607116
--- /dev/null
+++ b/tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.panic-unwind.diff
@@ -0,0 +1,39 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u8;
+ let mut _2: [u8; 5000];
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = [const 0_u8; 5000];
+ StorageLive(_3);
+ _3 = const 2_usize;
+- _4 = Len(_2);
+- _5 = Lt(_3, _4);
+- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
++ _4 = const 5000_usize;
++ _5 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _1 = _2[_3];
++ _1 = _2[2 of 3];
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.diff b/tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.diff
deleted file mode 100644
index 33bbad2f4..000000000
--- a/tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.diff
+++ /dev/null
@@ -1,39 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/large_array_index.rs:+0:11: +0:11
- let _1: u8; // in scope 0 at $DIR/large_array_index.rs:+2:9: +2:10
- let mut _2: [u8; 5000]; // in scope 0 at $DIR/large_array_index.rs:+2:17: +2:29
- let _3: usize; // in scope 0 at $DIR/large_array_index.rs:+2:30: +2:31
- let mut _4: usize; // in scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
- let mut _5: bool; // in scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/large_array_index.rs:+2:9: +2:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/large_array_index.rs:+2:9: +2:10
- StorageLive(_2); // scope 0 at $DIR/large_array_index.rs:+2:17: +2:29
- _2 = [const 0_u8; 5000]; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:29
- StorageLive(_3); // scope 0 at $DIR/large_array_index.rs:+2:30: +2:31
- _3 = const 2_usize; // scope 0 at $DIR/large_array_index.rs:+2:30: +2:31
-- _4 = Len(_2); // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
-- _5 = Lt(_3, _4); // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
-- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> bb1; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
-+ _4 = const 5000_usize; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
-+ _5 = const true; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
-+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> bb1; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
- }
-
- bb1: {
-- _1 = _2[_3]; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
-+ _1 = _2[2 of 3]; // scope 0 at $DIR/large_array_index.rs:+2:17: +2:32
- StorageDead(_3); // scope 0 at $DIR/large_array_index.rs:+2:32: +2:33
- StorageDead(_2); // scope 0 at $DIR/large_array_index.rs:+2:32: +2:33
- _0 = const (); // scope 0 at $DIR/large_array_index.rs:+0:11: +3:2
- StorageDead(_1); // scope 0 at $DIR/large_array_index.rs:+3:1: +3:2
- return; // scope 0 at $DIR/large_array_index.rs:+3:2: +3:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.panic-abort.diff b/tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.panic-abort.diff
new file mode 100644
index 000000000..61ba52fb0
--- /dev/null
+++ b/tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.panic-abort.diff
@@ -0,0 +1,39 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u8;
+ let mut _2: [u8; 5000];
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = [const 0_u8; 5000];
+ StorageLive(_3);
+ _3 = const 2_usize;
+- _4 = Len(_2);
+- _5 = Lt(_3, _4);
+- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
++ _4 = const 5000_usize;
++ _5 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = _2[_3];
++ _1 = _2[2 of 3];
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.panic-unwind.diff b/tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.panic-unwind.diff
new file mode 100644
index 000000000..658607116
--- /dev/null
+++ b/tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.panic-unwind.diff
@@ -0,0 +1,39 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u8;
+ let mut _2: [u8; 5000];
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = [const 0_u8; 5000];
+ StorageLive(_3);
+ _3 = const 2_usize;
+- _4 = Len(_2);
+- _5 = Lt(_3, _4);
+- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
++ _4 = const 5000_usize;
++ _5 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _1 = _2[_3];
++ _1 = _2[2 of 3];
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/large_array_index.rs b/tests/mir-opt/const_prop/large_array_index.rs
index 0876445bf..6c03fe9d9 100644
--- a/tests/mir-opt/const_prop/large_array_index.rs
+++ b/tests/mir-opt/const_prop/large_array_index.rs
@@ -1,5 +1,5 @@
// unit-test: ConstProp
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// compile-flags: -Zmir-enable-passes=+NormalizeArrayLen
// EMIT_MIR_FOR_EACH_BIT_WIDTH
diff --git a/tests/mir-opt/const_prop/mult_by_zero.test.ConstProp.diff b/tests/mir-opt/const_prop/mult_by_zero.test.ConstProp.diff
index 629c8e601..73b1da064 100644
--- a/tests/mir-opt/const_prop/mult_by_zero.test.ConstProp.diff
+++ b/tests/mir-opt/const_prop/mult_by_zero.test.ConstProp.diff
@@ -2,17 +2,17 @@
+ // MIR for `test` after ConstProp
fn test(_1: i32) -> i32 {
- debug x => _1; // in scope 0 at $DIR/mult_by_zero.rs:+0:9: +0:10
- let mut _0: i32; // return place in scope 0 at $DIR/mult_by_zero.rs:+0:21: +0:24
- let mut _2: i32; // in scope 0 at $DIR/mult_by_zero.rs:+1:3: +1:4
+ debug x => _1;
+ let mut _0: i32;
+ let mut _2: i32;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/mult_by_zero.rs:+1:3: +1:4
- _2 = _1; // scope 0 at $DIR/mult_by_zero.rs:+1:3: +1:4
-- _0 = Mul(move _2, const 0_i32); // scope 0 at $DIR/mult_by_zero.rs:+1:3: +1:8
-+ _0 = const 0_i32; // scope 0 at $DIR/mult_by_zero.rs:+1:3: +1:8
- StorageDead(_2); // scope 0 at $DIR/mult_by_zero.rs:+1:7: +1:8
- return; // scope 0 at $DIR/mult_by_zero.rs:+2:2: +2:2
+ StorageLive(_2);
+ _2 = _1;
+- _0 = Mul(move _2, const 0_i32);
++ _0 = const 0_i32;
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/mutable_variable.main.ConstProp.diff b/tests/mir-opt/const_prop/mutable_variable.main.ConstProp.diff
index bd010e7b1..ad8d9ddb0 100644
--- a/tests/mir-opt/const_prop/mutable_variable.main.ConstProp.diff
+++ b/tests/mir-opt/const_prop/mutable_variable.main.ConstProp.diff
@@ -2,27 +2,27 @@
+ // MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/mutable_variable.rs:+0:11: +0:11
- let mut _1: i32; // in scope 0 at $DIR/mutable_variable.rs:+1:9: +1:14
+ let mut _0: ();
+ let mut _1: i32;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/mutable_variable.rs:+1:9: +1:14
- let _2: i32; // in scope 1 at $DIR/mutable_variable.rs:+3:9: +3:10
+ debug x => _1;
+ let _2: i32;
scope 2 {
- debug y => _2; // in scope 2 at $DIR/mutable_variable.rs:+3:9: +3:10
+ debug y => _2;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/mutable_variable.rs:+1:9: +1:14
- _1 = const 42_i32; // scope 0 at $DIR/mutable_variable.rs:+1:17: +1:19
- _1 = const 99_i32; // scope 1 at $DIR/mutable_variable.rs:+2:5: +2:11
- StorageLive(_2); // scope 1 at $DIR/mutable_variable.rs:+3:9: +3:10
-- _2 = _1; // scope 1 at $DIR/mutable_variable.rs:+3:13: +3:14
-+ _2 = const 99_i32; // scope 1 at $DIR/mutable_variable.rs:+3:13: +3:14
- _0 = const (); // scope 0 at $DIR/mutable_variable.rs:+0:11: +4:2
- StorageDead(_2); // scope 1 at $DIR/mutable_variable.rs:+4:1: +4:2
- StorageDead(_1); // scope 0 at $DIR/mutable_variable.rs:+4:1: +4:2
- return; // scope 0 at $DIR/mutable_variable.rs:+4:2: +4:2
+ StorageLive(_1);
+ _1 = const 42_i32;
+ _1 = const 99_i32;
+ StorageLive(_2);
+- _2 = _1;
++ _2 = const 99_i32;
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/mutable_variable_aggregate.main.ConstProp.diff b/tests/mir-opt/const_prop/mutable_variable_aggregate.main.ConstProp.diff
index 539f6dd94..0f118c7f5 100644
--- a/tests/mir-opt/const_prop/mutable_variable_aggregate.main.ConstProp.diff
+++ b/tests/mir-opt/const_prop/mutable_variable_aggregate.main.ConstProp.diff
@@ -2,28 +2,28 @@
+ // MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/mutable_variable_aggregate.rs:+0:11: +0:11
- let mut _1: (i32, i32); // in scope 0 at $DIR/mutable_variable_aggregate.rs:+1:9: +1:14
+ let mut _0: ();
+ let mut _1: (i32, i32);
scope 1 {
- debug x => _1; // in scope 1 at $DIR/mutable_variable_aggregate.rs:+1:9: +1:14
- let _2: (i32, i32); // in scope 1 at $DIR/mutable_variable_aggregate.rs:+3:9: +3:10
+ debug x => _1;
+ let _2: (i32, i32);
scope 2 {
- debug y => _2; // in scope 2 at $DIR/mutable_variable_aggregate.rs:+3:9: +3:10
+ debug y => _2;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/mutable_variable_aggregate.rs:+1:9: +1:14
-- _1 = (const 42_i32, const 43_i32); // scope 0 at $DIR/mutable_variable_aggregate.rs:+1:17: +1:25
-+ _1 = const (42_i32, 43_i32); // scope 0 at $DIR/mutable_variable_aggregate.rs:+1:17: +1:25
- (_1.1: i32) = const 99_i32; // scope 1 at $DIR/mutable_variable_aggregate.rs:+2:5: +2:13
- StorageLive(_2); // scope 1 at $DIR/mutable_variable_aggregate.rs:+3:9: +3:10
-- _2 = _1; // scope 1 at $DIR/mutable_variable_aggregate.rs:+3:13: +3:14
-+ _2 = const (42_i32, 99_i32); // scope 1 at $DIR/mutable_variable_aggregate.rs:+3:13: +3:14
- _0 = const (); // scope 0 at $DIR/mutable_variable_aggregate.rs:+0:11: +4:2
- StorageDead(_2); // scope 1 at $DIR/mutable_variable_aggregate.rs:+4:1: +4:2
- StorageDead(_1); // scope 0 at $DIR/mutable_variable_aggregate.rs:+4:1: +4:2
- return; // scope 0 at $DIR/mutable_variable_aggregate.rs:+4:2: +4:2
+ StorageLive(_1);
+- _1 = (const 42_i32, const 43_i32);
++ _1 = const (42_i32, 43_i32);
+ (_1.1: i32) = const 99_i32;
+ StorageLive(_2);
+- _2 = _1;
++ _2 = const (42_i32, 99_i32);
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/mutable_variable_aggregate_mut_ref.main.ConstProp.diff b/tests/mir-opt/const_prop/mutable_variable_aggregate_mut_ref.main.ConstProp.diff
index bec641ecf..106e27f8f 100644
--- a/tests/mir-opt/const_prop/mutable_variable_aggregate_mut_ref.main.ConstProp.diff
+++ b/tests/mir-opt/const_prop/mutable_variable_aggregate_mut_ref.main.ConstProp.diff
@@ -2,33 +2,33 @@
+ // MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/mutable_variable_aggregate_mut_ref.rs:+0:11: +0:11
- let mut _1: (i32, i32); // in scope 0 at $DIR/mutable_variable_aggregate_mut_ref.rs:+1:9: +1:14
+ let mut _0: ();
+ let mut _1: (i32, i32);
scope 1 {
- debug x => _1; // in scope 1 at $DIR/mutable_variable_aggregate_mut_ref.rs:+1:9: +1:14
- let _2: &mut (i32, i32); // in scope 1 at $DIR/mutable_variable_aggregate_mut_ref.rs:+2:9: +2:10
+ debug x => _1;
+ let _2: &mut (i32, i32);
scope 2 {
- debug z => _2; // in scope 2 at $DIR/mutable_variable_aggregate_mut_ref.rs:+2:9: +2:10
- let _3: (i32, i32); // in scope 2 at $DIR/mutable_variable_aggregate_mut_ref.rs:+4:9: +4:10
+ debug z => _2;
+ let _3: (i32, i32);
scope 3 {
- debug y => _3; // in scope 3 at $DIR/mutable_variable_aggregate_mut_ref.rs:+4:9: +4:10
+ debug y => _3;
}
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/mutable_variable_aggregate_mut_ref.rs:+1:9: +1:14
- _1 = (const 42_i32, const 43_i32); // scope 0 at $DIR/mutable_variable_aggregate_mut_ref.rs:+1:17: +1:25
- StorageLive(_2); // scope 1 at $DIR/mutable_variable_aggregate_mut_ref.rs:+2:9: +2:10
- _2 = &mut _1; // scope 1 at $DIR/mutable_variable_aggregate_mut_ref.rs:+2:13: +2:19
- ((*_2).1: i32) = const 99_i32; // scope 2 at $DIR/mutable_variable_aggregate_mut_ref.rs:+3:5: +3:13
- StorageLive(_3); // scope 2 at $DIR/mutable_variable_aggregate_mut_ref.rs:+4:9: +4:10
- _3 = _1; // scope 2 at $DIR/mutable_variable_aggregate_mut_ref.rs:+4:13: +4:14
- _0 = const (); // scope 0 at $DIR/mutable_variable_aggregate_mut_ref.rs:+0:11: +5:2
- StorageDead(_3); // scope 2 at $DIR/mutable_variable_aggregate_mut_ref.rs:+5:1: +5:2
- StorageDead(_2); // scope 1 at $DIR/mutable_variable_aggregate_mut_ref.rs:+5:1: +5:2
- StorageDead(_1); // scope 0 at $DIR/mutable_variable_aggregate_mut_ref.rs:+5:1: +5:2
- return; // scope 0 at $DIR/mutable_variable_aggregate_mut_ref.rs:+5:2: +5:2
+ StorageLive(_1);
+ _1 = (const 42_i32, const 43_i32);
+ StorageLive(_2);
+ _2 = &mut _1;
+ ((*_2).1: i32) = const 99_i32;
+ StorageLive(_3);
+ _3 = _1;
+ _0 = const ();
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.diff b/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.diff
deleted file mode 100644
index 374151057..000000000
--- a/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.diff
+++ /dev/null
@@ -1,35 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/mutable_variable_aggregate_partial_read.rs:+0:11: +0:11
- let mut _1: (i32, i32); // in scope 0 at $DIR/mutable_variable_aggregate_partial_read.rs:+1:9: +1:14
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/mutable_variable_aggregate_partial_read.rs:+1:9: +1:14
- let _2: i32; // in scope 1 at $DIR/mutable_variable_aggregate_partial_read.rs:+4:9: +4:10
- scope 2 {
- debug y => _2; // in scope 2 at $DIR/mutable_variable_aggregate_partial_read.rs:+4:9: +4:10
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/mutable_variable_aggregate_partial_read.rs:+1:9: +1:14
- _1 = foo() -> bb1; // scope 0 at $DIR/mutable_variable_aggregate_partial_read.rs:+1:29: +1:34
- // mir::Constant
- // + span: $DIR/mutable_variable_aggregate_partial_read.rs:6:29: 6:32
- // + literal: Const { ty: fn() -> (i32, i32) {foo}, val: Value(<ZST>) }
- }
-
- bb1: {
- (_1.1: i32) = const 99_i32; // scope 1 at $DIR/mutable_variable_aggregate_partial_read.rs:+2:5: +2:13
- (_1.0: i32) = const 42_i32; // scope 1 at $DIR/mutable_variable_aggregate_partial_read.rs:+3:5: +3:13
- StorageLive(_2); // scope 1 at $DIR/mutable_variable_aggregate_partial_read.rs:+4:9: +4:10
-- _2 = (_1.1: i32); // scope 1 at $DIR/mutable_variable_aggregate_partial_read.rs:+4:13: +4:16
-+ _2 = const 99_i32; // scope 1 at $DIR/mutable_variable_aggregate_partial_read.rs:+4:13: +4:16
- _0 = const (); // scope 0 at $DIR/mutable_variable_aggregate_partial_read.rs:+0:11: +5:2
- StorageDead(_2); // scope 1 at $DIR/mutable_variable_aggregate_partial_read.rs:+5:1: +5:2
- StorageDead(_1); // scope 0 at $DIR/mutable_variable_aggregate_partial_read.rs:+5:1: +5:2
- return; // scope 0 at $DIR/mutable_variable_aggregate_partial_read.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..34288c62f
--- /dev/null
+++ b/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.panic-abort.diff
@@ -0,0 +1,32 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: (i32, i32);
+ scope 1 {
+ debug x => _1;
+ let _2: i32;
+ scope 2 {
+ debug y => _2;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = foo() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ (_1.1: i32) = const 99_i32;
+ (_1.0: i32) = const 42_i32;
+ StorageLive(_2);
+- _2 = (_1.1: i32);
++ _2 = const 99_i32;
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..7ba2b483d
--- /dev/null
+++ b/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,32 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: (i32, i32);
+ scope 1 {
+ debug x => _1;
+ let _2: i32;
+ scope 2 {
+ debug y => _2;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = foo() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ (_1.1: i32) = const 99_i32;
+ (_1.0: i32) = const 42_i32;
+ StorageLive(_2);
+- _2 = (_1.1: i32);
++ _2 = const 99_i32;
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.rs b/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.rs
index 0e823e9dc..30ea5714a 100644
--- a/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.rs
+++ b/tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// EMIT_MIR mutable_variable_aggregate_partial_read.main.ConstProp.diff
diff --git a/tests/mir-opt/const_prop/mutable_variable_no_prop.main.ConstProp.diff b/tests/mir-opt/const_prop/mutable_variable_no_prop.main.ConstProp.diff
index fab810630..ac26f8ef4 100644
--- a/tests/mir-opt/const_prop/mutable_variable_no_prop.main.ConstProp.diff
+++ b/tests/mir-opt/const_prop/mutable_variable_no_prop.main.ConstProp.diff
@@ -2,43 +2,40 @@
+ // MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/mutable_variable_no_prop.rs:+0:11: +0:11
- let mut _1: u32; // in scope 0 at $DIR/mutable_variable_no_prop.rs:+1:9: +1:14
- let _2: (); // in scope 0 at $DIR/mutable_variable_no_prop.rs:+2:5: +4:6
- let mut _3: u32; // in scope 0 at $DIR/mutable_variable_no_prop.rs:+3:13: +3:19
- let mut _4: *mut u32; // in scope 0 at $DIR/mutable_variable_no_prop.rs:+3:13: +3:19
+ let mut _0: ();
+ let mut _1: u32;
+ let _2: ();
+ let mut _3: u32;
+ let mut _4: *mut u32;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/mutable_variable_no_prop.rs:+1:9: +1:14
- let _5: u32; // in scope 1 at $DIR/mutable_variable_no_prop.rs:+5:9: +5:10
+ debug x => _1;
+ let _5: u32;
scope 2 {
}
scope 3 {
- debug y => _5; // in scope 3 at $DIR/mutable_variable_no_prop.rs:+5:9: +5:10
+ debug y => _5;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/mutable_variable_no_prop.rs:+1:9: +1:14
- _1 = const 42_u32; // scope 0 at $DIR/mutable_variable_no_prop.rs:+1:17: +1:19
- StorageLive(_2); // scope 1 at $DIR/mutable_variable_no_prop.rs:+2:5: +4:6
- StorageLive(_3); // scope 2 at $DIR/mutable_variable_no_prop.rs:+3:13: +3:19
- StorageLive(_4); // scope 2 at $DIR/mutable_variable_no_prop.rs:+3:13: +3:19
- _4 = const {alloc1: *mut u32}; // scope 2 at $DIR/mutable_variable_no_prop.rs:+3:13: +3:19
- // mir::Constant
- // + span: $DIR/mutable_variable_no_prop.rs:9:13: 9:19
- // + literal: Const { ty: *mut u32, val: Value(Scalar(alloc1)) }
- _3 = (*_4); // scope 2 at $DIR/mutable_variable_no_prop.rs:+3:13: +3:19
- _1 = move _3; // scope 2 at $DIR/mutable_variable_no_prop.rs:+3:9: +3:19
- StorageDead(_3); // scope 2 at $DIR/mutable_variable_no_prop.rs:+3:18: +3:19
- StorageDead(_4); // scope 2 at $DIR/mutable_variable_no_prop.rs:+3:19: +3:20
- _2 = const (); // scope 2 at $DIR/mutable_variable_no_prop.rs:+2:5: +4:6
- StorageDead(_2); // scope 1 at $DIR/mutable_variable_no_prop.rs:+4:5: +4:6
- StorageLive(_5); // scope 1 at $DIR/mutable_variable_no_prop.rs:+5:9: +5:10
- _5 = _1; // scope 1 at $DIR/mutable_variable_no_prop.rs:+5:13: +5:14
- _0 = const (); // scope 0 at $DIR/mutable_variable_no_prop.rs:+0:11: +6:2
- StorageDead(_5); // scope 1 at $DIR/mutable_variable_no_prop.rs:+6:1: +6:2
- StorageDead(_1); // scope 0 at $DIR/mutable_variable_no_prop.rs:+6:1: +6:2
- return; // scope 0 at $DIR/mutable_variable_no_prop.rs:+6:2: +6:2
+ StorageLive(_1);
+ _1 = const 42_u32;
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = const {alloc1: *mut u32};
+ _3 = (*_4);
+ _1 = move _3;
+ StorageDead(_3);
+ StorageDead(_4);
+ _2 = const ();
+ StorageDead(_2);
+ StorageLive(_5);
+ _5 = _1;
+ _0 = const ();
+ StorageDead(_5);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.diff b/tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.diff
deleted file mode 100644
index 3048122d8..000000000
--- a/tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.diff
+++ /dev/null
@@ -1,53 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+1:9: +1:10
- let mut _3: i32; // in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
- scope 1 {
- debug a => _1; // in scope 1 at $DIR/mutable_variable_unprop_assign.rs:+1:9: +1:10
- let mut _2: (i32, i32); // in scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
- scope 2 {
- debug x => _2; // in scope 2 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
- let _4: i32; // in scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
- scope 3 {
- debug y => _4; // in scope 3 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
- let _5: i32; // in scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
- scope 4 {
- debug z => _5; // in scope 4 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
- }
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/mutable_variable_unprop_assign.rs:+1:9: +1:10
- _1 = foo() -> bb1; // scope 0 at $DIR/mutable_variable_unprop_assign.rs:+1:13: +1:18
- // mir::Constant
- // + span: $DIR/mutable_variable_unprop_assign.rs:6:13: 6:16
- // + literal: Const { ty: fn() -> i32 {foo}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageLive(_2); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
-- _2 = (const 1_i32, const 2_i32); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:29: +2:35
-+ _2 = const (1_i32, 2_i32); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:29: +2:35
- StorageLive(_3); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
- _3 = _1; // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
- (_2.1: i32) = move _3; // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:5: +3:12
- StorageDead(_3); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
- StorageLive(_4); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
- _4 = (_2.1: i32); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:13: +4:16
- StorageLive(_5); // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
-- _5 = (_2.0: i32); // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:13: +5:16
-+ _5 = const 1_i32; // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:13: +5:16
- _0 = const (); // scope 0 at $DIR/mutable_variable_unprop_assign.rs:+0:11: +6:2
- StorageDead(_5); // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
- StorageDead(_4); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
- StorageDead(_2); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
- StorageDead(_1); // scope 0 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
- return; // scope 0 at $DIR/mutable_variable_unprop_assign.rs:+6:2: +6:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..a85dcf9c7
--- /dev/null
+++ b/tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.panic-abort.diff
@@ -0,0 +1,50 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _3: i32;
+ scope 1 {
+ debug a => _1;
+ let mut _2: (i32, i32);
+ scope 2 {
+ debug x => _2;
+ let _4: i32;
+ scope 3 {
+ debug y => _4;
+ let _5: i32;
+ scope 4 {
+ debug z => _5;
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = foo() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageLive(_2);
+- _2 = (const 1_i32, const 2_i32);
++ _2 = const (1_i32, 2_i32);
+ StorageLive(_3);
+ _3 = _1;
+ (_2.1: i32) = move _3;
+ StorageDead(_3);
+ StorageLive(_4);
+ _4 = (_2.1: i32);
+ StorageLive(_5);
+- _5 = (_2.0: i32);
++ _5 = const 1_i32;
+ _0 = const ();
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..15ef0fa4d
--- /dev/null
+++ b/tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,50 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _3: i32;
+ scope 1 {
+ debug a => _1;
+ let mut _2: (i32, i32);
+ scope 2 {
+ debug x => _2;
+ let _4: i32;
+ scope 3 {
+ debug y => _4;
+ let _5: i32;
+ scope 4 {
+ debug z => _5;
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = foo() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageLive(_2);
+- _2 = (const 1_i32, const 2_i32);
++ _2 = const (1_i32, 2_i32);
+ StorageLive(_3);
+ _3 = _1;
+ (_2.1: i32) = move _3;
+ StorageDead(_3);
+ StorageLive(_4);
+ _4 = (_2.1: i32);
+ StorageLive(_5);
+- _5 = (_2.0: i32);
++ _5 = const 1_i32;
+ _0 = const ();
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/mutable_variable_unprop_assign.rs b/tests/mir-opt/const_prop/mutable_variable_unprop_assign.rs
index 5577f78a9..4e7c0597a 100644
--- a/tests/mir-opt/const_prop/mutable_variable_unprop_assign.rs
+++ b/tests/mir-opt/const_prop/mutable_variable_unprop_assign.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// EMIT_MIR mutable_variable_unprop_assign.main.ConstProp.diff
diff --git a/tests/mir-opt/const_prop/offset_of.concrete.ConstProp.diff b/tests/mir-opt/const_prop/offset_of.concrete.ConstProp.diff
deleted file mode 100644
index e3757941c..000000000
--- a/tests/mir-opt/const_prop/offset_of.concrete.ConstProp.diff
+++ /dev/null
@@ -1,44 +0,0 @@
-- // MIR for `concrete` before ConstProp
-+ // MIR for `concrete` after ConstProp
-
- fn concrete() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/offset_of.rs:+0:15: +0:15
- let _1: usize; // in scope 0 at $DIR/offset_of.rs:+1:9: +1:10
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/offset_of.rs:+1:9: +1:10
- let _2: usize; // in scope 1 at $DIR/offset_of.rs:+2:9: +2:10
- scope 2 {
- debug y => _2; // in scope 2 at $DIR/offset_of.rs:+2:9: +2:10
- let _3: usize; // in scope 2 at $DIR/offset_of.rs:+3:9: +3:11
- scope 3 {
- debug z0 => _3; // in scope 3 at $DIR/offset_of.rs:+3:9: +3:11
- let _4: usize; // in scope 3 at $DIR/offset_of.rs:+4:9: +4:11
- scope 4 {
- debug z1 => _4; // in scope 4 at $DIR/offset_of.rs:+4:9: +4:11
- }
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/offset_of.rs:+1:9: +1:10
-- _1 = OffsetOf(Alpha, [0]); // scope 0 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
-+ _1 = const 4_usize; // scope 0 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- StorageLive(_2); // scope 1 at $DIR/offset_of.rs:+2:9: +2:10
-- _2 = OffsetOf(Alpha, [1]); // scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
-+ _2 = const 0_usize; // scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- StorageLive(_3); // scope 2 at $DIR/offset_of.rs:+3:9: +3:11
-- _3 = OffsetOf(Alpha, [2, 0]); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
-+ _3 = const 2_usize; // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- StorageLive(_4); // scope 3 at $DIR/offset_of.rs:+4:9: +4:11
-- _4 = OffsetOf(Alpha, [2, 1]); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
-+ _4 = const 3_usize; // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- _0 = const (); // scope 0 at $DIR/offset_of.rs:+0:15: +5:2
- StorageDead(_4); // scope 3 at $DIR/offset_of.rs:+5:1: +5:2
- StorageDead(_3); // scope 2 at $DIR/offset_of.rs:+5:1: +5:2
- StorageDead(_2); // scope 1 at $DIR/offset_of.rs:+5:1: +5:2
- StorageDead(_1); // scope 0 at $DIR/offset_of.rs:+5:1: +5:2
- return; // scope 0 at $DIR/offset_of.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/offset_of.concrete.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/offset_of.concrete.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..046a79b4b
--- /dev/null
+++ b/tests/mir-opt/const_prop/offset_of.concrete.ConstProp.panic-abort.diff
@@ -0,0 +1,72 @@
+- // MIR for `concrete` before ConstProp
++ // MIR for `concrete` after ConstProp
+
+ fn concrete() -> () {
+ let mut _0: ();
+ let _1: usize;
+ let mut _2: usize;
+ let mut _4: usize;
+ let mut _6: usize;
+ let mut _8: usize;
+ scope 1 {
+ debug x => _1;
+ let _3: usize;
+ scope 2 {
+ debug y => _3;
+ let _5: usize;
+ scope 3 {
+ debug z0 => _5;
+ let _7: usize;
+ scope 4 {
+ debug z1 => _7;
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = OffsetOf(Alpha, [0]);
++ _2 = const 4_usize;
+ _1 = must_use::<usize>(move _2) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = OffsetOf(Alpha, [1]);
++ _4 = const 0_usize;
+ _3 = must_use::<usize>(move _4) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ StorageDead(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+- _6 = OffsetOf(Alpha, [2, 0]);
++ _6 = const 2_usize;
+ _5 = must_use::<usize>(move _6) -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ StorageDead(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+- _8 = OffsetOf(Alpha, [2, 1]);
++ _8 = const 3_usize;
+ _7 = must_use::<usize>(move _8) -> [return: bb4, unwind unreachable];
+ }
+
+ bb4: {
+ StorageDead(_8);
+ _0 = const ();
+ StorageDead(_7);
+ StorageDead(_5);
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/offset_of.concrete.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/offset_of.concrete.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..bbb807d8f
--- /dev/null
+++ b/tests/mir-opt/const_prop/offset_of.concrete.ConstProp.panic-unwind.diff
@@ -0,0 +1,72 @@
+- // MIR for `concrete` before ConstProp
++ // MIR for `concrete` after ConstProp
+
+ fn concrete() -> () {
+ let mut _0: ();
+ let _1: usize;
+ let mut _2: usize;
+ let mut _4: usize;
+ let mut _6: usize;
+ let mut _8: usize;
+ scope 1 {
+ debug x => _1;
+ let _3: usize;
+ scope 2 {
+ debug y => _3;
+ let _5: usize;
+ scope 3 {
+ debug z0 => _5;
+ let _7: usize;
+ scope 4 {
+ debug z1 => _7;
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = OffsetOf(Alpha, [0]);
++ _2 = const 4_usize;
+ _1 = must_use::<usize>(move _2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = OffsetOf(Alpha, [1]);
++ _4 = const 0_usize;
+ _3 = must_use::<usize>(move _4) -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ StorageDead(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+- _6 = OffsetOf(Alpha, [2, 0]);
++ _6 = const 2_usize;
+ _5 = must_use::<usize>(move _6) -> [return: bb3, unwind continue];
+ }
+
+ bb3: {
+ StorageDead(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+- _8 = OffsetOf(Alpha, [2, 1]);
++ _8 = const 3_usize;
+ _7 = must_use::<usize>(move _8) -> [return: bb4, unwind continue];
+ }
+
+ bb4: {
+ StorageDead(_8);
+ _0 = const ();
+ StorageDead(_7);
+ StorageDead(_5);
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/offset_of.generic.ConstProp.diff b/tests/mir-opt/const_prop/offset_of.generic.ConstProp.diff
deleted file mode 100644
index 4a655604c..000000000
--- a/tests/mir-opt/const_prop/offset_of.generic.ConstProp.diff
+++ /dev/null
@@ -1,40 +0,0 @@
-- // MIR for `generic` before ConstProp
-+ // MIR for `generic` after ConstProp
-
- fn generic() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/offset_of.rs:+0:17: +0:17
- let _1: usize; // in scope 0 at $DIR/offset_of.rs:+1:9: +1:11
- scope 1 {
- debug gx => _1; // in scope 1 at $DIR/offset_of.rs:+1:9: +1:11
- let _2: usize; // in scope 1 at $DIR/offset_of.rs:+2:9: +2:11
- scope 2 {
- debug gy => _2; // in scope 2 at $DIR/offset_of.rs:+2:9: +2:11
- let _3: usize; // in scope 2 at $DIR/offset_of.rs:+3:9: +3:11
- scope 3 {
- debug dx => _3; // in scope 3 at $DIR/offset_of.rs:+3:9: +3:11
- let _4: usize; // in scope 3 at $DIR/offset_of.rs:+4:9: +4:11
- scope 4 {
- debug dy => _4; // in scope 4 at $DIR/offset_of.rs:+4:9: +4:11
- }
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/offset_of.rs:+1:9: +1:11
- _1 = OffsetOf(Gamma<T>, [0]); // scope 0 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- StorageLive(_2); // scope 1 at $DIR/offset_of.rs:+2:9: +2:11
- _2 = OffsetOf(Gamma<T>, [1]); // scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- StorageLive(_3); // scope 2 at $DIR/offset_of.rs:+3:9: +3:11
- _3 = OffsetOf(Delta<T>, [1]); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- StorageLive(_4); // scope 3 at $DIR/offset_of.rs:+4:9: +4:11
- _4 = OffsetOf(Delta<T>, [2]); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- _0 = const (); // scope 0 at $DIR/offset_of.rs:+0:17: +5:2
- StorageDead(_4); // scope 3 at $DIR/offset_of.rs:+5:1: +5:2
- StorageDead(_3); // scope 2 at $DIR/offset_of.rs:+5:1: +5:2
- StorageDead(_2); // scope 1 at $DIR/offset_of.rs:+5:1: +5:2
- StorageDead(_1); // scope 0 at $DIR/offset_of.rs:+5:1: +5:2
- return; // scope 0 at $DIR/offset_of.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/offset_of.generic.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/offset_of.generic.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..7519331f6
--- /dev/null
+++ b/tests/mir-opt/const_prop/offset_of.generic.ConstProp.panic-abort.diff
@@ -0,0 +1,68 @@
+- // MIR for `generic` before ConstProp
++ // MIR for `generic` after ConstProp
+
+ fn generic() -> () {
+ let mut _0: ();
+ let _1: usize;
+ let mut _2: usize;
+ let mut _4: usize;
+ let mut _6: usize;
+ let mut _8: usize;
+ scope 1 {
+ debug gx => _1;
+ let _3: usize;
+ scope 2 {
+ debug gy => _3;
+ let _5: usize;
+ scope 3 {
+ debug dx => _5;
+ let _7: usize;
+ scope 4 {
+ debug dy => _7;
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = OffsetOf(Gamma<T>, [0]);
+ _1 = must_use::<usize>(move _2) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = OffsetOf(Gamma<T>, [1]);
+ _3 = must_use::<usize>(move _4) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ StorageDead(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = OffsetOf(Delta<T>, [1]);
+ _5 = must_use::<usize>(move _6) -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ StorageDead(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = OffsetOf(Delta<T>, [2]);
+ _7 = must_use::<usize>(move _8) -> [return: bb4, unwind unreachable];
+ }
+
+ bb4: {
+ StorageDead(_8);
+ _0 = const ();
+ StorageDead(_7);
+ StorageDead(_5);
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/offset_of.generic.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/offset_of.generic.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..fd5206e46
--- /dev/null
+++ b/tests/mir-opt/const_prop/offset_of.generic.ConstProp.panic-unwind.diff
@@ -0,0 +1,68 @@
+- // MIR for `generic` before ConstProp
++ // MIR for `generic` after ConstProp
+
+ fn generic() -> () {
+ let mut _0: ();
+ let _1: usize;
+ let mut _2: usize;
+ let mut _4: usize;
+ let mut _6: usize;
+ let mut _8: usize;
+ scope 1 {
+ debug gx => _1;
+ let _3: usize;
+ scope 2 {
+ debug gy => _3;
+ let _5: usize;
+ scope 3 {
+ debug dx => _5;
+ let _7: usize;
+ scope 4 {
+ debug dy => _7;
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = OffsetOf(Gamma<T>, [0]);
+ _1 = must_use::<usize>(move _2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = OffsetOf(Gamma<T>, [1]);
+ _3 = must_use::<usize>(move _4) -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ StorageDead(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = OffsetOf(Delta<T>, [1]);
+ _5 = must_use::<usize>(move _6) -> [return: bb3, unwind continue];
+ }
+
+ bb3: {
+ StorageDead(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = OffsetOf(Delta<T>, [2]);
+ _7 = must_use::<usize>(move _8) -> [return: bb4, unwind continue];
+ }
+
+ bb4: {
+ StorageDead(_8);
+ _0 = const ();
+ StorageDead(_7);
+ StorageDead(_5);
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/offset_of.rs b/tests/mir-opt/const_prop/offset_of.rs
index 4cdcd28ee..164db5957 100644
--- a/tests/mir-opt/const_prop/offset_of.rs
+++ b/tests/mir-opt/const_prop/offset_of.rs
@@ -1,4 +1,5 @@
// unit-test: ConstProp
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![feature(offset_of)]
diff --git a/tests/mir-opt/const_prop/read_immutable_static.main.ConstProp.diff b/tests/mir-opt/const_prop/read_immutable_static.main.ConstProp.diff
index c290fba56..29c455f35 100644
--- a/tests/mir-opt/const_prop/read_immutable_static.main.ConstProp.diff
+++ b/tests/mir-opt/const_prop/read_immutable_static.main.ConstProp.diff
@@ -2,43 +2,37 @@
+ // MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/read_immutable_static.rs:+0:11: +0:11
- let _1: u8; // in scope 0 at $DIR/read_immutable_static.rs:+1:9: +1:10
- let mut _2: u8; // in scope 0 at $DIR/read_immutable_static.rs:+1:13: +1:16
- let mut _3: &u8; // in scope 0 at $DIR/read_immutable_static.rs:+1:13: +1:16
- let mut _4: u8; // in scope 0 at $DIR/read_immutable_static.rs:+1:19: +1:22
- let mut _5: &u8; // in scope 0 at $DIR/read_immutable_static.rs:+1:19: +1:22
+ let mut _0: ();
+ let _1: u8;
+ let mut _2: u8;
+ let mut _3: &u8;
+ let mut _4: u8;
+ let mut _5: &u8;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/read_immutable_static.rs:+1:9: +1:10
+ debug x => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/read_immutable_static.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/read_immutable_static.rs:+1:13: +1:16
- StorageLive(_3); // scope 0 at $DIR/read_immutable_static.rs:+1:13: +1:16
- _3 = const {alloc1: &u8}; // scope 0 at $DIR/read_immutable_static.rs:+1:13: +1:16
- // mir::Constant
- // + span: $DIR/read_immutable_static.rs:7:13: 7:16
- // + literal: Const { ty: &u8, val: Value(Scalar(alloc1)) }
-- _2 = (*_3); // scope 0 at $DIR/read_immutable_static.rs:+1:13: +1:16
-+ _2 = const 2_u8; // scope 0 at $DIR/read_immutable_static.rs:+1:13: +1:16
- StorageLive(_4); // scope 0 at $DIR/read_immutable_static.rs:+1:19: +1:22
- StorageLive(_5); // scope 0 at $DIR/read_immutable_static.rs:+1:19: +1:22
- _5 = const {alloc1: &u8}; // scope 0 at $DIR/read_immutable_static.rs:+1:19: +1:22
- // mir::Constant
- // + span: $DIR/read_immutable_static.rs:7:19: 7:22
- // + literal: Const { ty: &u8, val: Value(Scalar(alloc1)) }
-- _4 = (*_5); // scope 0 at $DIR/read_immutable_static.rs:+1:19: +1:22
-- _1 = Add(move _2, move _4); // scope 0 at $DIR/read_immutable_static.rs:+1:13: +1:22
-+ _4 = const 2_u8; // scope 0 at $DIR/read_immutable_static.rs:+1:19: +1:22
-+ _1 = const 4_u8; // scope 0 at $DIR/read_immutable_static.rs:+1:13: +1:22
- StorageDead(_4); // scope 0 at $DIR/read_immutable_static.rs:+1:21: +1:22
- StorageDead(_2); // scope 0 at $DIR/read_immutable_static.rs:+1:21: +1:22
- StorageDead(_5); // scope 0 at $DIR/read_immutable_static.rs:+1:22: +1:23
- StorageDead(_3); // scope 0 at $DIR/read_immutable_static.rs:+1:22: +1:23
- _0 = const (); // scope 0 at $DIR/read_immutable_static.rs:+0:11: +2:2
- StorageDead(_1); // scope 0 at $DIR/read_immutable_static.rs:+2:1: +2:2
- return; // scope 0 at $DIR/read_immutable_static.rs:+2:2: +2:2
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = const {alloc1: &u8};
+- _2 = (*_3);
++ _2 = const 2_u8;
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = const {alloc1: &u8};
+- _4 = (*_5);
+- _1 = Add(move _2, move _4);
++ _4 = const 2_u8;
++ _1 = const 4_u8;
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_5);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/ref_deref.main.ConstProp.diff b/tests/mir-opt/const_prop/ref_deref.main.ConstProp.diff
index 924a267f3..6b897a881 100644
--- a/tests/mir-opt/const_prop/ref_deref.main.ConstProp.diff
+++ b/tests/mir-opt/const_prop/ref_deref.main.ConstProp.diff
@@ -2,25 +2,22 @@
+ // MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/ref_deref.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/ref_deref.rs:+1:5: +1:10
- let mut _2: &i32; // in scope 0 at $DIR/ref_deref.rs:+1:6: +1:10
- let _3: i32; // in scope 0 at $DIR/ref_deref.rs:+1:8: +1:9
- let mut _4: &i32; // in scope 0 at $DIR/ref_deref.rs:+1:6: +1:10
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: &i32;
+ let _3: i32;
+ let mut _4: &i32;
bb0: {
- StorageLive(_1); // scope 0 at $DIR/ref_deref.rs:+1:5: +1:10
- StorageLive(_2); // scope 0 at $DIR/ref_deref.rs:+1:6: +1:10
- _4 = const _; // scope 0 at $DIR/ref_deref.rs:+1:6: +1:10
- // mir::Constant
- // + span: $DIR/ref_deref.rs:5:6: 5:10
- // + literal: Const { ty: &i32, val: Unevaluated(main, [], Some(promoted[0])) }
- _2 = &(*_4); // scope 0 at $DIR/ref_deref.rs:+1:6: +1:10
- _1 = (*_2); // scope 0 at $DIR/ref_deref.rs:+1:5: +1:10
- StorageDead(_2); // scope 0 at $DIR/ref_deref.rs:+1:10: +1:11
- StorageDead(_1); // scope 0 at $DIR/ref_deref.rs:+1:10: +1:11
- _0 = const (); // scope 0 at $DIR/ref_deref.rs:+0:11: +2:2
- return; // scope 0 at $DIR/ref_deref.rs:+2:2: +2:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _4 = const _;
+ _2 = &(*_4);
+ _1 = (*_2);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/ref_deref_project.main.ConstProp.diff b/tests/mir-opt/const_prop/ref_deref_project.main.ConstProp.diff
index 59095b448..7f6161665 100644
--- a/tests/mir-opt/const_prop/ref_deref_project.main.ConstProp.diff
+++ b/tests/mir-opt/const_prop/ref_deref_project.main.ConstProp.diff
@@ -2,25 +2,22 @@
+ // MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/ref_deref_project.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/ref_deref_project.rs:+1:5: +1:17
- let mut _2: &i32; // in scope 0 at $DIR/ref_deref_project.rs:+1:6: +1:17
- let _3: (i32, i32); // in scope 0 at $DIR/ref_deref_project.rs:+1:8: +1:14
- let mut _4: &(i32, i32); // in scope 0 at $DIR/ref_deref_project.rs:+1:6: +1:17
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: &i32;
+ let _3: (i32, i32);
+ let mut _4: &(i32, i32);
bb0: {
- StorageLive(_1); // scope 0 at $DIR/ref_deref_project.rs:+1:5: +1:17
- StorageLive(_2); // scope 0 at $DIR/ref_deref_project.rs:+1:6: +1:17
- _4 = const _; // scope 0 at $DIR/ref_deref_project.rs:+1:6: +1:17
- // mir::Constant
- // + span: $DIR/ref_deref_project.rs:5:6: 5:17
- // + literal: Const { ty: &(i32, i32), val: Unevaluated(main, [], Some(promoted[0])) }
- _2 = &((*_4).1: i32); // scope 0 at $DIR/ref_deref_project.rs:+1:6: +1:17
- _1 = (*_2); // scope 0 at $DIR/ref_deref_project.rs:+1:5: +1:17
- StorageDead(_2); // scope 0 at $DIR/ref_deref_project.rs:+1:17: +1:18
- StorageDead(_1); // scope 0 at $DIR/ref_deref_project.rs:+1:17: +1:18
- _0 = const (); // scope 0 at $DIR/ref_deref_project.rs:+0:11: +2:2
- return; // scope 0 at $DIR/ref_deref_project.rs:+2:2: +2:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _4 = const _;
+ _2 = &((*_4).1: i32);
+ _1 = (*_2);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/reify_fn_ptr.main.ConstProp.diff b/tests/mir-opt/const_prop/reify_fn_ptr.main.ConstProp.diff
index 077b9bf83..e7aa015d0 100644
--- a/tests/mir-opt/const_prop/reify_fn_ptr.main.ConstProp.diff
+++ b/tests/mir-opt/const_prop/reify_fn_ptr.main.ConstProp.diff
@@ -2,28 +2,25 @@
+ // MIR for `main` after ConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/reify_fn_ptr.rs:+0:11: +0:11
- let mut _1: *const fn(); // in scope 0 at $DIR/reify_fn_ptr.rs:+1:13: +1:41
- let mut _2: usize; // in scope 0 at $DIR/reify_fn_ptr.rs:+1:13: +1:26
- let mut _3: fn(); // in scope 0 at $DIR/reify_fn_ptr.rs:+1:13: +1:17
+ let mut _0: ();
+ let mut _1: *const fn();
+ let mut _2: usize;
+ let mut _3: fn();
scope 1 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/reify_fn_ptr.rs:+1:13: +1:41
- StorageLive(_2); // scope 0 at $DIR/reify_fn_ptr.rs:+1:13: +1:26
- StorageLive(_3); // scope 0 at $DIR/reify_fn_ptr.rs:+1:13: +1:17
- _3 = main as fn() (Pointer(ReifyFnPointer)); // scope 0 at $DIR/reify_fn_ptr.rs:+1:13: +1:17
- // mir::Constant
- // + span: $DIR/reify_fn_ptr.rs:5:13: 5:17
- // + literal: Const { ty: fn() {main}, val: Value(<ZST>) }
- _2 = move _3 as usize (PointerExposeAddress); // scope 0 at $DIR/reify_fn_ptr.rs:+1:13: +1:26
- StorageDead(_3); // scope 0 at $DIR/reify_fn_ptr.rs:+1:25: +1:26
- _1 = move _2 as *const fn() (PointerFromExposedAddress); // scope 0 at $DIR/reify_fn_ptr.rs:+1:13: +1:41
- StorageDead(_2); // scope 0 at $DIR/reify_fn_ptr.rs:+1:40: +1:41
- StorageDead(_1); // scope 0 at $DIR/reify_fn_ptr.rs:+1:41: +1:42
- _0 = const (); // scope 0 at $DIR/reify_fn_ptr.rs:+0:11: +2:2
- return; // scope 0 at $DIR/reify_fn_ptr.rs:+2:2: +2:2
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = main as fn() (PointerCoercion(ReifyFnPointer));
+ _2 = move _3 as usize (PointerExposeAddress);
+ StorageDead(_3);
+ _1 = move _2 as *const fn() (PointerFromExposedAddress);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.diff b/tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.diff
deleted file mode 100644
index 6641220db..000000000
--- a/tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.diff
+++ /dev/null
@@ -1,44 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/repeat.rs:+0:11: +0:11
- let _1: u32; // in scope 0 at $DIR/repeat.rs:+1:9: +1:10
- let mut _2: u32; // in scope 0 at $DIR/repeat.rs:+1:18: +1:28
- let mut _3: [u32; 8]; // in scope 0 at $DIR/repeat.rs:+1:18: +1:25
- let _4: usize; // in scope 0 at $DIR/repeat.rs:+1:26: +1:27
- let mut _5: usize; // in scope 0 at $DIR/repeat.rs:+1:18: +1:28
- let mut _6: bool; // in scope 0 at $DIR/repeat.rs:+1:18: +1:28
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/repeat.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/repeat.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/repeat.rs:+1:18: +1:28
- StorageLive(_3); // scope 0 at $DIR/repeat.rs:+1:18: +1:25
- _3 = [const 42_u32; 8]; // scope 0 at $DIR/repeat.rs:+1:18: +1:25
- StorageLive(_4); // scope 0 at $DIR/repeat.rs:+1:26: +1:27
- _4 = const 2_usize; // scope 0 at $DIR/repeat.rs:+1:26: +1:27
-- _5 = Len(_3); // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-- _6 = Lt(_4, _5); // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-- assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> bb1; // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-+ _5 = const 8_usize; // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-+ _6 = const true; // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> bb1; // scope 0 at $DIR/repeat.rs:+1:18: +1:28
- }
-
- bb1: {
-- _2 = _3[_4]; // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-- _1 = Add(move _2, const 0_u32); // scope 0 at $DIR/repeat.rs:+1:18: +1:32
-+ _2 = const 42_u32; // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-+ _1 = const 42_u32; // scope 0 at $DIR/repeat.rs:+1:18: +1:32
- StorageDead(_2); // scope 0 at $DIR/repeat.rs:+1:31: +1:32
- StorageDead(_4); // scope 0 at $DIR/repeat.rs:+1:32: +1:33
- StorageDead(_3); // scope 0 at $DIR/repeat.rs:+1:32: +1:33
- _0 = const (); // scope 0 at $DIR/repeat.rs:+0:11: +2:2
- StorageDead(_1); // scope 0 at $DIR/repeat.rs:+2:1: +2:2
- return; // scope 0 at $DIR/repeat.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.panic-abort.diff b/tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.panic-abort.diff
new file mode 100644
index 000000000..e095dd01d
--- /dev/null
+++ b/tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.panic-abort.diff
@@ -0,0 +1,44 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: u32;
+ let mut _3: [u32; 8];
+ let _4: usize;
+ let mut _5: usize;
+ let mut _6: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = [const 42_u32; 8];
+ StorageLive(_4);
+ _4 = const 2_usize;
+- _5 = Len(_3);
+- _6 = Lt(_4, _5);
+- assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind unreachable];
++ _5 = const 8_usize;
++ _6 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _2 = _3[_4];
+- _1 = Add(move _2, const 0_u32);
++ _2 = const 42_u32;
++ _1 = const 42_u32;
+ StorageDead(_2);
+ StorageDead(_4);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.panic-unwind.diff b/tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.panic-unwind.diff
new file mode 100644
index 000000000..571f279a8
--- /dev/null
+++ b/tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.panic-unwind.diff
@@ -0,0 +1,44 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: u32;
+ let mut _3: [u32; 8];
+ let _4: usize;
+ let mut _5: usize;
+ let mut _6: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = [const 42_u32; 8];
+ StorageLive(_4);
+ _4 = const 2_usize;
+- _5 = Len(_3);
+- _6 = Lt(_4, _5);
+- assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind continue];
++ _5 = const 8_usize;
++ _6 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _2 = _3[_4];
+- _1 = Add(move _2, const 0_u32);
++ _2 = const 42_u32;
++ _1 = const 42_u32;
+ StorageDead(_2);
+ StorageDead(_4);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.diff b/tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.diff
deleted file mode 100644
index 6641220db..000000000
--- a/tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.diff
+++ /dev/null
@@ -1,44 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/repeat.rs:+0:11: +0:11
- let _1: u32; // in scope 0 at $DIR/repeat.rs:+1:9: +1:10
- let mut _2: u32; // in scope 0 at $DIR/repeat.rs:+1:18: +1:28
- let mut _3: [u32; 8]; // in scope 0 at $DIR/repeat.rs:+1:18: +1:25
- let _4: usize; // in scope 0 at $DIR/repeat.rs:+1:26: +1:27
- let mut _5: usize; // in scope 0 at $DIR/repeat.rs:+1:18: +1:28
- let mut _6: bool; // in scope 0 at $DIR/repeat.rs:+1:18: +1:28
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/repeat.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/repeat.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/repeat.rs:+1:18: +1:28
- StorageLive(_3); // scope 0 at $DIR/repeat.rs:+1:18: +1:25
- _3 = [const 42_u32; 8]; // scope 0 at $DIR/repeat.rs:+1:18: +1:25
- StorageLive(_4); // scope 0 at $DIR/repeat.rs:+1:26: +1:27
- _4 = const 2_usize; // scope 0 at $DIR/repeat.rs:+1:26: +1:27
-- _5 = Len(_3); // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-- _6 = Lt(_4, _5); // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-- assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> bb1; // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-+ _5 = const 8_usize; // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-+ _6 = const true; // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> bb1; // scope 0 at $DIR/repeat.rs:+1:18: +1:28
- }
-
- bb1: {
-- _2 = _3[_4]; // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-- _1 = Add(move _2, const 0_u32); // scope 0 at $DIR/repeat.rs:+1:18: +1:32
-+ _2 = const 42_u32; // scope 0 at $DIR/repeat.rs:+1:18: +1:28
-+ _1 = const 42_u32; // scope 0 at $DIR/repeat.rs:+1:18: +1:32
- StorageDead(_2); // scope 0 at $DIR/repeat.rs:+1:31: +1:32
- StorageDead(_4); // scope 0 at $DIR/repeat.rs:+1:32: +1:33
- StorageDead(_3); // scope 0 at $DIR/repeat.rs:+1:32: +1:33
- _0 = const (); // scope 0 at $DIR/repeat.rs:+0:11: +2:2
- StorageDead(_1); // scope 0 at $DIR/repeat.rs:+2:1: +2:2
- return; // scope 0 at $DIR/repeat.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.panic-abort.diff b/tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.panic-abort.diff
new file mode 100644
index 000000000..e095dd01d
--- /dev/null
+++ b/tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.panic-abort.diff
@@ -0,0 +1,44 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: u32;
+ let mut _3: [u32; 8];
+ let _4: usize;
+ let mut _5: usize;
+ let mut _6: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = [const 42_u32; 8];
+ StorageLive(_4);
+ _4 = const 2_usize;
+- _5 = Len(_3);
+- _6 = Lt(_4, _5);
+- assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind unreachable];
++ _5 = const 8_usize;
++ _6 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _2 = _3[_4];
+- _1 = Add(move _2, const 0_u32);
++ _2 = const 42_u32;
++ _1 = const 42_u32;
+ StorageDead(_2);
+ StorageDead(_4);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.panic-unwind.diff b/tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.panic-unwind.diff
new file mode 100644
index 000000000..571f279a8
--- /dev/null
+++ b/tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.panic-unwind.diff
@@ -0,0 +1,44 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: u32;
+ let mut _3: [u32; 8];
+ let _4: usize;
+ let mut _5: usize;
+ let mut _6: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = [const 42_u32; 8];
+ StorageLive(_4);
+ _4 = const 2_usize;
+- _5 = Len(_3);
+- _6 = Lt(_4, _5);
+- assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind continue];
++ _5 = const 8_usize;
++ _6 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _2 = _3[_4];
+- _1 = Add(move _2, const 0_u32);
++ _2 = const 42_u32;
++ _1 = const 42_u32;
+ StorageDead(_2);
+ StorageDead(_4);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/repeat.rs b/tests/mir-opt/const_prop/repeat.rs
index 9c11dbc5b..21dba84af 100644
--- a/tests/mir-opt/const_prop/repeat.rs
+++ b/tests/mir-opt/const_prop/repeat.rs
@@ -1,5 +1,5 @@
// unit-test: ConstProp
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// compile-flags: -Zmir-enable-passes=+NormalizeArrayLen
// EMIT_MIR_FOR_EACH_BIT_WIDTH
diff --git a/tests/mir-opt/const_prop/return_place.add.ConstProp.diff b/tests/mir-opt/const_prop/return_place.add.ConstProp.diff
deleted file mode 100644
index 5ebd8a520..000000000
--- a/tests/mir-opt/const_prop/return_place.add.ConstProp.diff
+++ /dev/null
@@ -1,21 +0,0 @@
-- // MIR for `add` before ConstProp
-+ // MIR for `add` after ConstProp
-
- fn add() -> u32 {
- let mut _0: u32; // return place in scope 0 at $DIR/return_place.rs:+0:13: +0:16
- let mut _1: (u32, bool); // in scope 0 at $DIR/return_place.rs:+1:5: +1:10
-
- bb0: {
-- _1 = CheckedAdd(const 2_u32, const 2_u32); // scope 0 at $DIR/return_place.rs:+1:5: +1:10
-- assert(!move (_1.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_u32, const 2_u32) -> bb1; // scope 0 at $DIR/return_place.rs:+1:5: +1:10
-+ _1 = const (4_u32, false); // scope 0 at $DIR/return_place.rs:+1:5: +1:10
-+ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_u32, const 2_u32) -> bb1; // scope 0 at $DIR/return_place.rs:+1:5: +1:10
- }
-
- bb1: {
-- _0 = move (_1.0: u32); // scope 0 at $DIR/return_place.rs:+1:5: +1:10
-+ _0 = const 4_u32; // scope 0 at $DIR/return_place.rs:+1:5: +1:10
- return; // scope 0 at $DIR/return_place.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/return_place.add.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/return_place.add.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..f3b30e0dc
--- /dev/null
+++ b/tests/mir-opt/const_prop/return_place.add.ConstProp.panic-abort.diff
@@ -0,0 +1,21 @@
+- // MIR for `add` before ConstProp
++ // MIR for `add` after ConstProp
+
+ fn add() -> u32 {
+ let mut _0: u32;
+ let mut _1: (u32, bool);
+
+ bb0: {
+- _1 = CheckedAdd(const 2_u32, const 2_u32);
+- assert(!move (_1.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_u32, const 2_u32) -> [success: bb1, unwind unreachable];
++ _1 = const (4_u32, false);
++ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_u32, const 2_u32) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _0 = move (_1.0: u32);
++ _0 = const 4_u32;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/return_place.add.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/return_place.add.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..79f85fcef
--- /dev/null
+++ b/tests/mir-opt/const_prop/return_place.add.ConstProp.panic-unwind.diff
@@ -0,0 +1,21 @@
+- // MIR for `add` before ConstProp
++ // MIR for `add` after ConstProp
+
+ fn add() -> u32 {
+ let mut _0: u32;
+ let mut _1: (u32, bool);
+
+ bb0: {
+- _1 = CheckedAdd(const 2_u32, const 2_u32);
+- assert(!move (_1.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_u32, const 2_u32) -> [success: bb1, unwind continue];
++ _1 = const (4_u32, false);
++ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_u32, const 2_u32) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _0 = move (_1.0: u32);
++ _0 = const 4_u32;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/return_place.add.PreCodegen.before.mir b/tests/mir-opt/const_prop/return_place.add.PreCodegen.before.mir
deleted file mode 100644
index b12d84fa4..000000000
--- a/tests/mir-opt/const_prop/return_place.add.PreCodegen.before.mir
+++ /dev/null
@@ -1,16 +0,0 @@
-// MIR for `add` before PreCodegen
-
-fn add() -> u32 {
- let mut _0: u32; // return place in scope 0 at $DIR/return_place.rs:+0:13: +0:16
- let mut _1: (u32, bool); // in scope 0 at $DIR/return_place.rs:+1:5: +1:10
-
- bb0: {
- _1 = const (4_u32, false); // scope 0 at $DIR/return_place.rs:+1:5: +1:10
- assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_u32, const 2_u32) -> bb1; // scope 0 at $DIR/return_place.rs:+1:5: +1:10
- }
-
- bb1: {
- _0 = const 4_u32; // scope 0 at $DIR/return_place.rs:+1:5: +1:10
- return; // scope 0 at $DIR/return_place.rs:+2:2: +2:2
- }
-}
diff --git a/tests/mir-opt/const_prop/return_place.add.PreCodegen.before.panic-abort.mir b/tests/mir-opt/const_prop/return_place.add.PreCodegen.before.panic-abort.mir
new file mode 100644
index 000000000..c8f3f641a
--- /dev/null
+++ b/tests/mir-opt/const_prop/return_place.add.PreCodegen.before.panic-abort.mir
@@ -0,0 +1,16 @@
+// MIR for `add` before PreCodegen
+
+fn add() -> u32 {
+ let mut _0: u32;
+ let mut _1: (u32, bool);
+
+ bb0: {
+ _1 = const (4_u32, false);
+ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_u32, const 2_u32) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _0 = const 4_u32;
+ return;
+ }
+}
diff --git a/tests/mir-opt/const_prop/return_place.add.PreCodegen.before.panic-unwind.mir b/tests/mir-opt/const_prop/return_place.add.PreCodegen.before.panic-unwind.mir
new file mode 100644
index 000000000..9a0646974
--- /dev/null
+++ b/tests/mir-opt/const_prop/return_place.add.PreCodegen.before.panic-unwind.mir
@@ -0,0 +1,16 @@
+// MIR for `add` before PreCodegen
+
+fn add() -> u32 {
+ let mut _0: u32;
+ let mut _1: (u32, bool);
+
+ bb0: {
+ _1 = const (4_u32, false);
+ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_u32, const 2_u32) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+ _0 = const 4_u32;
+ return;
+ }
+}
diff --git a/tests/mir-opt/const_prop/return_place.rs b/tests/mir-opt/const_prop/return_place.rs
index 0e68309f0..0576b02a8 100644
--- a/tests/mir-opt/const_prop/return_place.rs
+++ b/tests/mir-opt/const_prop/return_place.rs
@@ -1,5 +1,5 @@
// unit-test: ConstProp
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// compile-flags: -C overflow-checks=on
// EMIT_MIR return_place.add.ConstProp.diff
diff --git a/tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.diff b/tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.diff
deleted file mode 100644
index c2f97a0f6..000000000
--- a/tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.diff
+++ /dev/null
@@ -1,34 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/scalar_literal_propagation.rs:+0:11: +0:11
- let _1: u32; // in scope 0 at $DIR/scalar_literal_propagation.rs:+1:9: +1:10
- let _2: (); // in scope 0 at $DIR/scalar_literal_propagation.rs:+2:5: +2:15
- let mut _3: u32; // in scope 0 at $DIR/scalar_literal_propagation.rs:+2:13: +2:14
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/scalar_literal_propagation.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/scalar_literal_propagation.rs:+1:9: +1:10
- _1 = const 1_u32; // scope 0 at $DIR/scalar_literal_propagation.rs:+1:13: +1:14
- StorageLive(_2); // scope 1 at $DIR/scalar_literal_propagation.rs:+2:5: +2:15
- StorageLive(_3); // scope 1 at $DIR/scalar_literal_propagation.rs:+2:13: +2:14
-- _3 = _1; // scope 1 at $DIR/scalar_literal_propagation.rs:+2:13: +2:14
-+ _3 = const 1_u32; // scope 1 at $DIR/scalar_literal_propagation.rs:+2:13: +2:14
- _2 = consume(move _3) -> bb1; // scope 1 at $DIR/scalar_literal_propagation.rs:+2:5: +2:15
- // mir::Constant
- // + span: $DIR/scalar_literal_propagation.rs:6:5: 6:12
- // + literal: Const { ty: fn(u32) {consume}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_3); // scope 1 at $DIR/scalar_literal_propagation.rs:+2:14: +2:15
- StorageDead(_2); // scope 1 at $DIR/scalar_literal_propagation.rs:+2:15: +2:16
- _0 = const (); // scope 0 at $DIR/scalar_literal_propagation.rs:+0:11: +3:2
- StorageDead(_1); // scope 0 at $DIR/scalar_literal_propagation.rs:+3:1: +3:2
- return; // scope 0 at $DIR/scalar_literal_propagation.rs:+3:2: +3:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..0677295d0
--- /dev/null
+++ b/tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.panic-abort.diff
@@ -0,0 +1,31 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let _2: ();
+ let mut _3: u32;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 1_u32;
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = _1;
++ _3 = const 1_u32;
+ _2 = consume(move _3) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..a7d7a7224
--- /dev/null
+++ b/tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,31 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let _2: ();
+ let mut _3: u32;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 1_u32;
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = _1;
++ _3 = const 1_u32;
+ _2 = consume(move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/scalar_literal_propagation.rs b/tests/mir-opt/const_prop/scalar_literal_propagation.rs
index fc33cc2d0..dfe41e614 100644
--- a/tests/mir-opt/const_prop/scalar_literal_propagation.rs
+++ b/tests/mir-opt/const_prop/scalar_literal_propagation.rs
@@ -1,5 +1,5 @@
// unit-test: ConstProp
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// EMIT_MIR scalar_literal_propagation.main.ConstProp.diff
fn main() {
let x = 1;
diff --git a/tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.diff b/tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.diff
deleted file mode 100644
index 8bd2b48d6..000000000
--- a/tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.diff
+++ /dev/null
@@ -1,50 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/slice_len.rs:+0:11: +0:11
- let _1: u32; // in scope 0 at $DIR/slice_len.rs:+1:5: +1:33
- let mut _2: &[u32]; // in scope 0 at $DIR/slice_len.rs:+1:5: +1:30
- let mut _3: &[u32; 3]; // in scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- let _4: &[u32; 3]; // in scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- let _5: [u32; 3]; // in scope 0 at $DIR/slice_len.rs:+1:7: +1:19
- let _6: usize; // in scope 0 at $DIR/slice_len.rs:+1:31: +1:32
- let mut _7: usize; // in scope 0 at $DIR/slice_len.rs:+1:5: +1:33
- let mut _8: bool; // in scope 0 at $DIR/slice_len.rs:+1:5: +1:33
- let mut _9: &[u32; 3]; // in scope 0 at $DIR/slice_len.rs:+1:6: +1:19
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
- StorageLive(_2); // scope 0 at $DIR/slice_len.rs:+1:5: +1:30
- StorageLive(_3); // scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- StorageLive(_4); // scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- _9 = const _; // scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- // mir::Constant
- // + span: $DIR/slice_len.rs:8:6: 8:19
- // + literal: Const { ty: &[u32; 3], val: Unevaluated(main, [], Some(promoted[0])) }
- _4 = _9; // scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- _3 = _4; // scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- _2 = move _3 as &[u32] (Pointer(Unsize)); // scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- StorageDead(_3); // scope 0 at $DIR/slice_len.rs:+1:18: +1:19
- StorageLive(_6); // scope 0 at $DIR/slice_len.rs:+1:31: +1:32
- _6 = const 1_usize; // scope 0 at $DIR/slice_len.rs:+1:31: +1:32
-- _7 = Len((*_2)); // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
-- _8 = Lt(_6, _7); // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
-- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb1; // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
-+ _7 = const 3_usize; // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
-+ _8 = const true; // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
-+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb1; // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
- }
-
- bb1: {
-- _1 = (*_2)[_6]; // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
-+ _1 = const 2_u32; // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
- StorageDead(_6); // scope 0 at $DIR/slice_len.rs:+1:33: +1:34
- StorageDead(_4); // scope 0 at $DIR/slice_len.rs:+1:33: +1:34
- StorageDead(_2); // scope 0 at $DIR/slice_len.rs:+1:33: +1:34
- StorageDead(_1); // scope 0 at $DIR/slice_len.rs:+1:33: +1:34
- _0 = const (); // scope 0 at $DIR/slice_len.rs:+0:11: +2:2
- return; // scope 0 at $DIR/slice_len.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.panic-abort.diff b/tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.panic-abort.diff
new file mode 100644
index 000000000..3c2b8e111
--- /dev/null
+++ b/tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.panic-abort.diff
@@ -0,0 +1,47 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: &[u32];
+ let mut _3: &[u32; 3];
+ let _4: &[u32; 3];
+ let _5: [u32; 3];
+ let _6: usize;
+ let mut _7: usize;
+ let mut _8: bool;
+ let mut _9: &[u32; 3];
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _9 = const _;
+ _4 = _9;
+ _3 = _4;
+ _2 = move _3 as &[u32] (PointerCoercion(Unsize));
+ StorageDead(_3);
+ StorageLive(_6);
+ _6 = const 1_usize;
+- _7 = Len((*_2));
+- _8 = Lt(_6, _7);
+- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable];
++ _7 = const 3_usize;
++ _8 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = (*_2)[_6];
++ _1 = const 2_u32;
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.panic-unwind.diff b/tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.panic-unwind.diff
new file mode 100644
index 000000000..303096030
--- /dev/null
+++ b/tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.panic-unwind.diff
@@ -0,0 +1,47 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: &[u32];
+ let mut _3: &[u32; 3];
+ let _4: &[u32; 3];
+ let _5: [u32; 3];
+ let _6: usize;
+ let mut _7: usize;
+ let mut _8: bool;
+ let mut _9: &[u32; 3];
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _9 = const _;
+ _4 = _9;
+ _3 = _4;
+ _2 = move _3 as &[u32] (PointerCoercion(Unsize));
+ StorageDead(_3);
+ StorageLive(_6);
+ _6 = const 1_usize;
+- _7 = Len((*_2));
+- _8 = Lt(_6, _7);
+- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue];
++ _7 = const 3_usize;
++ _8 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _1 = (*_2)[_6];
++ _1 = const 2_u32;
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.diff b/tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.diff
deleted file mode 100644
index 8bd2b48d6..000000000
--- a/tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.diff
+++ /dev/null
@@ -1,50 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/slice_len.rs:+0:11: +0:11
- let _1: u32; // in scope 0 at $DIR/slice_len.rs:+1:5: +1:33
- let mut _2: &[u32]; // in scope 0 at $DIR/slice_len.rs:+1:5: +1:30
- let mut _3: &[u32; 3]; // in scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- let _4: &[u32; 3]; // in scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- let _5: [u32; 3]; // in scope 0 at $DIR/slice_len.rs:+1:7: +1:19
- let _6: usize; // in scope 0 at $DIR/slice_len.rs:+1:31: +1:32
- let mut _7: usize; // in scope 0 at $DIR/slice_len.rs:+1:5: +1:33
- let mut _8: bool; // in scope 0 at $DIR/slice_len.rs:+1:5: +1:33
- let mut _9: &[u32; 3]; // in scope 0 at $DIR/slice_len.rs:+1:6: +1:19
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
- StorageLive(_2); // scope 0 at $DIR/slice_len.rs:+1:5: +1:30
- StorageLive(_3); // scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- StorageLive(_4); // scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- _9 = const _; // scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- // mir::Constant
- // + span: $DIR/slice_len.rs:8:6: 8:19
- // + literal: Const { ty: &[u32; 3], val: Unevaluated(main, [], Some(promoted[0])) }
- _4 = _9; // scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- _3 = _4; // scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- _2 = move _3 as &[u32] (Pointer(Unsize)); // scope 0 at $DIR/slice_len.rs:+1:6: +1:19
- StorageDead(_3); // scope 0 at $DIR/slice_len.rs:+1:18: +1:19
- StorageLive(_6); // scope 0 at $DIR/slice_len.rs:+1:31: +1:32
- _6 = const 1_usize; // scope 0 at $DIR/slice_len.rs:+1:31: +1:32
-- _7 = Len((*_2)); // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
-- _8 = Lt(_6, _7); // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
-- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb1; // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
-+ _7 = const 3_usize; // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
-+ _8 = const true; // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
-+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb1; // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
- }
-
- bb1: {
-- _1 = (*_2)[_6]; // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
-+ _1 = const 2_u32; // scope 0 at $DIR/slice_len.rs:+1:5: +1:33
- StorageDead(_6); // scope 0 at $DIR/slice_len.rs:+1:33: +1:34
- StorageDead(_4); // scope 0 at $DIR/slice_len.rs:+1:33: +1:34
- StorageDead(_2); // scope 0 at $DIR/slice_len.rs:+1:33: +1:34
- StorageDead(_1); // scope 0 at $DIR/slice_len.rs:+1:33: +1:34
- _0 = const (); // scope 0 at $DIR/slice_len.rs:+0:11: +2:2
- return; // scope 0 at $DIR/slice_len.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.panic-abort.diff b/tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.panic-abort.diff
new file mode 100644
index 000000000..3c2b8e111
--- /dev/null
+++ b/tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.panic-abort.diff
@@ -0,0 +1,47 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: &[u32];
+ let mut _3: &[u32; 3];
+ let _4: &[u32; 3];
+ let _5: [u32; 3];
+ let _6: usize;
+ let mut _7: usize;
+ let mut _8: bool;
+ let mut _9: &[u32; 3];
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _9 = const _;
+ _4 = _9;
+ _3 = _4;
+ _2 = move _3 as &[u32] (PointerCoercion(Unsize));
+ StorageDead(_3);
+ StorageLive(_6);
+ _6 = const 1_usize;
+- _7 = Len((*_2));
+- _8 = Lt(_6, _7);
+- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable];
++ _7 = const 3_usize;
++ _8 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = (*_2)[_6];
++ _1 = const 2_u32;
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.panic-unwind.diff b/tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.panic-unwind.diff
new file mode 100644
index 000000000..303096030
--- /dev/null
+++ b/tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.panic-unwind.diff
@@ -0,0 +1,47 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ let mut _2: &[u32];
+ let mut _3: &[u32; 3];
+ let _4: &[u32; 3];
+ let _5: [u32; 3];
+ let _6: usize;
+ let mut _7: usize;
+ let mut _8: bool;
+ let mut _9: &[u32; 3];
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _9 = const _;
+ _4 = _9;
+ _3 = _4;
+ _2 = move _3 as &[u32] (PointerCoercion(Unsize));
+ StorageDead(_3);
+ StorageLive(_6);
+ _6 = const 1_usize;
+- _7 = Len((*_2));
+- _8 = Lt(_6, _7);
+- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue];
++ _7 = const 3_usize;
++ _8 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _1 = (*_2)[_6];
++ _1 = const 2_u32;
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/slice_len.rs b/tests/mir-opt/const_prop/slice_len.rs
index 9821d1b1e..e91724536 100644
--- a/tests/mir-opt/const_prop/slice_len.rs
+++ b/tests/mir-opt/const_prop/slice_len.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// compile-flags: -Zmir-enable-passes=+InstSimplify
// EMIT_MIR_FOR_EACH_BIT_WIDTH
diff --git a/tests/mir-opt/const_prop/switch_int.main.ConstProp.diff b/tests/mir-opt/const_prop/switch_int.main.ConstProp.diff
deleted file mode 100644
index 664b7839f..000000000
--- a/tests/mir-opt/const_prop/switch_int.main.ConstProp.diff
+++ /dev/null
@@ -1,34 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/switch_int.rs:+0:11: +0:11
- let mut _1: i32; // in scope 0 at $DIR/switch_int.rs:+1:11: +1:12
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/switch_int.rs:+1:11: +1:12
- _1 = const 1_i32; // scope 0 at $DIR/switch_int.rs:+1:11: +1:12
-- switchInt(_1) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/switch_int.rs:+1:5: +1:12
-+ switchInt(const 1_i32) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/switch_int.rs:+1:5: +1:12
- }
-
- bb1: {
- _0 = foo(const -1_i32) -> bb3; // scope 0 at $DIR/switch_int.rs:+3:14: +3:21
- // mir::Constant
- // + span: $DIR/switch_int.rs:12:14: 12:17
- // + literal: Const { ty: fn(i32) {foo}, val: Value(<ZST>) }
- }
-
- bb2: {
- _0 = foo(const 0_i32) -> bb3; // scope 0 at $DIR/switch_int.rs:+2:14: +2:20
- // mir::Constant
- // + span: $DIR/switch_int.rs:11:14: 11:17
- // + literal: Const { ty: fn(i32) {foo}, val: Value(<ZST>) }
- }
-
- bb3: {
- StorageDead(_1); // scope 0 at $DIR/switch_int.rs:+5:1: +5:2
- return; // scope 0 at $DIR/switch_int.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/switch_int.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/switch_int.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..508cc1573
--- /dev/null
+++ b/tests/mir-opt/const_prop/switch_int.main.ConstProp.panic-abort.diff
@@ -0,0 +1,28 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 1_i32;
+- switchInt(_1) -> [1: bb2, otherwise: bb1];
++ switchInt(const 1_i32) -> [1: bb2, otherwise: bb1];
+ }
+
+ bb1: {
+ _0 = foo(const -1_i32) -> [return: bb3, unwind unreachable];
+ }
+
+ bb2: {
+ _0 = foo(const 0_i32) -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/switch_int.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/switch_int.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..1ce28e979
--- /dev/null
+++ b/tests/mir-opt/const_prop/switch_int.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,28 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 1_i32;
+- switchInt(_1) -> [1: bb2, otherwise: bb1];
++ switchInt(const 1_i32) -> [1: bb2, otherwise: bb1];
+ }
+
+ bb1: {
+ _0 = foo(const -1_i32) -> [return: bb3, unwind continue];
+ }
+
+ bb2: {
+ _0 = foo(const 0_i32) -> [return: bb3, unwind continue];
+ }
+
+ bb3: {
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.diff b/tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.diff
deleted file mode 100644
index ef2c4d5fa..000000000
--- a/tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.diff
+++ /dev/null
@@ -1,34 +0,0 @@
-- // MIR for `main` before SimplifyConstCondition-after-const-prop
-+ // MIR for `main` after SimplifyConstCondition-after-const-prop
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/switch_int.rs:+0:11: +0:11
- let mut _1: i32; // in scope 0 at $DIR/switch_int.rs:+1:11: +1:12
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/switch_int.rs:+1:11: +1:12
- _1 = const 1_i32; // scope 0 at $DIR/switch_int.rs:+1:11: +1:12
-- switchInt(const 1_i32) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/switch_int.rs:+1:5: +1:12
-+ goto -> bb2; // scope 0 at $DIR/switch_int.rs:+1:5: +1:12
- }
-
- bb1: {
- _0 = foo(const -1_i32) -> bb3; // scope 0 at $DIR/switch_int.rs:+3:14: +3:21
- // mir::Constant
- // + span: $DIR/switch_int.rs:12:14: 12:17
- // + literal: Const { ty: fn(i32) {foo}, val: Value(<ZST>) }
- }
-
- bb2: {
- _0 = foo(const 0_i32) -> bb3; // scope 0 at $DIR/switch_int.rs:+2:14: +2:20
- // mir::Constant
- // + span: $DIR/switch_int.rs:11:14: 11:17
- // + literal: Const { ty: fn(i32) {foo}, val: Value(<ZST>) }
- }
-
- bb3: {
- StorageDead(_1); // scope 0 at $DIR/switch_int.rs:+5:1: +5:2
- return; // scope 0 at $DIR/switch_int.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.panic-abort.diff b/tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.panic-abort.diff
new file mode 100644
index 000000000..ced5e500d
--- /dev/null
+++ b/tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.panic-abort.diff
@@ -0,0 +1,28 @@
+- // MIR for `main` before SimplifyConstCondition-after-const-prop
++ // MIR for `main` after SimplifyConstCondition-after-const-prop
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 1_i32;
+- switchInt(const 1_i32) -> [1: bb2, otherwise: bb1];
++ goto -> bb2;
+ }
+
+ bb1: {
+ _0 = foo(const -1_i32) -> [return: bb3, unwind unreachable];
+ }
+
+ bb2: {
+ _0 = foo(const 0_i32) -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.panic-unwind.diff b/tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.panic-unwind.diff
new file mode 100644
index 000000000..e598a0d3d
--- /dev/null
+++ b/tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.panic-unwind.diff
@@ -0,0 +1,28 @@
+- // MIR for `main` before SimplifyConstCondition-after-const-prop
++ // MIR for `main` after SimplifyConstCondition-after-const-prop
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 1_i32;
+- switchInt(const 1_i32) -> [1: bb2, otherwise: bb1];
++ goto -> bb2;
+ }
+
+ bb1: {
+ _0 = foo(const -1_i32) -> [return: bb3, unwind continue];
+ }
+
+ bb2: {
+ _0 = foo(const 0_i32) -> [return: bb3, unwind continue];
+ }
+
+ bb3: {
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/switch_int.rs b/tests/mir-opt/const_prop/switch_int.rs
index 7158ea4d2..bf708c829 100644
--- a/tests/mir-opt/const_prop/switch_int.rs
+++ b/tests/mir-opt/const_prop/switch_int.rs
@@ -1,6 +1,6 @@
// unit-test: ConstProp
// compile-flags: -Zmir-enable-passes=+SimplifyConstCondition-after-const-prop
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#[inline(never)]
fn foo(_: i32) { }
diff --git a/tests/mir-opt/const_prop/transmute.from_char.ConstProp.32bit.diff b/tests/mir-opt/const_prop/transmute.from_char.ConstProp.32bit.diff
index 933dfbb51..febfebc85 100644
--- a/tests/mir-opt/const_prop/transmute.from_char.ConstProp.32bit.diff
+++ b/tests/mir-opt/const_prop/transmute.from_char.ConstProp.32bit.diff
@@ -2,14 +2,14 @@
+ // MIR for `from_char` after ConstProp
fn from_char() -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/transmute.rs:+0:23: +0:26
+ let mut _0: i32;
scope 1 {
}
bb0: {
-- _0 = const 'R' as i32 (Transmute); // scope 1 at $DIR/transmute.rs:+1:14: +1:28
-+ _0 = const 82_i32; // scope 1 at $DIR/transmute.rs:+1:14: +1:28
- return; // scope 0 at $DIR/transmute.rs:+2:2: +2:2
+- _0 = const 'R' as i32 (Transmute);
++ _0 = const 82_i32;
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.from_char.ConstProp.64bit.diff b/tests/mir-opt/const_prop/transmute.from_char.ConstProp.64bit.diff
index 933dfbb51..febfebc85 100644
--- a/tests/mir-opt/const_prop/transmute.from_char.ConstProp.64bit.diff
+++ b/tests/mir-opt/const_prop/transmute.from_char.ConstProp.64bit.diff
@@ -2,14 +2,14 @@
+ // MIR for `from_char` after ConstProp
fn from_char() -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/transmute.rs:+0:23: +0:26
+ let mut _0: i32;
scope 1 {
}
bb0: {
-- _0 = const 'R' as i32 (Transmute); // scope 1 at $DIR/transmute.rs:+1:14: +1:28
-+ _0 = const 82_i32; // scope 1 at $DIR/transmute.rs:+1:14: +1:28
- return; // scope 0 at $DIR/transmute.rs:+2:2: +2:2
+- _0 = const 'R' as i32 (Transmute);
++ _0 = const 82_i32;
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.invalid_bool.ConstProp.32bit.diff b/tests/mir-opt/const_prop/transmute.invalid_bool.ConstProp.32bit.diff
index 4a31194de..38a1eb5a1 100644
--- a/tests/mir-opt/const_prop/transmute.invalid_bool.ConstProp.32bit.diff
+++ b/tests/mir-opt/const_prop/transmute.invalid_bool.ConstProp.32bit.diff
@@ -2,14 +2,14 @@
+ // MIR for `invalid_bool` after ConstProp
fn invalid_bool() -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/transmute.rs:+0:33: +0:37
+ let mut _0: bool;
scope 1 {
}
bb0: {
-- _0 = const -1_i8 as bool (Transmute); // scope 1 at $DIR/transmute.rs:+1:14: +1:30
-+ _0 = const {transmute(0xff): bool}; // scope 1 at $DIR/transmute.rs:+1:14: +1:30
- return; // scope 0 at $DIR/transmute.rs:+2:2: +2:2
+- _0 = const -1_i8 as bool (Transmute);
++ _0 = const {transmute(0xff): bool};
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.invalid_bool.ConstProp.64bit.diff b/tests/mir-opt/const_prop/transmute.invalid_bool.ConstProp.64bit.diff
index 4a31194de..38a1eb5a1 100644
--- a/tests/mir-opt/const_prop/transmute.invalid_bool.ConstProp.64bit.diff
+++ b/tests/mir-opt/const_prop/transmute.invalid_bool.ConstProp.64bit.diff
@@ -2,14 +2,14 @@
+ // MIR for `invalid_bool` after ConstProp
fn invalid_bool() -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/transmute.rs:+0:33: +0:37
+ let mut _0: bool;
scope 1 {
}
bb0: {
-- _0 = const -1_i8 as bool (Transmute); // scope 1 at $DIR/transmute.rs:+1:14: +1:30
-+ _0 = const {transmute(0xff): bool}; // scope 1 at $DIR/transmute.rs:+1:14: +1:30
- return; // scope 0 at $DIR/transmute.rs:+2:2: +2:2
+- _0 = const -1_i8 as bool (Transmute);
++ _0 = const {transmute(0xff): bool};
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.invalid_char.ConstProp.32bit.diff b/tests/mir-opt/const_prop/transmute.invalid_char.ConstProp.32bit.diff
index 2c541f2f6..2c0998f77 100644
--- a/tests/mir-opt/const_prop/transmute.invalid_char.ConstProp.32bit.diff
+++ b/tests/mir-opt/const_prop/transmute.invalid_char.ConstProp.32bit.diff
@@ -2,14 +2,14 @@
+ // MIR for `invalid_char` after ConstProp
fn invalid_char() -> char {
- let mut _0: char; // return place in scope 0 at $DIR/transmute.rs:+0:33: +0:37
+ let mut _0: char;
scope 1 {
}
bb0: {
-- _0 = const _ as char (Transmute); // scope 1 at $DIR/transmute.rs:+1:14: +1:33
-+ _0 = const {transmute(0x7fffffff): char}; // scope 1 at $DIR/transmute.rs:+1:14: +1:33
- return; // scope 0 at $DIR/transmute.rs:+2:2: +2:2
+- _0 = const _ as char (Transmute);
++ _0 = const {transmute(0x7fffffff): char};
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.invalid_char.ConstProp.64bit.diff b/tests/mir-opt/const_prop/transmute.invalid_char.ConstProp.64bit.diff
index 2c541f2f6..2c0998f77 100644
--- a/tests/mir-opt/const_prop/transmute.invalid_char.ConstProp.64bit.diff
+++ b/tests/mir-opt/const_prop/transmute.invalid_char.ConstProp.64bit.diff
@@ -2,14 +2,14 @@
+ // MIR for `invalid_char` after ConstProp
fn invalid_char() -> char {
- let mut _0: char; // return place in scope 0 at $DIR/transmute.rs:+0:33: +0:37
+ let mut _0: char;
scope 1 {
}
bb0: {
-- _0 = const _ as char (Transmute); // scope 1 at $DIR/transmute.rs:+1:14: +1:33
-+ _0 = const {transmute(0x7fffffff): char}; // scope 1 at $DIR/transmute.rs:+1:14: +1:33
- return; // scope 0 at $DIR/transmute.rs:+2:2: +2:2
+- _0 = const _ as char (Transmute);
++ _0 = const {transmute(0x7fffffff): char};
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.less_as_i8.ConstProp.32bit.diff b/tests/mir-opt/const_prop/transmute.less_as_i8.ConstProp.32bit.diff
index 76d464789..7ac7bed8a 100644
--- a/tests/mir-opt/const_prop/transmute.less_as_i8.ConstProp.32bit.diff
+++ b/tests/mir-opt/const_prop/transmute.less_as_i8.ConstProp.32bit.diff
@@ -2,22 +2,19 @@
+ // MIR for `less_as_i8` after ConstProp
fn less_as_i8() -> i8 {
- let mut _0: i8; // return place in scope 0 at $DIR/transmute.rs:+0:24: +0:26
- let mut _1: std::cmp::Ordering; // in scope 0 at $DIR/transmute.rs:+1:24: +1:48
+ let mut _0: i8;
+ let mut _1: std::cmp::Ordering;
scope 1 {
}
bb0: {
- StorageLive(_1); // scope 1 at $DIR/transmute.rs:+1:24: +1:48
-- _1 = Less; // scope 1 at $DIR/transmute.rs:+1:24: +1:48
-- _0 = move _1 as i8 (Transmute); // scope 1 at $DIR/transmute.rs:+1:14: +1:49
-+ _1 = const Less; // scope 1 at $DIR/transmute.rs:+1:24: +1:48
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: std::cmp::Ordering, val: Value(Scalar(0xff)) }
-+ _0 = const -1_i8; // scope 1 at $DIR/transmute.rs:+1:14: +1:49
- StorageDead(_1); // scope 1 at $DIR/transmute.rs:+1:48: +1:49
- return; // scope 0 at $DIR/transmute.rs:+2:2: +2:2
+ StorageLive(_1);
+- _1 = Less;
+- _0 = move _1 as i8 (Transmute);
++ _1 = const Less;
++ _0 = const -1_i8;
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.less_as_i8.ConstProp.64bit.diff b/tests/mir-opt/const_prop/transmute.less_as_i8.ConstProp.64bit.diff
index 76d464789..7ac7bed8a 100644
--- a/tests/mir-opt/const_prop/transmute.less_as_i8.ConstProp.64bit.diff
+++ b/tests/mir-opt/const_prop/transmute.less_as_i8.ConstProp.64bit.diff
@@ -2,22 +2,19 @@
+ // MIR for `less_as_i8` after ConstProp
fn less_as_i8() -> i8 {
- let mut _0: i8; // return place in scope 0 at $DIR/transmute.rs:+0:24: +0:26
- let mut _1: std::cmp::Ordering; // in scope 0 at $DIR/transmute.rs:+1:24: +1:48
+ let mut _0: i8;
+ let mut _1: std::cmp::Ordering;
scope 1 {
}
bb0: {
- StorageLive(_1); // scope 1 at $DIR/transmute.rs:+1:24: +1:48
-- _1 = Less; // scope 1 at $DIR/transmute.rs:+1:24: +1:48
-- _0 = move _1 as i8 (Transmute); // scope 1 at $DIR/transmute.rs:+1:14: +1:49
-+ _1 = const Less; // scope 1 at $DIR/transmute.rs:+1:24: +1:48
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: std::cmp::Ordering, val: Value(Scalar(0xff)) }
-+ _0 = const -1_i8; // scope 1 at $DIR/transmute.rs:+1:14: +1:49
- StorageDead(_1); // scope 1 at $DIR/transmute.rs:+1:48: +1:49
- return; // scope 0 at $DIR/transmute.rs:+2:2: +2:2
+ StorageLive(_1);
+- _1 = Less;
+- _0 = move _1 as i8 (Transmute);
++ _1 = const Less;
++ _0 = const -1_i8;
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.undef_union_as_integer.ConstProp.32bit.diff b/tests/mir-opt/const_prop/transmute.undef_union_as_integer.ConstProp.32bit.diff
index 538b1f26e..afedf2a30 100644
--- a/tests/mir-opt/const_prop/transmute.undef_union_as_integer.ConstProp.32bit.diff
+++ b/tests/mir-opt/const_prop/transmute.undef_union_as_integer.ConstProp.32bit.diff
@@ -2,21 +2,21 @@
+ // MIR for `undef_union_as_integer` after ConstProp
fn undef_union_as_integer() -> u32 {
- let mut _0: u32; // return place in scope 0 at $DIR/transmute.rs:+0:43: +0:46
- let mut _1: undef_union_as_integer::Union32; // in scope 0 at $DIR/transmute.rs:+2:24: +2:44
- let mut _2: (); // in scope 0 at $DIR/transmute.rs:+2:40: +2:42
+ let mut _0: u32;
+ let mut _1: undef_union_as_integer::Union32;
+ let mut _2: ();
scope 1 {
}
bb0: {
- StorageLive(_1); // scope 1 at $DIR/transmute.rs:+2:24: +2:44
- StorageLive(_2); // scope 1 at $DIR/transmute.rs:+2:40: +2:42
- _2 = (); // scope 1 at $DIR/transmute.rs:+2:40: +2:42
- _1 = Union32 { value: move _2 }; // scope 1 at $DIR/transmute.rs:+2:24: +2:44
- StorageDead(_2); // scope 1 at $DIR/transmute.rs:+2:43: +2:44
- _0 = move _1 as u32 (Transmute); // scope 1 at $DIR/transmute.rs:+2:14: +2:45
- StorageDead(_1); // scope 1 at $DIR/transmute.rs:+2:44: +2:45
- return; // scope 0 at $DIR/transmute.rs:+3:2: +3:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = ();
+ _1 = Union32 { value: move _2 };
+ StorageDead(_2);
+ _0 = move _1 as u32 (Transmute);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.undef_union_as_integer.ConstProp.64bit.diff b/tests/mir-opt/const_prop/transmute.undef_union_as_integer.ConstProp.64bit.diff
index 538b1f26e..afedf2a30 100644
--- a/tests/mir-opt/const_prop/transmute.undef_union_as_integer.ConstProp.64bit.diff
+++ b/tests/mir-opt/const_prop/transmute.undef_union_as_integer.ConstProp.64bit.diff
@@ -2,21 +2,21 @@
+ // MIR for `undef_union_as_integer` after ConstProp
fn undef_union_as_integer() -> u32 {
- let mut _0: u32; // return place in scope 0 at $DIR/transmute.rs:+0:43: +0:46
- let mut _1: undef_union_as_integer::Union32; // in scope 0 at $DIR/transmute.rs:+2:24: +2:44
- let mut _2: (); // in scope 0 at $DIR/transmute.rs:+2:40: +2:42
+ let mut _0: u32;
+ let mut _1: undef_union_as_integer::Union32;
+ let mut _2: ();
scope 1 {
}
bb0: {
- StorageLive(_1); // scope 1 at $DIR/transmute.rs:+2:24: +2:44
- StorageLive(_2); // scope 1 at $DIR/transmute.rs:+2:40: +2:42
- _2 = (); // scope 1 at $DIR/transmute.rs:+2:40: +2:42
- _1 = Union32 { value: move _2 }; // scope 1 at $DIR/transmute.rs:+2:24: +2:44
- StorageDead(_2); // scope 1 at $DIR/transmute.rs:+2:43: +2:44
- _0 = move _1 as u32 (Transmute); // scope 1 at $DIR/transmute.rs:+2:14: +2:45
- StorageDead(_1); // scope 1 at $DIR/transmute.rs:+2:44: +2:45
- return; // scope 0 at $DIR/transmute.rs:+3:2: +3:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = ();
+ _1 = Union32 { value: move _2 };
+ StorageDead(_2);
+ _0 = move _1 as u32 (Transmute);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.unreachable_box.ConstProp.32bit.diff b/tests/mir-opt/const_prop/transmute.unreachable_box.ConstProp.32bit.diff
index 5258d75bd..100982382 100644
--- a/tests/mir-opt/const_prop/transmute.unreachable_box.ConstProp.32bit.diff
+++ b/tests/mir-opt/const_prop/transmute.unreachable_box.ConstProp.32bit.diff
@@ -2,22 +2,19 @@
+ // MIR for `unreachable_box` after ConstProp
fn unreachable_box() -> ! {
- let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37
- let _1: std::boxed::Box<Never>; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
+ let mut _0: !;
+ let _1: std::boxed::Box<Never>;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
+ debug x => _1;
}
scope 2 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
-- _1 = const 1_usize as std::boxed::Box<Never> (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
-+ _1 = const Box::<Never>(Unique::<Never> {{ pointer: NonNull::<Never> {{ pointer: {0x1 as *const Never} }}, _marker: PhantomData::<Never> }}, std::alloc::Global); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: Box<Never>, val: Value(Scalar(0x00000001)) }
- unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13
+ StorageLive(_1);
+- _1 = const 1_usize as std::boxed::Box<Never> (Transmute);
++ _1 = const Box::<Never>(Unique::<Never> {{ pointer: NonNull::<Never> {{ pointer: {0x1 as *const Never} }}, _marker: PhantomData::<Never> }}, std::alloc::Global);
+ unreachable;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.unreachable_box.ConstProp.64bit.diff b/tests/mir-opt/const_prop/transmute.unreachable_box.ConstProp.64bit.diff
index 7e57e06a5..100982382 100644
--- a/tests/mir-opt/const_prop/transmute.unreachable_box.ConstProp.64bit.diff
+++ b/tests/mir-opt/const_prop/transmute.unreachable_box.ConstProp.64bit.diff
@@ -2,22 +2,19 @@
+ // MIR for `unreachable_box` after ConstProp
fn unreachable_box() -> ! {
- let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37
- let _1: std::boxed::Box<Never>; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
+ let mut _0: !;
+ let _1: std::boxed::Box<Never>;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
+ debug x => _1;
}
scope 2 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
-- _1 = const 1_usize as std::boxed::Box<Never> (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
-+ _1 = const Box::<Never>(Unique::<Never> {{ pointer: NonNull::<Never> {{ pointer: {0x1 as *const Never} }}, _marker: PhantomData::<Never> }}, std::alloc::Global); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: Box<Never>, val: Value(Scalar(0x0000000000000001)) }
- unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13
+ StorageLive(_1);
+- _1 = const 1_usize as std::boxed::Box<Never> (Transmute);
++ _1 = const Box::<Never>(Unique::<Never> {{ pointer: NonNull::<Never> {{ pointer: {0x1 as *const Never} }}, _marker: PhantomData::<Never> }}, std::alloc::Global);
+ unreachable;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.unreachable_direct.ConstProp.32bit.diff b/tests/mir-opt/const_prop/transmute.unreachable_direct.ConstProp.32bit.diff
index 032681f23..896608e7e 100644
--- a/tests/mir-opt/const_prop/transmute.unreachable_direct.ConstProp.32bit.diff
+++ b/tests/mir-opt/const_prop/transmute.unreachable_direct.ConstProp.32bit.diff
@@ -2,21 +2,21 @@
+ // MIR for `unreachable_direct` after ConstProp
fn unreachable_direct() -> ! {
- let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:39: +0:40
- let _1: Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
- let mut _2: (); // in scope 0 at $DIR/transmute.rs:+1:39: +1:41
+ let mut _0: !;
+ let _1: Never;
+ let mut _2: ();
scope 1 {
- debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
+ debug x => _1;
}
scope 2 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
- StorageLive(_2); // scope 2 at $DIR/transmute.rs:+1:39: +1:41
- _2 = (); // scope 2 at $DIR/transmute.rs:+1:39: +1:41
- _1 = move _2 as Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:29: +1:42
- unreachable; // scope 2 at $DIR/transmute.rs:+1:29: +1:42
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = ();
+ _1 = move _2 as Never (Transmute);
+ unreachable;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.unreachable_direct.ConstProp.64bit.diff b/tests/mir-opt/const_prop/transmute.unreachable_direct.ConstProp.64bit.diff
index 032681f23..896608e7e 100644
--- a/tests/mir-opt/const_prop/transmute.unreachable_direct.ConstProp.64bit.diff
+++ b/tests/mir-opt/const_prop/transmute.unreachable_direct.ConstProp.64bit.diff
@@ -2,21 +2,21 @@
+ // MIR for `unreachable_direct` after ConstProp
fn unreachable_direct() -> ! {
- let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:39: +0:40
- let _1: Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
- let mut _2: (); // in scope 0 at $DIR/transmute.rs:+1:39: +1:41
+ let mut _0: !;
+ let _1: Never;
+ let mut _2: ();
scope 1 {
- debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
+ debug x => _1;
}
scope 2 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
- StorageLive(_2); // scope 2 at $DIR/transmute.rs:+1:39: +1:41
- _2 = (); // scope 2 at $DIR/transmute.rs:+1:39: +1:41
- _1 = move _2 as Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:29: +1:42
- unreachable; // scope 2 at $DIR/transmute.rs:+1:29: +1:42
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = ();
+ _1 = move _2 as Never (Transmute);
+ unreachable;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.unreachable_mut.ConstProp.32bit.diff b/tests/mir-opt/const_prop/transmute.unreachable_mut.ConstProp.32bit.diff
index ec8a62bd6..c9d5ccf0b 100644
--- a/tests/mir-opt/const_prop/transmute.unreachable_mut.ConstProp.32bit.diff
+++ b/tests/mir-opt/const_prop/transmute.unreachable_mut.ConstProp.32bit.diff
@@ -2,26 +2,23 @@
+ // MIR for `unreachable_mut` after ConstProp
fn unreachable_mut() -> ! {
- let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37
- let _1: &mut Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
- let mut _2: &mut Never; // in scope 0 at $DIR/transmute.rs:+1:34: +1:52
+ let mut _0: !;
+ let _1: &mut Never;
+ let mut _2: &mut Never;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
+ debug x => _1;
}
scope 2 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/transmute.rs:+1:34: +1:52
-- _2 = const 1_usize as &mut Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
-+ _2 = const {0x1 as &mut Never}; // scope 2 at $DIR/transmute.rs:+1:34: +1:52
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: &mut Never, val: Value(Scalar(0x00000001)) }
- _1 = &mut (*_2); // scope 0 at $DIR/transmute.rs:+1:34: +1:52
- StorageDead(_2); // scope 0 at $DIR/transmute.rs:+1:54: +1:55
- unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = const 1_usize as &mut Never (Transmute);
++ _2 = const {0x1 as &mut Never};
+ _1 = &mut (*_2);
+ StorageDead(_2);
+ unreachable;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.unreachable_mut.ConstProp.64bit.diff b/tests/mir-opt/const_prop/transmute.unreachable_mut.ConstProp.64bit.diff
index 288da6e56..c9d5ccf0b 100644
--- a/tests/mir-opt/const_prop/transmute.unreachable_mut.ConstProp.64bit.diff
+++ b/tests/mir-opt/const_prop/transmute.unreachable_mut.ConstProp.64bit.diff
@@ -2,26 +2,23 @@
+ // MIR for `unreachable_mut` after ConstProp
fn unreachable_mut() -> ! {
- let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37
- let _1: &mut Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
- let mut _2: &mut Never; // in scope 0 at $DIR/transmute.rs:+1:34: +1:52
+ let mut _0: !;
+ let _1: &mut Never;
+ let mut _2: &mut Never;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
+ debug x => _1;
}
scope 2 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/transmute.rs:+1:34: +1:52
-- _2 = const 1_usize as &mut Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
-+ _2 = const {0x1 as &mut Never}; // scope 2 at $DIR/transmute.rs:+1:34: +1:52
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: &mut Never, val: Value(Scalar(0x0000000000000001)) }
- _1 = &mut (*_2); // scope 0 at $DIR/transmute.rs:+1:34: +1:52
- StorageDead(_2); // scope 0 at $DIR/transmute.rs:+1:54: +1:55
- unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = const 1_usize as &mut Never (Transmute);
++ _2 = const {0x1 as &mut Never};
+ _1 = &mut (*_2);
+ StorageDead(_2);
+ unreachable;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.unreachable_ref.ConstProp.32bit.diff b/tests/mir-opt/const_prop/transmute.unreachable_ref.ConstProp.32bit.diff
index dcca0fca6..b684ba34c 100644
--- a/tests/mir-opt/const_prop/transmute.unreachable_ref.ConstProp.32bit.diff
+++ b/tests/mir-opt/const_prop/transmute.unreachable_ref.ConstProp.32bit.diff
@@ -2,22 +2,19 @@
+ // MIR for `unreachable_ref` after ConstProp
fn unreachable_ref() -> ! {
- let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37
- let _1: &Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
+ let mut _0: !;
+ let _1: &Never;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
+ debug x => _1;
}
scope 2 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
-- _1 = const 1_usize as &Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:30: +1:48
-+ _1 = const {0x1 as &Never}; // scope 2 at $DIR/transmute.rs:+1:30: +1:48
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: &Never, val: Value(Scalar(0x00000001)) }
- unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13
+ StorageLive(_1);
+- _1 = const 1_usize as &Never (Transmute);
++ _1 = const {0x1 as &Never};
+ unreachable;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.unreachable_ref.ConstProp.64bit.diff b/tests/mir-opt/const_prop/transmute.unreachable_ref.ConstProp.64bit.diff
index 3a0b967e6..b684ba34c 100644
--- a/tests/mir-opt/const_prop/transmute.unreachable_ref.ConstProp.64bit.diff
+++ b/tests/mir-opt/const_prop/transmute.unreachable_ref.ConstProp.64bit.diff
@@ -2,22 +2,19 @@
+ // MIR for `unreachable_ref` after ConstProp
fn unreachable_ref() -> ! {
- let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37
- let _1: &Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
+ let mut _0: !;
+ let _1: &Never;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
+ debug x => _1;
}
scope 2 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
-- _1 = const 1_usize as &Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:30: +1:48
-+ _1 = const {0x1 as &Never}; // scope 2 at $DIR/transmute.rs:+1:30: +1:48
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: &Never, val: Value(Scalar(0x0000000000000001)) }
- unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13
+ StorageLive(_1);
+- _1 = const 1_usize as &Never (Transmute);
++ _1 = const {0x1 as &Never};
+ unreachable;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.valid_char.ConstProp.32bit.diff b/tests/mir-opt/const_prop/transmute.valid_char.ConstProp.32bit.diff
index eac33b730..f215b3ca3 100644
--- a/tests/mir-opt/const_prop/transmute.valid_char.ConstProp.32bit.diff
+++ b/tests/mir-opt/const_prop/transmute.valid_char.ConstProp.32bit.diff
@@ -2,14 +2,14 @@
+ // MIR for `valid_char` after ConstProp
fn valid_char() -> char {
- let mut _0: char; // return place in scope 0 at $DIR/transmute.rs:+0:24: +0:28
+ let mut _0: char;
scope 1 {
}
bb0: {
-- _0 = const 82_u32 as char (Transmute); // scope 1 at $DIR/transmute.rs:+1:14: +1:33
-+ _0 = const 'R'; // scope 1 at $DIR/transmute.rs:+1:14: +1:33
- return; // scope 0 at $DIR/transmute.rs:+2:2: +2:2
+- _0 = const 82_u32 as char (Transmute);
++ _0 = const 'R';
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/transmute.valid_char.ConstProp.64bit.diff b/tests/mir-opt/const_prop/transmute.valid_char.ConstProp.64bit.diff
index eac33b730..f215b3ca3 100644
--- a/tests/mir-opt/const_prop/transmute.valid_char.ConstProp.64bit.diff
+++ b/tests/mir-opt/const_prop/transmute.valid_char.ConstProp.64bit.diff
@@ -2,14 +2,14 @@
+ // MIR for `valid_char` after ConstProp
fn valid_char() -> char {
- let mut _0: char; // return place in scope 0 at $DIR/transmute.rs:+0:24: +0:28
+ let mut _0: char;
scope 1 {
}
bb0: {
-- _0 = const 82_u32 as char (Transmute); // scope 1 at $DIR/transmute.rs:+1:14: +1:33
-+ _0 = const 'R'; // scope 1 at $DIR/transmute.rs:+1:14: +1:33
- return; // scope 0 at $DIR/transmute.rs:+2:2: +2:2
+- _0 = const 82_u32 as char (Transmute);
++ _0 = const 'R';
+ return;
}
}
diff --git a/tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.diff b/tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.diff
deleted file mode 100644
index e4a7c0d1e..000000000
--- a/tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.diff
+++ /dev/null
@@ -1,35 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/tuple_literal_propagation.rs:+0:11: +0:11
- let _1: (u32, u32); // in scope 0 at $DIR/tuple_literal_propagation.rs:+1:9: +1:10
- let _2: (); // in scope 0 at $DIR/tuple_literal_propagation.rs:+3:5: +3:15
- let mut _3: (u32, u32); // in scope 0 at $DIR/tuple_literal_propagation.rs:+3:13: +3:14
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/tuple_literal_propagation.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/tuple_literal_propagation.rs:+1:9: +1:10
-- _1 = (const 1_u32, const 2_u32); // scope 0 at $DIR/tuple_literal_propagation.rs:+1:13: +1:19
-+ _1 = const (1_u32, 2_u32); // scope 0 at $DIR/tuple_literal_propagation.rs:+1:13: +1:19
- StorageLive(_2); // scope 1 at $DIR/tuple_literal_propagation.rs:+3:5: +3:15
- StorageLive(_3); // scope 1 at $DIR/tuple_literal_propagation.rs:+3:13: +3:14
-- _3 = _1; // scope 1 at $DIR/tuple_literal_propagation.rs:+3:13: +3:14
-+ _3 = const (1_u32, 2_u32); // scope 1 at $DIR/tuple_literal_propagation.rs:+3:13: +3:14
- _2 = consume(move _3) -> bb1; // scope 1 at $DIR/tuple_literal_propagation.rs:+3:5: +3:15
- // mir::Constant
- // + span: $DIR/tuple_literal_propagation.rs:7:5: 7:12
- // + literal: Const { ty: fn((u32, u32)) {consume}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_3); // scope 1 at $DIR/tuple_literal_propagation.rs:+3:14: +3:15
- StorageDead(_2); // scope 1 at $DIR/tuple_literal_propagation.rs:+3:15: +3:16
- _0 = const (); // scope 0 at $DIR/tuple_literal_propagation.rs:+0:11: +4:2
- StorageDead(_1); // scope 0 at $DIR/tuple_literal_propagation.rs:+4:1: +4:2
- return; // scope 0 at $DIR/tuple_literal_propagation.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.panic-abort.diff b/tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..a72f24152
--- /dev/null
+++ b/tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.panic-abort.diff
@@ -0,0 +1,32 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: (u32, u32);
+ let _2: ();
+ let mut _3: (u32, u32);
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = (const 1_u32, const 2_u32);
++ _1 = const (1_u32, 2_u32);
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = _1;
++ _3 = const (1_u32, 2_u32);
+ _2 = consume(move _3) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.panic-unwind.diff b/tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..6255f9ec5
--- /dev/null
+++ b/tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,32 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: (u32, u32);
+ let _2: ();
+ let mut _3: (u32, u32);
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = (const 1_u32, const 2_u32);
++ _1 = const (1_u32, 2_u32);
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = _1;
++ _3 = const (1_u32, 2_u32);
+ _2 = consume(move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/const_prop/tuple_literal_propagation.rs b/tests/mir-opt/const_prop/tuple_literal_propagation.rs
index f342ae270..5890a343f 100644
--- a/tests/mir-opt/const_prop/tuple_literal_propagation.rs
+++ b/tests/mir-opt/const_prop/tuple_literal_propagation.rs
@@ -1,5 +1,5 @@
// unit-test: ConstProp
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// EMIT_MIR tuple_literal_propagation.main.ConstProp.diff
fn main() {
let x = (1, 2);
diff --git a/tests/mir-opt/const_prop/while_let_loops.change_loop_body.ConstProp.diff b/tests/mir-opt/const_prop/while_let_loops.change_loop_body.ConstProp.diff
index 377324218..f54908b4a 100644
--- a/tests/mir-opt/const_prop/while_let_loops.change_loop_body.ConstProp.diff
+++ b/tests/mir-opt/const_prop/while_let_loops.change_loop_body.ConstProp.diff
@@ -2,53 +2,53 @@
+ // MIR for `change_loop_body` after ConstProp
fn change_loop_body() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/while_let_loops.rs:+0:27: +0:27
- let mut _1: i32; // in scope 0 at $DIR/while_let_loops.rs:+1:9: +1:15
- let mut _2: (); // in scope 0 at $DIR/while_let_loops.rs:+0:1: +6:2
- let mut _3: std::option::Option<u32>; // in scope 0 at $DIR/while_let_loops.rs:+2:28: +2:32
- let mut _4: isize; // in scope 0 at $DIR/while_let_loops.rs:+2:15: +2:25
- let mut _5: !; // in scope 0 at $DIR/while_let_loops.rs:+2:33: +5:6
- let mut _6: !; // in scope 0 at $DIR/while_let_loops.rs:+2:5: +5:6
- let _7: (); // in scope 0 at $DIR/while_let_loops.rs:+2:5: +5:6
- let mut _8: !; // in scope 0 at $DIR/while_let_loops.rs:+2:5: +5:6
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _2: ();
+ let mut _3: std::option::Option<u32>;
+ let mut _4: isize;
+ let mut _5: !;
+ let mut _6: !;
+ let _7: ();
+ let mut _8: !;
scope 1 {
- debug _x => _1; // in scope 1 at $DIR/while_let_loops.rs:+1:9: +1:15
+ debug _x => _1;
scope 2 {
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/while_let_loops.rs:+1:9: +1:15
- _1 = const 0_i32; // scope 0 at $DIR/while_let_loops.rs:+1:18: +1:19
- StorageLive(_3); // scope 2 at $DIR/while_let_loops.rs:+2:28: +2:32
- _3 = Option::<u32>::None; // scope 2 at $DIR/while_let_loops.rs:+2:28: +2:32
-- _4 = discriminant(_3); // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
-- switchInt(move _4) -> [1: bb1, otherwise: bb3]; // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
-+ _4 = const 0_isize; // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
-+ switchInt(const 0_isize) -> [1: bb1, otherwise: bb3]; // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
+ StorageLive(_1);
+ _1 = const 0_i32;
+ StorageLive(_3);
+ _3 = Option::<u32>::None;
+- _4 = discriminant(_3);
+- switchInt(move _4) -> [1: bb1, otherwise: bb3];
++ _4 = const 0_isize;
++ switchInt(const 0_isize) -> [1: bb1, otherwise: bb3];
}
bb1: {
- switchInt(((_3 as Some).0: u32)) -> [0: bb2, otherwise: bb3]; // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
+ switchInt(((_3 as Some).0: u32)) -> [0: bb2, otherwise: bb3];
}
bb2: {
- _1 = const 1_i32; // scope 2 at $DIR/while_let_loops.rs:+3:9: +3:15
- _0 = const (); // scope 2 at $DIR/while_let_loops.rs:+4:9: +4:14
- goto -> bb4; // scope 2 at $DIR/while_let_loops.rs:+4:9: +4:14
+ _1 = const 1_i32;
+ _0 = const ();
+ goto -> bb4;
}
bb3: {
- StorageLive(_7); // scope 1 at $DIR/while_let_loops.rs:+2:5: +5:6
- _0 = const (); // scope 1 at $DIR/while_let_loops.rs:+2:5: +5:6
- StorageDead(_7); // scope 1 at $DIR/while_let_loops.rs:+5:5: +5:6
- goto -> bb4; // scope 1 at no-location
+ StorageLive(_7);
+ _0 = const ();
+ StorageDead(_7);
+ goto -> bb4;
}
bb4: {
- StorageDead(_3); // scope 1 at $DIR/while_let_loops.rs:+5:5: +5:6
- StorageDead(_1); // scope 0 at $DIR/while_let_loops.rs:+6:1: +6:2
- return; // scope 0 at $DIR/while_let_loops.rs:+6:2: +6:2
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop_miscompile.bar.ConstProp.diff b/tests/mir-opt/const_prop_miscompile.bar.ConstProp.diff
index a5f52d089..4eafb8d09 100644
--- a/tests/mir-opt/const_prop_miscompile.bar.ConstProp.diff
+++ b/tests/mir-opt/const_prop_miscompile.bar.ConstProp.diff
@@ -2,40 +2,40 @@
+ // MIR for `bar` after ConstProp
fn bar() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/const_prop_miscompile.rs:+0:10: +0:10
- let mut _1: (i32,); // in scope 0 at $DIR/const_prop_miscompile.rs:+1:9: +1:14
- let _2: (); // in scope 0 at $DIR/const_prop_miscompile.rs:+2:5: +4:6
- let mut _3: *mut i32; // in scope 0 at $DIR/const_prop_miscompile.rs:+3:10: +3:22
- let mut _5: i32; // in scope 0 at $DIR/const_prop_miscompile.rs:+5:13: +5:20
+ let mut _0: ();
+ let mut _1: (i32,);
+ let _2: ();
+ let mut _3: *mut i32;
+ let mut _5: i32;
scope 1 {
- debug v => _1; // in scope 1 at $DIR/const_prop_miscompile.rs:+1:9: +1:14
- let _4: bool; // in scope 1 at $DIR/const_prop_miscompile.rs:+5:9: +5:10
+ debug v => _1;
+ let _4: bool;
scope 2 {
}
scope 3 {
- debug y => _4; // in scope 3 at $DIR/const_prop_miscompile.rs:+5:9: +5:10
+ debug y => _4;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_prop_miscompile.rs:+1:9: +1:14
- _1 = (const 1_i32,); // scope 0 at $DIR/const_prop_miscompile.rs:+1:17: +1:21
- StorageLive(_2); // scope 1 at $DIR/const_prop_miscompile.rs:+2:5: +4:6
- StorageLive(_3); // scope 2 at $DIR/const_prop_miscompile.rs:+3:10: +3:22
- _3 = &raw mut (_1.0: i32); // scope 2 at $DIR/const_prop_miscompile.rs:+3:10: +3:22
- (*_3) = const 5_i32; // scope 2 at $DIR/const_prop_miscompile.rs:+3:9: +3:26
- StorageDead(_3); // scope 2 at $DIR/const_prop_miscompile.rs:+3:26: +3:27
- _2 = const (); // scope 2 at $DIR/const_prop_miscompile.rs:+2:5: +4:6
- StorageDead(_2); // scope 1 at $DIR/const_prop_miscompile.rs:+4:5: +4:6
- StorageLive(_4); // scope 1 at $DIR/const_prop_miscompile.rs:+5:9: +5:10
- StorageLive(_5); // scope 1 at $DIR/const_prop_miscompile.rs:+5:13: +5:20
- _5 = (_1.0: i32); // scope 1 at $DIR/const_prop_miscompile.rs:+5:15: +5:18
- _4 = Eq(move _5, const 5_i32); // scope 1 at $DIR/const_prop_miscompile.rs:+5:13: +5:25
- StorageDead(_5); // scope 1 at $DIR/const_prop_miscompile.rs:+5:24: +5:25
- _0 = const (); // scope 0 at $DIR/const_prop_miscompile.rs:+0:10: +6:2
- StorageDead(_4); // scope 1 at $DIR/const_prop_miscompile.rs:+6:1: +6:2
- StorageDead(_1); // scope 0 at $DIR/const_prop_miscompile.rs:+6:1: +6:2
- return; // scope 0 at $DIR/const_prop_miscompile.rs:+6:2: +6:2
+ StorageLive(_1);
+ _1 = (const 1_i32,);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &raw mut (_1.0: i32);
+ (*_3) = const 5_i32;
+ StorageDead(_3);
+ _2 = const ();
+ StorageDead(_2);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = (_1.0: i32);
+ _4 = Eq(move _5, const 5_i32);
+ StorageDead(_5);
+ _0 = const ();
+ StorageDead(_4);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/const_prop_miscompile.foo.ConstProp.diff b/tests/mir-opt/const_prop_miscompile.foo.ConstProp.diff
index 42ddc2a56..445d9895d 100644
--- a/tests/mir-opt/const_prop_miscompile.foo.ConstProp.diff
+++ b/tests/mir-opt/const_prop_miscompile.foo.ConstProp.diff
@@ -2,34 +2,34 @@
+ // MIR for `foo` after ConstProp
fn foo() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/const_prop_miscompile.rs:+0:10: +0:10
- let mut _1: (i32,); // in scope 0 at $DIR/const_prop_miscompile.rs:+1:9: +1:14
- let mut _2: &mut i32; // in scope 0 at $DIR/const_prop_miscompile.rs:+2:6: +2:14
- let mut _4: i32; // in scope 0 at $DIR/const_prop_miscompile.rs:+3:13: +3:20
+ let mut _0: ();
+ let mut _1: (i32,);
+ let mut _2: &mut i32;
+ let mut _4: i32;
scope 1 {
- debug u => _1; // in scope 1 at $DIR/const_prop_miscompile.rs:+1:9: +1:14
- let _3: bool; // in scope 1 at $DIR/const_prop_miscompile.rs:+3:9: +3:10
+ debug u => _1;
+ let _3: bool;
scope 2 {
- debug y => _3; // in scope 2 at $DIR/const_prop_miscompile.rs:+3:9: +3:10
+ debug y => _3;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/const_prop_miscompile.rs:+1:9: +1:14
- _1 = (const 1_i32,); // scope 0 at $DIR/const_prop_miscompile.rs:+1:17: +1:21
- StorageLive(_2); // scope 1 at $DIR/const_prop_miscompile.rs:+2:6: +2:14
- _2 = &mut (_1.0: i32); // scope 1 at $DIR/const_prop_miscompile.rs:+2:6: +2:14
- (*_2) = const 5_i32; // scope 1 at $DIR/const_prop_miscompile.rs:+2:5: +2:18
- StorageDead(_2); // scope 1 at $DIR/const_prop_miscompile.rs:+2:18: +2:19
- StorageLive(_3); // scope 1 at $DIR/const_prop_miscompile.rs:+3:9: +3:10
- StorageLive(_4); // scope 1 at $DIR/const_prop_miscompile.rs:+3:13: +3:20
- _4 = (_1.0: i32); // scope 1 at $DIR/const_prop_miscompile.rs:+3:15: +3:18
- _3 = Eq(move _4, const 5_i32); // scope 1 at $DIR/const_prop_miscompile.rs:+3:13: +3:25
- StorageDead(_4); // scope 1 at $DIR/const_prop_miscompile.rs:+3:24: +3:25
- _0 = const (); // scope 0 at $DIR/const_prop_miscompile.rs:+0:10: +4:2
- StorageDead(_3); // scope 1 at $DIR/const_prop_miscompile.rs:+4:1: +4:2
- StorageDead(_1); // scope 0 at $DIR/const_prop_miscompile.rs:+4:1: +4:2
- return; // scope 0 at $DIR/const_prop_miscompile.rs:+4:2: +4:2
+ StorageLive(_1);
+ _1 = (const 1_i32,);
+ StorageLive(_2);
+ _2 = &mut (_1.0: i32);
+ (*_2) = const 5_i32;
+ StorageDead(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = (_1.0: i32);
+ _3 = Eq(move _4, const 5_i32);
+ StorageDead(_4);
+ _0 = const ();
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.diff b/tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.diff
deleted file mode 100644
index 51707e716..000000000
--- a/tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.diff
+++ /dev/null
@@ -1,33 +0,0 @@
-- // MIR for `f` before CopyProp
-+ // MIR for `f` after CopyProp
-
- fn f() -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/borrowed_local.rs:+0:11: +0:15
- let mut _1: u8; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _2: &u8; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: u8; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _4: &u8; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-
- bb0: {
- _1 = const 5_u8; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _2 = &_1; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _3 = _1; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _4 = &_3; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _0 = cmp_ref(_2, _4) -> bb1; // scope 0 at $DIR/borrowed_local.rs:+8:13: +8:45
- // mir::Constant
- // + span: $DIR/borrowed_local.rs:24:29: 24:36
- // + literal: Const { ty: for<'a, 'b> fn(&'a u8, &'b u8) -> bool {cmp_ref}, val: Value(<ZST>) }
- }
-
- bb1: {
- _0 = opaque::<u8>(_3) -> bb2; // scope 0 at $DIR/borrowed_local.rs:+12:13: +12:38
- // mir::Constant
- // + span: $DIR/borrowed_local.rs:28:28: 28:34
- // + literal: Const { ty: fn(u8) -> bool {opaque::<u8>}, val: Value(<ZST>) }
- }
-
- bb2: {
- return; // scope 0 at $DIR/borrowed_local.rs:+15:13: +15:21
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..46534076c
--- /dev/null
+++ b/tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.panic-abort.diff
@@ -0,0 +1,27 @@
+- // MIR for `f` before CopyProp
++ // MIR for `f` after CopyProp
+
+ fn f() -> bool {
+ let mut _0: bool;
+ let mut _1: u8;
+ let mut _2: &u8;
+ let mut _3: u8;
+ let mut _4: &u8;
+
+ bb0: {
+ _1 = const 5_u8;
+ _2 = &_1;
+ _3 = _1;
+ _4 = &_3;
+ _0 = cmp_ref(_2, _4) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _0 = opaque::<u8>(_3) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..b702e3b7d
--- /dev/null
+++ b/tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.panic-unwind.diff
@@ -0,0 +1,27 @@
+- // MIR for `f` before CopyProp
++ // MIR for `f` after CopyProp
+
+ fn f() -> bool {
+ let mut _0: bool;
+ let mut _1: u8;
+ let mut _2: &u8;
+ let mut _3: u8;
+ let mut _4: &u8;
+
+ bb0: {
+ _1 = const 5_u8;
+ _2 = &_1;
+ _3 = _1;
+ _4 = &_3;
+ _0 = cmp_ref(_2, _4) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ _0 = opaque::<u8>(_3) -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/borrowed_local.rs b/tests/mir-opt/copy-prop/borrowed_local.rs
index 9186da5af..a89b64441 100644
--- a/tests/mir-opt/copy-prop/borrowed_local.rs
+++ b/tests/mir-opt/copy-prop/borrowed_local.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: CopyProp
#![feature(custom_mir, core_intrinsics)]
diff --git a/tests/mir-opt/copy-prop/branch.foo.CopyProp.diff b/tests/mir-opt/copy-prop/branch.foo.CopyProp.diff
deleted file mode 100644
index b78c19d78..000000000
--- a/tests/mir-opt/copy-prop/branch.foo.CopyProp.diff
+++ /dev/null
@@ -1,65 +0,0 @@
-- // MIR for `foo` before CopyProp
-+ // MIR for `foo` after CopyProp
-
- fn foo() -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/branch.rs:+0:13: +0:16
- let _1: i32; // in scope 0 at $DIR/branch.rs:+1:9: +1:10
- let mut _3: bool; // in scope 0 at $DIR/branch.rs:+3:16: +3:22
- let _4: i32; // in scope 0 at $DIR/branch.rs:+6:9: +6:14
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/branch.rs:+1:9: +1:10
- let _2: i32; // in scope 1 at $DIR/branch.rs:+3:9: +3:10
- scope 2 {
- debug y => _2; // in scope 2 at $DIR/branch.rs:+3:9: +3:10
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/branch.rs:+1:9: +1:10
- _1 = val() -> bb1; // scope 0 at $DIR/branch.rs:+1:13: +1:18
- // mir::Constant
- // + span: $DIR/branch.rs:14:13: 14:16
- // + literal: Const { ty: fn() -> i32 {val}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageLive(_2); // scope 1 at $DIR/branch.rs:+3:9: +3:10
- StorageLive(_3); // scope 1 at $DIR/branch.rs:+3:16: +3:22
- _3 = cond() -> bb2; // scope 1 at $DIR/branch.rs:+3:16: +3:22
- // mir::Constant
- // + span: $DIR/branch.rs:16:16: 16:20
- // + literal: Const { ty: fn() -> bool {cond}, val: Value(<ZST>) }
- }
-
- bb2: {
- switchInt(move _3) -> [0: bb4, otherwise: bb3]; // scope 1 at $DIR/branch.rs:+3:16: +3:22
- }
-
- bb3: {
- _2 = _1; // scope 1 at $DIR/branch.rs:+4:9: +4:10
- goto -> bb6; // scope 1 at $DIR/branch.rs:+3:13: +8:6
- }
-
- bb4: {
- StorageLive(_4); // scope 1 at $DIR/branch.rs:+6:9: +6:14
- _4 = val() -> bb5; // scope 1 at $DIR/branch.rs:+6:9: +6:14
- // mir::Constant
- // + span: $DIR/branch.rs:19:9: 19:12
- // + literal: Const { ty: fn() -> i32 {val}, val: Value(<ZST>) }
- }
-
- bb5: {
- StorageDead(_4); // scope 1 at $DIR/branch.rs:+6:14: +6:15
- _2 = _1; // scope 1 at $DIR/branch.rs:+7:9: +7:10
- goto -> bb6; // scope 1 at $DIR/branch.rs:+3:13: +8:6
- }
-
- bb6: {
- StorageDead(_3); // scope 1 at $DIR/branch.rs:+8:5: +8:6
- _0 = _2; // scope 2 at $DIR/branch.rs:+10:5: +10:6
- StorageDead(_2); // scope 1 at $DIR/branch.rs:+11:1: +11:2
- StorageDead(_1); // scope 0 at $DIR/branch.rs:+11:1: +11:2
- return; // scope 0 at $DIR/branch.rs:+11:2: +11:2
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/branch.foo.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/branch.foo.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..3334cdf92
--- /dev/null
+++ b/tests/mir-opt/copy-prop/branch.foo.CopyProp.panic-abort.diff
@@ -0,0 +1,56 @@
+- // MIR for `foo` before CopyProp
++ // MIR for `foo` after CopyProp
+
+ fn foo() -> i32 {
+ let mut _0: i32;
+ let _1: i32;
+ let mut _3: bool;
+ let _4: i32;
+ scope 1 {
+ debug x => _1;
+ let _2: i32;
+ scope 2 {
+ debug y => _2;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = val() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = cond() -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ switchInt(move _3) -> [0: bb4, otherwise: bb3];
+ }
+
+ bb3: {
+ _2 = _1;
+ goto -> bb6;
+ }
+
+ bb4: {
+ StorageLive(_4);
+ _4 = val() -> [return: bb5, unwind unreachable];
+ }
+
+ bb5: {
+ StorageDead(_4);
+ _2 = _1;
+ goto -> bb6;
+ }
+
+ bb6: {
+ StorageDead(_3);
+ _0 = _2;
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/branch.foo.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/branch.foo.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..2f92d8818
--- /dev/null
+++ b/tests/mir-opt/copy-prop/branch.foo.CopyProp.panic-unwind.diff
@@ -0,0 +1,56 @@
+- // MIR for `foo` before CopyProp
++ // MIR for `foo` after CopyProp
+
+ fn foo() -> i32 {
+ let mut _0: i32;
+ let _1: i32;
+ let mut _3: bool;
+ let _4: i32;
+ scope 1 {
+ debug x => _1;
+ let _2: i32;
+ scope 2 {
+ debug y => _2;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = val() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = cond() -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ switchInt(move _3) -> [0: bb4, otherwise: bb3];
+ }
+
+ bb3: {
+ _2 = _1;
+ goto -> bb6;
+ }
+
+ bb4: {
+ StorageLive(_4);
+ _4 = val() -> [return: bb5, unwind continue];
+ }
+
+ bb5: {
+ StorageDead(_4);
+ _2 = _1;
+ goto -> bb6;
+ }
+
+ bb6: {
+ StorageDead(_3);
+ _0 = _2;
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/branch.rs b/tests/mir-opt/copy-prop/branch.rs
index 0a2e16946..c8af1aa7b 100644
--- a/tests/mir-opt/copy-prop/branch.rs
+++ b/tests/mir-opt/copy-prop/branch.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
//! Tests that we bail out when there are multiple assignments to the same local.
// unit-test: CopyProp
fn val() -> i32 {
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.diff b/tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.diff
deleted file mode 100644
index 1c7b6494d..000000000
--- a/tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.diff
+++ /dev/null
@@ -1,23 +0,0 @@
-- // MIR for `arg_src` before CopyProp
-+ // MIR for `arg_src` after CopyProp
-
- fn arg_src(_1: i32) -> i32 {
- debug x => _1; // in scope 0 at $DIR/copy_propagation_arg.rs:+0:12: +0:17
- let mut _0: i32; // return place in scope 0 at $DIR/copy_propagation_arg.rs:+0:27: +0:30
- let _2: i32; // in scope 0 at $DIR/copy_propagation_arg.rs:+1:9: +1:10
- scope 1 {
-- debug y => _2; // in scope 1 at $DIR/copy_propagation_arg.rs:+1:9: +1:10
-+ debug y => _0; // in scope 1 at $DIR/copy_propagation_arg.rs:+1:9: +1:10
- }
-
- bb0: {
-- StorageLive(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+1:9: +1:10
-- _2 = _1; // scope 0 at $DIR/copy_propagation_arg.rs:+1:13: +1:14
-+ _0 = _1; // scope 0 at $DIR/copy_propagation_arg.rs:+1:13: +1:14
- _1 = const 123_i32; // scope 1 at $DIR/copy_propagation_arg.rs:+2:5: +2:12
-- _0 = _2; // scope 1 at $DIR/copy_propagation_arg.rs:+3:5: +3:6
-- StorageDead(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+4:1: +4:2
- return; // scope 0 at $DIR/copy_propagation_arg.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..70674a912
--- /dev/null
+++ b/tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.panic-abort.diff
@@ -0,0 +1,23 @@
+- // MIR for `arg_src` before CopyProp
++ // MIR for `arg_src` after CopyProp
+
+ fn arg_src(_1: i32) -> i32 {
+ debug x => _1;
+ let mut _0: i32;
+ let _2: i32;
+ scope 1 {
+- debug y => _2;
++ debug y => _0;
+ }
+
+ bb0: {
+- StorageLive(_2);
+- _2 = _1;
++ _0 = _1;
+ _1 = const 123_i32;
+- _0 = _2;
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..70674a912
--- /dev/null
+++ b/tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.panic-unwind.diff
@@ -0,0 +1,23 @@
+- // MIR for `arg_src` before CopyProp
++ // MIR for `arg_src` after CopyProp
+
+ fn arg_src(_1: i32) -> i32 {
+ debug x => _1;
+ let mut _0: i32;
+ let _2: i32;
+ scope 1 {
+- debug y => _2;
++ debug y => _0;
+ }
+
+ bb0: {
+- StorageLive(_2);
+- _2 = _1;
++ _0 = _1;
+ _1 = const 123_i32;
+- _0 = _2;
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.diff b/tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.diff
deleted file mode 100644
index 24bca3220..000000000
--- a/tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.diff
+++ /dev/null
@@ -1,28 +0,0 @@
-- // MIR for `bar` before CopyProp
-+ // MIR for `bar` after CopyProp
-
- fn bar(_1: u8) -> () {
- debug x => _1; // in scope 0 at $DIR/copy_propagation_arg.rs:+0:8: +0:13
- let mut _0: (); // return place in scope 0 at $DIR/copy_propagation_arg.rs:+0:19: +0:19
- let _2: u8; // in scope 0 at $DIR/copy_propagation_arg.rs:+1:5: +1:13
- let mut _3: u8; // in scope 0 at $DIR/copy_propagation_arg.rs:+1:11: +1:12
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+1:5: +1:13
- StorageLive(_3); // scope 0 at $DIR/copy_propagation_arg.rs:+1:11: +1:12
- _3 = _1; // scope 0 at $DIR/copy_propagation_arg.rs:+1:11: +1:12
- _2 = dummy(move _3) -> bb1; // scope 0 at $DIR/copy_propagation_arg.rs:+1:5: +1:13
- // mir::Constant
- // + span: $DIR/copy_propagation_arg.rs:17:5: 17:10
- // + literal: Const { ty: fn(u8) -> u8 {dummy}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_3); // scope 0 at $DIR/copy_propagation_arg.rs:+1:12: +1:13
- StorageDead(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+1:13: +1:14
- _1 = const 5_u8; // scope 0 at $DIR/copy_propagation_arg.rs:+2:5: +2:10
- _0 = const (); // scope 0 at $DIR/copy_propagation_arg.rs:+0:19: +3:2
- return; // scope 0 at $DIR/copy_propagation_arg.rs:+3:2: +3:2
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..9ec014e2b
--- /dev/null
+++ b/tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.panic-abort.diff
@@ -0,0 +1,25 @@
+- // MIR for `bar` before CopyProp
++ // MIR for `bar` after CopyProp
+
+ fn bar(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: u8;
+ let mut _3: u8;
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = dummy(move _3) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageDead(_2);
+ _1 = const 5_u8;
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..ef9c343a2
--- /dev/null
+++ b/tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.panic-unwind.diff
@@ -0,0 +1,25 @@
+- // MIR for `bar` before CopyProp
++ // MIR for `bar` after CopyProp
+
+ fn bar(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: u8;
+ let mut _3: u8;
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = dummy(move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageDead(_2);
+ _1 = const 5_u8;
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.diff b/tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.diff
deleted file mode 100644
index 7ab6ebb7d..000000000
--- a/tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.diff
+++ /dev/null
@@ -1,18 +0,0 @@
-- // MIR for `baz` before CopyProp
-+ // MIR for `baz` after CopyProp
-
- fn baz(_1: i32) -> i32 {
- debug x => _1; // in scope 0 at $DIR/copy_propagation_arg.rs:+0:8: +0:13
- let mut _0: i32; // return place in scope 0 at $DIR/copy_propagation_arg.rs:+0:23: +0:26
- let mut _2: i32; // in scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:10
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:10
- _2 = _1; // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:10
- _1 = move _2; // scope 0 at $DIR/copy_propagation_arg.rs:+2:5: +2:10
- StorageDead(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:10
- _0 = _1; // scope 0 at $DIR/copy_propagation_arg.rs:+3:5: +3:6
- return; // scope 0 at $DIR/copy_propagation_arg.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..71facf91d
--- /dev/null
+++ b/tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.panic-abort.diff
@@ -0,0 +1,18 @@
+- // MIR for `baz` before CopyProp
++ // MIR for `baz` after CopyProp
+
+ fn baz(_1: i32) -> i32 {
+ debug x => _1;
+ let mut _0: i32;
+ let mut _2: i32;
+
+ bb0: {
+ StorageLive(_2);
+ _2 = _1;
+ _1 = move _2;
+ StorageDead(_2);
+ _0 = _1;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..71facf91d
--- /dev/null
+++ b/tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.panic-unwind.diff
@@ -0,0 +1,18 @@
+- // MIR for `baz` before CopyProp
++ // MIR for `baz` after CopyProp
+
+ fn baz(_1: i32) -> i32 {
+ debug x => _1;
+ let mut _0: i32;
+ let mut _2: i32;
+
+ bb0: {
+ StorageLive(_2);
+ _2 = _1;
+ _1 = move _2;
+ StorageDead(_2);
+ _0 = _1;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.diff b/tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.diff
deleted file mode 100644
index 87708f340..000000000
--- a/tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.diff
+++ /dev/null
@@ -1,28 +0,0 @@
-- // MIR for `foo` before CopyProp
-+ // MIR for `foo` after CopyProp
-
- fn foo(_1: u8) -> () {
- debug x => _1; // in scope 0 at $DIR/copy_propagation_arg.rs:+0:8: +0:13
- let mut _0: (); // return place in scope 0 at $DIR/copy_propagation_arg.rs:+0:19: +0:19
- let mut _2: u8; // in scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:17
- let mut _3: u8; // in scope 0 at $DIR/copy_propagation_arg.rs:+2:15: +2:16
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:17
- StorageLive(_3); // scope 0 at $DIR/copy_propagation_arg.rs:+2:15: +2:16
- _3 = _1; // scope 0 at $DIR/copy_propagation_arg.rs:+2:15: +2:16
- _2 = dummy(move _3) -> bb1; // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:17
- // mir::Constant
- // + span: $DIR/copy_propagation_arg.rs:12:9: 12:14
- // + literal: Const { ty: fn(u8) -> u8 {dummy}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_3); // scope 0 at $DIR/copy_propagation_arg.rs:+2:16: +2:17
- _1 = move _2; // scope 0 at $DIR/copy_propagation_arg.rs:+2:5: +2:17
- StorageDead(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+2:16: +2:17
- _0 = const (); // scope 0 at $DIR/copy_propagation_arg.rs:+0:19: +3:2
- return; // scope 0 at $DIR/copy_propagation_arg.rs:+3:2: +3:2
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..81b73e187
--- /dev/null
+++ b/tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.panic-abort.diff
@@ -0,0 +1,25 @@
+- // MIR for `foo` before CopyProp
++ // MIR for `foo` after CopyProp
+
+ fn foo(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let mut _2: u8;
+ let mut _3: u8;
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = dummy(move _3) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ _1 = move _2;
+ StorageDead(_2);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..769089e16
--- /dev/null
+++ b/tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.panic-unwind.diff
@@ -0,0 +1,25 @@
+- // MIR for `foo` before CopyProp
++ // MIR for `foo` after CopyProp
+
+ fn foo(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let mut _2: u8;
+ let mut _3: u8;
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = dummy(move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ _1 = move _2;
+ StorageDead(_2);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/copy_propagation_arg.rs b/tests/mir-opt/copy-prop/copy_propagation_arg.rs
index 1b65dcb01..671860da5 100644
--- a/tests/mir-opt/copy-prop/copy_propagation_arg.rs
+++ b/tests/mir-opt/copy-prop/copy_propagation_arg.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Check that CopyProp does not propagate an assignment to a function argument
// (doing so can break usages of the original argument value)
// unit-test: CopyProp
diff --git a/tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.diff b/tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.diff
deleted file mode 100644
index 160f47bdd..000000000
--- a/tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-- // MIR for `f` before CopyProp
-+ // MIR for `f` after CopyProp
-
- fn f(_1: NotCopy) -> () {
- let mut _0: (); // return place in scope 0 at $DIR/custom_move_arg.rs:+0:19: +0:19
- let mut _2: NotCopy; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: NotCopy; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-
- bb0: {
-- _2 = _1; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-- _0 = opaque::<NotCopy>(move _1) -> bb1; // scope 0 at $DIR/custom_move_arg.rs:+3:9: +3:41
-+ _0 = opaque::<NotCopy>(_1) -> bb1; // scope 0 at $DIR/custom_move_arg.rs:+3:9: +3:41
- // mir::Constant
- // + span: $DIR/custom_move_arg.rs:16:24: 16:30
- // + literal: Const { ty: fn(NotCopy) {opaque::<NotCopy>}, val: Value(<ZST>) }
- }
-
- bb1: {
-- _3 = move _2; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-- _0 = opaque::<NotCopy>(_3) -> bb2; // scope 0 at $DIR/custom_move_arg.rs:+7:9: +7:35
-+ _0 = opaque::<NotCopy>(_1) -> bb2; // scope 0 at $DIR/custom_move_arg.rs:+7:9: +7:35
- // mir::Constant
- // + span: $DIR/custom_move_arg.rs:20:24: 20:30
- // + literal: Const { ty: fn(NotCopy) {opaque::<NotCopy>}, val: Value(<ZST>) }
- }
-
- bb2: {
- return; // scope 0 at $DIR/custom_move_arg.rs:+10:9: +10:17
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..7ba853010
--- /dev/null
+++ b/tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.panic-abort.diff
@@ -0,0 +1,25 @@
+- // MIR for `f` before CopyProp
++ // MIR for `f` after CopyProp
+
+ fn f(_1: NotCopy) -> () {
+ let mut _0: ();
+ let mut _2: NotCopy;
+ let mut _3: NotCopy;
+
+ bb0: {
+- _2 = _1;
+- _0 = opaque::<NotCopy>(move _1) -> [return: bb1, unwind unreachable];
++ _0 = opaque::<NotCopy>(_1) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _3 = move _2;
+- _0 = opaque::<NotCopy>(_3) -> [return: bb2, unwind unreachable];
++ _0 = opaque::<NotCopy>(_1) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..eb40183c1
--- /dev/null
+++ b/tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.panic-unwind.diff
@@ -0,0 +1,25 @@
+- // MIR for `f` before CopyProp
++ // MIR for `f` after CopyProp
+
+ fn f(_1: NotCopy) -> () {
+ let mut _0: ();
+ let mut _2: NotCopy;
+ let mut _3: NotCopy;
+
+ bb0: {
+- _2 = _1;
+- _0 = opaque::<NotCopy>(move _1) -> [return: bb1, unwind continue];
++ _0 = opaque::<NotCopy>(_1) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+- _3 = move _2;
+- _0 = opaque::<NotCopy>(_3) -> [return: bb2, unwind continue];
++ _0 = opaque::<NotCopy>(_1) -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/custom_move_arg.rs b/tests/mir-opt/copy-prop/custom_move_arg.rs
index 29c368df8..a90db08fa 100644
--- a/tests/mir-opt/copy-prop/custom_move_arg.rs
+++ b/tests/mir-opt/copy-prop/custom_move_arg.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: CopyProp
#![feature(custom_mir, core_intrinsics)]
diff --git a/tests/mir-opt/copy-prop/cycle.main.CopyProp.diff b/tests/mir-opt/copy-prop/cycle.main.CopyProp.diff
deleted file mode 100644
index 23d92ed1a..000000000
--- a/tests/mir-opt/copy-prop/cycle.main.CopyProp.diff
+++ /dev/null
@@ -1,60 +0,0 @@
-- // MIR for `main` before CopyProp
-+ // MIR for `main` after CopyProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/cycle.rs:+0:11: +0:11
- let mut _1: i32; // in scope 0 at $DIR/cycle.rs:+1:9: +1:14
- let mut _4: i32; // in scope 0 at $DIR/cycle.rs:+4:9: +4:10
- let _5: (); // in scope 0 at $DIR/cycle.rs:+6:5: +6:12
- let mut _6: i32; // in scope 0 at $DIR/cycle.rs:+6:10: +6:11
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/cycle.rs:+1:9: +1:14
- let _2: i32; // in scope 1 at $DIR/cycle.rs:+2:9: +2:10
- scope 2 {
- debug y => _2; // in scope 2 at $DIR/cycle.rs:+2:9: +2:10
- let _3: i32; // in scope 2 at $DIR/cycle.rs:+3:9: +3:10
- scope 3 {
-- debug z => _3; // in scope 3 at $DIR/cycle.rs:+3:9: +3:10
-+ debug z => _2; // in scope 3 at $DIR/cycle.rs:+3:9: +3:10
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/cycle.rs:+1:9: +1:14
- _1 = val() -> bb1; // scope 0 at $DIR/cycle.rs:+1:17: +1:22
- // mir::Constant
- // + span: $DIR/cycle.rs:10:17: 10:20
- // + literal: Const { ty: fn() -> i32 {val}, val: Value(<ZST>) }
- }
-
- bb1: {
-- StorageLive(_2); // scope 1 at $DIR/cycle.rs:+2:9: +2:10
- _2 = _1; // scope 1 at $DIR/cycle.rs:+2:13: +2:14
-- StorageLive(_3); // scope 2 at $DIR/cycle.rs:+3:9: +3:10
-- _3 = _2; // scope 2 at $DIR/cycle.rs:+3:13: +3:14
-- StorageLive(_4); // scope 3 at $DIR/cycle.rs:+4:9: +4:10
-- _4 = _3; // scope 3 at $DIR/cycle.rs:+4:9: +4:10
-- _1 = move _4; // scope 3 at $DIR/cycle.rs:+4:5: +4:10
-- StorageDead(_4); // scope 3 at $DIR/cycle.rs:+4:9: +4:10
-+ _1 = _2; // scope 3 at $DIR/cycle.rs:+4:5: +4:10
- StorageLive(_5); // scope 3 at $DIR/cycle.rs:+6:5: +6:12
- StorageLive(_6); // scope 3 at $DIR/cycle.rs:+6:10: +6:11
- _6 = _1; // scope 3 at $DIR/cycle.rs:+6:10: +6:11
- _5 = std::mem::drop::<i32>(move _6) -> bb2; // scope 3 at $DIR/cycle.rs:+6:5: +6:12
- // mir::Constant
- // + span: $DIR/cycle.rs:15:5: 15:9
- // + literal: Const { ty: fn(i32) {std::mem::drop::<i32>}, val: Value(<ZST>) }
- }
-
- bb2: {
- StorageDead(_6); // scope 3 at $DIR/cycle.rs:+6:11: +6:12
- StorageDead(_5); // scope 3 at $DIR/cycle.rs:+6:12: +6:13
- _0 = const (); // scope 0 at $DIR/cycle.rs:+0:11: +7:2
-- StorageDead(_3); // scope 2 at $DIR/cycle.rs:+7:1: +7:2
-- StorageDead(_2); // scope 1 at $DIR/cycle.rs:+7:1: +7:2
- StorageDead(_1); // scope 0 at $DIR/cycle.rs:+7:1: +7:2
- return; // scope 0 at $DIR/cycle.rs:+7:2: +7:2
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/cycle.main.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/cycle.main.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..8f97c4e43
--- /dev/null
+++ b/tests/mir-opt/copy-prop/cycle.main.CopyProp.panic-abort.diff
@@ -0,0 +1,54 @@
+- // MIR for `main` before CopyProp
++ // MIR for `main` after CopyProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _4: i32;
+ let _5: ();
+ let mut _6: i32;
+ scope 1 {
+ debug x => _1;
+ let _2: i32;
+ scope 2 {
+ debug y => _2;
+ let _3: i32;
+ scope 3 {
+- debug z => _3;
++ debug z => _2;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = val() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- StorageLive(_2);
+ _2 = _1;
+- StorageLive(_3);
+- _3 = _2;
+- StorageLive(_4);
+- _4 = _3;
+- _1 = move _4;
+- StorageDead(_4);
++ _1 = _2;
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = _1;
+ _5 = std::mem::drop::<i32>(move _6) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ StorageDead(_6);
+ StorageDead(_5);
+ _0 = const ();
+- StorageDead(_3);
+- StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/cycle.main.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/cycle.main.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..e343b7892
--- /dev/null
+++ b/tests/mir-opt/copy-prop/cycle.main.CopyProp.panic-unwind.diff
@@ -0,0 +1,54 @@
+- // MIR for `main` before CopyProp
++ // MIR for `main` after CopyProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _4: i32;
+ let _5: ();
+ let mut _6: i32;
+ scope 1 {
+ debug x => _1;
+ let _2: i32;
+ scope 2 {
+ debug y => _2;
+ let _3: i32;
+ scope 3 {
+- debug z => _3;
++ debug z => _2;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = val() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+- StorageLive(_2);
+ _2 = _1;
+- StorageLive(_3);
+- _3 = _2;
+- StorageLive(_4);
+- _4 = _3;
+- _1 = move _4;
+- StorageDead(_4);
++ _1 = _2;
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = _1;
+ _5 = std::mem::drop::<i32>(move _6) -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ StorageDead(_6);
+ StorageDead(_5);
+ _0 = const ();
+- StorageDead(_3);
+- StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/cycle.rs b/tests/mir-opt/copy-prop/cycle.rs
index da70f6bec..56ec75397 100644
--- a/tests/mir-opt/copy-prop/cycle.rs
+++ b/tests/mir-opt/copy-prop/cycle.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
//! Tests that cyclic assignments don't hang CopyProp, and result in reasonable code.
// unit-test: CopyProp
fn val() -> i32 {
diff --git a/tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.mir b/tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.mir
deleted file mode 100644
index c56418d88..000000000
--- a/tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.mir
+++ /dev/null
@@ -1,29 +0,0 @@
-// MIR for `f` after CopyProp
-
-fn f(_1: usize) -> usize {
- debug a => _1; // in scope 0 at $DIR/dead_stores_79191.rs:+0:6: +0:11
- let mut _0: usize; // return place in scope 0 at $DIR/dead_stores_79191.rs:+0:23: +0:28
- let _2: usize; // in scope 0 at $DIR/dead_stores_79191.rs:+1:9: +1:10
- let mut _3: usize; // in scope 0 at $DIR/dead_stores_79191.rs:+3:9: +3:10
- let mut _4: usize; // in scope 0 at $DIR/dead_stores_79191.rs:+4:8: +4:9
- scope 1 {
- debug b => _2; // in scope 1 at $DIR/dead_stores_79191.rs:+1:9: +1:10
- }
-
- bb0: {
- _2 = _1; // scope 0 at $DIR/dead_stores_79191.rs:+1:13: +1:14
- _1 = const 5_usize; // scope 1 at $DIR/dead_stores_79191.rs:+2:5: +2:10
- _1 = _2; // scope 1 at $DIR/dead_stores_79191.rs:+3:5: +3:10
- StorageLive(_4); // scope 1 at $DIR/dead_stores_79191.rs:+4:8: +4:9
- _4 = _1; // scope 1 at $DIR/dead_stores_79191.rs:+4:8: +4:9
- _0 = id::<usize>(move _4) -> bb1; // scope 1 at $DIR/dead_stores_79191.rs:+4:5: +4:10
- // mir::Constant
- // + span: $DIR/dead_stores_79191.rs:13:5: 13:7
- // + literal: Const { ty: fn(usize) -> usize {id::<usize>}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_4); // scope 1 at $DIR/dead_stores_79191.rs:+4:9: +4:10
- return; // scope 0 at $DIR/dead_stores_79191.rs:+5:2: +5:2
- }
-}
diff --git a/tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.panic-abort.mir b/tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.panic-abort.mir
new file mode 100644
index 000000000..02b88d140
--- /dev/null
+++ b/tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.panic-abort.mir
@@ -0,0 +1,26 @@
+// MIR for `f` after CopyProp
+
+fn f(_1: usize) -> usize {
+ debug a => _1;
+ let mut _0: usize;
+ let _2: usize;
+ let mut _3: usize;
+ let mut _4: usize;
+ scope 1 {
+ debug b => _2;
+ }
+
+ bb0: {
+ _2 = _1;
+ _1 = const 5_usize;
+ _1 = _2;
+ StorageLive(_4);
+ _4 = _1;
+ _0 = id::<usize>(move _4) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_4);
+ return;
+ }
+}
diff --git a/tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.panic-unwind.mir b/tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.panic-unwind.mir
new file mode 100644
index 000000000..f8c285ff3
--- /dev/null
+++ b/tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.panic-unwind.mir
@@ -0,0 +1,26 @@
+// MIR for `f` after CopyProp
+
+fn f(_1: usize) -> usize {
+ debug a => _1;
+ let mut _0: usize;
+ let _2: usize;
+ let mut _3: usize;
+ let mut _4: usize;
+ scope 1 {
+ debug b => _2;
+ }
+
+ bb0: {
+ _2 = _1;
+ _1 = const 5_usize;
+ _1 = _2;
+ StorageLive(_4);
+ _4 = _1;
+ _0 = id::<usize>(move _4) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_4);
+ return;
+ }
+}
diff --git a/tests/mir-opt/copy-prop/dead_stores_79191.rs b/tests/mir-opt/copy-prop/dead_stores_79191.rs
index 84453c55e..4260d35b1 100644
--- a/tests/mir-opt/copy-prop/dead_stores_79191.rs
+++ b/tests/mir-opt/copy-prop/dead_stores_79191.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: CopyProp
fn id<T>(x: T) -> T {
diff --git a/tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.mir b/tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.mir
deleted file mode 100644
index f35542173..000000000
--- a/tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.mir
+++ /dev/null
@@ -1,29 +0,0 @@
-// MIR for `f` after CopyProp
-
-fn f(_1: usize) -> usize {
- debug a => _1; // in scope 0 at $DIR/dead_stores_better.rs:+0:10: +0:15
- let mut _0: usize; // return place in scope 0 at $DIR/dead_stores_better.rs:+0:27: +0:32
- let _2: usize; // in scope 0 at $DIR/dead_stores_better.rs:+1:9: +1:10
- let mut _3: usize; // in scope 0 at $DIR/dead_stores_better.rs:+3:9: +3:10
- let mut _4: usize; // in scope 0 at $DIR/dead_stores_better.rs:+4:8: +4:9
- scope 1 {
- debug b => _2; // in scope 1 at $DIR/dead_stores_better.rs:+1:9: +1:10
- }
-
- bb0: {
- _2 = _1; // scope 0 at $DIR/dead_stores_better.rs:+1:13: +1:14
- _1 = const 5_usize; // scope 1 at $DIR/dead_stores_better.rs:+2:5: +2:10
- _1 = _2; // scope 1 at $DIR/dead_stores_better.rs:+3:5: +3:10
- StorageLive(_4); // scope 1 at $DIR/dead_stores_better.rs:+4:8: +4:9
- _4 = _1; // scope 1 at $DIR/dead_stores_better.rs:+4:8: +4:9
- _0 = id::<usize>(move _4) -> bb1; // scope 1 at $DIR/dead_stores_better.rs:+4:5: +4:10
- // mir::Constant
- // + span: $DIR/dead_stores_better.rs:17:5: 17:7
- // + literal: Const { ty: fn(usize) -> usize {id::<usize>}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_4); // scope 1 at $DIR/dead_stores_better.rs:+4:9: +4:10
- return; // scope 0 at $DIR/dead_stores_better.rs:+5:2: +5:2
- }
-}
diff --git a/tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.panic-abort.mir b/tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.panic-abort.mir
new file mode 100644
index 000000000..02b88d140
--- /dev/null
+++ b/tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.panic-abort.mir
@@ -0,0 +1,26 @@
+// MIR for `f` after CopyProp
+
+fn f(_1: usize) -> usize {
+ debug a => _1;
+ let mut _0: usize;
+ let _2: usize;
+ let mut _3: usize;
+ let mut _4: usize;
+ scope 1 {
+ debug b => _2;
+ }
+
+ bb0: {
+ _2 = _1;
+ _1 = const 5_usize;
+ _1 = _2;
+ StorageLive(_4);
+ _4 = _1;
+ _0 = id::<usize>(move _4) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_4);
+ return;
+ }
+}
diff --git a/tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.panic-unwind.mir b/tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.panic-unwind.mir
new file mode 100644
index 000000000..f8c285ff3
--- /dev/null
+++ b/tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.panic-unwind.mir
@@ -0,0 +1,26 @@
+// MIR for `f` after CopyProp
+
+fn f(_1: usize) -> usize {
+ debug a => _1;
+ let mut _0: usize;
+ let _2: usize;
+ let mut _3: usize;
+ let mut _4: usize;
+ scope 1 {
+ debug b => _2;
+ }
+
+ bb0: {
+ _2 = _1;
+ _1 = const 5_usize;
+ _1 = _2;
+ StorageLive(_4);
+ _4 = _1;
+ _0 = id::<usize>(move _4) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_4);
+ return;
+ }
+}
diff --git a/tests/mir-opt/copy-prop/dead_stores_better.rs b/tests/mir-opt/copy-prop/dead_stores_better.rs
index 87b916fd3..c5962db6a 100644
--- a/tests/mir-opt/copy-prop/dead_stores_better.rs
+++ b/tests/mir-opt/copy-prop/dead_stores_better.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// This is a copy of the `dead_stores_79191` test, except that we turn on DSE. This demonstrates
// that that pass enables this one to do more optimizations.
diff --git a/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff b/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff
deleted file mode 100644
index e09ccb831..000000000
--- a/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff
+++ /dev/null
@@ -1,138 +0,0 @@
-- // MIR for `main` before CopyProp
-+ // MIR for `main` after CopyProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_107511.rs:+0:11: +0:11
- let mut _1: i32; // in scope 0 at $DIR/issue_107511.rs:+1:9: +1:16
- let mut _3: std::ops::Range<usize>; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24
- let mut _4: std::ops::Range<usize>; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24
- let mut _5: usize; // in scope 0 at $DIR/issue_107511.rs:+6:17: +6:24
- let mut _6: &[i32]; // in scope 0 at $DIR/issue_107511.rs:+6:17: +6:24
- let mut _7: &[i32; 4]; // in scope 0 at $DIR/issue_107511.rs:+6:17: +6:24
- let mut _9: (); // in scope 0 at $DIR/issue_107511.rs:+0:1: +9:2
- let _10: (); // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24
- let mut _11: std::option::Option<usize>; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24
- let mut _12: &mut std::ops::Range<usize>; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24
- let mut _13: &mut std::ops::Range<usize>; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24
- let mut _14: isize; // in scope 0 at $DIR/issue_107511.rs:+6:5: +8:6
- let mut _15: !; // in scope 0 at $DIR/issue_107511.rs:+6:5: +8:6
- let mut _17: i32; // in scope 0 at $DIR/issue_107511.rs:+7:16: +7:20
- let _18: usize; // in scope 0 at $DIR/issue_107511.rs:+7:18: +7:19
- let mut _19: usize; // in scope 0 at $DIR/issue_107511.rs:+7:16: +7:20
- let mut _20: bool; // in scope 0 at $DIR/issue_107511.rs:+7:16: +7:20
- scope 1 {
- debug sum => _1; // in scope 1 at $DIR/issue_107511.rs:+1:9: +1:16
- let _2: [i32; 4]; // in scope 1 at $DIR/issue_107511.rs:+2:9: +2:10
- scope 2 {
- debug a => _2; // in scope 2 at $DIR/issue_107511.rs:+2:9: +2:10
- let mut _8: std::ops::Range<usize>; // in scope 2 at $DIR/issue_107511.rs:+6:14: +6:24
- scope 3 {
- debug iter => _8; // in scope 3 at $DIR/issue_107511.rs:+6:14: +6:24
- let _16: usize; // in scope 3 at $DIR/issue_107511.rs:+6:9: +6:10
- scope 4 {
- debug i => _16; // in scope 4 at $DIR/issue_107511.rs:+6:9: +6:10
- }
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/issue_107511.rs:+1:9: +1:16
- _1 = const 0_i32; // scope 0 at $DIR/issue_107511.rs:+1:19: +1:20
- StorageLive(_2); // scope 1 at $DIR/issue_107511.rs:+2:9: +2:10
- _2 = [const 0_i32, const 10_i32, const 20_i32, const 30_i32]; // scope 1 at $DIR/issue_107511.rs:+2:13: +2:28
- StorageLive(_3); // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24
- StorageLive(_4); // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24
- StorageLive(_5); // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24
- StorageLive(_6); // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24
- StorageLive(_7); // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24
- _7 = &_2; // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24
- _6 = move _7 as &[i32] (Pointer(Unsize)); // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24
- StorageDead(_7); // scope 2 at $DIR/issue_107511.rs:+6:17: +6:18
- _5 = core::slice::<impl [i32]>::len(move _6) -> bb1; // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24
- // mir::Constant
- // + span: $DIR/issue_107511.rs:11:19: 11:22
- // + literal: Const { ty: for<'a> fn(&'a [i32]) -> usize {core::slice::<impl [i32]>::len}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_6); // scope 2 at $DIR/issue_107511.rs:+6:23: +6:24
- _4 = std::ops::Range::<usize> { start: const 0_usize, end: move _5 }; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24
- StorageDead(_5); // scope 2 at $DIR/issue_107511.rs:+6:23: +6:24
- _3 = <std::ops::Range<usize> as IntoIterator>::into_iter(move _4) -> bb2; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24
- // mir::Constant
- // + span: $DIR/issue_107511.rs:11:14: 11:24
- // + literal: Const { ty: fn(std::ops::Range<usize>) -> <std::ops::Range<usize> as IntoIterator>::IntoIter {<std::ops::Range<usize> as IntoIterator>::into_iter}, val: Value(<ZST>) }
- }
-
- bb2: {
- StorageDead(_4); // scope 2 at $DIR/issue_107511.rs:+6:23: +6:24
- StorageLive(_8); // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24
- _8 = move _3; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24
- goto -> bb3; // scope 3 at $DIR/issue_107511.rs:+6:5: +8:6
- }
-
- bb3: {
-- StorageLive(_10); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24
- StorageLive(_11); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24
- StorageLive(_12); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24
- StorageLive(_13); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24
- _13 = &mut _8; // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24
- _12 = &mut (*_13); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24
- _11 = <std::ops::Range<usize> as Iterator>::next(move _12) -> bb4; // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24
- // mir::Constant
- // + span: $DIR/issue_107511.rs:11:14: 11:24
- // + literal: Const { ty: for<'a> fn(&'a mut std::ops::Range<usize>) -> Option<<std::ops::Range<usize> as Iterator>::Item> {<std::ops::Range<usize> as Iterator>::next}, val: Value(<ZST>) }
- }
-
- bb4: {
- StorageDead(_12); // scope 3 at $DIR/issue_107511.rs:+6:23: +6:24
- _14 = discriminant(_11); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24
- switchInt(move _14) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24
- }
-
- bb5: {
-- StorageLive(_16); // scope 3 at $DIR/issue_107511.rs:+6:9: +6:10
- _16 = ((_11 as Some).0: usize); // scope 3 at $DIR/issue_107511.rs:+6:9: +6:10
- StorageLive(_17); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20
-- StorageLive(_18); // scope 4 at $DIR/issue_107511.rs:+7:18: +7:19
-- _18 = _16; // scope 4 at $DIR/issue_107511.rs:+7:18: +7:19
- _19 = Len(_2); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20
-- _20 = Lt(_18, _19); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20
-- assert(move _20, "index out of bounds: the length is {} but the index is {}", move _19, _18) -> bb8; // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20
-+ _20 = Lt(_16, _19); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20
-+ assert(move _20, "index out of bounds: the length is {} but the index is {}", move _19, _16) -> bb8; // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20
- }
-
- bb6: {
- unreachable; // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24
- }
-
- bb7: {
- _0 = const (); // scope 3 at $DIR/issue_107511.rs:+6:5: +8:6
- StorageDead(_13); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6
- StorageDead(_11); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6
-- StorageDead(_10); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6
- StorageDead(_8); // scope 2 at $DIR/issue_107511.rs:+8:5: +8:6
- StorageDead(_3); // scope 2 at $DIR/issue_107511.rs:+8:5: +8:6
- StorageDead(_2); // scope 1 at $DIR/issue_107511.rs:+9:1: +9:2
- StorageDead(_1); // scope 0 at $DIR/issue_107511.rs:+9:1: +9:2
- return; // scope 0 at $DIR/issue_107511.rs:+9:2: +9:2
- }
-
- bb8: {
-- _17 = _2[_18]; // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20
-+ _17 = _2[_16]; // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20
- _1 = Add(_1, move _17); // scope 4 at $DIR/issue_107511.rs:+7:9: +7:20
- StorageDead(_17); // scope 4 at $DIR/issue_107511.rs:+7:19: +7:20
-- StorageDead(_18); // scope 4 at $DIR/issue_107511.rs:+7:20: +7:21
-- _10 = const (); // scope 4 at $DIR/issue_107511.rs:+6:25: +8:6
-- StorageDead(_16); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6
- StorageDead(_13); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6
- StorageDead(_11); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6
-- StorageDead(_10); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6
-- _9 = const (); // scope 3 at $DIR/issue_107511.rs:+6:5: +8:6
- goto -> bb3; // scope 3 at $DIR/issue_107511.rs:+6:5: +8:6
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..a802d0256
--- /dev/null
+++ b/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.panic-abort.diff
@@ -0,0 +1,129 @@
+- // MIR for `main` before CopyProp
++ // MIR for `main` after CopyProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _3: std::ops::Range<usize>;
+ let mut _4: std::ops::Range<usize>;
+ let mut _5: usize;
+ let mut _6: &[i32];
+ let mut _7: &[i32; 4];
+ let mut _9: ();
+ let _10: ();
+ let mut _11: std::option::Option<usize>;
+ let mut _12: &mut std::ops::Range<usize>;
+ let mut _13: &mut std::ops::Range<usize>;
+ let mut _14: isize;
+ let mut _15: !;
+ let mut _17: i32;
+ let _18: usize;
+ let mut _19: usize;
+ let mut _20: bool;
+ scope 1 {
+ debug sum => _1;
+ let _2: [i32; 4];
+ scope 2 {
+ debug a => _2;
+ let mut _8: std::ops::Range<usize>;
+ scope 3 {
+ debug iter => _8;
+ let _16: usize;
+ scope 4 {
+ debug i => _16;
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 0_i32;
+ StorageLive(_2);
+ _2 = [const 0_i32, const 10_i32, const 20_i32, const 30_i32];
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &_2;
+ _6 = move _7 as &[i32] (PointerCoercion(Unsize));
+ StorageDead(_7);
+ _5 = core::slice::<impl [i32]>::len(move _6) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_6);
+ _4 = std::ops::Range::<usize> { start: const 0_usize, end: move _5 };
+ StorageDead(_5);
+ _3 = <std::ops::Range<usize> as IntoIterator>::into_iter(move _4) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ StorageDead(_4);
+ StorageLive(_8);
+ _8 = move _3;
+ goto -> bb3;
+ }
+
+ bb3: {
+- StorageLive(_10);
+ StorageLive(_11);
+ StorageLive(_12);
+ StorageLive(_13);
+ _13 = &mut _8;
+ _12 = &mut (*_13);
+ _11 = <std::ops::Range<usize> as Iterator>::next(move _12) -> [return: bb4, unwind unreachable];
+ }
+
+ bb4: {
+ StorageDead(_12);
+ _14 = discriminant(_11);
+ switchInt(move _14) -> [0: bb7, 1: bb5, otherwise: bb6];
+ }
+
+ bb5: {
+- StorageLive(_16);
+ _16 = ((_11 as Some).0: usize);
+ StorageLive(_17);
+- StorageLive(_18);
+- _18 = _16;
+ _19 = Len(_2);
+- _20 = Lt(_18, _19);
+- assert(move _20, "index out of bounds: the length is {} but the index is {}", move _19, _18) -> [success: bb8, unwind unreachable];
++ _20 = Lt(_16, _19);
++ assert(move _20, "index out of bounds: the length is {} but the index is {}", move _19, _16) -> [success: bb8, unwind unreachable];
+ }
+
+ bb6: {
+ unreachable;
+ }
+
+ bb7: {
+ _0 = const ();
+ StorageDead(_13);
+ StorageDead(_11);
+- StorageDead(_10);
+ StorageDead(_8);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+
+ bb8: {
+- _17 = _2[_18];
++ _17 = _2[_16];
+ _1 = Add(_1, move _17);
+ StorageDead(_17);
+- StorageDead(_18);
+- _10 = const ();
+- StorageDead(_16);
+ StorageDead(_13);
+ StorageDead(_11);
+- StorageDead(_10);
+- _9 = const ();
+ goto -> bb3;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..35f852098
--- /dev/null
+++ b/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.panic-unwind.diff
@@ -0,0 +1,129 @@
+- // MIR for `main` before CopyProp
++ // MIR for `main` after CopyProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _3: std::ops::Range<usize>;
+ let mut _4: std::ops::Range<usize>;
+ let mut _5: usize;
+ let mut _6: &[i32];
+ let mut _7: &[i32; 4];
+ let mut _9: ();
+ let _10: ();
+ let mut _11: std::option::Option<usize>;
+ let mut _12: &mut std::ops::Range<usize>;
+ let mut _13: &mut std::ops::Range<usize>;
+ let mut _14: isize;
+ let mut _15: !;
+ let mut _17: i32;
+ let _18: usize;
+ let mut _19: usize;
+ let mut _20: bool;
+ scope 1 {
+ debug sum => _1;
+ let _2: [i32; 4];
+ scope 2 {
+ debug a => _2;
+ let mut _8: std::ops::Range<usize>;
+ scope 3 {
+ debug iter => _8;
+ let _16: usize;
+ scope 4 {
+ debug i => _16;
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 0_i32;
+ StorageLive(_2);
+ _2 = [const 0_i32, const 10_i32, const 20_i32, const 30_i32];
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &_2;
+ _6 = move _7 as &[i32] (PointerCoercion(Unsize));
+ StorageDead(_7);
+ _5 = core::slice::<impl [i32]>::len(move _6) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_6);
+ _4 = std::ops::Range::<usize> { start: const 0_usize, end: move _5 };
+ StorageDead(_5);
+ _3 = <std::ops::Range<usize> as IntoIterator>::into_iter(move _4) -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ StorageDead(_4);
+ StorageLive(_8);
+ _8 = move _3;
+ goto -> bb3;
+ }
+
+ bb3: {
+- StorageLive(_10);
+ StorageLive(_11);
+ StorageLive(_12);
+ StorageLive(_13);
+ _13 = &mut _8;
+ _12 = &mut (*_13);
+ _11 = <std::ops::Range<usize> as Iterator>::next(move _12) -> [return: bb4, unwind continue];
+ }
+
+ bb4: {
+ StorageDead(_12);
+ _14 = discriminant(_11);
+ switchInt(move _14) -> [0: bb7, 1: bb5, otherwise: bb6];
+ }
+
+ bb5: {
+- StorageLive(_16);
+ _16 = ((_11 as Some).0: usize);
+ StorageLive(_17);
+- StorageLive(_18);
+- _18 = _16;
+ _19 = Len(_2);
+- _20 = Lt(_18, _19);
+- assert(move _20, "index out of bounds: the length is {} but the index is {}", move _19, _18) -> [success: bb8, unwind continue];
++ _20 = Lt(_16, _19);
++ assert(move _20, "index out of bounds: the length is {} but the index is {}", move _19, _16) -> [success: bb8, unwind continue];
+ }
+
+ bb6: {
+ unreachable;
+ }
+
+ bb7: {
+ _0 = const ();
+ StorageDead(_13);
+ StorageDead(_11);
+- StorageDead(_10);
+ StorageDead(_8);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+
+ bb8: {
+- _17 = _2[_18];
++ _17 = _2[_16];
+ _1 = Add(_1, move _17);
+ StorageDead(_17);
+- StorageDead(_18);
+- _10 = const ();
+- StorageDead(_16);
+ StorageDead(_13);
+ StorageDead(_11);
+- StorageDead(_10);
+- _9 = const ();
+ goto -> bb3;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/issue_107511.rs b/tests/mir-opt/copy-prop/issue_107511.rs
index 2b00ff155..ce6fcc17b 100644
--- a/tests/mir-opt/copy-prop/issue_107511.rs
+++ b/tests/mir-opt/copy-prop/issue_107511.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: CopyProp
// EMIT_MIR issue_107511.main.CopyProp.diff
diff --git a/tests/mir-opt/copy-prop/move_arg.f.CopyProp.diff b/tests/mir-opt/copy-prop/move_arg.f.CopyProp.diff
deleted file mode 100644
index 650bd66a7..000000000
--- a/tests/mir-opt/copy-prop/move_arg.f.CopyProp.diff
+++ /dev/null
@@ -1,40 +0,0 @@
-- // MIR for `f` before CopyProp
-+ // MIR for `f` after CopyProp
-
- fn f(_1: T) -> () {
- debug a => _1; // in scope 0 at $DIR/move_arg.rs:+0:19: +0:20
- let mut _0: (); // return place in scope 0 at $DIR/move_arg.rs:+0:25: +0:25
- let _2: T; // in scope 0 at $DIR/move_arg.rs:+1:9: +1:10
- let _3: (); // in scope 0 at $DIR/move_arg.rs:+2:5: +2:12
- let mut _4: T; // in scope 0 at $DIR/move_arg.rs:+2:7: +2:8
- let mut _5: T; // in scope 0 at $DIR/move_arg.rs:+2:10: +2:11
- scope 1 {
-- debug b => _2; // in scope 1 at $DIR/move_arg.rs:+1:9: +1:10
-+ debug b => _1; // in scope 1 at $DIR/move_arg.rs:+1:9: +1:10
- }
-
- bb0: {
-- StorageLive(_2); // scope 0 at $DIR/move_arg.rs:+1:9: +1:10
-- _2 = _1; // scope 0 at $DIR/move_arg.rs:+1:13: +1:14
- StorageLive(_3); // scope 1 at $DIR/move_arg.rs:+2:5: +2:12
-- StorageLive(_4); // scope 1 at $DIR/move_arg.rs:+2:7: +2:8
-- _4 = _1; // scope 1 at $DIR/move_arg.rs:+2:7: +2:8
-- StorageLive(_5); // scope 1 at $DIR/move_arg.rs:+2:10: +2:11
-- _5 = _2; // scope 1 at $DIR/move_arg.rs:+2:10: +2:11
-- _3 = g::<T>(move _4, move _5) -> bb1; // scope 1 at $DIR/move_arg.rs:+2:5: +2:12
-+ _3 = g::<T>(_1, _1) -> bb1; // scope 1 at $DIR/move_arg.rs:+2:5: +2:12
- // mir::Constant
- // + span: $DIR/move_arg.rs:8:5: 8:6
- // + literal: Const { ty: fn(T, T) {g::<T>}, val: Value(<ZST>) }
- }
-
- bb1: {
-- StorageDead(_5); // scope 1 at $DIR/move_arg.rs:+2:11: +2:12
-- StorageDead(_4); // scope 1 at $DIR/move_arg.rs:+2:11: +2:12
- StorageDead(_3); // scope 1 at $DIR/move_arg.rs:+2:12: +2:13
- _0 = const (); // scope 0 at $DIR/move_arg.rs:+0:25: +3:2
-- StorageDead(_2); // scope 0 at $DIR/move_arg.rs:+3:1: +3:2
- return; // scope 0 at $DIR/move_arg.rs:+3:2: +3:2
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/move_arg.f.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/move_arg.f.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..cf04f213e
--- /dev/null
+++ b/tests/mir-opt/copy-prop/move_arg.f.CopyProp.panic-abort.diff
@@ -0,0 +1,37 @@
+- // MIR for `f` before CopyProp
++ // MIR for `f` after CopyProp
+
+ fn f(_1: T) -> () {
+ debug a => _1;
+ let mut _0: ();
+ let _2: T;
+ let _3: ();
+ let mut _4: T;
+ let mut _5: T;
+ scope 1 {
+- debug b => _2;
++ debug b => _1;
+ }
+
+ bb0: {
+- StorageLive(_2);
+- _2 = _1;
+ StorageLive(_3);
+- StorageLive(_4);
+- _4 = _1;
+- StorageLive(_5);
+- _5 = _2;
+- _3 = g::<T>(move _4, move _5) -> [return: bb1, unwind unreachable];
++ _3 = g::<T>(_1, _1) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- StorageDead(_5);
+- StorageDead(_4);
+ StorageDead(_3);
+ _0 = const ();
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/move_arg.f.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/move_arg.f.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..0c6a3c6d5
--- /dev/null
+++ b/tests/mir-opt/copy-prop/move_arg.f.CopyProp.panic-unwind.diff
@@ -0,0 +1,37 @@
+- // MIR for `f` before CopyProp
++ // MIR for `f` after CopyProp
+
+ fn f(_1: T) -> () {
+ debug a => _1;
+ let mut _0: ();
+ let _2: T;
+ let _3: ();
+ let mut _4: T;
+ let mut _5: T;
+ scope 1 {
+- debug b => _2;
++ debug b => _1;
+ }
+
+ bb0: {
+- StorageLive(_2);
+- _2 = _1;
+ StorageLive(_3);
+- StorageLive(_4);
+- _4 = _1;
+- StorageLive(_5);
+- _5 = _2;
+- _3 = g::<T>(move _4, move _5) -> [return: bb1, unwind continue];
++ _3 = g::<T>(_1, _1) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+- StorageDead(_5);
+- StorageDead(_4);
+ StorageDead(_3);
+ _0 = const ();
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/move_arg.rs b/tests/mir-opt/copy-prop/move_arg.rs
index f88d9a9e7..a3a04e57b 100644
--- a/tests/mir-opt/copy-prop/move_arg.rs
+++ b/tests/mir-opt/copy-prop/move_arg.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Test that we do not move multiple times from the same local.
// unit-test: CopyProp
diff --git a/tests/mir-opt/copy-prop/move_projection.f.CopyProp.diff b/tests/mir-opt/copy-prop/move_projection.f.CopyProp.diff
deleted file mode 100644
index beb85d68a..000000000
--- a/tests/mir-opt/copy-prop/move_projection.f.CopyProp.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-- // MIR for `f` before CopyProp
-+ // MIR for `f` after CopyProp
-
- fn f(_1: Foo) -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/move_projection.rs:+0:17: +0:21
- let mut _2: Foo; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: u8; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-
- bb0: {
-- _2 = _1; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-- _3 = move (_2.0: u8); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-- _0 = opaque::<Foo>(move _1) -> bb1; // scope 0 at $DIR/move_projection.rs:+6:13: +6:44
-+ _3 = (_1.0: u8); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-+ _0 = opaque::<Foo>(_1) -> bb1; // scope 0 at $DIR/move_projection.rs:+6:13: +6:44
- // mir::Constant
- // + span: $DIR/move_projection.rs:20:28: 20:34
- // + literal: Const { ty: fn(Foo) -> bool {opaque::<Foo>}, val: Value(<ZST>) }
- }
-
- bb1: {
- _0 = opaque::<u8>(move _3) -> bb2; // scope 0 at $DIR/move_projection.rs:+9:13: +9:44
- // mir::Constant
- // + span: $DIR/move_projection.rs:23:28: 23:34
- // + literal: Const { ty: fn(u8) -> bool {opaque::<u8>}, val: Value(<ZST>) }
- }
-
- bb2: {
- return; // scope 0 at $DIR/move_projection.rs:+12:13: +12:21
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/move_projection.f.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/move_projection.f.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..b2b89968d
--- /dev/null
+++ b/tests/mir-opt/copy-prop/move_projection.f.CopyProp.panic-abort.diff
@@ -0,0 +1,25 @@
+- // MIR for `f` before CopyProp
++ // MIR for `f` after CopyProp
+
+ fn f(_1: Foo) -> bool {
+ let mut _0: bool;
+ let mut _2: Foo;
+ let mut _3: u8;
+
+ bb0: {
+- _2 = _1;
+- _3 = move (_2.0: u8);
+- _0 = opaque::<Foo>(move _1) -> [return: bb1, unwind unreachable];
++ _3 = (_1.0: u8);
++ _0 = opaque::<Foo>(_1) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _0 = opaque::<u8>(move _3) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/move_projection.f.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/move_projection.f.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..ad3889639
--- /dev/null
+++ b/tests/mir-opt/copy-prop/move_projection.f.CopyProp.panic-unwind.diff
@@ -0,0 +1,25 @@
+- // MIR for `f` before CopyProp
++ // MIR for `f` after CopyProp
+
+ fn f(_1: Foo) -> bool {
+ let mut _0: bool;
+ let mut _2: Foo;
+ let mut _3: u8;
+
+ bb0: {
+- _2 = _1;
+- _3 = move (_2.0: u8);
+- _0 = opaque::<Foo>(move _1) -> [return: bb1, unwind continue];
++ _3 = (_1.0: u8);
++ _0 = opaque::<Foo>(_1) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ _0 = opaque::<u8>(move _3) -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/move_projection.rs b/tests/mir-opt/copy-prop/move_projection.rs
index c158c69e0..40f51ce84 100644
--- a/tests/mir-opt/copy-prop/move_projection.rs
+++ b/tests/mir-opt/copy-prop/move_projection.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: CopyProp
#![feature(custom_mir, core_intrinsics)]
diff --git a/tests/mir-opt/copy-prop/mutate_through_pointer.f.CopyProp.diff b/tests/mir-opt/copy-prop/mutate_through_pointer.f.CopyProp.diff
index 61fdd6f8c..7f6802bee 100644
--- a/tests/mir-opt/copy-prop/mutate_through_pointer.f.CopyProp.diff
+++ b/tests/mir-opt/copy-prop/mutate_through_pointer.f.CopyProp.diff
@@ -2,18 +2,18 @@
+ // MIR for `f` after CopyProp
fn f(_1: bool) -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/mutate_through_pointer.rs:+0:18: +0:22
- let mut _2: bool; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: *const bool; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _4: *mut bool; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: bool;
+ let mut _2: bool;
+ let mut _3: *const bool;
+ let mut _4: *mut bool;
bb0: {
- _2 = _1; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _3 = &raw const _2; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _4 = &raw mut (*_3); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- (*_4) = const false; // scope 0 at $DIR/mutate_through_pointer.rs:+5:9: +5:20
- _0 = _1; // scope 0 at $DIR/mutate_through_pointer.rs:+6:9: +6:16
- return; // scope 0 at $DIR/mutate_through_pointer.rs:+7:9: +7:17
+ _2 = _1;
+ _3 = &raw const _2;
+ _4 = &raw mut (*_3);
+ (*_4) = const false;
+ _0 = _1;
+ return;
}
}
diff --git a/tests/mir-opt/copy-prop/non_dominate.f.CopyProp.diff b/tests/mir-opt/copy-prop/non_dominate.f.CopyProp.diff
index 9760fd374..5bf233594 100644
--- a/tests/mir-opt/copy-prop/non_dominate.f.CopyProp.diff
+++ b/tests/mir-opt/copy-prop/non_dominate.f.CopyProp.diff
@@ -2,28 +2,28 @@
+ // MIR for `f` after CopyProp
fn f(_1: bool) -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/non_dominate.rs:+0:18: +0:22
- let mut _2: bool; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: bool; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: bool;
+ let mut _2: bool;
+ let mut _3: bool;
bb0: {
- goto -> bb1; // scope 0 at $DIR/non_dominate.rs:+4:11: +4:20
+ goto -> bb1;
}
bb1: {
- _3 = _1; // scope 0 at $DIR/non_dominate.rs:+5:17: +5:22
- switchInt(_3) -> [0: bb3, otherwise: bb2]; // scope 0 at $DIR/non_dominate.rs:+5:24: +5:58
+ _3 = _1;
+ switchInt(_3) -> [0: bb3, otherwise: bb2];
}
bb2: {
- _2 = _3; // scope 0 at $DIR/non_dominate.rs:+8:17: +8:22
- _1 = const false; // scope 0 at $DIR/non_dominate.rs:+8:24: +8:33
- goto -> bb1; // scope 0 at $DIR/non_dominate.rs:+8:35: +8:44
+ _2 = _3;
+ _1 = const false;
+ goto -> bb1;
}
bb3: {
- _0 = _2; // scope 0 at $DIR/non_dominate.rs:+9:17: +9:24
- return; // scope 0 at $DIR/non_dominate.rs:+9:26: +9:34
+ _0 = _2;
+ return;
}
}
diff --git a/tests/mir-opt/copy-prop/partial_init.main.CopyProp.diff b/tests/mir-opt/copy-prop/partial_init.main.CopyProp.diff
index 586643905..7094ee391 100644
--- a/tests/mir-opt/copy-prop/partial_init.main.CopyProp.diff
+++ b/tests/mir-opt/copy-prop/partial_init.main.CopyProp.diff
@@ -2,12 +2,12 @@
+ // MIR for `main` after CopyProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/partial_init.rs:+0:15: +0:15
- let mut _1: (isize,); // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: ();
+ let mut _1: (isize,);
bb0: {
- (_1.0: isize) = const 1_isize; // scope 0 at $DIR/partial_init.rs:+4:13: +4:20
- return; // scope 0 at $DIR/partial_init.rs:+5:13: +5:21
+ (_1.0: isize) = const 1_isize;
+ return;
}
}
diff --git a/tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.diff b/tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.diff
deleted file mode 100644
index b4a248245..000000000
--- a/tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.diff
+++ /dev/null
@@ -1,56 +0,0 @@
-- // MIR for `demiraw` before CopyProp
-+ // MIR for `demiraw` after CopyProp
-
- fn demiraw(_1: u8) -> () {
- debug x => _1; // in scope 0 at $DIR/reborrow.rs:+0:12: +0:17
- let mut _0: (); // return place in scope 0 at $DIR/reborrow.rs:+0:23: +0:23
- let _2: *mut u8; // in scope 0 at $DIR/reborrow.rs:+1:9: +1:10
- let mut _4: &mut u8; // in scope 0 at $DIR/reborrow.rs:+2:22: +2:29
- let _6: (); // in scope 0 at $DIR/reborrow.rs:+4:5: +4:14
- let mut _7: *mut u8; // in scope 0 at $DIR/reborrow.rs:+4:12: +4:13
- scope 1 {
- debug a => _2; // in scope 1 at $DIR/reborrow.rs:+1:9: +1:10
- let _3: &mut u8; // in scope 1 at $DIR/reborrow.rs:+2:9: +2:10
- scope 2 {
- debug b => _3; // in scope 2 at $DIR/reborrow.rs:+2:9: +2:10
- let _5: *mut u8; // in scope 2 at $DIR/reborrow.rs:+3:9: +3:10
- scope 4 {
-- debug c => _5; // in scope 4 at $DIR/reborrow.rs:+3:9: +3:10
-+ debug c => _2; // in scope 4 at $DIR/reborrow.rs:+3:9: +3:10
- }
- }
- scope 3 {
- }
- }
-
- bb0: {
-- StorageLive(_2); // scope 0 at $DIR/reborrow.rs:+1:9: +1:10
- _2 = &raw mut _1; // scope 0 at $DIR/reborrow.rs:+1:13: +1:23
- StorageLive(_3); // scope 1 at $DIR/reborrow.rs:+2:9: +2:10
- StorageLive(_4); // scope 1 at $DIR/reborrow.rs:+2:22: +2:29
- _4 = &mut (*_2); // scope 3 at $DIR/reborrow.rs:+2:22: +2:29
- _3 = &mut (*_4); // scope 1 at $DIR/reborrow.rs:+2:22: +2:29
- StorageDead(_4); // scope 1 at $DIR/reborrow.rs:+2:31: +2:32
-- StorageLive(_5); // scope 2 at $DIR/reborrow.rs:+3:9: +3:10
-- _5 = _2; // scope 2 at $DIR/reborrow.rs:+3:13: +3:14
- StorageLive(_6); // scope 4 at $DIR/reborrow.rs:+4:5: +4:14
-- StorageLive(_7); // scope 4 at $DIR/reborrow.rs:+4:12: +4:13
-- _7 = _5; // scope 4 at $DIR/reborrow.rs:+4:12: +4:13
-- _6 = opaque::<*mut u8>(move _7) -> bb1; // scope 4 at $DIR/reborrow.rs:+4:5: +4:14
-+ _6 = opaque::<*mut u8>(_2) -> bb1; // scope 4 at $DIR/reborrow.rs:+4:5: +4:14
- // mir::Constant
- // + span: $DIR/reborrow.rs:39:5: 39:11
- // + literal: Const { ty: fn(*mut u8) {opaque::<*mut u8>}, val: Value(<ZST>) }
- }
-
- bb1: {
-- StorageDead(_7); // scope 4 at $DIR/reborrow.rs:+4:13: +4:14
- StorageDead(_6); // scope 4 at $DIR/reborrow.rs:+4:14: +4:15
- _0 = const (); // scope 0 at $DIR/reborrow.rs:+0:23: +5:2
-- StorageDead(_5); // scope 2 at $DIR/reborrow.rs:+5:1: +5:2
- StorageDead(_3); // scope 1 at $DIR/reborrow.rs:+5:1: +5:2
-- StorageDead(_2); // scope 0 at $DIR/reborrow.rs:+5:1: +5:2
- return; // scope 0 at $DIR/reborrow.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..ffb0c4b23
--- /dev/null
+++ b/tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.panic-abort.diff
@@ -0,0 +1,53 @@
+- // MIR for `demiraw` before CopyProp
++ // MIR for `demiraw` after CopyProp
+
+ fn demiraw(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: *mut u8;
+ let mut _4: &mut u8;
+ let _6: ();
+ let mut _7: *mut u8;
+ scope 1 {
+ debug a => _2;
+ let _3: &mut u8;
+ scope 2 {
+ debug b => _3;
+ let _5: *mut u8;
+ scope 4 {
+- debug c => _5;
++ debug c => _2;
+ }
+ }
+ scope 3 {
+ }
+ }
+
+ bb0: {
+- StorageLive(_2);
+ _2 = &raw mut _1;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &mut (*_2);
+ _3 = &mut (*_4);
+ StorageDead(_4);
+- StorageLive(_5);
+- _5 = _2;
+ StorageLive(_6);
+- StorageLive(_7);
+- _7 = _5;
+- _6 = opaque::<*mut u8>(move _7) -> [return: bb1, unwind unreachable];
++ _6 = opaque::<*mut u8>(_2) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- StorageDead(_7);
+ StorageDead(_6);
+ _0 = const ();
+- StorageDead(_5);
+ StorageDead(_3);
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..66a0f49cf
--- /dev/null
+++ b/tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.panic-unwind.diff
@@ -0,0 +1,53 @@
+- // MIR for `demiraw` before CopyProp
++ // MIR for `demiraw` after CopyProp
+
+ fn demiraw(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: *mut u8;
+ let mut _4: &mut u8;
+ let _6: ();
+ let mut _7: *mut u8;
+ scope 1 {
+ debug a => _2;
+ let _3: &mut u8;
+ scope 2 {
+ debug b => _3;
+ let _5: *mut u8;
+ scope 4 {
+- debug c => _5;
++ debug c => _2;
+ }
+ }
+ scope 3 {
+ }
+ }
+
+ bb0: {
+- StorageLive(_2);
+ _2 = &raw mut _1;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &mut (*_2);
+ _3 = &mut (*_4);
+ StorageDead(_4);
+- StorageLive(_5);
+- _5 = _2;
+ StorageLive(_6);
+- StorageLive(_7);
+- _7 = _5;
+- _6 = opaque::<*mut u8>(move _7) -> [return: bb1, unwind continue];
++ _6 = opaque::<*mut u8>(_2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+- StorageDead(_7);
+ StorageDead(_6);
+ _0 = const ();
+- StorageDead(_5);
+ StorageDead(_3);
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.diff b/tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.diff
deleted file mode 100644
index a6a6c05b2..000000000
--- a/tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.diff
+++ /dev/null
@@ -1,52 +0,0 @@
-- // MIR for `miraw` before CopyProp
-+ // MIR for `miraw` after CopyProp
-
- fn miraw(_1: u8) -> () {
- debug x => _1; // in scope 0 at $DIR/reborrow.rs:+0:10: +0:15
- let mut _0: (); // return place in scope 0 at $DIR/reborrow.rs:+0:21: +0:21
- let _2: *mut u8; // in scope 0 at $DIR/reborrow.rs:+1:9: +1:10
- let _5: (); // in scope 0 at $DIR/reborrow.rs:+4:5: +4:14
- let mut _6: *mut u8; // in scope 0 at $DIR/reborrow.rs:+4:12: +4:13
- scope 1 {
- debug a => _2; // in scope 1 at $DIR/reborrow.rs:+1:9: +1:10
- let _3: *mut u8; // in scope 1 at $DIR/reborrow.rs:+2:9: +2:10
- scope 2 {
- debug b => _3; // in scope 2 at $DIR/reborrow.rs:+2:9: +2:10
- let _4: *mut u8; // in scope 2 at $DIR/reborrow.rs:+3:9: +3:10
- scope 4 {
-- debug c => _4; // in scope 4 at $DIR/reborrow.rs:+3:9: +3:10
-+ debug c => _2; // in scope 4 at $DIR/reborrow.rs:+3:9: +3:10
- }
- }
- scope 3 {
- }
- }
-
- bb0: {
-- StorageLive(_2); // scope 0 at $DIR/reborrow.rs:+1:9: +1:10
- _2 = &raw mut _1; // scope 0 at $DIR/reborrow.rs:+1:13: +1:23
- StorageLive(_3); // scope 1 at $DIR/reborrow.rs:+2:9: +2:10
- _3 = &raw mut (*_2); // scope 3 at $DIR/reborrow.rs:+2:22: +2:33
-- StorageLive(_4); // scope 2 at $DIR/reborrow.rs:+3:9: +3:10
-- _4 = _2; // scope 2 at $DIR/reborrow.rs:+3:13: +3:14
- StorageLive(_5); // scope 4 at $DIR/reborrow.rs:+4:5: +4:14
-- StorageLive(_6); // scope 4 at $DIR/reborrow.rs:+4:12: +4:13
-- _6 = _4; // scope 4 at $DIR/reborrow.rs:+4:12: +4:13
-- _5 = opaque::<*mut u8>(move _6) -> bb1; // scope 4 at $DIR/reborrow.rs:+4:5: +4:14
-+ _5 = opaque::<*mut u8>(_2) -> bb1; // scope 4 at $DIR/reborrow.rs:+4:5: +4:14
- // mir::Constant
- // + span: $DIR/reborrow.rs:31:5: 31:11
- // + literal: Const { ty: fn(*mut u8) {opaque::<*mut u8>}, val: Value(<ZST>) }
- }
-
- bb1: {
-- StorageDead(_6); // scope 4 at $DIR/reborrow.rs:+4:13: +4:14
- StorageDead(_5); // scope 4 at $DIR/reborrow.rs:+4:14: +4:15
- _0 = const (); // scope 0 at $DIR/reborrow.rs:+0:21: +5:2
-- StorageDead(_4); // scope 2 at $DIR/reborrow.rs:+5:1: +5:2
- StorageDead(_3); // scope 1 at $DIR/reborrow.rs:+5:1: +5:2
-- StorageDead(_2); // scope 0 at $DIR/reborrow.rs:+5:1: +5:2
- return; // scope 0 at $DIR/reborrow.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..0777a9135
--- /dev/null
+++ b/tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.panic-abort.diff
@@ -0,0 +1,49 @@
+- // MIR for `miraw` before CopyProp
++ // MIR for `miraw` after CopyProp
+
+ fn miraw(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: *mut u8;
+ let _5: ();
+ let mut _6: *mut u8;
+ scope 1 {
+ debug a => _2;
+ let _3: *mut u8;
+ scope 2 {
+ debug b => _3;
+ let _4: *mut u8;
+ scope 4 {
+- debug c => _4;
++ debug c => _2;
+ }
+ }
+ scope 3 {
+ }
+ }
+
+ bb0: {
+- StorageLive(_2);
+ _2 = &raw mut _1;
+ StorageLive(_3);
+ _3 = &raw mut (*_2);
+- StorageLive(_4);
+- _4 = _2;
+ StorageLive(_5);
+- StorageLive(_6);
+- _6 = _4;
+- _5 = opaque::<*mut u8>(move _6) -> [return: bb1, unwind unreachable];
++ _5 = opaque::<*mut u8>(_2) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- StorageDead(_6);
+ StorageDead(_5);
+ _0 = const ();
+- StorageDead(_4);
+ StorageDead(_3);
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..f5a512b89
--- /dev/null
+++ b/tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.panic-unwind.diff
@@ -0,0 +1,49 @@
+- // MIR for `miraw` before CopyProp
++ // MIR for `miraw` after CopyProp
+
+ fn miraw(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: *mut u8;
+ let _5: ();
+ let mut _6: *mut u8;
+ scope 1 {
+ debug a => _2;
+ let _3: *mut u8;
+ scope 2 {
+ debug b => _3;
+ let _4: *mut u8;
+ scope 4 {
+- debug c => _4;
++ debug c => _2;
+ }
+ }
+ scope 3 {
+ }
+ }
+
+ bb0: {
+- StorageLive(_2);
+ _2 = &raw mut _1;
+ StorageLive(_3);
+ _3 = &raw mut (*_2);
+- StorageLive(_4);
+- _4 = _2;
+ StorageLive(_5);
+- StorageLive(_6);
+- _6 = _4;
+- _5 = opaque::<*mut u8>(move _6) -> [return: bb1, unwind continue];
++ _5 = opaque::<*mut u8>(_2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+- StorageDead(_6);
+ StorageDead(_5);
+ _0 = const ();
+- StorageDead(_4);
+ StorageDead(_3);
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/reborrow.remut.CopyProp.diff b/tests/mir-opt/copy-prop/reborrow.remut.CopyProp.diff
deleted file mode 100644
index f3d26cc6e..000000000
--- a/tests/mir-opt/copy-prop/reborrow.remut.CopyProp.diff
+++ /dev/null
@@ -1,50 +0,0 @@
-- // MIR for `remut` before CopyProp
-+ // MIR for `remut` after CopyProp
-
- fn remut(_1: u8) -> () {
- debug x => _1; // in scope 0 at $DIR/reborrow.rs:+0:10: +0:15
- let mut _0: (); // return place in scope 0 at $DIR/reborrow.rs:+0:21: +0:21
- let _2: &mut u8; // in scope 0 at $DIR/reborrow.rs:+1:9: +1:10
- let _5: (); // in scope 0 at $DIR/reborrow.rs:+4:5: +4:14
- let mut _6: &mut u8; // in scope 0 at $DIR/reborrow.rs:+4:12: +4:13
- scope 1 {
- debug a => _2; // in scope 1 at $DIR/reborrow.rs:+1:9: +1:10
- let _3: &mut u8; // in scope 1 at $DIR/reborrow.rs:+2:9: +2:10
- scope 2 {
- debug b => _3; // in scope 2 at $DIR/reborrow.rs:+2:9: +2:10
- let _4: &mut u8; // in scope 2 at $DIR/reborrow.rs:+3:9: +3:10
- scope 3 {
-- debug c => _4; // in scope 3 at $DIR/reborrow.rs:+3:9: +3:10
-+ debug c => _2; // in scope 3 at $DIR/reborrow.rs:+3:9: +3:10
- }
- }
- }
-
- bb0: {
-- StorageLive(_2); // scope 0 at $DIR/reborrow.rs:+1:9: +1:10
- _2 = &mut _1; // scope 0 at $DIR/reborrow.rs:+1:13: +1:19
- StorageLive(_3); // scope 1 at $DIR/reborrow.rs:+2:9: +2:10
- _3 = &mut (*_2); // scope 1 at $DIR/reborrow.rs:+2:13: +2:20
-- StorageLive(_4); // scope 2 at $DIR/reborrow.rs:+3:9: +3:10
-- _4 = move _2; // scope 2 at $DIR/reborrow.rs:+3:13: +3:14
- StorageLive(_5); // scope 3 at $DIR/reborrow.rs:+4:5: +4:14
-- StorageLive(_6); // scope 3 at $DIR/reborrow.rs:+4:12: +4:13
-- _6 = move _4; // scope 3 at $DIR/reborrow.rs:+4:12: +4:13
-- _5 = opaque::<&mut u8>(move _6) -> bb1; // scope 3 at $DIR/reborrow.rs:+4:5: +4:14
-+ _5 = opaque::<&mut u8>(move _2) -> bb1; // scope 3 at $DIR/reborrow.rs:+4:5: +4:14
- // mir::Constant
- // + span: $DIR/reborrow.rs:15:5: 15:11
- // + literal: Const { ty: fn(&mut u8) {opaque::<&mut u8>}, val: Value(<ZST>) }
- }
-
- bb1: {
-- StorageDead(_6); // scope 3 at $DIR/reborrow.rs:+4:13: +4:14
- StorageDead(_5); // scope 3 at $DIR/reborrow.rs:+4:14: +4:15
- _0 = const (); // scope 0 at $DIR/reborrow.rs:+0:21: +5:2
-- StorageDead(_4); // scope 2 at $DIR/reborrow.rs:+5:1: +5:2
- StorageDead(_3); // scope 1 at $DIR/reborrow.rs:+5:1: +5:2
-- StorageDead(_2); // scope 0 at $DIR/reborrow.rs:+5:1: +5:2
- return; // scope 0 at $DIR/reborrow.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/reborrow.remut.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/reborrow.remut.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..2026c1982
--- /dev/null
+++ b/tests/mir-opt/copy-prop/reborrow.remut.CopyProp.panic-abort.diff
@@ -0,0 +1,47 @@
+- // MIR for `remut` before CopyProp
++ // MIR for `remut` after CopyProp
+
+ fn remut(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: &mut u8;
+ let _5: ();
+ let mut _6: &mut u8;
+ scope 1 {
+ debug a => _2;
+ let _3: &mut u8;
+ scope 2 {
+ debug b => _3;
+ let _4: &mut u8;
+ scope 3 {
+- debug c => _4;
++ debug c => _2;
+ }
+ }
+ }
+
+ bb0: {
+- StorageLive(_2);
+ _2 = &mut _1;
+ StorageLive(_3);
+ _3 = &mut (*_2);
+- StorageLive(_4);
+- _4 = move _2;
+ StorageLive(_5);
+- StorageLive(_6);
+- _6 = move _4;
+- _5 = opaque::<&mut u8>(move _6) -> [return: bb1, unwind unreachable];
++ _5 = opaque::<&mut u8>(move _2) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- StorageDead(_6);
+ StorageDead(_5);
+ _0 = const ();
+- StorageDead(_4);
+ StorageDead(_3);
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/reborrow.remut.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/reborrow.remut.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..67763fdce
--- /dev/null
+++ b/tests/mir-opt/copy-prop/reborrow.remut.CopyProp.panic-unwind.diff
@@ -0,0 +1,47 @@
+- // MIR for `remut` before CopyProp
++ // MIR for `remut` after CopyProp
+
+ fn remut(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: &mut u8;
+ let _5: ();
+ let mut _6: &mut u8;
+ scope 1 {
+ debug a => _2;
+ let _3: &mut u8;
+ scope 2 {
+ debug b => _3;
+ let _4: &mut u8;
+ scope 3 {
+- debug c => _4;
++ debug c => _2;
+ }
+ }
+ }
+
+ bb0: {
+- StorageLive(_2);
+ _2 = &mut _1;
+ StorageLive(_3);
+ _3 = &mut (*_2);
+- StorageLive(_4);
+- _4 = move _2;
+ StorageLive(_5);
+- StorageLive(_6);
+- _6 = move _4;
+- _5 = opaque::<&mut u8>(move _6) -> [return: bb1, unwind continue];
++ _5 = opaque::<&mut u8>(move _2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+- StorageDead(_6);
+ StorageDead(_5);
+ _0 = const ();
+- StorageDead(_4);
+ StorageDead(_3);
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.diff b/tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.diff
deleted file mode 100644
index 63e42b4dc..000000000
--- a/tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.diff
+++ /dev/null
@@ -1,50 +0,0 @@
-- // MIR for `reraw` before CopyProp
-+ // MIR for `reraw` after CopyProp
-
- fn reraw(_1: u8) -> () {
- debug x => _1; // in scope 0 at $DIR/reborrow.rs:+0:10: +0:15
- let mut _0: (); // return place in scope 0 at $DIR/reborrow.rs:+0:21: +0:21
- let _2: &mut u8; // in scope 0 at $DIR/reborrow.rs:+1:9: +1:10
- let _5: (); // in scope 0 at $DIR/reborrow.rs:+4:5: +4:14
- let mut _6: &mut u8; // in scope 0 at $DIR/reborrow.rs:+4:12: +4:13
- scope 1 {
- debug a => _2; // in scope 1 at $DIR/reborrow.rs:+1:9: +1:10
- let _3: *mut u8; // in scope 1 at $DIR/reborrow.rs:+2:9: +2:10
- scope 2 {
- debug b => _3; // in scope 2 at $DIR/reborrow.rs:+2:9: +2:10
- let _4: &mut u8; // in scope 2 at $DIR/reborrow.rs:+3:9: +3:10
- scope 3 {
-- debug c => _4; // in scope 3 at $DIR/reborrow.rs:+3:9: +3:10
-+ debug c => _2; // in scope 3 at $DIR/reborrow.rs:+3:9: +3:10
- }
- }
- }
-
- bb0: {
-- StorageLive(_2); // scope 0 at $DIR/reborrow.rs:+1:9: +1:10
- _2 = &mut _1; // scope 0 at $DIR/reborrow.rs:+1:13: +1:19
- StorageLive(_3); // scope 1 at $DIR/reborrow.rs:+2:9: +2:10
- _3 = &raw mut (*_2); // scope 1 at $DIR/reborrow.rs:+2:13: +2:24
-- StorageLive(_4); // scope 2 at $DIR/reborrow.rs:+3:9: +3:10
-- _4 = move _2; // scope 2 at $DIR/reborrow.rs:+3:13: +3:14
- StorageLive(_5); // scope 3 at $DIR/reborrow.rs:+4:5: +4:14
-- StorageLive(_6); // scope 3 at $DIR/reborrow.rs:+4:12: +4:13
-- _6 = move _4; // scope 3 at $DIR/reborrow.rs:+4:12: +4:13
-- _5 = opaque::<&mut u8>(move _6) -> bb1; // scope 3 at $DIR/reborrow.rs:+4:5: +4:14
-+ _5 = opaque::<&mut u8>(move _2) -> bb1; // scope 3 at $DIR/reborrow.rs:+4:5: +4:14
- // mir::Constant
- // + span: $DIR/reborrow.rs:23:5: 23:11
- // + literal: Const { ty: fn(&mut u8) {opaque::<&mut u8>}, val: Value(<ZST>) }
- }
-
- bb1: {
-- StorageDead(_6); // scope 3 at $DIR/reborrow.rs:+4:13: +4:14
- StorageDead(_5); // scope 3 at $DIR/reborrow.rs:+4:14: +4:15
- _0 = const (); // scope 0 at $DIR/reborrow.rs:+0:21: +5:2
-- StorageDead(_4); // scope 2 at $DIR/reborrow.rs:+5:1: +5:2
- StorageDead(_3); // scope 1 at $DIR/reborrow.rs:+5:1: +5:2
-- StorageDead(_2); // scope 0 at $DIR/reborrow.rs:+5:1: +5:2
- return; // scope 0 at $DIR/reborrow.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.panic-abort.diff b/tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.panic-abort.diff
new file mode 100644
index 000000000..dfc8dd097
--- /dev/null
+++ b/tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.panic-abort.diff
@@ -0,0 +1,47 @@
+- // MIR for `reraw` before CopyProp
++ // MIR for `reraw` after CopyProp
+
+ fn reraw(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: &mut u8;
+ let _5: ();
+ let mut _6: &mut u8;
+ scope 1 {
+ debug a => _2;
+ let _3: *mut u8;
+ scope 2 {
+ debug b => _3;
+ let _4: &mut u8;
+ scope 3 {
+- debug c => _4;
++ debug c => _2;
+ }
+ }
+ }
+
+ bb0: {
+- StorageLive(_2);
+ _2 = &mut _1;
+ StorageLive(_3);
+ _3 = &raw mut (*_2);
+- StorageLive(_4);
+- _4 = move _2;
+ StorageLive(_5);
+- StorageLive(_6);
+- _6 = move _4;
+- _5 = opaque::<&mut u8>(move _6) -> [return: bb1, unwind unreachable];
++ _5 = opaque::<&mut u8>(move _2) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- StorageDead(_6);
+ StorageDead(_5);
+ _0 = const ();
+- StorageDead(_4);
+ StorageDead(_3);
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.panic-unwind.diff b/tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.panic-unwind.diff
new file mode 100644
index 000000000..becc42563
--- /dev/null
+++ b/tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.panic-unwind.diff
@@ -0,0 +1,47 @@
+- // MIR for `reraw` before CopyProp
++ // MIR for `reraw` after CopyProp
+
+ fn reraw(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: &mut u8;
+ let _5: ();
+ let mut _6: &mut u8;
+ scope 1 {
+ debug a => _2;
+ let _3: *mut u8;
+ scope 2 {
+ debug b => _3;
+ let _4: &mut u8;
+ scope 3 {
+- debug c => _4;
++ debug c => _2;
+ }
+ }
+ }
+
+ bb0: {
+- StorageLive(_2);
+ _2 = &mut _1;
+ StorageLive(_3);
+ _3 = &raw mut (*_2);
+- StorageLive(_4);
+- _4 = move _2;
+ StorageLive(_5);
+- StorageLive(_6);
+- _6 = move _4;
+- _5 = opaque::<&mut u8>(move _6) -> [return: bb1, unwind continue];
++ _5 = opaque::<&mut u8>(move _2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+- StorageDead(_6);
+ StorageDead(_5);
+ _0 = const ();
+- StorageDead(_4);
+ StorageDead(_3);
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/copy-prop/reborrow.rs b/tests/mir-opt/copy-prop/reborrow.rs
index 91b77966b..c37ba5e5c 100644
--- a/tests/mir-opt/copy-prop/reborrow.rs
+++ b/tests/mir-opt/copy-prop/reborrow.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Check that CopyProp considers reborrows as not mutating the pointer.
// unit-test: CopyProp
diff --git a/tests/mir-opt/dataflow-const-prop/cast.main.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/cast.main.DataflowConstProp.diff
index bf9ab8669..0ca446c89 100644
--- a/tests/mir-opt/dataflow-const-prop/cast.main.DataflowConstProp.diff
+++ b/tests/mir-opt/dataflow-const-prop/cast.main.DataflowConstProp.diff
@@ -2,36 +2,36 @@
+ // MIR for `main` after DataflowConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/cast.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/cast.rs:+1:9: +1:10
- let mut _3: u8; // in scope 0 at $DIR/cast.rs:+2:13: +2:20
- let mut _4: i32; // in scope 0 at $DIR/cast.rs:+2:13: +2:14
+ let mut _0: ();
+ let _1: i32;
+ let mut _3: u8;
+ let mut _4: i32;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/cast.rs:+1:9: +1:10
- let _2: u8; // in scope 1 at $DIR/cast.rs:+2:9: +2:10
+ debug a => _1;
+ let _2: u8;
scope 2 {
- debug b => _2; // in scope 2 at $DIR/cast.rs:+2:9: +2:10
+ debug b => _2;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/cast.rs:+1:9: +1:10
- _1 = const 257_i32; // scope 0 at $DIR/cast.rs:+1:13: +1:16
- StorageLive(_2); // scope 1 at $DIR/cast.rs:+2:9: +2:10
- StorageLive(_3); // scope 1 at $DIR/cast.rs:+2:13: +2:20
- StorageLive(_4); // scope 1 at $DIR/cast.rs:+2:13: +2:14
-- _4 = _1; // scope 1 at $DIR/cast.rs:+2:13: +2:14
-- _3 = move _4 as u8 (IntToInt); // scope 1 at $DIR/cast.rs:+2:13: +2:20
-+ _4 = const 257_i32; // scope 1 at $DIR/cast.rs:+2:13: +2:14
-+ _3 = const 1_u8; // scope 1 at $DIR/cast.rs:+2:13: +2:20
- StorageDead(_4); // scope 1 at $DIR/cast.rs:+2:19: +2:20
-- _2 = Add(move _3, const 1_u8); // scope 1 at $DIR/cast.rs:+2:13: +2:24
-+ _2 = const 2_u8; // scope 1 at $DIR/cast.rs:+2:13: +2:24
- StorageDead(_3); // scope 1 at $DIR/cast.rs:+2:23: +2:24
- _0 = const (); // scope 0 at $DIR/cast.rs:+0:11: +3:2
- StorageDead(_2); // scope 1 at $DIR/cast.rs:+3:1: +3:2
- StorageDead(_1); // scope 0 at $DIR/cast.rs:+3:1: +3:2
- return; // scope 0 at $DIR/cast.rs:+3:2: +3:2
+ StorageLive(_1);
+ _1 = const 257_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = _1;
+- _3 = move _4 as u8 (IntToInt);
++ _4 = const 257_i32;
++ _3 = const 1_u8;
+ StorageDead(_4);
+- _2 = Add(move _3, const 1_u8);
++ _2 = const 2_u8;
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.diff
deleted file mode 100644
index 944afed8f..000000000
--- a/tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.diff
+++ /dev/null
@@ -1,80 +0,0 @@
-- // MIR for `main` before DataflowConstProp
-+ // MIR for `main` after DataflowConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/checked.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/checked.rs:+1:9: +1:10
- let mut _4: i32; // in scope 0 at $DIR/checked.rs:+3:13: +3:14
- let mut _5: i32; // in scope 0 at $DIR/checked.rs:+3:17: +3:18
- let mut _6: (i32, bool); // in scope 0 at $DIR/checked.rs:+3:13: +3:18
- let mut _9: i32; // in scope 0 at $DIR/checked.rs:+6:13: +6:14
- let mut _10: (i32, bool); // in scope 0 at $DIR/checked.rs:+6:13: +6:18
- scope 1 {
- debug a => _1; // in scope 1 at $DIR/checked.rs:+1:9: +1:10
- let _2: i32; // in scope 1 at $DIR/checked.rs:+2:9: +2:10
- scope 2 {
- debug b => _2; // in scope 2 at $DIR/checked.rs:+2:9: +2:10
- let _3: i32; // in scope 2 at $DIR/checked.rs:+3:9: +3:10
- scope 3 {
- debug c => _3; // in scope 3 at $DIR/checked.rs:+3:9: +3:10
- let _7: i32; // in scope 3 at $DIR/checked.rs:+5:9: +5:10
- scope 4 {
- debug d => _7; // in scope 4 at $DIR/checked.rs:+5:9: +5:10
- let _8: i32; // in scope 4 at $DIR/checked.rs:+6:9: +6:10
- scope 5 {
- debug e => _8; // in scope 5 at $DIR/checked.rs:+6:9: +6:10
- }
- }
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/checked.rs:+1:9: +1:10
- _1 = const 1_i32; // scope 0 at $DIR/checked.rs:+1:13: +1:14
- StorageLive(_2); // scope 1 at $DIR/checked.rs:+2:9: +2:10
- _2 = const 2_i32; // scope 1 at $DIR/checked.rs:+2:13: +2:14
- StorageLive(_3); // scope 2 at $DIR/checked.rs:+3:9: +3:10
- StorageLive(_4); // scope 2 at $DIR/checked.rs:+3:13: +3:14
-- _4 = _1; // scope 2 at $DIR/checked.rs:+3:13: +3:14
-+ _4 = const 1_i32; // scope 2 at $DIR/checked.rs:+3:13: +3:14
- StorageLive(_5); // scope 2 at $DIR/checked.rs:+3:17: +3:18
-- _5 = _2; // scope 2 at $DIR/checked.rs:+3:17: +3:18
-- _6 = CheckedAdd(_4, _5); // scope 2 at $DIR/checked.rs:+3:13: +3:18
-- assert(!move (_6.1: bool), "attempt to compute `{} + {}`, which would overflow", move _4, move _5) -> bb1; // scope 2 at $DIR/checked.rs:+3:13: +3:18
-+ _5 = const 2_i32; // scope 2 at $DIR/checked.rs:+3:17: +3:18
-+ _6 = CheckedAdd(const 1_i32, const 2_i32); // scope 2 at $DIR/checked.rs:+3:13: +3:18
-+ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 1_i32, const 2_i32) -> bb1; // scope 2 at $DIR/checked.rs:+3:13: +3:18
- }
-
- bb1: {
-- _3 = move (_6.0: i32); // scope 2 at $DIR/checked.rs:+3:13: +3:18
-+ _3 = const 3_i32; // scope 2 at $DIR/checked.rs:+3:13: +3:18
- StorageDead(_5); // scope 2 at $DIR/checked.rs:+3:17: +3:18
- StorageDead(_4); // scope 2 at $DIR/checked.rs:+3:17: +3:18
- StorageLive(_7); // scope 3 at $DIR/checked.rs:+5:9: +5:10
- _7 = const _; // scope 3 at $DIR/checked.rs:+5:13: +5:21
- StorageLive(_8); // scope 4 at $DIR/checked.rs:+6:9: +6:10
- StorageLive(_9); // scope 4 at $DIR/checked.rs:+6:13: +6:14
-- _9 = _7; // scope 4 at $DIR/checked.rs:+6:13: +6:14
-- _10 = CheckedAdd(_9, const 1_i32); // scope 4 at $DIR/checked.rs:+6:13: +6:18
-- assert(!move (_10.1: bool), "attempt to compute `{} + {}`, which would overflow", move _9, const 1_i32) -> bb2; // scope 4 at $DIR/checked.rs:+6:13: +6:18
-+ _9 = const i32::MAX; // scope 4 at $DIR/checked.rs:+6:13: +6:14
-+ _10 = CheckedAdd(const i32::MAX, const 1_i32); // scope 4 at $DIR/checked.rs:+6:13: +6:18
-+ assert(!const true, "attempt to compute `{} + {}`, which would overflow", const i32::MAX, const 1_i32) -> bb2; // scope 4 at $DIR/checked.rs:+6:13: +6:18
- }
-
- bb2: {
-- _8 = move (_10.0: i32); // scope 4 at $DIR/checked.rs:+6:13: +6:18
-+ _8 = const i32::MIN; // scope 4 at $DIR/checked.rs:+6:13: +6:18
- StorageDead(_9); // scope 4 at $DIR/checked.rs:+6:17: +6:18
- _0 = const (); // scope 0 at $DIR/checked.rs:+0:11: +7:2
- StorageDead(_8); // scope 4 at $DIR/checked.rs:+7:1: +7:2
- StorageDead(_7); // scope 3 at $DIR/checked.rs:+7:1: +7:2
- StorageDead(_3); // scope 2 at $DIR/checked.rs:+7:1: +7:2
- StorageDead(_2); // scope 1 at $DIR/checked.rs:+7:1: +7:2
- StorageDead(_1); // scope 0 at $DIR/checked.rs:+7:1: +7:2
- return; // scope 0 at $DIR/checked.rs:+7:2: +7:2
- }
- }
-
diff --git a/tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.panic-abort.diff b/tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.panic-abort.diff
new file mode 100644
index 000000000..2f1a70f32
--- /dev/null
+++ b/tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.panic-abort.diff
@@ -0,0 +1,80 @@
+- // MIR for `main` before DataflowConstProp
++ // MIR for `main` after DataflowConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _4: i32;
+ let mut _5: i32;
+ let mut _6: (i32, bool);
+ let mut _9: i32;
+ let mut _10: (i32, bool);
+ scope 1 {
+ debug a => _1;
+ let _2: i32;
+ scope 2 {
+ debug b => _2;
+ let _3: i32;
+ scope 3 {
+ debug c => _3;
+ let _7: i32;
+ scope 4 {
+ debug d => _7;
+ let _8: i32;
+ scope 5 {
+ debug e => _8;
+ }
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 1_i32;
+ StorageLive(_2);
+ _2 = const 2_i32;
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = _1;
++ _4 = const 1_i32;
+ StorageLive(_5);
+- _5 = _2;
+- _6 = CheckedAdd(_4, _5);
+- assert(!move (_6.1: bool), "attempt to compute `{} + {}`, which would overflow", move _4, move _5) -> [success: bb1, unwind unreachable];
++ _5 = const 2_i32;
++ _6 = CheckedAdd(const 1_i32, const 2_i32);
++ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 1_i32, const 2_i32) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _3 = move (_6.0: i32);
++ _3 = const 3_i32;
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_7);
+ _7 = const _;
+ StorageLive(_8);
+ StorageLive(_9);
+- _9 = _7;
+- _10 = CheckedAdd(_9, const 1_i32);
+- assert(!move (_10.1: bool), "attempt to compute `{} + {}`, which would overflow", move _9, const 1_i32) -> [success: bb2, unwind unreachable];
++ _9 = const i32::MAX;
++ _10 = CheckedAdd(const i32::MAX, const 1_i32);
++ assert(!const true, "attempt to compute `{} + {}`, which would overflow", const i32::MAX, const 1_i32) -> [success: bb2, unwind unreachable];
+ }
+
+ bb2: {
+- _8 = move (_10.0: i32);
++ _8 = const i32::MIN;
+ StorageDead(_9);
+ _0 = const ();
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.panic-unwind.diff b/tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.panic-unwind.diff
new file mode 100644
index 000000000..0d8a9aca3
--- /dev/null
+++ b/tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.panic-unwind.diff
@@ -0,0 +1,80 @@
+- // MIR for `main` before DataflowConstProp
++ // MIR for `main` after DataflowConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _4: i32;
+ let mut _5: i32;
+ let mut _6: (i32, bool);
+ let mut _9: i32;
+ let mut _10: (i32, bool);
+ scope 1 {
+ debug a => _1;
+ let _2: i32;
+ scope 2 {
+ debug b => _2;
+ let _3: i32;
+ scope 3 {
+ debug c => _3;
+ let _7: i32;
+ scope 4 {
+ debug d => _7;
+ let _8: i32;
+ scope 5 {
+ debug e => _8;
+ }
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 1_i32;
+ StorageLive(_2);
+ _2 = const 2_i32;
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = _1;
++ _4 = const 1_i32;
+ StorageLive(_5);
+- _5 = _2;
+- _6 = CheckedAdd(_4, _5);
+- assert(!move (_6.1: bool), "attempt to compute `{} + {}`, which would overflow", move _4, move _5) -> [success: bb1, unwind continue];
++ _5 = const 2_i32;
++ _6 = CheckedAdd(const 1_i32, const 2_i32);
++ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 1_i32, const 2_i32) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _3 = move (_6.0: i32);
++ _3 = const 3_i32;
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_7);
+ _7 = const _;
+ StorageLive(_8);
+ StorageLive(_9);
+- _9 = _7;
+- _10 = CheckedAdd(_9, const 1_i32);
+- assert(!move (_10.1: bool), "attempt to compute `{} + {}`, which would overflow", move _9, const 1_i32) -> [success: bb2, unwind continue];
++ _9 = const i32::MAX;
++ _10 = CheckedAdd(const i32::MAX, const 1_i32);
++ assert(!const true, "attempt to compute `{} + {}`, which would overflow", const i32::MAX, const 1_i32) -> [success: bb2, unwind continue];
+ }
+
+ bb2: {
+- _8 = move (_10.0: i32);
++ _8 = const i32::MIN;
+ StorageDead(_9);
+ _0 = const ();
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dataflow-const-prop/checked.rs b/tests/mir-opt/dataflow-const-prop/checked.rs
index 0f9f5a97f..1c301460f 100644
--- a/tests/mir-opt/dataflow-const-prop/checked.rs
+++ b/tests/mir-opt/dataflow-const-prop/checked.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: DataflowConstProp
// compile-flags: -Coverflow-checks=on
diff --git a/tests/mir-opt/dataflow-const-prop/enum.multiple.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/enum.multiple.DataflowConstProp.diff
index c4002d65e..775325c4d 100644
--- a/tests/mir-opt/dataflow-const-prop/enum.multiple.DataflowConstProp.diff
+++ b/tests/mir-opt/dataflow-const-prop/enum.multiple.DataflowConstProp.diff
@@ -2,81 +2,81 @@
+ // MIR for `multiple` after DataflowConstProp
fn multiple(_1: bool, _2: u8) -> () {
- debug x => _1; // in scope 0 at $DIR/enum.rs:+0:13: +0:14
- debug i => _2; // in scope 0 at $DIR/enum.rs:+0:22: +0:23
- let mut _0: (); // return place in scope 0 at $DIR/enum.rs:+0:29: +0:29
- let _3: std::option::Option<u8>; // in scope 0 at $DIR/enum.rs:+1:9: +1:10
- let mut _4: bool; // in scope 0 at $DIR/enum.rs:+1:16: +1:17
- let mut _5: u8; // in scope 0 at $DIR/enum.rs:+2:14: +2:15
- let mut _7: isize; // in scope 0 at $DIR/enum.rs:+9:23: +9:30
+ debug x => _1;
+ debug i => _2;
+ let mut _0: ();
+ let _3: std::option::Option<u8>;
+ let mut _4: bool;
+ let mut _5: u8;
+ let mut _7: isize;
scope 1 {
- debug e => _3; // in scope 1 at $DIR/enum.rs:+1:9: +1:10
- let _6: u8; // in scope 1 at $DIR/enum.rs:+9:9: +9:10
- let _8: u8; // in scope 1 at $DIR/enum.rs:+9:28: +9:29
+ debug e => _3;
+ let _6: u8;
+ let _8: u8;
scope 2 {
- debug x => _6; // in scope 2 at $DIR/enum.rs:+9:9: +9:10
- let _9: u8; // in scope 2 at $DIR/enum.rs:+11:9: +11:10
+ debug x => _6;
+ let _9: u8;
scope 4 {
- debug y => _9; // in scope 4 at $DIR/enum.rs:+11:9: +11:10
+ debug y => _9;
}
}
scope 3 {
- debug i => _8; // in scope 3 at $DIR/enum.rs:+9:28: +9:29
+ debug i => _8;
}
}
bb0: {
- StorageLive(_3); // scope 0 at $DIR/enum.rs:+1:9: +1:10
- StorageLive(_4); // scope 0 at $DIR/enum.rs:+1:16: +1:17
- _4 = _1; // scope 0 at $DIR/enum.rs:+1:16: +1:17
- switchInt(move _4) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/enum.rs:+1:16: +1:17
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ switchInt(move _4) -> [0: bb2, otherwise: bb1];
}
bb1: {
- StorageLive(_5); // scope 0 at $DIR/enum.rs:+2:14: +2:15
- _5 = _2; // scope 0 at $DIR/enum.rs:+2:14: +2:15
- _3 = Option::<u8>::Some(move _5); // scope 0 at $DIR/enum.rs:+2:9: +2:16
- StorageDead(_5); // scope 0 at $DIR/enum.rs:+2:15: +2:16
- goto -> bb3; // scope 0 at $DIR/enum.rs:+1:13: +5:6
+ StorageLive(_5);
+ _5 = _2;
+ _3 = Option::<u8>::Some(move _5);
+ StorageDead(_5);
+ goto -> bb3;
}
bb2: {
- _3 = Option::<u8>::None; // scope 0 at $DIR/enum.rs:+4:9: +4:13
- goto -> bb3; // scope 0 at $DIR/enum.rs:+1:13: +5:6
+ _3 = Option::<u8>::None;
+ goto -> bb3;
}
bb3: {
- StorageDead(_4); // scope 0 at $DIR/enum.rs:+5:5: +5:6
- StorageLive(_6); // scope 1 at $DIR/enum.rs:+9:9: +9:10
- _7 = discriminant(_3); // scope 1 at $DIR/enum.rs:+9:19: +9:20
- switchInt(move _7) -> [0: bb4, 1: bb6, otherwise: bb5]; // scope 1 at $DIR/enum.rs:+9:13: +9:20
+ StorageDead(_4);
+ StorageLive(_6);
+ _7 = discriminant(_3);
+ switchInt(move _7) -> [0: bb4, 1: bb6, otherwise: bb5];
}
bb4: {
- _6 = const 0_u8; // scope 1 at $DIR/enum.rs:+9:45: +9:46
- goto -> bb7; // scope 1 at $DIR/enum.rs:+9:45: +9:46
+ _6 = const 0_u8;
+ goto -> bb7;
}
bb5: {
- unreachable; // scope 1 at $DIR/enum.rs:+9:19: +9:20
+ unreachable;
}
bb6: {
- StorageLive(_8); // scope 1 at $DIR/enum.rs:+9:28: +9:29
- _8 = ((_3 as Some).0: u8); // scope 1 at $DIR/enum.rs:+9:28: +9:29
- _6 = _8; // scope 3 at $DIR/enum.rs:+9:34: +9:35
- StorageDead(_8); // scope 1 at $DIR/enum.rs:+9:34: +9:35
- goto -> bb7; // scope 1 at $DIR/enum.rs:+9:34: +9:35
+ StorageLive(_8);
+ _8 = ((_3 as Some).0: u8);
+ _6 = _8;
+ StorageDead(_8);
+ goto -> bb7;
}
bb7: {
- StorageLive(_9); // scope 2 at $DIR/enum.rs:+11:9: +11:10
- _9 = _6; // scope 2 at $DIR/enum.rs:+11:13: +11:14
- _0 = const (); // scope 0 at $DIR/enum.rs:+0:29: +12:2
- StorageDead(_9); // scope 2 at $DIR/enum.rs:+12:1: +12:2
- StorageDead(_6); // scope 1 at $DIR/enum.rs:+12:1: +12:2
- StorageDead(_3); // scope 0 at $DIR/enum.rs:+12:1: +12:2
- return; // scope 0 at $DIR/enum.rs:+12:2: +12:2
+ StorageLive(_9);
+ _9 = _6;
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_6);
+ StorageDead(_3);
+ return;
}
}
diff --git a/tests/mir-opt/dataflow-const-prop/enum.mutate_discriminant.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/enum.mutate_discriminant.DataflowConstProp.diff
index 038e6c6bd..960e69ee9 100644
--- a/tests/mir-opt/dataflow-const-prop/enum.mutate_discriminant.DataflowConstProp.diff
+++ b/tests/mir-opt/dataflow-const-prop/enum.mutate_discriminant.DataflowConstProp.diff
@@ -2,25 +2,25 @@
+ // MIR for `mutate_discriminant` after DataflowConstProp
fn mutate_discriminant() -> u8 {
- let mut _0: u8; // return place in scope 0 at $DIR/enum.rs:+0:29: +0:31
- let mut _1: std::option::Option<NonZeroUsize>; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _2: isize; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: u8;
+ let mut _1: std::option::Option<NonZeroUsize>;
+ let mut _2: isize;
bb0: {
- discriminant(_1) = 1; // scope 0 at $DIR/enum.rs:+4:13: +4:34
- (((_1 as variant#1).0: NonZeroUsize).0: usize) = const 0_usize; // scope 0 at $DIR/enum.rs:+6:13: +6:64
- _2 = discriminant(_1); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- switchInt(_2) -> [0: bb1, otherwise: bb2]; // scope 0 at $DIR/enum.rs:+9:13: +12:14
+ discriminant(_1) = 1;
+ (((_1 as variant#1).0: NonZeroUsize).0: usize) = const 0_usize;
+ _2 = discriminant(_1);
+ switchInt(_2) -> [0: bb1, otherwise: bb2];
}
bb1: {
- _0 = const 1_u8; // scope 0 at $DIR/enum.rs:+15:13: +15:20
- return; // scope 0 at $DIR/enum.rs:+16:13: +16:21
+ _0 = const 1_u8;
+ return;
}
bb2: {
- _0 = const 2_u8; // scope 0 at $DIR/enum.rs:+19:13: +19:20
- unreachable; // scope 0 at $DIR/enum.rs:+20:13: +20:26
+ _0 = const 2_u8;
+ unreachable;
}
}
diff --git a/tests/mir-opt/dataflow-const-prop/enum.simple.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/enum.simple.DataflowConstProp.diff
index 22bdc35d6..3946e7c7d 100644
--- a/tests/mir-opt/dataflow-const-prop/enum.simple.DataflowConstProp.diff
+++ b/tests/mir-opt/dataflow-const-prop/enum.simple.DataflowConstProp.diff
@@ -2,62 +2,62 @@
+ // MIR for `simple` after DataflowConstProp
fn simple() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/enum.rs:+0:13: +0:13
- let _1: E; // in scope 0 at $DIR/enum.rs:+1:9: +1:10
- let mut _3: isize; // in scope 0 at $DIR/enum.rs:+2:23: +2:31
+ let mut _0: ();
+ let _1: E;
+ let mut _3: isize;
scope 1 {
- debug e => _1; // in scope 1 at $DIR/enum.rs:+1:9: +1:10
- let _2: i32; // in scope 1 at $DIR/enum.rs:+2:9: +2:10
- let _4: i32; // in scope 1 at $DIR/enum.rs:+2:29: +2:30
- let _5: i32; // in scope 1 at $DIR/enum.rs:+2:44: +2:45
+ debug e => _1;
+ let _2: i32;
+ let _4: i32;
+ let _5: i32;
scope 2 {
- debug x => _2; // in scope 2 at $DIR/enum.rs:+2:9: +2:10
+ debug x => _2;
}
scope 3 {
- debug x => _4; // in scope 3 at $DIR/enum.rs:+2:29: +2:30
+ debug x => _4;
}
scope 4 {
- debug x => _5; // in scope 4 at $DIR/enum.rs:+2:44: +2:45
+ debug x => _5;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/enum.rs:+1:9: +1:10
- _1 = E::V1(const 0_i32); // scope 0 at $DIR/enum.rs:+1:13: +1:21
- StorageLive(_2); // scope 1 at $DIR/enum.rs:+2:9: +2:10
-- _3 = discriminant(_1); // scope 1 at $DIR/enum.rs:+2:19: +2:20
-- switchInt(move _3) -> [0: bb3, 1: bb1, otherwise: bb2]; // scope 1 at $DIR/enum.rs:+2:13: +2:20
-+ _3 = const 0_isize; // scope 1 at $DIR/enum.rs:+2:19: +2:20
-+ switchInt(const 0_isize) -> [0: bb3, 1: bb1, otherwise: bb2]; // scope 1 at $DIR/enum.rs:+2:13: +2:20
+ StorageLive(_1);
+ _1 = E::V1(const 0_i32);
+ StorageLive(_2);
+- _3 = discriminant(_1);
+- switchInt(move _3) -> [0: bb3, 1: bb1, otherwise: bb2];
++ _3 = const 0_isize;
++ switchInt(const 0_isize) -> [0: bb3, 1: bb1, otherwise: bb2];
}
bb1: {
- StorageLive(_5); // scope 1 at $DIR/enum.rs:+2:44: +2:45
- _5 = ((_1 as V2).0: i32); // scope 1 at $DIR/enum.rs:+2:44: +2:45
- _2 = _5; // scope 4 at $DIR/enum.rs:+2:50: +2:51
- StorageDead(_5); // scope 1 at $DIR/enum.rs:+2:50: +2:51
- goto -> bb4; // scope 1 at $DIR/enum.rs:+2:50: +2:51
+ StorageLive(_5);
+ _5 = ((_1 as V2).0: i32);
+ _2 = _5;
+ StorageDead(_5);
+ goto -> bb4;
}
bb2: {
- unreachable; // scope 1 at $DIR/enum.rs:+2:19: +2:20
+ unreachable;
}
bb3: {
- StorageLive(_4); // scope 1 at $DIR/enum.rs:+2:29: +2:30
-- _4 = ((_1 as V1).0: i32); // scope 1 at $DIR/enum.rs:+2:29: +2:30
-- _2 = _4; // scope 3 at $DIR/enum.rs:+2:35: +2:36
-+ _4 = const 0_i32; // scope 1 at $DIR/enum.rs:+2:29: +2:30
-+ _2 = const 0_i32; // scope 3 at $DIR/enum.rs:+2:35: +2:36
- StorageDead(_4); // scope 1 at $DIR/enum.rs:+2:35: +2:36
- goto -> bb4; // scope 1 at $DIR/enum.rs:+2:35: +2:36
+ StorageLive(_4);
+- _4 = ((_1 as V1).0: i32);
+- _2 = _4;
++ _4 = const 0_i32;
++ _2 = const 0_i32;
+ StorageDead(_4);
+ goto -> bb4;
}
bb4: {
- _0 = const (); // scope 0 at $DIR/enum.rs:+0:13: +3:2
- StorageDead(_2); // scope 1 at $DIR/enum.rs:+3:1: +3:2
- StorageDead(_1); // scope 0 at $DIR/enum.rs:+3:1: +3:2
- return; // scope 0 at $DIR/enum.rs:+3:2: +3:2
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/dataflow-const-prop/if.main.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/if.main.DataflowConstProp.diff
index 32489b4bd..08b599f9f 100644
--- a/tests/mir-opt/dataflow-const-prop/if.main.DataflowConstProp.diff
+++ b/tests/mir-opt/dataflow-const-prop/if.main.DataflowConstProp.diff
@@ -2,29 +2,29 @@
+ // MIR for `main` after DataflowConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/if.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/if.rs:+1:9: +1:10
- let mut _3: bool; // in scope 0 at $DIR/if.rs:+2:16: +2:22
- let mut _4: i32; // in scope 0 at $DIR/if.rs:+2:16: +2:17
- let mut _6: i32; // in scope 0 at $DIR/if.rs:+3:13: +3:14
- let mut _8: bool; // in scope 0 at $DIR/if.rs:+5:16: +5:22
- let mut _9: i32; // in scope 0 at $DIR/if.rs:+5:16: +5:17
- let mut _10: i32; // in scope 0 at $DIR/if.rs:+5:36: +5:37
- let mut _12: i32; // in scope 0 at $DIR/if.rs:+6:13: +6:14
+ let mut _0: ();
+ let _1: i32;
+ let mut _3: bool;
+ let mut _4: i32;
+ let mut _6: i32;
+ let mut _8: bool;
+ let mut _9: i32;
+ let mut _10: i32;
+ let mut _12: i32;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/if.rs:+1:9: +1:10
- let _2: i32; // in scope 1 at $DIR/if.rs:+2:9: +2:10
+ debug a => _1;
+ let _2: i32;
scope 2 {
- debug b => _2; // in scope 2 at $DIR/if.rs:+2:9: +2:10
- let _5: i32; // in scope 2 at $DIR/if.rs:+3:9: +3:10
+ debug b => _2;
+ let _5: i32;
scope 3 {
- debug c => _5; // in scope 3 at $DIR/if.rs:+3:9: +3:10
- let _7: i32; // in scope 3 at $DIR/if.rs:+5:9: +5:10
+ debug c => _5;
+ let _7: i32;
scope 4 {
- debug d => _7; // in scope 4 at $DIR/if.rs:+5:9: +5:10
- let _11: i32; // in scope 4 at $DIR/if.rs:+6:9: +6:10
+ debug d => _7;
+ let _11: i32;
scope 5 {
- debug e => _11; // in scope 5 at $DIR/if.rs:+6:9: +6:10
+ debug e => _11;
}
}
}
@@ -32,81 +32,81 @@
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/if.rs:+1:9: +1:10
- _1 = const 1_i32; // scope 0 at $DIR/if.rs:+1:13: +1:14
- StorageLive(_2); // scope 1 at $DIR/if.rs:+2:9: +2:10
- StorageLive(_3); // scope 1 at $DIR/if.rs:+2:16: +2:22
- StorageLive(_4); // scope 1 at $DIR/if.rs:+2:16: +2:17
-- _4 = _1; // scope 1 at $DIR/if.rs:+2:16: +2:17
-- _3 = Eq(move _4, const 1_i32); // scope 1 at $DIR/if.rs:+2:16: +2:22
-+ _4 = const 1_i32; // scope 1 at $DIR/if.rs:+2:16: +2:17
-+ _3 = const true; // scope 1 at $DIR/if.rs:+2:16: +2:22
- StorageDead(_4); // scope 1 at $DIR/if.rs:+2:21: +2:22
-- switchInt(move _3) -> [0: bb2, otherwise: bb1]; // scope 1 at $DIR/if.rs:+2:16: +2:22
-+ switchInt(const true) -> [0: bb2, otherwise: bb1]; // scope 1 at $DIR/if.rs:+2:16: +2:22
+ StorageLive(_1);
+ _1 = const 1_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = _1;
+- _3 = Eq(move _4, const 1_i32);
++ _4 = const 1_i32;
++ _3 = const true;
+ StorageDead(_4);
+- switchInt(move _3) -> [0: bb2, otherwise: bb1];
++ switchInt(const true) -> [0: bb2, otherwise: bb1];
}
bb1: {
- _2 = const 2_i32; // scope 1 at $DIR/if.rs:+2:25: +2:26
- goto -> bb3; // scope 1 at $DIR/if.rs:+2:13: +2:39
+ _2 = const 2_i32;
+ goto -> bb3;
}
bb2: {
- _2 = const 3_i32; // scope 1 at $DIR/if.rs:+2:36: +2:37
- goto -> bb3; // scope 1 at $DIR/if.rs:+2:13: +2:39
+ _2 = const 3_i32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_3); // scope 1 at $DIR/if.rs:+2:38: +2:39
- StorageLive(_5); // scope 2 at $DIR/if.rs:+3:9: +3:10
- StorageLive(_6); // scope 2 at $DIR/if.rs:+3:13: +3:14
-- _6 = _2; // scope 2 at $DIR/if.rs:+3:13: +3:14
-- _5 = Add(move _6, const 1_i32); // scope 2 at $DIR/if.rs:+3:13: +3:18
-+ _6 = const 2_i32; // scope 2 at $DIR/if.rs:+3:13: +3:14
-+ _5 = const 3_i32; // scope 2 at $DIR/if.rs:+3:13: +3:18
- StorageDead(_6); // scope 2 at $DIR/if.rs:+3:17: +3:18
- StorageLive(_7); // scope 3 at $DIR/if.rs:+5:9: +5:10
- StorageLive(_8); // scope 3 at $DIR/if.rs:+5:16: +5:22
- StorageLive(_9); // scope 3 at $DIR/if.rs:+5:16: +5:17
-- _9 = _1; // scope 3 at $DIR/if.rs:+5:16: +5:17
-- _8 = Eq(move _9, const 1_i32); // scope 3 at $DIR/if.rs:+5:16: +5:22
-+ _9 = const 1_i32; // scope 3 at $DIR/if.rs:+5:16: +5:17
-+ _8 = const true; // scope 3 at $DIR/if.rs:+5:16: +5:22
- StorageDead(_9); // scope 3 at $DIR/if.rs:+5:21: +5:22
-- switchInt(move _8) -> [0: bb5, otherwise: bb4]; // scope 3 at $DIR/if.rs:+5:16: +5:22
-+ switchInt(const true) -> [0: bb5, otherwise: bb4]; // scope 3 at $DIR/if.rs:+5:16: +5:22
+ StorageDead(_3);
+ StorageLive(_5);
+ StorageLive(_6);
+- _6 = _2;
+- _5 = Add(move _6, const 1_i32);
++ _6 = const 2_i32;
++ _5 = const 3_i32;
+ StorageDead(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ StorageLive(_9);
+- _9 = _1;
+- _8 = Eq(move _9, const 1_i32);
++ _9 = const 1_i32;
++ _8 = const true;
+ StorageDead(_9);
+- switchInt(move _8) -> [0: bb5, otherwise: bb4];
++ switchInt(const true) -> [0: bb5, otherwise: bb4];
}
bb4: {
-- _7 = _1; // scope 3 at $DIR/if.rs:+5:25: +5:26
-+ _7 = const 1_i32; // scope 3 at $DIR/if.rs:+5:25: +5:26
- goto -> bb6; // scope 3 at $DIR/if.rs:+5:13: +5:43
+- _7 = _1;
++ _7 = const 1_i32;
+ goto -> bb6;
}
bb5: {
- StorageLive(_10); // scope 3 at $DIR/if.rs:+5:36: +5:37
- _10 = _1; // scope 3 at $DIR/if.rs:+5:36: +5:37
- _7 = Add(move _10, const 1_i32); // scope 3 at $DIR/if.rs:+5:36: +5:41
- StorageDead(_10); // scope 3 at $DIR/if.rs:+5:40: +5:41
- goto -> bb6; // scope 3 at $DIR/if.rs:+5:13: +5:43
+ StorageLive(_10);
+ _10 = _1;
+ _7 = Add(move _10, const 1_i32);
+ StorageDead(_10);
+ goto -> bb6;
}
bb6: {
- StorageDead(_8); // scope 3 at $DIR/if.rs:+5:42: +5:43
- StorageLive(_11); // scope 4 at $DIR/if.rs:+6:9: +6:10
- StorageLive(_12); // scope 4 at $DIR/if.rs:+6:13: +6:14
-- _12 = _7; // scope 4 at $DIR/if.rs:+6:13: +6:14
-- _11 = Add(move _12, const 1_i32); // scope 4 at $DIR/if.rs:+6:13: +6:18
-+ _12 = const 1_i32; // scope 4 at $DIR/if.rs:+6:13: +6:14
-+ _11 = const 2_i32; // scope 4 at $DIR/if.rs:+6:13: +6:18
- StorageDead(_12); // scope 4 at $DIR/if.rs:+6:17: +6:18
- _0 = const (); // scope 0 at $DIR/if.rs:+0:11: +7:2
- StorageDead(_11); // scope 4 at $DIR/if.rs:+7:1: +7:2
- StorageDead(_7); // scope 3 at $DIR/if.rs:+7:1: +7:2
- StorageDead(_5); // scope 2 at $DIR/if.rs:+7:1: +7:2
- StorageDead(_2); // scope 1 at $DIR/if.rs:+7:1: +7:2
- StorageDead(_1); // scope 0 at $DIR/if.rs:+7:1: +7:2
- return; // scope 0 at $DIR/if.rs:+7:2: +7:2
+ StorageDead(_8);
+ StorageLive(_11);
+ StorageLive(_12);
+- _12 = _7;
+- _11 = Add(move _12, const 1_i32);
++ _12 = const 1_i32;
++ _11 = const 2_i32;
+ StorageDead(_12);
+ _0 = const ();
+ StorageDead(_11);
+ StorageDead(_7);
+ StorageDead(_5);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.diff
deleted file mode 100644
index 1edcc28e6..000000000
--- a/tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.diff
+++ /dev/null
@@ -1,39 +0,0 @@
-- // MIR for `main` before DataflowConstProp
-+ // MIR for `main` after DataflowConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inherit_overflow.rs:+0:11: +0:11
- let mut _1: u8; // in scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- let mut _2: u8; // in scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- let mut _3: u8; // in scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- scope 1 {
- }
- scope 2 (inlined <u8 as Add>::add) { // at $DIR/inherit_overflow.rs:9:13: 9:47
- debug self => _2; // in scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
- debug other => _3; // in scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
- let mut _4: (u8, bool); // in scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- StorageLive(_2); // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- _2 = const u8::MAX; // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- StorageLive(_3); // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- _3 = const 1_u8; // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
-- _4 = CheckedAdd(_2, _3); // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
-- assert(!move (_4.1: bool), "attempt to compute `{} + {}`, which would overflow", _2, _3) -> bb1; // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
-+ _4 = CheckedAdd(const u8::MAX, const 1_u8); // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
-+ assert(!const true, "attempt to compute `{} + {}`, which would overflow", const u8::MAX, const 1_u8) -> bb1; // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
- }
-
- bb1: {
-- _1 = move (_4.0: u8); // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
-+ _1 = const 0_u8; // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL
- StorageDead(_3); // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- StorageDead(_2); // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47
- StorageDead(_1); // scope 0 at $DIR/inherit_overflow.rs:+3:47: +3:48
- _0 = const (); // scope 0 at $DIR/inherit_overflow.rs:+0:11: +4:2
- return; // scope 0 at $DIR/inherit_overflow.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.panic-abort.diff b/tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.panic-abort.diff
new file mode 100644
index 000000000..9a68d3b51
--- /dev/null
+++ b/tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.panic-abort.diff
@@ -0,0 +1,39 @@
+- // MIR for `main` before DataflowConstProp
++ // MIR for `main` after DataflowConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: u8;
+ let mut _2: u8;
+ let mut _3: u8;
+ scope 1 {
+ }
+ scope 2 (inlined <u8 as Add>::add) {
+ debug self => _2;
+ debug other => _3;
+ let mut _4: (u8, bool);
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const u8::MAX;
+ StorageLive(_3);
+ _3 = const 1_u8;
+- _4 = CheckedAdd(_2, _3);
+- assert(!move (_4.1: bool), "attempt to compute `{} + {}`, which would overflow", _2, _3) -> [success: bb1, unwind unreachable];
++ _4 = CheckedAdd(const u8::MAX, const 1_u8);
++ assert(!const true, "attempt to compute `{} + {}`, which would overflow", const u8::MAX, const 1_u8) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = move (_4.0: u8);
++ _1 = const 0_u8;
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.panic-unwind.diff b/tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.panic-unwind.diff
new file mode 100644
index 000000000..c1d281ab7
--- /dev/null
+++ b/tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.panic-unwind.diff
@@ -0,0 +1,39 @@
+- // MIR for `main` before DataflowConstProp
++ // MIR for `main` after DataflowConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: u8;
+ let mut _2: u8;
+ let mut _3: u8;
+ scope 1 {
+ }
+ scope 2 (inlined <u8 as Add>::add) {
+ debug self => _2;
+ debug other => _3;
+ let mut _4: (u8, bool);
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const u8::MAX;
+ StorageLive(_3);
+ _3 = const 1_u8;
+- _4 = CheckedAdd(_2, _3);
+- assert(!move (_4.1: bool), "attempt to compute `{} + {}`, which would overflow", _2, _3) -> [success: bb1, unwind continue];
++ _4 = CheckedAdd(const u8::MAX, const 1_u8);
++ assert(!const true, "attempt to compute `{} + {}`, which would overflow", const u8::MAX, const 1_u8) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _1 = move (_4.0: u8);
++ _1 = const 0_u8;
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dataflow-const-prop/inherit_overflow.rs b/tests/mir-opt/dataflow-const-prop/inherit_overflow.rs
index 90349d527..964c58966 100644
--- a/tests/mir-opt/dataflow-const-prop/inherit_overflow.rs
+++ b/tests/mir-opt/dataflow-const-prop/inherit_overflow.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: DataflowConstProp
// compile-flags: -Zmir-enable-passes=+Inline
diff --git a/tests/mir-opt/dataflow-const-prop/issue_81605.f.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/issue_81605.f.DataflowConstProp.diff
index 5a8788497..3f65d3fff 100644
--- a/tests/mir-opt/dataflow-const-prop/issue_81605.f.DataflowConstProp.diff
+++ b/tests/mir-opt/dataflow-const-prop/issue_81605.f.DataflowConstProp.diff
@@ -2,34 +2,34 @@
+ // MIR for `f` after DataflowConstProp
fn f() -> usize {
- let mut _0: usize; // return place in scope 0 at $DIR/issue_81605.rs:+0:11: +0:16
- let mut _1: usize; // in scope 0 at $DIR/issue_81605.rs:+1:9: +1:33
- let mut _2: bool; // in scope 0 at $DIR/issue_81605.rs:+1:12: +1:16
+ let mut _0: usize;
+ let mut _1: usize;
+ let mut _2: bool;
bb0: {
- StorageLive(_1); // scope 0 at $DIR/issue_81605.rs:+1:9: +1:33
- StorageLive(_2); // scope 0 at $DIR/issue_81605.rs:+1:12: +1:16
- _2 = const true; // scope 0 at $DIR/issue_81605.rs:+1:12: +1:16
-- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/issue_81605.rs:+1:12: +1:16
-+ switchInt(const true) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/issue_81605.rs:+1:12: +1:16
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const true;
+- switchInt(move _2) -> [0: bb2, otherwise: bb1];
++ switchInt(const true) -> [0: bb2, otherwise: bb1];
}
bb1: {
- _1 = const 1_usize; // scope 0 at $DIR/issue_81605.rs:+1:19: +1:20
- goto -> bb3; // scope 0 at $DIR/issue_81605.rs:+1:9: +1:33
+ _1 = const 1_usize;
+ goto -> bb3;
}
bb2: {
- _1 = const 2_usize; // scope 0 at $DIR/issue_81605.rs:+1:30: +1:31
- goto -> bb3; // scope 0 at $DIR/issue_81605.rs:+1:9: +1:33
+ _1 = const 2_usize;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/issue_81605.rs:+1:32: +1:33
-- _0 = Add(const 1_usize, move _1); // scope 0 at $DIR/issue_81605.rs:+1:5: +1:33
-+ _0 = const 2_usize; // scope 0 at $DIR/issue_81605.rs:+1:5: +1:33
- StorageDead(_1); // scope 0 at $DIR/issue_81605.rs:+1:32: +1:33
- return; // scope 0 at $DIR/issue_81605.rs:+2:2: +2:2
+ StorageDead(_2);
+- _0 = Add(const 1_usize, move _1);
++ _0 = const 2_usize;
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.diff
deleted file mode 100644
index 70ef17afd..000000000
--- a/tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.diff
+++ /dev/null
@@ -1,55 +0,0 @@
-- // MIR for `main` before DataflowConstProp
-+ // MIR for `main` after DataflowConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/ref_without_sb.rs:+0:11: +0:11
- let mut _1: i32; // in scope 0 at $DIR/ref_without_sb.rs:+1:9: +1:14
- let _2: (); // in scope 0 at $DIR/ref_without_sb.rs:+2:5: +2:15
- let mut _3: &i32; // in scope 0 at $DIR/ref_without_sb.rs:+2:12: +2:14
- let _4: &i32; // in scope 0 at $DIR/ref_without_sb.rs:+2:12: +2:14
- let _5: (); // in scope 0 at $DIR/ref_without_sb.rs:+4:5: +4:20
- scope 1 {
- debug a => _1; // in scope 1 at $DIR/ref_without_sb.rs:+1:9: +1:14
- let _6: i32; // in scope 1 at $DIR/ref_without_sb.rs:+6:9: +6:10
- scope 2 {
- debug b => _6; // in scope 2 at $DIR/ref_without_sb.rs:+6:9: +6:10
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/ref_without_sb.rs:+1:9: +1:14
- _1 = const 0_i32; // scope 0 at $DIR/ref_without_sb.rs:+1:17: +1:18
- StorageLive(_2); // scope 1 at $DIR/ref_without_sb.rs:+2:5: +2:15
- StorageLive(_3); // scope 1 at $DIR/ref_without_sb.rs:+2:12: +2:14
- StorageLive(_4); // scope 1 at $DIR/ref_without_sb.rs:+2:12: +2:14
- _4 = &_1; // scope 1 at $DIR/ref_without_sb.rs:+2:12: +2:14
- _3 = &(*_4); // scope 1 at $DIR/ref_without_sb.rs:+2:12: +2:14
- _2 = escape::<i32>(move _3) -> bb1; // scope 1 at $DIR/ref_without_sb.rs:+2:5: +2:15
- // mir::Constant
- // + span: $DIR/ref_without_sb.rs:13:5: 13:11
- // + literal: Const { ty: for<'a> fn(&'a i32) {escape::<i32>}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_3); // scope 1 at $DIR/ref_without_sb.rs:+2:14: +2:15
- StorageDead(_4); // scope 1 at $DIR/ref_without_sb.rs:+2:15: +2:16
- StorageDead(_2); // scope 1 at $DIR/ref_without_sb.rs:+2:15: +2:16
- _1 = const 1_i32; // scope 1 at $DIR/ref_without_sb.rs:+3:5: +3:10
- StorageLive(_5); // scope 1 at $DIR/ref_without_sb.rs:+4:5: +4:20
- _5 = some_function() -> bb2; // scope 1 at $DIR/ref_without_sb.rs:+4:5: +4:20
- // mir::Constant
- // + span: $DIR/ref_without_sb.rs:15:5: 15:18
- // + literal: Const { ty: fn() {some_function}, val: Value(<ZST>) }
- }
-
- bb2: {
- StorageDead(_5); // scope 1 at $DIR/ref_without_sb.rs:+4:20: +4:21
- StorageLive(_6); // scope 1 at $DIR/ref_without_sb.rs:+6:9: +6:10
- _6 = _1; // scope 1 at $DIR/ref_without_sb.rs:+6:13: +6:14
- _0 = const (); // scope 0 at $DIR/ref_without_sb.rs:+0:11: +7:2
- StorageDead(_6); // scope 1 at $DIR/ref_without_sb.rs:+7:1: +7:2
- StorageDead(_1); // scope 0 at $DIR/ref_without_sb.rs:+7:1: +7:2
- return; // scope 0 at $DIR/ref_without_sb.rs:+7:2: +7:2
- }
- }
-
diff --git a/tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.panic-abort.diff b/tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.panic-abort.diff
new file mode 100644
index 000000000..fbbfd61bb
--- /dev/null
+++ b/tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.panic-abort.diff
@@ -0,0 +1,49 @@
+- // MIR for `main` before DataflowConstProp
++ // MIR for `main` after DataflowConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+ let _2: ();
+ let mut _3: &i32;
+ let _4: &i32;
+ let _5: ();
+ scope 1 {
+ debug a => _1;
+ let _6: i32;
+ scope 2 {
+ debug b => _6;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 0_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &_1;
+ _3 = &(*_4);
+ _2 = escape::<i32>(move _3) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageDead(_2);
+ _1 = const 1_i32;
+ StorageLive(_5);
+ _5 = some_function() -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ StorageDead(_5);
+ StorageLive(_6);
+ _6 = _1;
+ _0 = const ();
+ StorageDead(_6);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.panic-unwind.diff b/tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.panic-unwind.diff
new file mode 100644
index 000000000..4e1d26acf
--- /dev/null
+++ b/tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.panic-unwind.diff
@@ -0,0 +1,49 @@
+- // MIR for `main` before DataflowConstProp
++ // MIR for `main` after DataflowConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+ let _2: ();
+ let mut _3: &i32;
+ let _4: &i32;
+ let _5: ();
+ scope 1 {
+ debug a => _1;
+ let _6: i32;
+ scope 2 {
+ debug b => _6;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 0_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &_1;
+ _3 = &(*_4);
+ _2 = escape::<i32>(move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageDead(_2);
+ _1 = const 1_i32;
+ StorageLive(_5);
+ _5 = some_function() -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ StorageDead(_5);
+ StorageLive(_6);
+ _6 = _1;
+ _0 = const ();
+ StorageDead(_6);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dataflow-const-prop/ref_without_sb.rs b/tests/mir-opt/dataflow-const-prop/ref_without_sb.rs
index f53de3cf2..4ac0a5b32 100644
--- a/tests/mir-opt/dataflow-const-prop/ref_without_sb.rs
+++ b/tests/mir-opt/dataflow-const-prop/ref_without_sb.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: DataflowConstProp
#[inline(never)]
diff --git a/tests/mir-opt/dataflow-const-prop/repr_transparent.main.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/repr_transparent.main.DataflowConstProp.diff
index 8f045eedf..4b1a8d932 100644
--- a/tests/mir-opt/dataflow-const-prop/repr_transparent.main.DataflowConstProp.diff
+++ b/tests/mir-opt/dataflow-const-prop/repr_transparent.main.DataflowConstProp.diff
@@ -2,41 +2,41 @@
+ // MIR for `main` after DataflowConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/repr_transparent.rs:+0:11: +0:11
- let _1: I32; // in scope 0 at $DIR/repr_transparent.rs:+1:9: +1:10
- let mut _3: i32; // in scope 0 at $DIR/repr_transparent.rs:+2:17: +2:26
- let mut _4: i32; // in scope 0 at $DIR/repr_transparent.rs:+2:17: +2:20
- let mut _5: i32; // in scope 0 at $DIR/repr_transparent.rs:+2:23: +2:26
+ let mut _0: ();
+ let _1: I32;
+ let mut _3: i32;
+ let mut _4: i32;
+ let mut _5: i32;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/repr_transparent.rs:+1:9: +1:10
- let _2: I32; // in scope 1 at $DIR/repr_transparent.rs:+2:9: +2:10
+ debug x => _1;
+ let _2: I32;
scope 2 {
- debug y => _2; // in scope 2 at $DIR/repr_transparent.rs:+2:9: +2:10
+ debug y => _2;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/repr_transparent.rs:+1:9: +1:10
- _1 = I32(const 0_i32); // scope 0 at $DIR/repr_transparent.rs:+1:13: +1:19
- StorageLive(_2); // scope 1 at $DIR/repr_transparent.rs:+2:9: +2:10
- StorageLive(_3); // scope 1 at $DIR/repr_transparent.rs:+2:17: +2:26
- StorageLive(_4); // scope 1 at $DIR/repr_transparent.rs:+2:17: +2:20
-- _4 = (_1.0: i32); // scope 1 at $DIR/repr_transparent.rs:+2:17: +2:20
-+ _4 = const 0_i32; // scope 1 at $DIR/repr_transparent.rs:+2:17: +2:20
- StorageLive(_5); // scope 1 at $DIR/repr_transparent.rs:+2:23: +2:26
-- _5 = (_1.0: i32); // scope 1 at $DIR/repr_transparent.rs:+2:23: +2:26
-- _3 = Add(move _4, move _5); // scope 1 at $DIR/repr_transparent.rs:+2:17: +2:26
-+ _5 = const 0_i32; // scope 1 at $DIR/repr_transparent.rs:+2:23: +2:26
-+ _3 = const 0_i32; // scope 1 at $DIR/repr_transparent.rs:+2:17: +2:26
- StorageDead(_5); // scope 1 at $DIR/repr_transparent.rs:+2:25: +2:26
- StorageDead(_4); // scope 1 at $DIR/repr_transparent.rs:+2:25: +2:26
-- _2 = I32(move _3); // scope 1 at $DIR/repr_transparent.rs:+2:13: +2:27
-+ _2 = I32(const 0_i32); // scope 1 at $DIR/repr_transparent.rs:+2:13: +2:27
- StorageDead(_3); // scope 1 at $DIR/repr_transparent.rs:+2:26: +2:27
- _0 = const (); // scope 0 at $DIR/repr_transparent.rs:+0:11: +3:2
- StorageDead(_2); // scope 1 at $DIR/repr_transparent.rs:+3:1: +3:2
- StorageDead(_1); // scope 0 at $DIR/repr_transparent.rs:+3:1: +3:2
- return; // scope 0 at $DIR/repr_transparent.rs:+3:2: +3:2
+ StorageLive(_1);
+ _1 = I32(const 0_i32);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = (_1.0: i32);
++ _4 = const 0_i32;
+ StorageLive(_5);
+- _5 = (_1.0: i32);
+- _3 = Add(move _4, move _5);
++ _5 = const 0_i32;
++ _3 = const 0_i32;
+ StorageDead(_5);
+ StorageDead(_4);
+- _2 = I32(move _3);
++ _2 = I32(const 0_i32);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/dataflow-const-prop/self_assign.main.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/self_assign.main.DataflowConstProp.diff
index df08eff94..fbdbb3fa3 100644
--- a/tests/mir-opt/dataflow-const-prop/self_assign.main.DataflowConstProp.diff
+++ b/tests/mir-opt/dataflow-const-prop/self_assign.main.DataflowConstProp.diff
@@ -2,45 +2,45 @@
+ // MIR for `main` after DataflowConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/self_assign.rs:+0:11: +0:11
- let mut _1: i32; // in scope 0 at $DIR/self_assign.rs:+1:9: +1:14
- let mut _2: i32; // in scope 0 at $DIR/self_assign.rs:+2:9: +2:10
- let mut _3: i32; // in scope 0 at $DIR/self_assign.rs:+3:9: +3:10
- let mut _5: &i32; // in scope 0 at $DIR/self_assign.rs:+6:9: +6:10
- let mut _6: i32; // in scope 0 at $DIR/self_assign.rs:+7:9: +7:11
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _2: i32;
+ let mut _3: i32;
+ let mut _5: &i32;
+ let mut _6: i32;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/self_assign.rs:+1:9: +1:14
- let mut _4: &i32; // in scope 1 at $DIR/self_assign.rs:+5:9: +5:14
+ debug a => _1;
+ let mut _4: &i32;
scope 2 {
- debug b => _4; // in scope 2 at $DIR/self_assign.rs:+5:9: +5:14
+ debug b => _4;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/self_assign.rs:+1:9: +1:14
- _1 = const 0_i32; // scope 0 at $DIR/self_assign.rs:+1:17: +1:18
- StorageLive(_2); // scope 1 at $DIR/self_assign.rs:+2:9: +2:10
- _2 = _1; // scope 1 at $DIR/self_assign.rs:+2:9: +2:10
- _1 = Add(move _2, const 1_i32); // scope 1 at $DIR/self_assign.rs:+2:5: +2:14
- StorageDead(_2); // scope 1 at $DIR/self_assign.rs:+2:13: +2:14
- StorageLive(_3); // scope 1 at $DIR/self_assign.rs:+3:9: +3:10
- _3 = _1; // scope 1 at $DIR/self_assign.rs:+3:9: +3:10
- _1 = move _3; // scope 1 at $DIR/self_assign.rs:+3:5: +3:10
- StorageDead(_3); // scope 1 at $DIR/self_assign.rs:+3:9: +3:10
- StorageLive(_4); // scope 1 at $DIR/self_assign.rs:+5:9: +5:14
- _4 = &_1; // scope 1 at $DIR/self_assign.rs:+5:17: +5:19
- StorageLive(_5); // scope 2 at $DIR/self_assign.rs:+6:9: +6:10
- _5 = _4; // scope 2 at $DIR/self_assign.rs:+6:9: +6:10
- _4 = move _5; // scope 2 at $DIR/self_assign.rs:+6:5: +6:10
- StorageDead(_5); // scope 2 at $DIR/self_assign.rs:+6:9: +6:10
- StorageLive(_6); // scope 2 at $DIR/self_assign.rs:+7:9: +7:11
- _6 = (*_4); // scope 2 at $DIR/self_assign.rs:+7:9: +7:11
- _1 = move _6; // scope 2 at $DIR/self_assign.rs:+7:5: +7:11
- StorageDead(_6); // scope 2 at $DIR/self_assign.rs:+7:10: +7:11
- _0 = const (); // scope 0 at $DIR/self_assign.rs:+0:11: +8:2
- StorageDead(_4); // scope 1 at $DIR/self_assign.rs:+8:1: +8:2
- StorageDead(_1); // scope 0 at $DIR/self_assign.rs:+8:1: +8:2
- return; // scope 0 at $DIR/self_assign.rs:+8:2: +8:2
+ StorageLive(_1);
+ _1 = const 0_i32;
+ StorageLive(_2);
+ _2 = _1;
+ _1 = Add(move _2, const 1_i32);
+ StorageDead(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _1 = move _3;
+ StorageDead(_3);
+ StorageLive(_4);
+ _4 = &_1;
+ StorageLive(_5);
+ _5 = _4;
+ _4 = move _5;
+ StorageDead(_5);
+ StorageLive(_6);
+ _6 = (*_4);
+ _1 = move _6;
+ StorageDead(_6);
+ _0 = const ();
+ StorageDead(_4);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/dataflow-const-prop/self_assign_add.main.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/self_assign_add.main.DataflowConstProp.diff
index c09e4061e..e2468a964 100644
--- a/tests/mir-opt/dataflow-const-prop/self_assign_add.main.DataflowConstProp.diff
+++ b/tests/mir-opt/dataflow-const-prop/self_assign_add.main.DataflowConstProp.diff
@@ -2,22 +2,22 @@
+ // MIR for `main` after DataflowConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/self_assign_add.rs:+0:11: +0:11
- let mut _1: i32; // in scope 0 at $DIR/self_assign_add.rs:+1:9: +1:14
+ let mut _0: ();
+ let mut _1: i32;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/self_assign_add.rs:+1:9: +1:14
+ debug a => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/self_assign_add.rs:+1:9: +1:14
- _1 = const 0_i32; // scope 0 at $DIR/self_assign_add.rs:+1:17: +1:18
-- _1 = Add(_1, const 1_i32); // scope 1 at $DIR/self_assign_add.rs:+2:5: +2:11
-- _1 = Add(_1, const 1_i32); // scope 1 at $DIR/self_assign_add.rs:+3:5: +3:11
-+ _1 = const 1_i32; // scope 1 at $DIR/self_assign_add.rs:+2:5: +2:11
-+ _1 = const 2_i32; // scope 1 at $DIR/self_assign_add.rs:+3:5: +3:11
- _0 = const (); // scope 0 at $DIR/self_assign_add.rs:+0:11: +4:2
- StorageDead(_1); // scope 0 at $DIR/self_assign_add.rs:+4:1: +4:2
- return; // scope 0 at $DIR/self_assign_add.rs:+4:2: +4:2
+ StorageLive(_1);
+ _1 = const 0_i32;
+- _1 = Add(_1, const 1_i32);
+- _1 = Add(_1, const 1_i32);
++ _1 = const 1_i32;
++ _1 = const 2_i32;
+ _0 = const ();
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.diff
deleted file mode 100644
index 6ca569f3d..000000000
--- a/tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.diff
+++ /dev/null
@@ -1,54 +0,0 @@
-- // MIR for `main` before DataflowConstProp
-+ // MIR for `main` after DataflowConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/sibling_ptr.rs:+0:11: +0:11
- let mut _1: (u8, u8); // in scope 0 at $DIR/sibling_ptr.rs:+1:9: +1:14
- let _2: (); // in scope 0 at $DIR/sibling_ptr.rs:+2:5: +5:6
- let mut _4: *mut u8; // in scope 0 at $DIR/sibling_ptr.rs:+4:10: +4:18
- let mut _5: *mut u8; // in scope 0 at $DIR/sibling_ptr.rs:+4:10: +4:11
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/sibling_ptr.rs:+1:9: +1:14
- let _6: u8; // in scope 1 at $DIR/sibling_ptr.rs:+6:9: +6:11
- scope 2 {
- let _3: *mut u8; // in scope 2 at $DIR/sibling_ptr.rs:+3:13: +3:14
- scope 3 {
- debug p => _3; // in scope 3 at $DIR/sibling_ptr.rs:+3:13: +3:14
- }
- }
- scope 4 {
- debug x1 => _6; // in scope 4 at $DIR/sibling_ptr.rs:+6:9: +6:11
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/sibling_ptr.rs:+1:9: +1:14
- _1 = (const 0_u8, const 0_u8); // scope 0 at $DIR/sibling_ptr.rs:+1:27: +1:33
- StorageLive(_2); // scope 1 at $DIR/sibling_ptr.rs:+2:5: +5:6
- StorageLive(_3); // scope 2 at $DIR/sibling_ptr.rs:+3:13: +3:14
- _3 = &raw mut (_1.0: u8); // scope 2 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- StorageLive(_4); // scope 3 at $DIR/sibling_ptr.rs:+4:10: +4:18
- StorageLive(_5); // scope 3 at $DIR/sibling_ptr.rs:+4:10: +4:11
- _5 = _3; // scope 3 at $DIR/sibling_ptr.rs:+4:10: +4:11
- _4 = ptr::mut_ptr::<impl *mut u8>::add(move _5, const 1_usize) -> bb1; // scope 3 at $DIR/sibling_ptr.rs:+4:10: +4:18
- // mir::Constant
- // + span: $DIR/sibling_ptr.rs:16:12: 16:15
- // + literal: Const { ty: unsafe fn(*mut u8, usize) -> *mut u8 {ptr::mut_ptr::<impl *mut u8>::add}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_5); // scope 3 at $DIR/sibling_ptr.rs:+4:17: +4:18
- (*_4) = const 1_u8; // scope 3 at $DIR/sibling_ptr.rs:+4:9: +4:22
- StorageDead(_4); // scope 3 at $DIR/sibling_ptr.rs:+4:22: +4:23
- _2 = const (); // scope 2 at $DIR/sibling_ptr.rs:+2:5: +5:6
- StorageDead(_3); // scope 2 at $DIR/sibling_ptr.rs:+5:5: +5:6
- StorageDead(_2); // scope 1 at $DIR/sibling_ptr.rs:+5:5: +5:6
- StorageLive(_6); // scope 1 at $DIR/sibling_ptr.rs:+6:9: +6:11
- _6 = (_1.1: u8); // scope 1 at $DIR/sibling_ptr.rs:+6:14: +6:17
- _0 = const (); // scope 0 at $DIR/sibling_ptr.rs:+0:11: +7:2
- StorageDead(_6); // scope 1 at $DIR/sibling_ptr.rs:+7:1: +7:2
- StorageDead(_1); // scope 0 at $DIR/sibling_ptr.rs:+7:1: +7:2
- return; // scope 0 at $DIR/sibling_ptr.rs:+7:2: +7:2
- }
- }
-
diff --git a/tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.panic-abort.diff b/tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.panic-abort.diff
new file mode 100644
index 000000000..cc96cbef2
--- /dev/null
+++ b/tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.panic-abort.diff
@@ -0,0 +1,51 @@
+- // MIR for `main` before DataflowConstProp
++ // MIR for `main` after DataflowConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: (u8, u8);
+ let _2: ();
+ let mut _4: *mut u8;
+ let mut _5: *mut u8;
+ scope 1 {
+ debug x => _1;
+ let _6: u8;
+ scope 2 {
+ let _3: *mut u8;
+ scope 3 {
+ debug p => _3;
+ }
+ }
+ scope 4 {
+ debug x1 => _6;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = (const 0_u8, const 0_u8);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &raw mut (_1.0: u8);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _3;
+ _4 = ptr::mut_ptr::<impl *mut u8>::add(move _5, const 1_usize) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ (*_4) = const 1_u8;
+ StorageDead(_4);
+ _2 = const ();
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageLive(_6);
+ _6 = (_1.1: u8);
+ _0 = const ();
+ StorageDead(_6);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.panic-unwind.diff b/tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.panic-unwind.diff
new file mode 100644
index 000000000..ebeb8619d
--- /dev/null
+++ b/tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.panic-unwind.diff
@@ -0,0 +1,51 @@
+- // MIR for `main` before DataflowConstProp
++ // MIR for `main` after DataflowConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: (u8, u8);
+ let _2: ();
+ let mut _4: *mut u8;
+ let mut _5: *mut u8;
+ scope 1 {
+ debug x => _1;
+ let _6: u8;
+ scope 2 {
+ let _3: *mut u8;
+ scope 3 {
+ debug p => _3;
+ }
+ }
+ scope 4 {
+ debug x1 => _6;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = (const 0_u8, const 0_u8);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &raw mut (_1.0: u8);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _3;
+ _4 = ptr::mut_ptr::<impl *mut u8>::add(move _5, const 1_usize) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ (*_4) = const 1_u8;
+ StorageDead(_4);
+ _2 = const ();
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageLive(_6);
+ _6 = (_1.1: u8);
+ _0 = const ();
+ StorageDead(_6);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dataflow-const-prop/sibling_ptr.rs b/tests/mir-opt/dataflow-const-prop/sibling_ptr.rs
index 81fc3c2f4..87842f347 100644
--- a/tests/mir-opt/dataflow-const-prop/sibling_ptr.rs
+++ b/tests/mir-opt/dataflow-const-prop/sibling_ptr.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// This attempts to modify `x.1` via a pointer derived from `addr_of_mut!(x.0)`.
// According to Miri, that is UB. However, T-opsem has not finalized that
// decision and as such we cannot rely on it in optimizations. Consequently,
diff --git a/tests/mir-opt/dataflow-const-prop/struct.main.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/struct.main.DataflowConstProp.diff
index 53c62c081..914bc8ac4 100644
--- a/tests/mir-opt/dataflow-const-prop/struct.main.DataflowConstProp.diff
+++ b/tests/mir-opt/dataflow-const-prop/struct.main.DataflowConstProp.diff
@@ -2,50 +2,50 @@
+ // MIR for `main` after DataflowConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/struct.rs:+0:11: +0:11
- let mut _1: S; // in scope 0 at $DIR/struct.rs:+1:9: +1:14
- let mut _3: i32; // in scope 0 at $DIR/struct.rs:+2:13: +2:16
- let mut _5: i32; // in scope 0 at $DIR/struct.rs:+4:13: +4:14
- let mut _6: i32; // in scope 0 at $DIR/struct.rs:+4:17: +4:20
+ let mut _0: ();
+ let mut _1: S;
+ let mut _3: i32;
+ let mut _5: i32;
+ let mut _6: i32;
scope 1 {
- debug s => _1; // in scope 1 at $DIR/struct.rs:+1:9: +1:14
- let _2: i32; // in scope 1 at $DIR/struct.rs:+2:9: +2:10
+ debug s => _1;
+ let _2: i32;
scope 2 {
- debug a => _2; // in scope 2 at $DIR/struct.rs:+2:9: +2:10
- let _4: i32; // in scope 2 at $DIR/struct.rs:+4:9: +4:10
+ debug a => _2;
+ let _4: i32;
scope 3 {
- debug b => _4; // in scope 3 at $DIR/struct.rs:+4:9: +4:10
+ debug b => _4;
}
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/struct.rs:+1:9: +1:14
- _1 = S(const 1_i32); // scope 0 at $DIR/struct.rs:+1:17: +1:21
- StorageLive(_2); // scope 1 at $DIR/struct.rs:+2:9: +2:10
- StorageLive(_3); // scope 1 at $DIR/struct.rs:+2:13: +2:16
-- _3 = (_1.0: i32); // scope 1 at $DIR/struct.rs:+2:13: +2:16
-- _2 = Add(move _3, const 2_i32); // scope 1 at $DIR/struct.rs:+2:13: +2:20
-+ _3 = const 1_i32; // scope 1 at $DIR/struct.rs:+2:13: +2:16
-+ _2 = const 3_i32; // scope 1 at $DIR/struct.rs:+2:13: +2:20
- StorageDead(_3); // scope 1 at $DIR/struct.rs:+2:19: +2:20
- (_1.0: i32) = const 3_i32; // scope 2 at $DIR/struct.rs:+3:5: +3:12
- StorageLive(_4); // scope 2 at $DIR/struct.rs:+4:9: +4:10
- StorageLive(_5); // scope 2 at $DIR/struct.rs:+4:13: +4:14
-- _5 = _2; // scope 2 at $DIR/struct.rs:+4:13: +4:14
-+ _5 = const 3_i32; // scope 2 at $DIR/struct.rs:+4:13: +4:14
- StorageLive(_6); // scope 2 at $DIR/struct.rs:+4:17: +4:20
-- _6 = (_1.0: i32); // scope 2 at $DIR/struct.rs:+4:17: +4:20
-- _4 = Add(move _5, move _6); // scope 2 at $DIR/struct.rs:+4:13: +4:20
-+ _6 = const 3_i32; // scope 2 at $DIR/struct.rs:+4:17: +4:20
-+ _4 = const 6_i32; // scope 2 at $DIR/struct.rs:+4:13: +4:20
- StorageDead(_6); // scope 2 at $DIR/struct.rs:+4:19: +4:20
- StorageDead(_5); // scope 2 at $DIR/struct.rs:+4:19: +4:20
- _0 = const (); // scope 0 at $DIR/struct.rs:+0:11: +5:2
- StorageDead(_4); // scope 2 at $DIR/struct.rs:+5:1: +5:2
- StorageDead(_2); // scope 1 at $DIR/struct.rs:+5:1: +5:2
- StorageDead(_1); // scope 0 at $DIR/struct.rs:+5:1: +5:2
- return; // scope 0 at $DIR/struct.rs:+5:2: +5:2
+ StorageLive(_1);
+ _1 = S(const 1_i32);
+ StorageLive(_2);
+ StorageLive(_3);
+- _3 = (_1.0: i32);
+- _2 = Add(move _3, const 2_i32);
++ _3 = const 1_i32;
++ _2 = const 3_i32;
+ StorageDead(_3);
+ (_1.0: i32) = const 3_i32;
+ StorageLive(_4);
+ StorageLive(_5);
+- _5 = _2;
++ _5 = const 3_i32;
+ StorageLive(_6);
+- _6 = (_1.0: i32);
+- _4 = Add(move _5, move _6);
++ _6 = const 3_i32;
++ _4 = const 6_i32;
+ StorageDead(_6);
+ StorageDead(_5);
+ _0 = const ();
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.diff
deleted file mode 100644
index 9854beaeb..000000000
--- a/tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.diff
+++ /dev/null
@@ -1,40 +0,0 @@
-- // MIR for `main` before DataflowConstProp
-+ // MIR for `main` after DataflowConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/terminator.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/terminator.rs:+1:9: +1:10
- let _2: (); // in scope 0 at $DIR/terminator.rs:+3:5: +3:15
- let mut _3: i32; // in scope 0 at $DIR/terminator.rs:+3:9: +3:14
- let mut _4: i32; // in scope 0 at $DIR/terminator.rs:+3:9: +3:10
- scope 1 {
- debug a => _1; // in scope 1 at $DIR/terminator.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/terminator.rs:+1:9: +1:10
- _1 = const 1_i32; // scope 0 at $DIR/terminator.rs:+1:13: +1:14
- StorageLive(_2); // scope 1 at $DIR/terminator.rs:+3:5: +3:15
- StorageLive(_3); // scope 1 at $DIR/terminator.rs:+3:9: +3:14
- StorageLive(_4); // scope 1 at $DIR/terminator.rs:+3:9: +3:10
-- _4 = _1; // scope 1 at $DIR/terminator.rs:+3:9: +3:10
-- _3 = Add(move _4, const 1_i32); // scope 1 at $DIR/terminator.rs:+3:9: +3:14
-+ _4 = const 1_i32; // scope 1 at $DIR/terminator.rs:+3:9: +3:10
-+ _3 = const 2_i32; // scope 1 at $DIR/terminator.rs:+3:9: +3:14
- StorageDead(_4); // scope 1 at $DIR/terminator.rs:+3:13: +3:14
-- _2 = foo(move _3) -> bb1; // scope 1 at $DIR/terminator.rs:+3:5: +3:15
-+ _2 = foo(const 2_i32) -> bb1; // scope 1 at $DIR/terminator.rs:+3:5: +3:15
- // mir::Constant
- // + span: $DIR/terminator.rs:10:5: 10:8
- // + literal: Const { ty: fn(i32) {foo}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_3); // scope 1 at $DIR/terminator.rs:+3:14: +3:15
- StorageDead(_2); // scope 1 at $DIR/terminator.rs:+3:15: +3:16
- _0 = const (); // scope 0 at $DIR/terminator.rs:+0:11: +4:2
- StorageDead(_1); // scope 0 at $DIR/terminator.rs:+4:1: +4:2
- return; // scope 0 at $DIR/terminator.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.panic-abort.diff b/tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.panic-abort.diff
new file mode 100644
index 000000000..c0f378cc2
--- /dev/null
+++ b/tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.panic-abort.diff
@@ -0,0 +1,37 @@
+- // MIR for `main` before DataflowConstProp
++ // MIR for `main` after DataflowConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let _2: ();
+ let mut _3: i32;
+ let mut _4: i32;
+ scope 1 {
+ debug a => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 1_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = _1;
+- _3 = Add(move _4, const 1_i32);
++ _4 = const 1_i32;
++ _3 = const 2_i32;
+ StorageDead(_4);
+- _2 = foo(move _3) -> [return: bb1, unwind unreachable];
++ _2 = foo(const 2_i32) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.panic-unwind.diff b/tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.panic-unwind.diff
new file mode 100644
index 000000000..395620fec
--- /dev/null
+++ b/tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.panic-unwind.diff
@@ -0,0 +1,37 @@
+- // MIR for `main` before DataflowConstProp
++ // MIR for `main` after DataflowConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let _2: ();
+ let mut _3: i32;
+ let mut _4: i32;
+ scope 1 {
+ debug a => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 1_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = _1;
+- _3 = Add(move _4, const 1_i32);
++ _4 = const 1_i32;
++ _3 = const 2_i32;
+ StorageDead(_4);
+- _2 = foo(move _3) -> [return: bb1, unwind continue];
++ _2 = foo(const 2_i32) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dataflow-const-prop/terminator.rs b/tests/mir-opt/dataflow-const-prop/terminator.rs
index 4f001df35..114dbeca5 100644
--- a/tests/mir-opt/dataflow-const-prop/terminator.rs
+++ b/tests/mir-opt/dataflow-const-prop/terminator.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: DataflowConstProp
fn foo(n: i32) {}
diff --git a/tests/mir-opt/dataflow-const-prop/tuple.main.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/tuple.main.DataflowConstProp.diff
index 8ce4ce4ba..5e385d21e 100644
--- a/tests/mir-opt/dataflow-const-prop/tuple.main.DataflowConstProp.diff
+++ b/tests/mir-opt/dataflow-const-prop/tuple.main.DataflowConstProp.diff
@@ -2,70 +2,70 @@
+ // MIR for `main` after DataflowConstProp
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/tuple.rs:+0:11: +0:11
- let mut _1: (i32, i32); // in scope 0 at $DIR/tuple.rs:+1:9: +1:14
- let mut _3: i32; // in scope 0 at $DIR/tuple.rs:+2:13: +2:22
- let mut _4: i32; // in scope 0 at $DIR/tuple.rs:+2:13: +2:16
- let mut _5: i32; // in scope 0 at $DIR/tuple.rs:+2:19: +2:22
- let mut _7: i32; // in scope 0 at $DIR/tuple.rs:+4:13: +4:22
- let mut _8: i32; // in scope 0 at $DIR/tuple.rs:+4:13: +4:16
- let mut _9: i32; // in scope 0 at $DIR/tuple.rs:+4:19: +4:22
- let mut _10: i32; // in scope 0 at $DIR/tuple.rs:+4:25: +4:26
+ let mut _0: ();
+ let mut _1: (i32, i32);
+ let mut _3: i32;
+ let mut _4: i32;
+ let mut _5: i32;
+ let mut _7: i32;
+ let mut _8: i32;
+ let mut _9: i32;
+ let mut _10: i32;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/tuple.rs:+1:9: +1:14
- let _2: i32; // in scope 1 at $DIR/tuple.rs:+2:9: +2:10
+ debug a => _1;
+ let _2: i32;
scope 2 {
- debug b => _2; // in scope 2 at $DIR/tuple.rs:+2:9: +2:10
- let _6: i32; // in scope 2 at $DIR/tuple.rs:+4:9: +4:10
+ debug b => _2;
+ let _6: i32;
scope 3 {
- debug c => _6; // in scope 3 at $DIR/tuple.rs:+4:9: +4:10
+ debug c => _6;
}
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/tuple.rs:+1:9: +1:14
- _1 = (const 1_i32, const 2_i32); // scope 0 at $DIR/tuple.rs:+1:17: +1:23
- StorageLive(_2); // scope 1 at $DIR/tuple.rs:+2:9: +2:10
- StorageLive(_3); // scope 1 at $DIR/tuple.rs:+2:13: +2:22
- StorageLive(_4); // scope 1 at $DIR/tuple.rs:+2:13: +2:16
-- _4 = (_1.0: i32); // scope 1 at $DIR/tuple.rs:+2:13: +2:16
-+ _4 = const 1_i32; // scope 1 at $DIR/tuple.rs:+2:13: +2:16
- StorageLive(_5); // scope 1 at $DIR/tuple.rs:+2:19: +2:22
-- _5 = (_1.1: i32); // scope 1 at $DIR/tuple.rs:+2:19: +2:22
-- _3 = Add(move _4, move _5); // scope 1 at $DIR/tuple.rs:+2:13: +2:22
-+ _5 = const 2_i32; // scope 1 at $DIR/tuple.rs:+2:19: +2:22
-+ _3 = const 3_i32; // scope 1 at $DIR/tuple.rs:+2:13: +2:22
- StorageDead(_5); // scope 1 at $DIR/tuple.rs:+2:21: +2:22
- StorageDead(_4); // scope 1 at $DIR/tuple.rs:+2:21: +2:22
-- _2 = Add(move _3, const 3_i32); // scope 1 at $DIR/tuple.rs:+2:13: +2:26
-+ _2 = const 6_i32; // scope 1 at $DIR/tuple.rs:+2:13: +2:26
- StorageDead(_3); // scope 1 at $DIR/tuple.rs:+2:25: +2:26
- _1 = (const 2_i32, const 3_i32); // scope 2 at $DIR/tuple.rs:+3:5: +3:15
- StorageLive(_6); // scope 2 at $DIR/tuple.rs:+4:9: +4:10
- StorageLive(_7); // scope 2 at $DIR/tuple.rs:+4:13: +4:22
- StorageLive(_8); // scope 2 at $DIR/tuple.rs:+4:13: +4:16
-- _8 = (_1.0: i32); // scope 2 at $DIR/tuple.rs:+4:13: +4:16
-+ _8 = const 2_i32; // scope 2 at $DIR/tuple.rs:+4:13: +4:16
- StorageLive(_9); // scope 2 at $DIR/tuple.rs:+4:19: +4:22
-- _9 = (_1.1: i32); // scope 2 at $DIR/tuple.rs:+4:19: +4:22
-- _7 = Add(move _8, move _9); // scope 2 at $DIR/tuple.rs:+4:13: +4:22
-+ _9 = const 3_i32; // scope 2 at $DIR/tuple.rs:+4:19: +4:22
-+ _7 = const 5_i32; // scope 2 at $DIR/tuple.rs:+4:13: +4:22
- StorageDead(_9); // scope 2 at $DIR/tuple.rs:+4:21: +4:22
- StorageDead(_8); // scope 2 at $DIR/tuple.rs:+4:21: +4:22
- StorageLive(_10); // scope 2 at $DIR/tuple.rs:+4:25: +4:26
-- _10 = _2; // scope 2 at $DIR/tuple.rs:+4:25: +4:26
-- _6 = Add(move _7, move _10); // scope 2 at $DIR/tuple.rs:+4:13: +4:26
-+ _10 = const 6_i32; // scope 2 at $DIR/tuple.rs:+4:25: +4:26
-+ _6 = const 11_i32; // scope 2 at $DIR/tuple.rs:+4:13: +4:26
- StorageDead(_10); // scope 2 at $DIR/tuple.rs:+4:25: +4:26
- StorageDead(_7); // scope 2 at $DIR/tuple.rs:+4:25: +4:26
- _0 = const (); // scope 0 at $DIR/tuple.rs:+0:11: +5:2
- StorageDead(_6); // scope 2 at $DIR/tuple.rs:+5:1: +5:2
- StorageDead(_2); // scope 1 at $DIR/tuple.rs:+5:1: +5:2
- StorageDead(_1); // scope 0 at $DIR/tuple.rs:+5:1: +5:2
- return; // scope 0 at $DIR/tuple.rs:+5:2: +5:2
+ StorageLive(_1);
+ _1 = (const 1_i32, const 2_i32);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = (_1.0: i32);
++ _4 = const 1_i32;
+ StorageLive(_5);
+- _5 = (_1.1: i32);
+- _3 = Add(move _4, move _5);
++ _5 = const 2_i32;
++ _3 = const 3_i32;
+ StorageDead(_5);
+ StorageDead(_4);
+- _2 = Add(move _3, const 3_i32);
++ _2 = const 6_i32;
+ StorageDead(_3);
+ _1 = (const 2_i32, const 3_i32);
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+- _8 = (_1.0: i32);
++ _8 = const 2_i32;
+ StorageLive(_9);
+- _9 = (_1.1: i32);
+- _7 = Add(move _8, move _9);
++ _9 = const 3_i32;
++ _7 = const 5_i32;
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageLive(_10);
+- _10 = _2;
+- _6 = Add(move _7, move _10);
++ _10 = const 6_i32;
++ _6 = const 11_i32;
+ StorageDead(_10);
+ StorageDead(_7);
+ _0 = const ();
+ StorageDead(_6);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.diff b/tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.diff
deleted file mode 100644
index 2776ff51d..000000000
--- a/tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.diff
+++ /dev/null
@@ -1,76 +0,0 @@
-- // MIR for `cycle` before DeadStoreElimination
-+ // MIR for `cycle` after DeadStoreElimination
-
- fn cycle(_1: i32, _2: i32, _3: i32) -> () {
- debug x => _1; // in scope 0 at $DIR/cycle.rs:+0:10: +0:15
- debug y => _2; // in scope 0 at $DIR/cycle.rs:+0:22: +0:27
- debug z => _3; // in scope 0 at $DIR/cycle.rs:+0:34: +0:39
- let mut _0: (); // return place in scope 0 at $DIR/cycle.rs:+0:46: +0:46
-- let mut _4: (); // in scope 0 at $DIR/cycle.rs:+0:1: +9:2
-- let mut _5: bool; // in scope 0 at $DIR/cycle.rs:+3:11: +3:17
-- let _6: i32; // in scope 0 at $DIR/cycle.rs:+4:13: +4:17
-- let mut _7: i32; // in scope 0 at $DIR/cycle.rs:+5:13: +5:14
-- let mut _8: i32; // in scope 0 at $DIR/cycle.rs:+6:13: +6:14
-- let mut _9: i32; // in scope 0 at $DIR/cycle.rs:+7:13: +7:17
-- let mut _10: !; // in scope 0 at $DIR/cycle.rs:+3:5: +8:6
-- let _11: (); // in scope 0 at $DIR/cycle.rs:+3:5: +8:6
-- let mut _12: !; // in scope 0 at $DIR/cycle.rs:+3:5: +8:6
-+ let mut _4: bool; // in scope 0 at $DIR/cycle.rs:+3:11: +3:17
-+ let _5: i32; // in scope 0 at $DIR/cycle.rs:+4:13: +4:17
- scope 1 {
-- debug temp => _6; // in scope 1 at $DIR/cycle.rs:+4:13: +4:17
-+ debug temp => _5; // in scope 1 at $DIR/cycle.rs:+4:13: +4:17
- }
-
- bb0: {
- goto -> bb1; // scope 0 at $DIR/cycle.rs:+3:5: +8:6
- }
-
- bb1: {
-- StorageLive(_5); // scope 0 at $DIR/cycle.rs:+3:11: +3:17
-- _5 = cond() -> bb2; // scope 0 at $DIR/cycle.rs:+3:11: +3:17
-+ StorageLive(_4); // scope 0 at $DIR/cycle.rs:+3:11: +3:17
-+ _4 = cond() -> bb2; // scope 0 at $DIR/cycle.rs:+3:11: +3:17
- // mir::Constant
- // + span: $DIR/cycle.rs:13:11: 13:15
- // + literal: Const { ty: fn() -> bool {cond}, val: Value(<ZST>) }
- }
-
- bb2: {
-- switchInt(move _5) -> [0: bb4, otherwise: bb3]; // scope 0 at $DIR/cycle.rs:+3:11: +3:17
-+ switchInt(move _4) -> [0: bb4, otherwise: bb3]; // scope 0 at $DIR/cycle.rs:+3:11: +3:17
- }
-
- bb3: {
-- StorageLive(_6); // scope 0 at $DIR/cycle.rs:+4:13: +4:17
-- _6 = _3; // scope 0 at $DIR/cycle.rs:+4:20: +4:21
-- StorageLive(_7); // scope 1 at $DIR/cycle.rs:+5:13: +5:14
-- _7 = _2; // scope 1 at $DIR/cycle.rs:+5:13: +5:14
-- _3 = move _7; // scope 1 at $DIR/cycle.rs:+5:9: +5:14
-- StorageDead(_7); // scope 1 at $DIR/cycle.rs:+5:13: +5:14
-- StorageLive(_8); // scope 1 at $DIR/cycle.rs:+6:13: +6:14
-- _8 = _1; // scope 1 at $DIR/cycle.rs:+6:13: +6:14
-- _2 = move _8; // scope 1 at $DIR/cycle.rs:+6:9: +6:14
-- StorageDead(_8); // scope 1 at $DIR/cycle.rs:+6:13: +6:14
-- StorageLive(_9); // scope 1 at $DIR/cycle.rs:+7:13: +7:17
-- _9 = _6; // scope 1 at $DIR/cycle.rs:+7:13: +7:17
-- _1 = move _9; // scope 1 at $DIR/cycle.rs:+7:9: +7:17
-- StorageDead(_9); // scope 1 at $DIR/cycle.rs:+7:16: +7:17
-- _4 = const (); // scope 0 at $DIR/cycle.rs:+3:18: +8:6
-- StorageDead(_6); // scope 0 at $DIR/cycle.rs:+8:5: +8:6
-+ StorageLive(_5); // scope 0 at $DIR/cycle.rs:+4:13: +4:17
- StorageDead(_5); // scope 0 at $DIR/cycle.rs:+8:5: +8:6
-+ StorageDead(_4); // scope 0 at $DIR/cycle.rs:+8:5: +8:6
- goto -> bb1; // scope 0 at $DIR/cycle.rs:+3:5: +8:6
- }
-
- bb4: {
-- StorageLive(_11); // scope 0 at $DIR/cycle.rs:+3:5: +8:6
- _0 = const (); // scope 0 at $DIR/cycle.rs:+3:5: +8:6
-- StorageDead(_11); // scope 0 at $DIR/cycle.rs:+8:5: +8:6
-- StorageDead(_5); // scope 0 at $DIR/cycle.rs:+8:5: +8:6
-+ StorageDead(_4); // scope 0 at $DIR/cycle.rs:+8:5: +8:6
- return; // scope 0 at $DIR/cycle.rs:+9:2: +9:2
- }
- }
-
diff --git a/tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.panic-abort.diff b/tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.panic-abort.diff
new file mode 100644
index 000000000..6221d4780
--- /dev/null
+++ b/tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.panic-abort.diff
@@ -0,0 +1,73 @@
+- // MIR for `cycle` before DeadStoreElimination
++ // MIR for `cycle` after DeadStoreElimination
+
+ fn cycle(_1: i32, _2: i32, _3: i32) -> () {
+ debug x => _1;
+ debug y => _2;
+ debug z => _3;
+ let mut _0: ();
+- let mut _4: ();
+- let mut _5: bool;
+- let _6: i32;
+- let mut _7: i32;
+- let mut _8: i32;
+- let mut _9: i32;
+- let mut _10: !;
+- let _11: ();
+- let mut _12: !;
++ let mut _4: bool;
++ let _5: i32;
+ scope 1 {
+- debug temp => _6;
++ debug temp => _5;
+ }
+
+ bb0: {
+ goto -> bb1;
+ }
+
+ bb1: {
+- StorageLive(_5);
+- _5 = cond() -> [return: bb2, unwind unreachable];
++ StorageLive(_4);
++ _4 = cond() -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+- switchInt(move _5) -> [0: bb4, otherwise: bb3];
++ switchInt(move _4) -> [0: bb4, otherwise: bb3];
+ }
+
+ bb3: {
+- StorageLive(_6);
+- _6 = _3;
+- StorageLive(_7);
+- _7 = _2;
+- _3 = move _7;
+- StorageDead(_7);
+- StorageLive(_8);
+- _8 = _1;
+- _2 = move _8;
+- StorageDead(_8);
+- StorageLive(_9);
+- _9 = _6;
+- _1 = move _9;
+- StorageDead(_9);
+- _4 = const ();
+- StorageDead(_6);
++ StorageLive(_5);
+ StorageDead(_5);
++ StorageDead(_4);
+ goto -> bb1;
+ }
+
+ bb4: {
+- StorageLive(_11);
+ _0 = const ();
+- StorageDead(_11);
+- StorageDead(_5);
++ StorageDead(_4);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.panic-unwind.diff b/tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.panic-unwind.diff
new file mode 100644
index 000000000..4b922e05e
--- /dev/null
+++ b/tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.panic-unwind.diff
@@ -0,0 +1,73 @@
+- // MIR for `cycle` before DeadStoreElimination
++ // MIR for `cycle` after DeadStoreElimination
+
+ fn cycle(_1: i32, _2: i32, _3: i32) -> () {
+ debug x => _1;
+ debug y => _2;
+ debug z => _3;
+ let mut _0: ();
+- let mut _4: ();
+- let mut _5: bool;
+- let _6: i32;
+- let mut _7: i32;
+- let mut _8: i32;
+- let mut _9: i32;
+- let mut _10: !;
+- let _11: ();
+- let mut _12: !;
++ let mut _4: bool;
++ let _5: i32;
+ scope 1 {
+- debug temp => _6;
++ debug temp => _5;
+ }
+
+ bb0: {
+ goto -> bb1;
+ }
+
+ bb1: {
+- StorageLive(_5);
+- _5 = cond() -> [return: bb2, unwind continue];
++ StorageLive(_4);
++ _4 = cond() -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+- switchInt(move _5) -> [0: bb4, otherwise: bb3];
++ switchInt(move _4) -> [0: bb4, otherwise: bb3];
+ }
+
+ bb3: {
+- StorageLive(_6);
+- _6 = _3;
+- StorageLive(_7);
+- _7 = _2;
+- _3 = move _7;
+- StorageDead(_7);
+- StorageLive(_8);
+- _8 = _1;
+- _2 = move _8;
+- StorageDead(_8);
+- StorageLive(_9);
+- _9 = _6;
+- _1 = move _9;
+- StorageDead(_9);
+- _4 = const ();
+- StorageDead(_6);
++ StorageLive(_5);
+ StorageDead(_5);
++ StorageDead(_4);
+ goto -> bb1;
+ }
+
+ bb4: {
+- StorageLive(_11);
+ _0 = const ();
+- StorageDead(_11);
+- StorageDead(_5);
++ StorageDead(_4);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dead-store-elimination/cycle.rs b/tests/mir-opt/dead-store-elimination/cycle.rs
index 570bfe84d..cd34fe96e 100644
--- a/tests/mir-opt/dead-store-elimination/cycle.rs
+++ b/tests/mir-opt/dead-store-elimination/cycle.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: DeadStoreElimination
#[inline(never)]
diff --git a/tests/mir-opt/dead-store-elimination/place_mention.main.DeadStoreElimination.diff b/tests/mir-opt/dead-store-elimination/place_mention.main.DeadStoreElimination.diff
index 761c074ed..213051877 100644
--- a/tests/mir-opt/dead-store-elimination/place_mention.main.DeadStoreElimination.diff
+++ b/tests/mir-opt/dead-store-elimination/place_mention.main.DeadStoreElimination.diff
@@ -2,24 +2,18 @@
+ // MIR for `main` after DeadStoreElimination
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/place_mention.rs:+0:11: +0:11
- let mut _1: (&str, &str); // in scope 0 at $DIR/place_mention.rs:+3:18: +3:36
+ let mut _0: ();
+ let mut _1: (&str, &str);
scope 1 {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/place_mention.rs:+3:18: +3:36
- _1 = (const "Hello", const "World"); // scope 0 at $DIR/place_mention.rs:+3:18: +3:36
- // mir::Constant
- // + span: $DIR/place_mention.rs:8:19: 8:26
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- // mir::Constant
- // + span: $DIR/place_mention.rs:8:28: 8:35
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- PlaceMention(_1); // scope 0 at $DIR/place_mention.rs:+3:18: +3:36
- StorageDead(_1); // scope 0 at $DIR/place_mention.rs:+3:36: +3:37
- _0 = const (); // scope 0 at $DIR/place_mention.rs:+0:11: +4:2
- return; // scope 0 at $DIR/place_mention.rs:+4:2: +4:2
+ StorageLive(_1);
+ _1 = (const "Hello", const "World");
+ PlaceMention(_1);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/dead-store-elimination/provenance_soundness.pointer_to_int.DeadStoreElimination.diff b/tests/mir-opt/dead-store-elimination/provenance_soundness.pointer_to_int.DeadStoreElimination.diff
index 89f1846b4..31f727e5f 100644
--- a/tests/mir-opt/dead-store-elimination/provenance_soundness.pointer_to_int.DeadStoreElimination.diff
+++ b/tests/mir-opt/dead-store-elimination/provenance_soundness.pointer_to_int.DeadStoreElimination.diff
@@ -2,34 +2,34 @@
+ // MIR for `pointer_to_int` after DeadStoreElimination
fn pointer_to_int(_1: *mut i32) -> () {
- debug p => _1; // in scope 0 at $DIR/provenance_soundness.rs:+0:19: +0:20
- let mut _0: (); // return place in scope 0 at $DIR/provenance_soundness.rs:+0:32: +0:32
- let _2: usize; // in scope 0 at $DIR/provenance_soundness.rs:+1:9: +1:11
- let mut _3: *mut i32; // in scope 0 at $DIR/provenance_soundness.rs:+1:14: +1:15
- let mut _5: *mut i32; // in scope 0 at $DIR/provenance_soundness.rs:+2:14: +2:15
+ debug p => _1;
+ let mut _0: ();
+ let _2: usize;
+ let mut _3: *mut i32;
+ let mut _5: *mut i32;
scope 1 {
- debug _x => _2; // in scope 1 at $DIR/provenance_soundness.rs:+1:9: +1:11
- let _4: isize; // in scope 1 at $DIR/provenance_soundness.rs:+2:9: +2:11
+ debug _x => _2;
+ let _4: isize;
scope 2 {
- debug _y => _4; // in scope 2 at $DIR/provenance_soundness.rs:+2:9: +2:11
+ debug _y => _4;
}
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/provenance_soundness.rs:+1:9: +1:11
- StorageLive(_3); // scope 0 at $DIR/provenance_soundness.rs:+1:14: +1:15
- _3 = _1; // scope 0 at $DIR/provenance_soundness.rs:+1:14: +1:15
- _2 = move _3 as usize (PointerExposeAddress); // scope 0 at $DIR/provenance_soundness.rs:+1:14: +1:24
- StorageDead(_3); // scope 0 at $DIR/provenance_soundness.rs:+1:23: +1:24
- StorageLive(_4); // scope 1 at $DIR/provenance_soundness.rs:+2:9: +2:11
- StorageLive(_5); // scope 1 at $DIR/provenance_soundness.rs:+2:14: +2:15
- _5 = _1; // scope 1 at $DIR/provenance_soundness.rs:+2:14: +2:15
- _4 = move _5 as isize (PointerExposeAddress); // scope 1 at $DIR/provenance_soundness.rs:+2:14: +2:24
- StorageDead(_5); // scope 1 at $DIR/provenance_soundness.rs:+2:23: +2:24
- _0 = const (); // scope 0 at $DIR/provenance_soundness.rs:+0:32: +3:2
- StorageDead(_4); // scope 1 at $DIR/provenance_soundness.rs:+3:1: +3:2
- StorageDead(_2); // scope 0 at $DIR/provenance_soundness.rs:+3:1: +3:2
- return; // scope 0 at $DIR/provenance_soundness.rs:+3:2: +3:2
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = move _3 as usize (PointerExposeAddress);
+ StorageDead(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _1;
+ _4 = move _5 as isize (PointerExposeAddress);
+ StorageDead(_5);
+ _0 = const ();
+ StorageDead(_4);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/dead-store-elimination/provenance_soundness.retags.DeadStoreElimination.diff b/tests/mir-opt/dead-store-elimination/provenance_soundness.retags.DeadStoreElimination.diff
index b5f98233b..e1ebc39aa 100644
--- a/tests/mir-opt/dead-store-elimination/provenance_soundness.retags.DeadStoreElimination.diff
+++ b/tests/mir-opt/dead-store-elimination/provenance_soundness.retags.DeadStoreElimination.diff
@@ -2,13 +2,13 @@
+ // MIR for `retags` after DeadStoreElimination
fn retags(_1: &mut i32) -> () {
- debug _r => _1; // in scope 0 at $DIR/provenance_soundness.rs:+0:11: +0:13
- let mut _0: (); // return place in scope 0 at $DIR/provenance_soundness.rs:+0:25: +0:25
+ debug _r => _1;
+ let mut _0: ();
bb0: {
- Retag([fn entry] _1); // scope 0 at $DIR/provenance_soundness.rs:+0:11: +0:13
- _0 = const (); // scope 0 at $DIR/provenance_soundness.rs:+0:25: +0:27
- return; // scope 0 at $DIR/provenance_soundness.rs:+0:27: +0:27
+ Retag([fn entry] _1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.diff b/tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.diff
deleted file mode 100644
index c4ebf1ca8..000000000
--- a/tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.diff
+++ /dev/null
@@ -1,100 +0,0 @@
-- // MIR for `is_line_doc_comment_2` before DeduplicateBlocks
-+ // MIR for `is_line_doc_comment_2` after DeduplicateBlocks
-
- fn is_line_doc_comment_2(_1: &str) -> bool {
- debug s => _1; // in scope 0 at $DIR/deduplicate_blocks.rs:+0:36: +0:37
- let mut _0: bool; // return place in scope 0 at $DIR/deduplicate_blocks.rs:+0:48: +0:52
- let mut _2: &[u8]; // in scope 0 at $DIR/deduplicate_blocks.rs:+1:11: +1:23
- let mut _3: &str; // in scope 0 at $DIR/deduplicate_blocks.rs:+1:11: +1:23
- let mut _4: usize; // in scope 0 at $DIR/deduplicate_blocks.rs:+3:9: +3:31
- let mut _5: usize; // in scope 0 at $DIR/deduplicate_blocks.rs:+3:9: +3:31
- let mut _6: bool; // in scope 0 at $DIR/deduplicate_blocks.rs:+3:9: +3:31
- let mut _7: usize; // in scope 0 at $DIR/deduplicate_blocks.rs:+2:9: +2:37
- let mut _8: usize; // in scope 0 at $DIR/deduplicate_blocks.rs:+2:9: +2:37
- let mut _9: bool; // in scope 0 at $DIR/deduplicate_blocks.rs:+2:9: +2:37
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/deduplicate_blocks.rs:+1:11: +1:23
- StorageLive(_3); // scope 0 at $DIR/deduplicate_blocks.rs:+1:11: +1:23
- _3 = &(*_1); // scope 0 at $DIR/deduplicate_blocks.rs:+1:11: +1:23
- _2 = core::str::<impl str>::as_bytes(move _3) -> bb1; // scope 0 at $DIR/deduplicate_blocks.rs:+1:11: +1:23
- // mir::Constant
- // + span: $DIR/deduplicate_blocks.rs:6:13: 6:21
- // + literal: Const { ty: for<'a> fn(&'a str) -> &'a [u8] {core::str::<impl str>::as_bytes}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_3); // scope 0 at $DIR/deduplicate_blocks.rs:+1:22: +1:23
- _7 = Len((*_2)); // scope 0 at $DIR/deduplicate_blocks.rs:+2:9: +2:37
- _8 = const 4_usize; // scope 0 at $DIR/deduplicate_blocks.rs:+2:9: +2:37
- _9 = Ge(move _7, move _8); // scope 0 at $DIR/deduplicate_blocks.rs:+2:9: +2:37
- switchInt(move _9) -> [0: bb6, otherwise: bb2]; // scope 0 at $DIR/deduplicate_blocks.rs:+2:9: +2:37
- }
-
- bb2: {
- switchInt((*_2)[0 of 4]) -> [47: bb3, otherwise: bb6]; // scope 0 at $DIR/deduplicate_blocks.rs:+1:5: +1:23
- }
-
- bb3: {
- switchInt((*_2)[1 of 4]) -> [47: bb4, otherwise: bb6]; // scope 0 at $DIR/deduplicate_blocks.rs:+1:5: +1:23
- }
-
- bb4: {
- switchInt((*_2)[2 of 4]) -> [47: bb5, otherwise: bb6]; // scope 0 at $DIR/deduplicate_blocks.rs:+1:5: +1:23
- }
-
- bb5: {
-- switchInt((*_2)[3 of 4]) -> [47: bb11, otherwise: bb6]; // scope 0 at $DIR/deduplicate_blocks.rs:+1:5: +1:23
-+ switchInt((*_2)[3 of 4]) -> [47: bb10, otherwise: bb6]; // scope 0 at $DIR/deduplicate_blocks.rs:+1:5: +1:23
- }
-
- bb6: {
- _4 = Len((*_2)); // scope 0 at $DIR/deduplicate_blocks.rs:+3:9: +3:31
- _5 = const 3_usize; // scope 0 at $DIR/deduplicate_blocks.rs:+3:9: +3:31
- _6 = Ge(move _4, move _5); // scope 0 at $DIR/deduplicate_blocks.rs:+3:9: +3:31
- switchInt(move _6) -> [0: bb10, otherwise: bb7]; // scope 0 at $DIR/deduplicate_blocks.rs:+3:9: +3:31
- }
-
- bb7: {
- switchInt((*_2)[0 of 3]) -> [47: bb8, otherwise: bb10]; // scope 0 at $DIR/deduplicate_blocks.rs:+1:5: +1:23
- }
-
- bb8: {
- switchInt((*_2)[1 of 3]) -> [47: bb9, otherwise: bb10]; // scope 0 at $DIR/deduplicate_blocks.rs:+1:5: +1:23
- }
-
- bb9: {
-- switchInt((*_2)[2 of 3]) -> [47: bb12, 33: bb13, otherwise: bb10]; // scope 0 at $DIR/deduplicate_blocks.rs:+1:5: +1:23
-+ switchInt((*_2)[2 of 3]) -> [47: bb11, 33: bb11, otherwise: bb10]; // scope 0 at $DIR/deduplicate_blocks.rs:+1:5: +1:23
- }
-
- bb10: {
-- _0 = const false; // scope 0 at $DIR/deduplicate_blocks.rs:+5:14: +5:19
-- goto -> bb14; // scope 0 at $DIR/deduplicate_blocks.rs:+5:14: +5:19
-- }
--
-- bb11: {
- _0 = const false; // scope 0 at $DIR/deduplicate_blocks.rs:+2:41: +2:46
-- goto -> bb14; // scope 0 at $DIR/deduplicate_blocks.rs:+2:41: +2:46
-+ goto -> bb12; // scope 0 at $DIR/deduplicate_blocks.rs:+2:41: +2:46
- }
-
-- bb12: {
-- _0 = const true; // scope 0 at $DIR/deduplicate_blocks.rs:+3:35: +3:39
-- goto -> bb14; // scope 0 at $DIR/deduplicate_blocks.rs:+3:35: +3:39
-- }
--
-- bb13: {
-+ bb11: {
- _0 = const true; // scope 0 at $DIR/deduplicate_blocks.rs:+4:35: +4:39
-- goto -> bb14; // scope 0 at $DIR/deduplicate_blocks.rs:+4:35: +4:39
-+ goto -> bb12; // scope 0 at $DIR/deduplicate_blocks.rs:+4:35: +4:39
- }
-
-- bb14: {
-+ bb12: {
- StorageDead(_2); // scope 0 at $DIR/deduplicate_blocks.rs:+7:1: +7:2
- return; // scope 0 at $DIR/deduplicate_blocks.rs:+7:2: +7:2
- }
- }
-
diff --git a/tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.panic-abort.diff b/tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.panic-abort.diff
new file mode 100644
index 000000000..5c4fc06a2
--- /dev/null
+++ b/tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.panic-abort.diff
@@ -0,0 +1,96 @@
+- // MIR for `is_line_doc_comment_2` before DeduplicateBlocks
++ // MIR for `is_line_doc_comment_2` after DeduplicateBlocks
+
+ fn is_line_doc_comment_2(_1: &str) -> bool {
+ debug s => _1;
+ let mut _0: bool;
+ let mut _2: &[u8];
+ let mut _3: &str;
+ let mut _4: usize;
+ let mut _5: usize;
+ let mut _6: bool;
+ let mut _7: usize;
+ let mut _8: usize;
+ let mut _9: bool;
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _2 = core::str::<impl str>::as_bytes(move _3) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ _7 = Len((*_2));
+ _8 = const 4_usize;
+ _9 = Ge(move _7, move _8);
+ switchInt(move _9) -> [0: bb6, otherwise: bb2];
+ }
+
+ bb2: {
+ switchInt((*_2)[0 of 4]) -> [47: bb3, otherwise: bb6];
+ }
+
+ bb3: {
+ switchInt((*_2)[1 of 4]) -> [47: bb4, otherwise: bb6];
+ }
+
+ bb4: {
+ switchInt((*_2)[2 of 4]) -> [47: bb5, otherwise: bb6];
+ }
+
+ bb5: {
+- switchInt((*_2)[3 of 4]) -> [47: bb11, otherwise: bb6];
++ switchInt((*_2)[3 of 4]) -> [47: bb10, otherwise: bb6];
+ }
+
+ bb6: {
+ _4 = Len((*_2));
+ _5 = const 3_usize;
+ _6 = Ge(move _4, move _5);
+ switchInt(move _6) -> [0: bb10, otherwise: bb7];
+ }
+
+ bb7: {
+ switchInt((*_2)[0 of 3]) -> [47: bb8, otherwise: bb10];
+ }
+
+ bb8: {
+ switchInt((*_2)[1 of 3]) -> [47: bb9, otherwise: bb10];
+ }
+
+ bb9: {
+- switchInt((*_2)[2 of 3]) -> [47: bb12, 33: bb13, otherwise: bb10];
++ switchInt((*_2)[2 of 3]) -> [47: bb11, 33: bb11, otherwise: bb10];
+ }
+
+ bb10: {
+ _0 = const false;
+- goto -> bb14;
++ goto -> bb12;
+ }
+
+ bb11: {
+- _0 = const false;
+- goto -> bb14;
+- }
+-
+- bb12: {
+ _0 = const true;
+- goto -> bb14;
++ goto -> bb12;
+ }
+
+- bb13: {
+- _0 = const true;
+- goto -> bb14;
+- }
+-
+- bb14: {
++ bb12: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.panic-unwind.diff b/tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.panic-unwind.diff
new file mode 100644
index 000000000..3d9aa8290
--- /dev/null
+++ b/tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.panic-unwind.diff
@@ -0,0 +1,96 @@
+- // MIR for `is_line_doc_comment_2` before DeduplicateBlocks
++ // MIR for `is_line_doc_comment_2` after DeduplicateBlocks
+
+ fn is_line_doc_comment_2(_1: &str) -> bool {
+ debug s => _1;
+ let mut _0: bool;
+ let mut _2: &[u8];
+ let mut _3: &str;
+ let mut _4: usize;
+ let mut _5: usize;
+ let mut _6: bool;
+ let mut _7: usize;
+ let mut _8: usize;
+ let mut _9: bool;
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _2 = core::str::<impl str>::as_bytes(move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ _7 = Len((*_2));
+ _8 = const 4_usize;
+ _9 = Ge(move _7, move _8);
+ switchInt(move _9) -> [0: bb6, otherwise: bb2];
+ }
+
+ bb2: {
+ switchInt((*_2)[0 of 4]) -> [47: bb3, otherwise: bb6];
+ }
+
+ bb3: {
+ switchInt((*_2)[1 of 4]) -> [47: bb4, otherwise: bb6];
+ }
+
+ bb4: {
+ switchInt((*_2)[2 of 4]) -> [47: bb5, otherwise: bb6];
+ }
+
+ bb5: {
+- switchInt((*_2)[3 of 4]) -> [47: bb11, otherwise: bb6];
++ switchInt((*_2)[3 of 4]) -> [47: bb10, otherwise: bb6];
+ }
+
+ bb6: {
+ _4 = Len((*_2));
+ _5 = const 3_usize;
+ _6 = Ge(move _4, move _5);
+ switchInt(move _6) -> [0: bb10, otherwise: bb7];
+ }
+
+ bb7: {
+ switchInt((*_2)[0 of 3]) -> [47: bb8, otherwise: bb10];
+ }
+
+ bb8: {
+ switchInt((*_2)[1 of 3]) -> [47: bb9, otherwise: bb10];
+ }
+
+ bb9: {
+- switchInt((*_2)[2 of 3]) -> [47: bb12, 33: bb13, otherwise: bb10];
++ switchInt((*_2)[2 of 3]) -> [47: bb11, 33: bb11, otherwise: bb10];
+ }
+
+ bb10: {
+ _0 = const false;
+- goto -> bb14;
++ goto -> bb12;
+ }
+
+ bb11: {
+- _0 = const false;
+- goto -> bb14;
+- }
+-
+- bb12: {
+ _0 = const true;
+- goto -> bb14;
++ goto -> bb12;
+ }
+
+- bb13: {
+- _0 = const true;
+- goto -> bb14;
+- }
+-
+- bb14: {
++ bb12: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/deduplicate_blocks.rs b/tests/mir-opt/deduplicate_blocks.rs
index 46012e19a..0c38c7f21 100644
--- a/tests/mir-opt/deduplicate_blocks.rs
+++ b/tests/mir-opt/deduplicate_blocks.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: DeduplicateBlocks
// EMIT_MIR deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.diff
diff --git a/tests/mir-opt/deref-patterns/string.foo.PreCodegen.after.mir b/tests/mir-opt/deref-patterns/string.foo.PreCodegen.after.mir
index 97826ed19..1e4f74850 100644
--- a/tests/mir-opt/deref-patterns/string.foo.PreCodegen.after.mir
+++ b/tests/mir-opt/deref-patterns/string.foo.PreCodegen.after.mir
@@ -1,74 +1,65 @@
// MIR for `foo` after PreCodegen
fn foo(_1: Option<String>) -> i32 {
- debug s => _1; // in scope 0 at $DIR/string.rs:+0:12: +0:13
- let mut _0: i32; // return place in scope 0 at $DIR/string.rs:+0:34: +0:37
- let mut _2: &std::string::String; // in scope 0 at $DIR/string.rs:+2:14: +2:17
- let mut _3: &str; // in scope 0 at $DIR/string.rs:+2:14: +2:17
- let mut _4: bool; // in scope 0 at $DIR/string.rs:+2:14: +2:17
- let mut _5: isize; // in scope 0 at $DIR/string.rs:+2:9: +2:18
- let _6: std::option::Option<std::string::String>; // in scope 0 at $DIR/string.rs:+3:9: +3:10
- let mut _7: bool; // in scope 0 at $DIR/string.rs:+5:1: +5:2
+ debug s => _1;
+ let mut _0: i32;
+ let mut _2: bool;
+ let mut _3: isize;
+ let mut _4: &std::string::String;
+ let mut _5: &str;
+ let mut _6: bool;
+ let _7: std::option::Option<std::string::String>;
scope 1 {
- debug s => _6; // in scope 1 at $DIR/string.rs:+3:9: +3:10
+ debug s => _7;
}
bb0: {
- _7 = const false; // scope 0 at $DIR/string.rs:+1:11: +1:12
- _7 = const true; // scope 0 at $DIR/string.rs:+1:11: +1:12
- _5 = discriminant(_1); // scope 0 at $DIR/string.rs:+1:11: +1:12
- switchInt(move _5) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/string.rs:+1:5: +1:12
+ _2 = const false;
+ _2 = const true;
+ _3 = discriminant(_1);
+ switchInt(move _3) -> [1: bb1, otherwise: bb5];
}
bb1: {
- StorageLive(_6); // scope 0 at $DIR/string.rs:+3:9: +3:10
- _7 = const false; // scope 0 at $DIR/string.rs:+3:9: +3:10
- _6 = move _1; // scope 0 at $DIR/string.rs:+3:9: +3:10
- _0 = const 4321_i32; // scope 1 at $DIR/string.rs:+3:14: +3:18
- drop(_6) -> [return: bb6, unwind unreachable]; // scope 0 at $DIR/string.rs:+3:17: +3:18
+ _4 = &((_1 as Some).0: std::string::String);
+ _5 = <String as Deref>::deref(move _4) -> [return: bb2, unwind unreachable];
}
bb2: {
- _2 = &((_1 as Some).0: std::string::String); // scope 0 at $DIR/string.rs:+2:14: +2:17
- _3 = <String as Deref>::deref(move _2) -> [return: bb3, unwind unreachable]; // scope 0 at $DIR/string.rs:+2:14: +2:17
- // mir::Constant
- // + span: $DIR/string.rs:9:14: 9:17
- // + literal: Const { ty: for<'a> fn(&'a String) -> &'a <String as Deref>::Target {<String as Deref>::deref}, val: Value(<ZST>) }
+ _6 = <str as PartialEq>::eq(_5, const "a") -> [return: bb3, unwind unreachable];
}
bb3: {
- _4 = <str as PartialEq>::eq(_3, const "a") -> [return: bb4, unwind unreachable]; // scope 0 at $DIR/string.rs:+2:14: +2:17
- // mir::Constant
- // + span: $DIR/string.rs:9:14: 9:17
- // + literal: Const { ty: for<'a, 'b> fn(&'a str, &'b str) -> bool {<str as PartialEq>::eq}, val: Value(<ZST>) }
- // mir::Constant
- // + span: $DIR/string.rs:9:14: 9:17
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
+ switchInt(move _6) -> [0: bb5, otherwise: bb4];
}
bb4: {
- switchInt(move _4) -> [0: bb1, otherwise: bb5]; // scope 0 at $DIR/string.rs:+2:14: +2:17
+ _0 = const 1234_i32;
+ goto -> bb7;
}
bb5: {
- _0 = const 1234_i32; // scope 0 at $DIR/string.rs:+2:22: +2:26
- goto -> bb9; // scope 0 at $DIR/string.rs:+2:22: +2:26
+ StorageLive(_7);
+ _2 = const false;
+ _7 = move _1;
+ _0 = const 4321_i32;
+ drop(_7) -> [return: bb6, unwind unreachable];
}
bb6: {
- StorageDead(_6); // scope 0 at $DIR/string.rs:+3:17: +3:18
- goto -> bb9; // scope 0 at $DIR/string.rs:+3:17: +3:18
+ StorageDead(_7);
+ goto -> bb7;
}
bb7: {
- return; // scope 0 at $DIR/string.rs:+5:2: +5:2
+ switchInt(_2) -> [0: bb9, otherwise: bb8];
}
bb8: {
- drop(_1) -> [return: bb7, unwind unreachable]; // scope 0 at $DIR/string.rs:+5:1: +5:2
+ drop(_1) -> [return: bb9, unwind unreachable];
}
bb9: {
- switchInt(_7) -> [0: bb7, otherwise: bb8]; // scope 0 at $DIR/string.rs:+5:1: +5:2
+ return;
}
}
diff --git a/tests/mir-opt/derefer_complex_case.main.Derefer.diff b/tests/mir-opt/derefer_complex_case.main.Derefer.diff
deleted file mode 100644
index fa3eeedc4..000000000
--- a/tests/mir-opt/derefer_complex_case.main.Derefer.diff
+++ /dev/null
@@ -1,105 +0,0 @@
-- // MIR for `main` before Derefer
-+ // MIR for `main` after Derefer
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/derefer_complex_case.rs:+0:11: +0:11
- let mut _1: std::slice::Iter<'_, i32>; // in scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- let mut _2: &[i32; 2]; // in scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- let _3: [i32; 2]; // in scope 0 at $DIR/derefer_complex_case.rs:+1:18: +1:26
- let mut _4: std::slice::Iter<'_, i32>; // in scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- let mut _5: (); // in scope 0 at $DIR/derefer_complex_case.rs:+0:1: +2:2
- let _6: (); // in scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- let mut _7: std::option::Option<&i32>; // in scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- let mut _8: &mut std::slice::Iter<'_, i32>; // in scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- let mut _9: &mut std::slice::Iter<'_, i32>; // in scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- let mut _10: isize; // in scope 0 at $DIR/derefer_complex_case.rs:+1:5: +1:40
- let mut _11: !; // in scope 0 at $DIR/derefer_complex_case.rs:+1:5: +1:40
- let mut _13: i32; // in scope 0 at $DIR/derefer_complex_case.rs:+1:34: +1:37
- let mut _14: &[i32; 2]; // in scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
-+ let mut _15: &i32; // in scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- scope 1 {
- debug iter => _4; // in scope 1 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- let _12: i32; // in scope 1 at $DIR/derefer_complex_case.rs:+1:10: +1:13
- scope 2 {
- debug foo => _12; // in scope 2 at $DIR/derefer_complex_case.rs:+1:10: +1:13
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- StorageLive(_2); // scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- _14 = const _; // scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- // mir::Constant
- // + span: $DIR/derefer_complex_case.rs:6:17: 6:26
- // + literal: Const { ty: &[i32; 2], val: Unevaluated(main, [], Some(promoted[0])) }
- _2 = &(*_14); // scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- _1 = <&[i32; 2] as IntoIterator>::into_iter(move _2) -> bb1; // scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- // mir::Constant
- // + span: $DIR/derefer_complex_case.rs:6:17: 6:26
- // + literal: Const { ty: fn(&[i32; 2]) -> <&[i32; 2] as IntoIterator>::IntoIter {<&[i32; 2] as IntoIterator>::into_iter}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_2); // scope 0 at $DIR/derefer_complex_case.rs:+1:25: +1:26
- StorageLive(_4); // scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- _4 = move _1; // scope 0 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- goto -> bb2; // scope 1 at $DIR/derefer_complex_case.rs:+1:5: +1:40
- }
-
- bb2: {
- StorageLive(_6); // scope 1 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- StorageLive(_7); // scope 1 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- StorageLive(_8); // scope 1 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- StorageLive(_9); // scope 1 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- _9 = &mut _4; // scope 1 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- _8 = &mut (*_9); // scope 1 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- _7 = <std::slice::Iter<'_, i32> as Iterator>::next(move _8) -> bb3; // scope 1 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- // mir::Constant
- // + span: $DIR/derefer_complex_case.rs:6:17: 6:26
- // + literal: Const { ty: for<'a> fn(&'a mut std::slice::Iter<'_, i32>) -> Option<<std::slice::Iter<'_, i32> as Iterator>::Item> {<std::slice::Iter<'_, i32> as Iterator>::next}, val: Value(<ZST>) }
- }
-
- bb3: {
- StorageDead(_8); // scope 1 at $DIR/derefer_complex_case.rs:+1:25: +1:26
- _10 = discriminant(_7); // scope 1 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- switchInt(move _10) -> [0: bb6, 1: bb4, otherwise: bb5]; // scope 1 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- }
-
- bb4: {
- StorageLive(_12); // scope 1 at $DIR/derefer_complex_case.rs:+1:10: +1:13
-- _12 = (*((_7 as Some).0: &i32)); // scope 1 at $DIR/derefer_complex_case.rs:+1:10: +1:13
-+ _15 = deref_copy ((_7 as Some).0: &i32); // scope 1 at $DIR/derefer_complex_case.rs:+1:10: +1:13
-+ _12 = (*_15); // scope 1 at $DIR/derefer_complex_case.rs:+1:10: +1:13
- StorageLive(_13); // scope 2 at $DIR/derefer_complex_case.rs:+1:34: +1:37
- _13 = _12; // scope 2 at $DIR/derefer_complex_case.rs:+1:34: +1:37
- _6 = std::mem::drop::<i32>(move _13) -> bb7; // scope 2 at $DIR/derefer_complex_case.rs:+1:29: +1:38
- // mir::Constant
- // + span: $DIR/derefer_complex_case.rs:6:29: 6:33
- // + literal: Const { ty: fn(i32) {std::mem::drop::<i32>}, val: Value(<ZST>) }
- }
-
- bb5: {
- unreachable; // scope 1 at $DIR/derefer_complex_case.rs:+1:17: +1:26
- }
-
- bb6: {
- _0 = const (); // scope 1 at $DIR/derefer_complex_case.rs:+1:5: +1:40
- StorageDead(_9); // scope 1 at $DIR/derefer_complex_case.rs:+1:39: +1:40
- StorageDead(_7); // scope 1 at $DIR/derefer_complex_case.rs:+1:39: +1:40
- StorageDead(_6); // scope 1 at $DIR/derefer_complex_case.rs:+1:39: +1:40
- StorageDead(_4); // scope 0 at $DIR/derefer_complex_case.rs:+1:39: +1:40
- StorageDead(_1); // scope 0 at $DIR/derefer_complex_case.rs:+1:39: +1:40
- return; // scope 0 at $DIR/derefer_complex_case.rs:+2:2: +2:2
- }
-
- bb7: {
- StorageDead(_13); // scope 2 at $DIR/derefer_complex_case.rs:+1:37: +1:38
- StorageDead(_12); // scope 1 at $DIR/derefer_complex_case.rs:+1:39: +1:40
- StorageDead(_9); // scope 1 at $DIR/derefer_complex_case.rs:+1:39: +1:40
- StorageDead(_7); // scope 1 at $DIR/derefer_complex_case.rs:+1:39: +1:40
- StorageDead(_6); // scope 1 at $DIR/derefer_complex_case.rs:+1:39: +1:40
- _5 = const (); // scope 1 at $DIR/derefer_complex_case.rs:+1:5: +1:40
- goto -> bb2; // scope 1 at $DIR/derefer_complex_case.rs:+1:5: +1:40
- }
- }
-
diff --git a/tests/mir-opt/derefer_complex_case.main.Derefer.panic-abort.diff b/tests/mir-opt/derefer_complex_case.main.Derefer.panic-abort.diff
new file mode 100644
index 000000000..1f3b3ad64
--- /dev/null
+++ b/tests/mir-opt/derefer_complex_case.main.Derefer.panic-abort.diff
@@ -0,0 +1,97 @@
+- // MIR for `main` before Derefer
++ // MIR for `main` after Derefer
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: std::slice::Iter<'_, i32>;
+ let mut _2: &[i32; 2];
+ let _3: [i32; 2];
+ let mut _4: std::slice::Iter<'_, i32>;
+ let mut _5: ();
+ let _6: ();
+ let mut _7: std::option::Option<&i32>;
+ let mut _8: &mut std::slice::Iter<'_, i32>;
+ let mut _9: &mut std::slice::Iter<'_, i32>;
+ let mut _10: isize;
+ let mut _11: !;
+ let mut _13: i32;
+ let mut _14: &[i32; 2];
++ let mut _15: &i32;
+ scope 1 {
+ debug iter => _4;
+ let _12: i32;
+ scope 2 {
+ debug foo => _12;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _14 = const _;
+ _2 = &(*_14);
+ _1 = <&[i32; 2] as IntoIterator>::into_iter(move _2) -> [return: bb1, unwind: bb8];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ StorageLive(_4);
+ _4 = move _1;
+ goto -> bb2;
+ }
+
+ bb2: {
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ StorageLive(_9);
+ _9 = &mut _4;
+ _8 = &mut (*_9);
+ _7 = <std::slice::Iter<'_, i32> as Iterator>::next(move _8) -> [return: bb3, unwind: bb8];
+ }
+
+ bb3: {
+ StorageDead(_8);
+ _10 = discriminant(_7);
+ switchInt(move _10) -> [0: bb6, 1: bb4, otherwise: bb5];
+ }
+
+ bb4: {
+ StorageLive(_12);
+- _12 = (*((_7 as Some).0: &i32));
++ _15 = deref_copy ((_7 as Some).0: &i32);
++ _12 = (*_15);
+ StorageLive(_13);
+ _13 = _12;
+ _6 = std::mem::drop::<i32>(move _13) -> [return: bb7, unwind: bb8];
+ }
+
+ bb5: {
+ unreachable;
+ }
+
+ bb6: {
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_1);
+ return;
+ }
+
+ bb7: {
+ StorageDead(_13);
+ StorageDead(_12);
+ StorageDead(_9);
+ StorageDead(_7);
+ StorageDead(_6);
+ _5 = const ();
+ goto -> bb2;
+ }
+
+ bb8 (cleanup): {
+ resume;
+ }
+ }
+
diff --git a/tests/mir-opt/derefer_complex_case.main.Derefer.panic-unwind.diff b/tests/mir-opt/derefer_complex_case.main.Derefer.panic-unwind.diff
new file mode 100644
index 000000000..da4cc188c
--- /dev/null
+++ b/tests/mir-opt/derefer_complex_case.main.Derefer.panic-unwind.diff
@@ -0,0 +1,93 @@
+- // MIR for `main` before Derefer
++ // MIR for `main` after Derefer
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: std::slice::Iter<'_, i32>;
+ let mut _2: &[i32; 2];
+ let _3: [i32; 2];
+ let mut _4: std::slice::Iter<'_, i32>;
+ let mut _5: ();
+ let _6: ();
+ let mut _7: std::option::Option<&i32>;
+ let mut _8: &mut std::slice::Iter<'_, i32>;
+ let mut _9: &mut std::slice::Iter<'_, i32>;
+ let mut _10: isize;
+ let mut _11: !;
+ let mut _13: i32;
+ let mut _14: &[i32; 2];
++ let mut _15: &i32;
+ scope 1 {
+ debug iter => _4;
+ let _12: i32;
+ scope 2 {
+ debug foo => _12;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _14 = const _;
+ _2 = &(*_14);
+ _1 = <&[i32; 2] as IntoIterator>::into_iter(move _2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ StorageLive(_4);
+ _4 = move _1;
+ goto -> bb2;
+ }
+
+ bb2: {
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+ StorageLive(_9);
+ _9 = &mut _4;
+ _8 = &mut (*_9);
+ _7 = <std::slice::Iter<'_, i32> as Iterator>::next(move _8) -> [return: bb3, unwind continue];
+ }
+
+ bb3: {
+ StorageDead(_8);
+ _10 = discriminant(_7);
+ switchInt(move _10) -> [0: bb6, 1: bb4, otherwise: bb5];
+ }
+
+ bb4: {
+ StorageLive(_12);
+- _12 = (*((_7 as Some).0: &i32));
++ _15 = deref_copy ((_7 as Some).0: &i32);
++ _12 = (*_15);
+ StorageLive(_13);
+ _13 = _12;
+ _6 = std::mem::drop::<i32>(move _13) -> [return: bb7, unwind continue];
+ }
+
+ bb5: {
+ unreachable;
+ }
+
+ bb6: {
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_1);
+ return;
+ }
+
+ bb7: {
+ StorageDead(_13);
+ StorageDead(_12);
+ StorageDead(_9);
+ StorageDead(_7);
+ StorageDead(_6);
+ _5 = const ();
+ goto -> bb2;
+ }
+ }
+
diff --git a/tests/mir-opt/derefer_complex_case.rs b/tests/mir-opt/derefer_complex_case.rs
index dc48cee95..cc619879e 100644
--- a/tests/mir-opt/derefer_complex_case.rs
+++ b/tests/mir-opt/derefer_complex_case.rs
@@ -1,6 +1,6 @@
// unit-test: Derefer
// EMIT_MIR derefer_complex_case.main.Derefer.diff
-// ignore-wasm32
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
fn main() {
for &foo in &[42, 43] { drop(foo) }
diff --git a/tests/mir-opt/derefer_inline_test.main.Derefer.diff b/tests/mir-opt/derefer_inline_test.main.Derefer.diff
deleted file mode 100644
index 426d4fb21..000000000
--- a/tests/mir-opt/derefer_inline_test.main.Derefer.diff
+++ /dev/null
@@ -1,45 +0,0 @@
-- // MIR for `main` before Derefer
-+ // MIR for `main` after Derefer
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/derefer_inline_test.rs:+0:11: +0:11
- let _1: std::boxed::Box<std::boxed::Box<u32>>; // in scope 0 at $DIR/derefer_inline_test.rs:+1:5: +1:18
- let mut _2: std::boxed::Box<u32>; // in scope 0 at $DIR/derefer_inline_test.rs:+1:14: +1:17
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/derefer_inline_test.rs:+1:5: +1:18
- StorageLive(_2); // scope 0 at $DIR/derefer_inline_test.rs:+1:14: +1:17
- _2 = f() -> bb1; // scope 0 at $DIR/derefer_inline_test.rs:+1:14: +1:17
- // mir::Constant
- // + span: $DIR/derefer_inline_test.rs:10:14: 10:15
- // + literal: Const { ty: fn() -> Box<u32> {f}, val: Value(<ZST>) }
- }
-
- bb1: {
- _1 = Box::<Box<u32>>::new(move _2) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/derefer_inline_test.rs:+1:5: +1:18
- // mir::Constant
- // + span: $DIR/derefer_inline_test.rs:10:5: 10:13
- // + user_ty: UserType(0)
- // + literal: Const { ty: fn(Box<u32>) -> Box<Box<u32>> {Box::<Box<u32>>::new}, val: Value(<ZST>) }
- }
-
- bb2: {
- StorageDead(_2); // scope 0 at $DIR/derefer_inline_test.rs:+1:17: +1:18
- drop(_1) -> bb3; // scope 0 at $DIR/derefer_inline_test.rs:+1:18: +1:19
- }
-
- bb3: {
- StorageDead(_1); // scope 0 at $DIR/derefer_inline_test.rs:+1:18: +1:19
- _0 = const (); // scope 0 at $DIR/derefer_inline_test.rs:+0:11: +2:2
- return; // scope 0 at $DIR/derefer_inline_test.rs:+2:2: +2:2
- }
-
- bb4 (cleanup): {
- drop(_2) -> [return: bb5, unwind terminate]; // scope 0 at $DIR/derefer_inline_test.rs:+1:17: +1:18
- }
-
- bb5 (cleanup): {
- resume; // scope 0 at $DIR/derefer_inline_test.rs:+0:1: +2:2
- }
- }
-
diff --git a/tests/mir-opt/derefer_inline_test.main.Derefer.panic-abort.diff b/tests/mir-opt/derefer_inline_test.main.Derefer.panic-abort.diff
new file mode 100644
index 000000000..024d9bc7f
--- /dev/null
+++ b/tests/mir-opt/derefer_inline_test.main.Derefer.panic-abort.diff
@@ -0,0 +1,38 @@
+- // MIR for `main` before Derefer
++ // MIR for `main` after Derefer
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: std::boxed::Box<std::boxed::Box<u32>>;
+ let mut _2: std::boxed::Box<u32>;
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = f() -> [return: bb1, unwind: bb5];
+ }
+
+ bb1: {
+ _1 = Box::<Box<u32>>::new(move _2) -> [return: bb2, unwind: bb4];
+ }
+
+ bb2: {
+ StorageDead(_2);
+ drop(_1) -> [return: bb3, unwind: bb5];
+ }
+
+ bb3: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+
+ bb4 (cleanup): {
+ drop(_2) -> [return: bb5, unwind terminate];
+ }
+
+ bb5 (cleanup): {
+ resume;
+ }
+ }
+
diff --git a/tests/mir-opt/derefer_inline_test.main.Derefer.panic-unwind.diff b/tests/mir-opt/derefer_inline_test.main.Derefer.panic-unwind.diff
new file mode 100644
index 000000000..2ada087b4
--- /dev/null
+++ b/tests/mir-opt/derefer_inline_test.main.Derefer.panic-unwind.diff
@@ -0,0 +1,38 @@
+- // MIR for `main` before Derefer
++ // MIR for `main` after Derefer
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: std::boxed::Box<std::boxed::Box<u32>>;
+ let mut _2: std::boxed::Box<u32>;
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = f() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ _1 = Box::<Box<u32>>::new(move _2) -> [return: bb2, unwind: bb4];
+ }
+
+ bb2: {
+ StorageDead(_2);
+ drop(_1) -> [return: bb3, unwind continue];
+ }
+
+ bb3: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+
+ bb4 (cleanup): {
+ drop(_2) -> [return: bb5, unwind terminate];
+ }
+
+ bb5 (cleanup): {
+ resume;
+ }
+ }
+
diff --git a/tests/mir-opt/derefer_inline_test.rs b/tests/mir-opt/derefer_inline_test.rs
index 38311d4d0..7ac330e51 100644
--- a/tests/mir-opt/derefer_inline_test.rs
+++ b/tests/mir-opt/derefer_inline_test.rs
@@ -1,6 +1,6 @@
// unit-test: Derefer
// EMIT_MIR derefer_inline_test.main.Derefer.diff
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#[inline]
fn f() -> Box<u32> {
diff --git a/tests/mir-opt/derefer_terminator_test.main.Derefer.diff b/tests/mir-opt/derefer_terminator_test.main.Derefer.diff
deleted file mode 100644
index ab2388d13..000000000
--- a/tests/mir-opt/derefer_terminator_test.main.Derefer.diff
+++ /dev/null
@@ -1,92 +0,0 @@
-- // MIR for `main` before Derefer
-+ // MIR for `main` after Derefer
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/derefer_terminator_test.rs:+0:11: +0:11
- let _1: bool; // in scope 0 at $DIR/derefer_terminator_test.rs:+1:9: +1:10
- let _3: (); // in scope 0 at $DIR/derefer_terminator_test.rs:+3:5: +6:6
- let mut _4: &&&&bool; // in scope 0 at $DIR/derefer_terminator_test.rs:+3:15: +3:22
- let _5: &&&bool; // in scope 0 at $DIR/derefer_terminator_test.rs:+3:17: +3:21
- let _6: &&bool; // in scope 0 at $DIR/derefer_terminator_test.rs:+3:18: +3:21
- let _7: &bool; // in scope 0 at $DIR/derefer_terminator_test.rs:+3:19: +3:21
-+ let mut _10: &&&bool; // in scope 0 at $DIR/derefer_terminator_test.rs:+3:15: +3:22
-+ let mut _11: &&bool; // in scope 0 at $DIR/derefer_terminator_test.rs:+3:15: +3:22
-+ let mut _12: &bool; // in scope 0 at $DIR/derefer_terminator_test.rs:+3:15: +3:22
- scope 1 {
- debug b => _1; // in scope 1 at $DIR/derefer_terminator_test.rs:+1:9: +1:10
- let _2: bool; // in scope 1 at $DIR/derefer_terminator_test.rs:+2:9: +2:10
- scope 2 {
- debug d => _2; // in scope 2 at $DIR/derefer_terminator_test.rs:+2:9: +2:10
- let _8: i32; // in scope 2 at $DIR/derefer_terminator_test.rs:+4:22: +4:23
- let _9: i32; // in scope 2 at $DIR/derefer_terminator_test.rs:+7:9: +7:10
- scope 3 {
- debug x => _8; // in scope 3 at $DIR/derefer_terminator_test.rs:+4:22: +4:23
- }
- scope 4 {
- debug y => _9; // in scope 4 at $DIR/derefer_terminator_test.rs:+7:9: +7:10
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/derefer_terminator_test.rs:+1:9: +1:10
- _1 = foo() -> bb1; // scope 0 at $DIR/derefer_terminator_test.rs:+1:13: +1:18
- // mir::Constant
- // + span: $DIR/derefer_terminator_test.rs:6:13: 6:16
- // + literal: Const { ty: fn() -> bool {foo}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageLive(_2); // scope 1 at $DIR/derefer_terminator_test.rs:+2:9: +2:10
- _2 = foo() -> bb2; // scope 1 at $DIR/derefer_terminator_test.rs:+2:13: +2:18
- // mir::Constant
- // + span: $DIR/derefer_terminator_test.rs:7:13: 7:16
- // + literal: Const { ty: fn() -> bool {foo}, val: Value(<ZST>) }
- }
-
- bb2: {
- StorageLive(_3); // scope 2 at $DIR/derefer_terminator_test.rs:+3:5: +6:6
- StorageLive(_4); // scope 2 at $DIR/derefer_terminator_test.rs:+3:15: +3:22
- StorageLive(_5); // scope 2 at $DIR/derefer_terminator_test.rs:+3:17: +3:21
- StorageLive(_6); // scope 2 at $DIR/derefer_terminator_test.rs:+3:18: +3:21
- StorageLive(_7); // scope 2 at $DIR/derefer_terminator_test.rs:+3:19: +3:21
- _7 = &_1; // scope 2 at $DIR/derefer_terminator_test.rs:+3:19: +3:21
- _6 = &_7; // scope 2 at $DIR/derefer_terminator_test.rs:+3:18: +3:21
- _5 = &_6; // scope 2 at $DIR/derefer_terminator_test.rs:+3:17: +3:21
- _4 = &_5; // scope 2 at $DIR/derefer_terminator_test.rs:+3:15: +3:22
-- switchInt((*(*(*(*_4))))) -> [0: bb3, otherwise: bb4]; // scope 2 at $DIR/derefer_terminator_test.rs:+3:5: +3:22
-+ _10 = deref_copy (*_4); // scope 2 at $DIR/derefer_terminator_test.rs:+3:5: +3:22
-+ _11 = deref_copy (*_10); // scope 2 at $DIR/derefer_terminator_test.rs:+3:5: +3:22
-+ _12 = deref_copy (*_11); // scope 2 at $DIR/derefer_terminator_test.rs:+3:5: +3:22
-+ switchInt((*_12)) -> [0: bb3, otherwise: bb4]; // scope 2 at $DIR/derefer_terminator_test.rs:+3:5: +3:22
- }
-
- bb3: {
- _3 = const (); // scope 2 at $DIR/derefer_terminator_test.rs:+5:18: +5:20
- goto -> bb5; // scope 2 at $DIR/derefer_terminator_test.rs:+5:18: +5:20
- }
-
- bb4: {
- StorageLive(_8); // scope 2 at $DIR/derefer_terminator_test.rs:+4:22: +4:23
- _8 = const 5_i32; // scope 2 at $DIR/derefer_terminator_test.rs:+4:26: +4:27
- _3 = const (); // scope 2 at $DIR/derefer_terminator_test.rs:+4:17: +4:29
- StorageDead(_8); // scope 2 at $DIR/derefer_terminator_test.rs:+4:28: +4:29
- goto -> bb5; // scope 2 at $DIR/derefer_terminator_test.rs:+4:28: +4:29
- }
-
- bb5: {
- StorageDead(_7); // scope 2 at $DIR/derefer_terminator_test.rs:+6:5: +6:6
- StorageDead(_6); // scope 2 at $DIR/derefer_terminator_test.rs:+6:5: +6:6
- StorageDead(_5); // scope 2 at $DIR/derefer_terminator_test.rs:+6:5: +6:6
- StorageDead(_4); // scope 2 at $DIR/derefer_terminator_test.rs:+6:5: +6:6
- StorageDead(_3); // scope 2 at $DIR/derefer_terminator_test.rs:+6:5: +6:6
- StorageLive(_9); // scope 2 at $DIR/derefer_terminator_test.rs:+7:9: +7:10
- _9 = const 42_i32; // scope 2 at $DIR/derefer_terminator_test.rs:+7:13: +7:15
- _0 = const (); // scope 0 at $DIR/derefer_terminator_test.rs:+0:11: +8:2
- StorageDead(_9); // scope 2 at $DIR/derefer_terminator_test.rs:+8:1: +8:2
- StorageDead(_2); // scope 1 at $DIR/derefer_terminator_test.rs:+8:1: +8:2
- StorageDead(_1); // scope 0 at $DIR/derefer_terminator_test.rs:+8:1: +8:2
- return; // scope 0 at $DIR/derefer_terminator_test.rs:+8:2: +8:2
- }
- }
-
diff --git a/tests/mir-opt/derefer_terminator_test.main.Derefer.panic-abort.diff b/tests/mir-opt/derefer_terminator_test.main.Derefer.panic-abort.diff
new file mode 100644
index 000000000..895dcf579
--- /dev/null
+++ b/tests/mir-opt/derefer_terminator_test.main.Derefer.panic-abort.diff
@@ -0,0 +1,90 @@
+- // MIR for `main` before Derefer
++ // MIR for `main` after Derefer
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: bool;
+ let _3: ();
+ let mut _4: &&&&bool;
+ let _5: &&&bool;
+ let _6: &&bool;
+ let _7: &bool;
++ let mut _10: &&&bool;
++ let mut _11: &&bool;
++ let mut _12: &bool;
+ scope 1 {
+ debug b => _1;
+ let _2: bool;
+ scope 2 {
+ debug d => _2;
+ let _8: i32;
+ let _9: i32;
+ scope 3 {
+ debug x => _8;
+ }
+ scope 4 {
+ debug y => _9;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = foo() -> [return: bb1, unwind: bb6];
+ }
+
+ bb1: {
+ StorageLive(_2);
+ _2 = foo() -> [return: bb2, unwind: bb6];
+ }
+
+ bb2: {
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &_1;
+ _6 = &_7;
+ _5 = &_6;
+ _4 = &_5;
+- switchInt((*(*(*(*_4))))) -> [0: bb3, otherwise: bb4];
++ _10 = deref_copy (*_4);
++ _11 = deref_copy (*_10);
++ _12 = deref_copy (*_11);
++ switchInt((*_12)) -> [0: bb3, otherwise: bb4];
+ }
+
+ bb3: {
+ _3 = const ();
+ goto -> bb5;
+ }
+
+ bb4: {
+ StorageLive(_8);
+ _8 = const 5_i32;
+ _3 = const ();
+ StorageDead(_8);
+ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageLive(_9);
+ _9 = const 42_i32;
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+
+ bb6 (cleanup): {
+ resume;
+ }
+ }
+
diff --git a/tests/mir-opt/derefer_terminator_test.main.Derefer.panic-unwind.diff b/tests/mir-opt/derefer_terminator_test.main.Derefer.panic-unwind.diff
new file mode 100644
index 000000000..19b26c901
--- /dev/null
+++ b/tests/mir-opt/derefer_terminator_test.main.Derefer.panic-unwind.diff
@@ -0,0 +1,86 @@
+- // MIR for `main` before Derefer
++ // MIR for `main` after Derefer
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: bool;
+ let _3: ();
+ let mut _4: &&&&bool;
+ let _5: &&&bool;
+ let _6: &&bool;
+ let _7: &bool;
++ let mut _10: &&&bool;
++ let mut _11: &&bool;
++ let mut _12: &bool;
+ scope 1 {
+ debug b => _1;
+ let _2: bool;
+ scope 2 {
+ debug d => _2;
+ let _8: i32;
+ let _9: i32;
+ scope 3 {
+ debug x => _8;
+ }
+ scope 4 {
+ debug y => _9;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = foo() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageLive(_2);
+ _2 = foo() -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &_1;
+ _6 = &_7;
+ _5 = &_6;
+ _4 = &_5;
+- switchInt((*(*(*(*_4))))) -> [0: bb3, otherwise: bb4];
++ _10 = deref_copy (*_4);
++ _11 = deref_copy (*_10);
++ _12 = deref_copy (*_11);
++ switchInt((*_12)) -> [0: bb3, otherwise: bb4];
+ }
+
+ bb3: {
+ _3 = const ();
+ goto -> bb5;
+ }
+
+ bb4: {
+ StorageLive(_8);
+ _8 = const 5_i32;
+ _3 = const ();
+ StorageDead(_8);
+ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageLive(_9);
+ _9 = const 42_i32;
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/derefer_terminator_test.rs b/tests/mir-opt/derefer_terminator_test.rs
index d6750c29d..164aa733a 100644
--- a/tests/mir-opt/derefer_terminator_test.rs
+++ b/tests/mir-opt/derefer_terminator_test.rs
@@ -1,6 +1,6 @@
// unit-test: Derefer
// EMIT_MIR derefer_terminator_test.main.Derefer.diff
-// ignore-wasm32
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
fn main() {
let b = foo();
diff --git a/tests/mir-opt/derefer_test.main.Derefer.diff b/tests/mir-opt/derefer_test.main.Derefer.diff
index 87306d818..c50b74051 100644
--- a/tests/mir-opt/derefer_test.main.Derefer.diff
+++ b/tests/mir-opt/derefer_test.main.Derefer.diff
@@ -2,49 +2,49 @@
+ // MIR for `main` after Derefer
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/derefer_test.rs:+0:11: +0:11
- let mut _1: (i32, i32); // in scope 0 at $DIR/derefer_test.rs:+1:9: +1:14
- let mut _3: &mut (i32, i32); // in scope 0 at $DIR/derefer_test.rs:+2:22: +2:28
-+ let mut _6: &mut (i32, i32); // in scope 0 at $DIR/derefer_test.rs:+2:9: +2:14
-+ let mut _7: &mut (i32, i32); // in scope 0 at $DIR/derefer_test.rs:+2:9: +2:14
+ let mut _0: ();
+ let mut _1: (i32, i32);
+ let mut _3: &mut (i32, i32);
++ let mut _6: &mut (i32, i32);
++ let mut _7: &mut (i32, i32);
scope 1 {
- debug a => _1; // in scope 1 at $DIR/derefer_test.rs:+1:9: +1:14
- let mut _2: (i32, &mut (i32, i32)); // in scope 1 at $DIR/derefer_test.rs:+2:9: +2:14
+ debug a => _1;
+ let mut _2: (i32, &mut (i32, i32));
scope 2 {
- debug b => _2; // in scope 2 at $DIR/derefer_test.rs:+2:9: +2:14
- let _4: &mut i32; // in scope 2 at $DIR/derefer_test.rs:+3:9: +3:10
+ debug b => _2;
+ let _4: &mut i32;
scope 3 {
- debug x => _4; // in scope 3 at $DIR/derefer_test.rs:+3:9: +3:10
- let _5: &mut i32; // in scope 3 at $DIR/derefer_test.rs:+4:9: +4:10
+ debug x => _4;
+ let _5: &mut i32;
scope 4 {
- debug y => _5; // in scope 4 at $DIR/derefer_test.rs:+4:9: +4:10
+ debug y => _5;
}
}
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/derefer_test.rs:+1:9: +1:14
- _1 = (const 42_i32, const 43_i32); // scope 0 at $DIR/derefer_test.rs:+1:17: +1:24
- StorageLive(_2); // scope 1 at $DIR/derefer_test.rs:+2:9: +2:14
- StorageLive(_3); // scope 1 at $DIR/derefer_test.rs:+2:22: +2:28
- _3 = &mut _1; // scope 1 at $DIR/derefer_test.rs:+2:22: +2:28
- _2 = (const 99_i32, move _3); // scope 1 at $DIR/derefer_test.rs:+2:17: +2:29
- StorageDead(_3); // scope 1 at $DIR/derefer_test.rs:+2:28: +2:29
- StorageLive(_4); // scope 2 at $DIR/derefer_test.rs:+3:9: +3:10
-- _4 = &mut ((*(_2.1: &mut (i32, i32))).0: i32); // scope 2 at $DIR/derefer_test.rs:+3:13: +3:26
-+ _6 = deref_copy (_2.1: &mut (i32, i32)); // scope 2 at $DIR/derefer_test.rs:+3:13: +3:26
-+ _4 = &mut ((*_6).0: i32); // scope 2 at $DIR/derefer_test.rs:+3:13: +3:26
- StorageLive(_5); // scope 3 at $DIR/derefer_test.rs:+4:9: +4:10
-- _5 = &mut ((*(_2.1: &mut (i32, i32))).1: i32); // scope 3 at $DIR/derefer_test.rs:+4:13: +4:26
-+ _7 = deref_copy (_2.1: &mut (i32, i32)); // scope 3 at $DIR/derefer_test.rs:+4:13: +4:26
-+ _5 = &mut ((*_7).1: i32); // scope 3 at $DIR/derefer_test.rs:+4:13: +4:26
- _0 = const (); // scope 0 at $DIR/derefer_test.rs:+0:11: +5:2
- StorageDead(_5); // scope 3 at $DIR/derefer_test.rs:+5:1: +5:2
- StorageDead(_4); // scope 2 at $DIR/derefer_test.rs:+5:1: +5:2
- StorageDead(_2); // scope 1 at $DIR/derefer_test.rs:+5:1: +5:2
- StorageDead(_1); // scope 0 at $DIR/derefer_test.rs:+5:1: +5:2
- return; // scope 0 at $DIR/derefer_test.rs:+5:2: +5:2
+ StorageLive(_1);
+ _1 = (const 42_i32, const 43_i32);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &mut _1;
+ _2 = (const 99_i32, move _3);
+ StorageDead(_3);
+ StorageLive(_4);
+- _4 = &mut ((*(_2.1: &mut (i32, i32))).0: i32);
++ _6 = deref_copy (_2.1: &mut (i32, i32));
++ _4 = &mut ((*_6).0: i32);
+ StorageLive(_5);
+- _5 = &mut ((*(_2.1: &mut (i32, i32))).1: i32);
++ _7 = deref_copy (_2.1: &mut (i32, i32));
++ _5 = &mut ((*_7).1: i32);
+ _0 = const ();
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/derefer_test_multiple.main.Derefer.diff b/tests/mir-opt/derefer_test_multiple.main.Derefer.diff
index 3e40db118..796131696 100644
--- a/tests/mir-opt/derefer_test_multiple.main.Derefer.diff
+++ b/tests/mir-opt/derefer_test_multiple.main.Derefer.diff
@@ -2,34 +2,34 @@
+ // MIR for `main` after Derefer
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/derefer_test_multiple.rs:+0:12: +0:12
- let mut _1: (i32, i32); // in scope 0 at $DIR/derefer_test_multiple.rs:+1:9: +1:14
- let mut _3: &mut (i32, i32); // in scope 0 at $DIR/derefer_test_multiple.rs:+2:22: +2:28
- let mut _5: &mut (i32, &mut (i32, i32)); // in scope 0 at $DIR/derefer_test_multiple.rs:+3:22: +3:28
- let mut _7: &mut (i32, &mut (i32, &mut (i32, i32))); // in scope 0 at $DIR/derefer_test_multiple.rs:+4:22: +4:28
-+ let mut _10: &mut (i32, &mut (i32, &mut (i32, i32))); // in scope 0 at $DIR/derefer_test_multiple.rs:+4:9: +4:14
-+ let mut _11: &mut (i32, &mut (i32, i32)); // in scope 0 at $DIR/derefer_test_multiple.rs:+4:9: +4:14
-+ let mut _12: &mut (i32, i32); // in scope 0 at $DIR/derefer_test_multiple.rs:+4:9: +4:14
-+ let mut _13: &mut (i32, &mut (i32, &mut (i32, i32))); // in scope 0 at $DIR/derefer_test_multiple.rs:+4:9: +4:14
-+ let mut _14: &mut (i32, &mut (i32, i32)); // in scope 0 at $DIR/derefer_test_multiple.rs:+4:9: +4:14
-+ let mut _15: &mut (i32, i32); // in scope 0 at $DIR/derefer_test_multiple.rs:+4:9: +4:14
+ let mut _0: ();
+ let mut _1: (i32, i32);
+ let mut _3: &mut (i32, i32);
+ let mut _5: &mut (i32, &mut (i32, i32));
+ let mut _7: &mut (i32, &mut (i32, &mut (i32, i32)));
++ let mut _10: &mut (i32, &mut (i32, &mut (i32, i32)));
++ let mut _11: &mut (i32, &mut (i32, i32));
++ let mut _12: &mut (i32, i32);
++ let mut _13: &mut (i32, &mut (i32, &mut (i32, i32)));
++ let mut _14: &mut (i32, &mut (i32, i32));
++ let mut _15: &mut (i32, i32);
scope 1 {
- debug a => _1; // in scope 1 at $DIR/derefer_test_multiple.rs:+1:9: +1:14
- let mut _2: (i32, &mut (i32, i32)); // in scope 1 at $DIR/derefer_test_multiple.rs:+2:9: +2:14
+ debug a => _1;
+ let mut _2: (i32, &mut (i32, i32));
scope 2 {
- debug b => _2; // in scope 2 at $DIR/derefer_test_multiple.rs:+2:9: +2:14
- let mut _4: (i32, &mut (i32, &mut (i32, i32))); // in scope 2 at $DIR/derefer_test_multiple.rs:+3:9: +3:14
+ debug b => _2;
+ let mut _4: (i32, &mut (i32, &mut (i32, i32)));
scope 3 {
- debug c => _4; // in scope 3 at $DIR/derefer_test_multiple.rs:+3:9: +3:14
- let mut _6: (i32, &mut (i32, &mut (i32, &mut (i32, i32)))); // in scope 3 at $DIR/derefer_test_multiple.rs:+4:9: +4:14
+ debug c => _4;
+ let mut _6: (i32, &mut (i32, &mut (i32, &mut (i32, i32))));
scope 4 {
- debug d => _6; // in scope 4 at $DIR/derefer_test_multiple.rs:+4:9: +4:14
- let _8: &mut i32; // in scope 4 at $DIR/derefer_test_multiple.rs:+5:9: +5:10
+ debug d => _6;
+ let _8: &mut i32;
scope 5 {
- debug x => _8; // in scope 5 at $DIR/derefer_test_multiple.rs:+5:9: +5:10
- let _9: &mut i32; // in scope 5 at $DIR/derefer_test_multiple.rs:+6:9: +6:10
+ debug x => _8;
+ let _9: &mut i32;
scope 6 {
- debug y => _9; // in scope 6 at $DIR/derefer_test_multiple.rs:+6:9: +6:10
+ debug y => _9;
}
}
}
@@ -38,43 +38,43 @@
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/derefer_test_multiple.rs:+1:9: +1:14
- _1 = (const 42_i32, const 43_i32); // scope 0 at $DIR/derefer_test_multiple.rs:+1:17: +1:25
- StorageLive(_2); // scope 1 at $DIR/derefer_test_multiple.rs:+2:9: +2:14
- StorageLive(_3); // scope 1 at $DIR/derefer_test_multiple.rs:+2:22: +2:28
- _3 = &mut _1; // scope 1 at $DIR/derefer_test_multiple.rs:+2:22: +2:28
- _2 = (const 99_i32, move _3); // scope 1 at $DIR/derefer_test_multiple.rs:+2:17: +2:29
- StorageDead(_3); // scope 1 at $DIR/derefer_test_multiple.rs:+2:28: +2:29
- StorageLive(_4); // scope 2 at $DIR/derefer_test_multiple.rs:+3:9: +3:14
- StorageLive(_5); // scope 2 at $DIR/derefer_test_multiple.rs:+3:22: +3:28
- _5 = &mut _2; // scope 2 at $DIR/derefer_test_multiple.rs:+3:22: +3:28
- _4 = (const 11_i32, move _5); // scope 2 at $DIR/derefer_test_multiple.rs:+3:17: +3:29
- StorageDead(_5); // scope 2 at $DIR/derefer_test_multiple.rs:+3:28: +3:29
- StorageLive(_6); // scope 3 at $DIR/derefer_test_multiple.rs:+4:9: +4:14
- StorageLive(_7); // scope 3 at $DIR/derefer_test_multiple.rs:+4:22: +4:28
- _7 = &mut _4; // scope 3 at $DIR/derefer_test_multiple.rs:+4:22: +4:28
- _6 = (const 13_i32, move _7); // scope 3 at $DIR/derefer_test_multiple.rs:+4:17: +4:29
- StorageDead(_7); // scope 3 at $DIR/derefer_test_multiple.rs:+4:28: +4:29
- StorageLive(_8); // scope 4 at $DIR/derefer_test_multiple.rs:+5:9: +5:10
-- _8 = &mut ((*((*((*(_6.1: &mut (i32, &mut (i32, &mut (i32, i32))))).1: &mut (i32, &mut (i32, i32)))).1: &mut (i32, i32))).1: i32); // scope 4 at $DIR/derefer_test_multiple.rs:+5:13: +5:30
-+ _10 = deref_copy (_6.1: &mut (i32, &mut (i32, &mut (i32, i32)))); // scope 4 at $DIR/derefer_test_multiple.rs:+5:13: +5:30
-+ _11 = deref_copy ((*_10).1: &mut (i32, &mut (i32, i32))); // scope 4 at $DIR/derefer_test_multiple.rs:+5:13: +5:30
-+ _12 = deref_copy ((*_11).1: &mut (i32, i32)); // scope 4 at $DIR/derefer_test_multiple.rs:+5:13: +5:30
-+ _8 = &mut ((*_12).1: i32); // scope 4 at $DIR/derefer_test_multiple.rs:+5:13: +5:30
- StorageLive(_9); // scope 5 at $DIR/derefer_test_multiple.rs:+6:9: +6:10
-- _9 = &mut ((*((*((*(_6.1: &mut (i32, &mut (i32, &mut (i32, i32))))).1: &mut (i32, &mut (i32, i32)))).1: &mut (i32, i32))).1: i32); // scope 5 at $DIR/derefer_test_multiple.rs:+6:13: +6:30
-+ _13 = deref_copy (_6.1: &mut (i32, &mut (i32, &mut (i32, i32)))); // scope 5 at $DIR/derefer_test_multiple.rs:+6:13: +6:30
-+ _14 = deref_copy ((*_13).1: &mut (i32, &mut (i32, i32))); // scope 5 at $DIR/derefer_test_multiple.rs:+6:13: +6:30
-+ _15 = deref_copy ((*_14).1: &mut (i32, i32)); // scope 5 at $DIR/derefer_test_multiple.rs:+6:13: +6:30
-+ _9 = &mut ((*_15).1: i32); // scope 5 at $DIR/derefer_test_multiple.rs:+6:13: +6:30
- _0 = const (); // scope 0 at $DIR/derefer_test_multiple.rs:+0:12: +7:2
- StorageDead(_9); // scope 5 at $DIR/derefer_test_multiple.rs:+7:1: +7:2
- StorageDead(_8); // scope 4 at $DIR/derefer_test_multiple.rs:+7:1: +7:2
- StorageDead(_6); // scope 3 at $DIR/derefer_test_multiple.rs:+7:1: +7:2
- StorageDead(_4); // scope 2 at $DIR/derefer_test_multiple.rs:+7:1: +7:2
- StorageDead(_2); // scope 1 at $DIR/derefer_test_multiple.rs:+7:1: +7:2
- StorageDead(_1); // scope 0 at $DIR/derefer_test_multiple.rs:+7:1: +7:2
- return; // scope 0 at $DIR/derefer_test_multiple.rs:+7:2: +7:2
+ StorageLive(_1);
+ _1 = (const 42_i32, const 43_i32);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &mut _1;
+ _2 = (const 99_i32, move _3);
+ StorageDead(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = &mut _2;
+ _4 = (const 11_i32, move _5);
+ StorageDead(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &mut _4;
+ _6 = (const 13_i32, move _7);
+ StorageDead(_7);
+ StorageLive(_8);
+- _8 = &mut ((*((*((*(_6.1: &mut (i32, &mut (i32, &mut (i32, i32))))).1: &mut (i32, &mut (i32, i32)))).1: &mut (i32, i32))).1: i32);
++ _10 = deref_copy (_6.1: &mut (i32, &mut (i32, &mut (i32, i32))));
++ _11 = deref_copy ((*_10).1: &mut (i32, &mut (i32, i32)));
++ _12 = deref_copy ((*_11).1: &mut (i32, i32));
++ _8 = &mut ((*_12).1: i32);
+ StorageLive(_9);
+- _9 = &mut ((*((*((*(_6.1: &mut (i32, &mut (i32, &mut (i32, i32))))).1: &mut (i32, &mut (i32, i32)))).1: &mut (i32, i32))).1: i32);
++ _13 = deref_copy (_6.1: &mut (i32, &mut (i32, &mut (i32, i32))));
++ _14 = deref_copy ((*_13).1: &mut (i32, &mut (i32, i32)));
++ _15 = deref_copy ((*_14).1: &mut (i32, i32));
++ _9 = &mut ((*_15).1: i32);
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.diff b/tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.diff
deleted file mode 100644
index b7416d389..000000000
--- a/tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.diff
+++ /dev/null
@@ -1,75 +0,0 @@
-- // MIR for `foo` before DestinationPropagation
-+ // MIR for `foo` after DestinationPropagation
-
- fn foo() -> i32 {
- let mut _0: i32; // return place in scope 0 at $DIR/branch.rs:+0:13: +0:16
- let _1: i32; // in scope 0 at $DIR/branch.rs:+1:9: +1:10
- let mut _3: bool; // in scope 0 at $DIR/branch.rs:+3:16: +3:22
- let _4: i32; // in scope 0 at $DIR/branch.rs:+6:9: +6:14
- scope 1 {
-- debug x => _1; // in scope 1 at $DIR/branch.rs:+1:9: +1:10
-+ debug x => _0; // in scope 1 at $DIR/branch.rs:+1:9: +1:10
- let _2: i32; // in scope 1 at $DIR/branch.rs:+3:9: +3:10
- scope 2 {
-- debug y => _2; // in scope 2 at $DIR/branch.rs:+3:9: +3:10
-+ debug y => _0; // in scope 2 at $DIR/branch.rs:+3:9: +3:10
- }
- }
-
- bb0: {
-- StorageLive(_1); // scope 0 at $DIR/branch.rs:+1:9: +1:10
-- _1 = val() -> bb1; // scope 0 at $DIR/branch.rs:+1:13: +1:18
-+ nop; // scope 0 at $DIR/branch.rs:+1:9: +1:10
-+ _0 = val() -> bb1; // scope 0 at $DIR/branch.rs:+1:13: +1:18
- // mir::Constant
- // + span: $DIR/branch.rs:14:13: 14:16
- // + literal: Const { ty: fn() -> i32 {val}, val: Value(<ZST>) }
- }
-
- bb1: {
-- StorageLive(_2); // scope 1 at $DIR/branch.rs:+3:9: +3:10
-+ nop; // scope 1 at $DIR/branch.rs:+3:9: +3:10
- StorageLive(_3); // scope 1 at $DIR/branch.rs:+3:16: +3:22
- _3 = cond() -> bb2; // scope 1 at $DIR/branch.rs:+3:16: +3:22
- // mir::Constant
- // + span: $DIR/branch.rs:16:16: 16:20
- // + literal: Const { ty: fn() -> bool {cond}, val: Value(<ZST>) }
- }
-
- bb2: {
- switchInt(move _3) -> [0: bb4, otherwise: bb3]; // scope 1 at $DIR/branch.rs:+3:16: +3:22
- }
-
- bb3: {
-- _2 = _1; // scope 1 at $DIR/branch.rs:+4:9: +4:10
-+ nop; // scope 1 at $DIR/branch.rs:+4:9: +4:10
- goto -> bb6; // scope 1 at $DIR/branch.rs:+3:13: +8:6
- }
-
- bb4: {
- StorageLive(_4); // scope 1 at $DIR/branch.rs:+6:9: +6:14
- _4 = val() -> bb5; // scope 1 at $DIR/branch.rs:+6:9: +6:14
- // mir::Constant
- // + span: $DIR/branch.rs:19:9: 19:12
- // + literal: Const { ty: fn() -> i32 {val}, val: Value(<ZST>) }
- }
-
- bb5: {
- StorageDead(_4); // scope 1 at $DIR/branch.rs:+6:14: +6:15
-- _2 = _1; // scope 1 at $DIR/branch.rs:+7:9: +7:10
-+ nop; // scope 1 at $DIR/branch.rs:+7:9: +7:10
- goto -> bb6; // scope 1 at $DIR/branch.rs:+3:13: +8:6
- }
-
- bb6: {
- StorageDead(_3); // scope 1 at $DIR/branch.rs:+8:5: +8:6
-- _0 = _2; // scope 2 at $DIR/branch.rs:+10:5: +10:6
-- StorageDead(_2); // scope 1 at $DIR/branch.rs:+11:1: +11:2
-- StorageDead(_1); // scope 0 at $DIR/branch.rs:+11:1: +11:2
-+ nop; // scope 2 at $DIR/branch.rs:+10:5: +10:6
-+ nop; // scope 1 at $DIR/branch.rs:+11:1: +11:2
-+ nop; // scope 0 at $DIR/branch.rs:+11:1: +11:2
- return; // scope 0 at $DIR/branch.rs:+11:2: +11:2
- }
- }
-
diff --git a/tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.panic-abort.diff b/tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.panic-abort.diff
new file mode 100644
index 000000000..10ec3aa55
--- /dev/null
+++ b/tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.panic-abort.diff
@@ -0,0 +1,66 @@
+- // MIR for `foo` before DestinationPropagation
++ // MIR for `foo` after DestinationPropagation
+
+ fn foo() -> i32 {
+ let mut _0: i32;
+ let _1: i32;
+ let mut _3: bool;
+ let _4: i32;
+ scope 1 {
+- debug x => _1;
++ debug x => _0;
+ let _2: i32;
+ scope 2 {
+- debug y => _2;
++ debug y => _0;
+ }
+ }
+
+ bb0: {
+- StorageLive(_1);
+- _1 = val() -> [return: bb1, unwind unreachable];
++ nop;
++ _0 = val() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- StorageLive(_2);
++ nop;
+ StorageLive(_3);
+ _3 = cond() -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ switchInt(move _3) -> [0: bb4, otherwise: bb3];
+ }
+
+ bb3: {
+- _2 = _1;
++ nop;
+ goto -> bb6;
+ }
+
+ bb4: {
+ StorageLive(_4);
+ _4 = val() -> [return: bb5, unwind unreachable];
+ }
+
+ bb5: {
+ StorageDead(_4);
+- _2 = _1;
++ nop;
+ goto -> bb6;
+ }
+
+ bb6: {
+ StorageDead(_3);
+- _0 = _2;
+- StorageDead(_2);
+- StorageDead(_1);
++ nop;
++ nop;
++ nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.panic-unwind.diff b/tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.panic-unwind.diff
new file mode 100644
index 000000000..759c1cabf
--- /dev/null
+++ b/tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.panic-unwind.diff
@@ -0,0 +1,66 @@
+- // MIR for `foo` before DestinationPropagation
++ // MIR for `foo` after DestinationPropagation
+
+ fn foo() -> i32 {
+ let mut _0: i32;
+ let _1: i32;
+ let mut _3: bool;
+ let _4: i32;
+ scope 1 {
+- debug x => _1;
++ debug x => _0;
+ let _2: i32;
+ scope 2 {
+- debug y => _2;
++ debug y => _0;
+ }
+ }
+
+ bb0: {
+- StorageLive(_1);
+- _1 = val() -> [return: bb1, unwind continue];
++ nop;
++ _0 = val() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+- StorageLive(_2);
++ nop;
+ StorageLive(_3);
+ _3 = cond() -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ switchInt(move _3) -> [0: bb4, otherwise: bb3];
+ }
+
+ bb3: {
+- _2 = _1;
++ nop;
+ goto -> bb6;
+ }
+
+ bb4: {
+ StorageLive(_4);
+ _4 = val() -> [return: bb5, unwind continue];
+ }
+
+ bb5: {
+ StorageDead(_4);
+- _2 = _1;
++ nop;
+ goto -> bb6;
+ }
+
+ bb6: {
+ StorageDead(_3);
+- _0 = _2;
+- StorageDead(_2);
+- StorageDead(_1);
++ nop;
++ nop;
++ nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/branch.rs b/tests/mir-opt/dest-prop/branch.rs
index 7e4276e66..5007aafb6 100644
--- a/tests/mir-opt/dest-prop/branch.rs
+++ b/tests/mir-opt/dest-prop/branch.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
//! Tests that assignment in both branches of an `if` are eliminated.
// unit-test: DestinationPropagation
fn val() -> i32 {
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.diff b/tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.diff
deleted file mode 100644
index 4343a5935..000000000
--- a/tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.diff
+++ /dev/null
@@ -1,26 +0,0 @@
-- // MIR for `arg_src` before DestinationPropagation
-+ // MIR for `arg_src` after DestinationPropagation
-
- fn arg_src(_1: i32) -> i32 {
- debug x => _1; // in scope 0 at $DIR/copy_propagation_arg.rs:+0:12: +0:17
- let mut _0: i32; // return place in scope 0 at $DIR/copy_propagation_arg.rs:+0:27: +0:30
- let _2: i32; // in scope 0 at $DIR/copy_propagation_arg.rs:+1:9: +1:10
- scope 1 {
-- debug y => _2; // in scope 1 at $DIR/copy_propagation_arg.rs:+1:9: +1:10
-+ debug y => _0; // in scope 1 at $DIR/copy_propagation_arg.rs:+1:9: +1:10
- }
-
- bb0: {
-- StorageLive(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+1:9: +1:10
-- _2 = _1; // scope 0 at $DIR/copy_propagation_arg.rs:+1:13: +1:14
-+ nop; // scope 0 at $DIR/copy_propagation_arg.rs:+1:9: +1:10
-+ _0 = _1; // scope 0 at $DIR/copy_propagation_arg.rs:+1:13: +1:14
- _1 = const 123_i32; // scope 1 at $DIR/copy_propagation_arg.rs:+2:5: +2:12
-- _0 = _2; // scope 1 at $DIR/copy_propagation_arg.rs:+3:5: +3:6
-- StorageDead(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+4:1: +4:2
-+ nop; // scope 1 at $DIR/copy_propagation_arg.rs:+3:5: +3:6
-+ nop; // scope 0 at $DIR/copy_propagation_arg.rs:+4:1: +4:2
- return; // scope 0 at $DIR/copy_propagation_arg.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.panic-abort.diff b/tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.panic-abort.diff
new file mode 100644
index 000000000..1aed07f9e
--- /dev/null
+++ b/tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.panic-abort.diff
@@ -0,0 +1,26 @@
+- // MIR for `arg_src` before DestinationPropagation
++ // MIR for `arg_src` after DestinationPropagation
+
+ fn arg_src(_1: i32) -> i32 {
+ debug x => _1;
+ let mut _0: i32;
+ let _2: i32;
+ scope 1 {
+- debug y => _2;
++ debug y => _0;
+ }
+
+ bb0: {
+- StorageLive(_2);
+- _2 = _1;
++ nop;
++ _0 = _1;
+ _1 = const 123_i32;
+- _0 = _2;
+- StorageDead(_2);
++ nop;
++ nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.panic-unwind.diff b/tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.panic-unwind.diff
new file mode 100644
index 000000000..1aed07f9e
--- /dev/null
+++ b/tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.panic-unwind.diff
@@ -0,0 +1,26 @@
+- // MIR for `arg_src` before DestinationPropagation
++ // MIR for `arg_src` after DestinationPropagation
+
+ fn arg_src(_1: i32) -> i32 {
+ debug x => _1;
+ let mut _0: i32;
+ let _2: i32;
+ scope 1 {
+- debug y => _2;
++ debug y => _0;
+ }
+
+ bb0: {
+- StorageLive(_2);
+- _2 = _1;
++ nop;
++ _0 = _1;
+ _1 = const 123_i32;
+- _0 = _2;
+- StorageDead(_2);
++ nop;
++ nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.diff b/tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.diff
deleted file mode 100644
index a61e741f7..000000000
--- a/tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.diff
+++ /dev/null
@@ -1,32 +0,0 @@
-- // MIR for `bar` before DestinationPropagation
-+ // MIR for `bar` after DestinationPropagation
-
- fn bar(_1: u8) -> () {
- debug x => _1; // in scope 0 at $DIR/copy_propagation_arg.rs:+0:8: +0:13
- let mut _0: (); // return place in scope 0 at $DIR/copy_propagation_arg.rs:+0:19: +0:19
- let _2: u8; // in scope 0 at $DIR/copy_propagation_arg.rs:+1:5: +1:13
- let mut _3: u8; // in scope 0 at $DIR/copy_propagation_arg.rs:+1:11: +1:12
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+1:5: +1:13
-- StorageLive(_3); // scope 0 at $DIR/copy_propagation_arg.rs:+1:11: +1:12
-- _3 = _1; // scope 0 at $DIR/copy_propagation_arg.rs:+1:11: +1:12
-- _2 = dummy(move _3) -> bb1; // scope 0 at $DIR/copy_propagation_arg.rs:+1:5: +1:13
-+ nop; // scope 0 at $DIR/copy_propagation_arg.rs:+1:11: +1:12
-+ nop; // scope 0 at $DIR/copy_propagation_arg.rs:+1:11: +1:12
-+ _2 = dummy(move _1) -> bb1; // scope 0 at $DIR/copy_propagation_arg.rs:+1:5: +1:13
- // mir::Constant
- // + span: $DIR/copy_propagation_arg.rs:17:5: 17:10
- // + literal: Const { ty: fn(u8) -> u8 {dummy}, val: Value(<ZST>) }
- }
-
- bb1: {
-- StorageDead(_3); // scope 0 at $DIR/copy_propagation_arg.rs:+1:12: +1:13
-+ nop; // scope 0 at $DIR/copy_propagation_arg.rs:+1:12: +1:13
- StorageDead(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+1:13: +1:14
- _1 = const 5_u8; // scope 0 at $DIR/copy_propagation_arg.rs:+2:5: +2:10
- _0 = const (); // scope 0 at $DIR/copy_propagation_arg.rs:+0:19: +3:2
- return; // scope 0 at $DIR/copy_propagation_arg.rs:+3:2: +3:2
- }
- }
-
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.panic-abort.diff b/tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.panic-abort.diff
new file mode 100644
index 000000000..641dea594
--- /dev/null
+++ b/tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.panic-abort.diff
@@ -0,0 +1,29 @@
+- // MIR for `bar` before DestinationPropagation
++ // MIR for `bar` after DestinationPropagation
+
+ fn bar(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: u8;
+ let mut _3: u8;
+
+ bb0: {
+ StorageLive(_2);
+- StorageLive(_3);
+- _3 = _1;
+- _2 = dummy(move _3) -> [return: bb1, unwind unreachable];
++ nop;
++ nop;
++ _2 = dummy(move _1) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- StorageDead(_3);
++ nop;
+ StorageDead(_2);
+ _1 = const 5_u8;
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.panic-unwind.diff b/tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.panic-unwind.diff
new file mode 100644
index 000000000..8b2835c8c
--- /dev/null
+++ b/tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.panic-unwind.diff
@@ -0,0 +1,29 @@
+- // MIR for `bar` before DestinationPropagation
++ // MIR for `bar` after DestinationPropagation
+
+ fn bar(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: u8;
+ let mut _3: u8;
+
+ bb0: {
+ StorageLive(_2);
+- StorageLive(_3);
+- _3 = _1;
+- _2 = dummy(move _3) -> [return: bb1, unwind continue];
++ nop;
++ nop;
++ _2 = dummy(move _1) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+- StorageDead(_3);
++ nop;
+ StorageDead(_2);
+ _1 = const 5_u8;
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.diff b/tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.diff
deleted file mode 100644
index bc88787e6..000000000
--- a/tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.diff
+++ /dev/null
@@ -1,22 +0,0 @@
-- // MIR for `baz` before DestinationPropagation
-+ // MIR for `baz` after DestinationPropagation
-
- fn baz(_1: i32) -> i32 {
- debug x => _1; // in scope 0 at $DIR/copy_propagation_arg.rs:+0:8: +0:13
- let mut _0: i32; // return place in scope 0 at $DIR/copy_propagation_arg.rs:+0:23: +0:26
- let mut _2: i32; // in scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:10
-
- bb0: {
-- StorageLive(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:10
-- _2 = _1; // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:10
-- _1 = move _2; // scope 0 at $DIR/copy_propagation_arg.rs:+2:5: +2:10
-- StorageDead(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:10
-+ nop; // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:10
-+ nop; // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:10
-+ nop; // scope 0 at $DIR/copy_propagation_arg.rs:+2:5: +2:10
-+ nop; // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:10
- _0 = _1; // scope 0 at $DIR/copy_propagation_arg.rs:+3:5: +3:6
- return; // scope 0 at $DIR/copy_propagation_arg.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.panic-abort.diff b/tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.panic-abort.diff
new file mode 100644
index 000000000..4cddaec01
--- /dev/null
+++ b/tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.panic-abort.diff
@@ -0,0 +1,22 @@
+- // MIR for `baz` before DestinationPropagation
++ // MIR for `baz` after DestinationPropagation
+
+ fn baz(_1: i32) -> i32 {
+ debug x => _1;
+ let mut _0: i32;
+ let mut _2: i32;
+
+ bb0: {
+- StorageLive(_2);
+- _2 = _1;
+- _1 = move _2;
+- StorageDead(_2);
++ nop;
++ nop;
++ nop;
++ nop;
+ _0 = _1;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.panic-unwind.diff b/tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.panic-unwind.diff
new file mode 100644
index 000000000..4cddaec01
--- /dev/null
+++ b/tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.panic-unwind.diff
@@ -0,0 +1,22 @@
+- // MIR for `baz` before DestinationPropagation
++ // MIR for `baz` after DestinationPropagation
+
+ fn baz(_1: i32) -> i32 {
+ debug x => _1;
+ let mut _0: i32;
+ let mut _2: i32;
+
+ bb0: {
+- StorageLive(_2);
+- _2 = _1;
+- _1 = move _2;
+- StorageDead(_2);
++ nop;
++ nop;
++ nop;
++ nop;
+ _0 = _1;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.diff b/tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.diff
deleted file mode 100644
index c7fbecac5..000000000
--- a/tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.diff
+++ /dev/null
@@ -1,32 +0,0 @@
-- // MIR for `foo` before DestinationPropagation
-+ // MIR for `foo` after DestinationPropagation
-
- fn foo(_1: u8) -> () {
- debug x => _1; // in scope 0 at $DIR/copy_propagation_arg.rs:+0:8: +0:13
- let mut _0: (); // return place in scope 0 at $DIR/copy_propagation_arg.rs:+0:19: +0:19
- let mut _2: u8; // in scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:17
- let mut _3: u8; // in scope 0 at $DIR/copy_propagation_arg.rs:+2:15: +2:16
-
- bb0: {
-- StorageLive(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:17
-+ nop; // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:17
- StorageLive(_3); // scope 0 at $DIR/copy_propagation_arg.rs:+2:15: +2:16
- _3 = _1; // scope 0 at $DIR/copy_propagation_arg.rs:+2:15: +2:16
-- _2 = dummy(move _3) -> bb1; // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:17
-+ _1 = dummy(move _3) -> bb1; // scope 0 at $DIR/copy_propagation_arg.rs:+2:9: +2:17
- // mir::Constant
- // + span: $DIR/copy_propagation_arg.rs:12:9: 12:14
- // + literal: Const { ty: fn(u8) -> u8 {dummy}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_3); // scope 0 at $DIR/copy_propagation_arg.rs:+2:16: +2:17
-- _1 = move _2; // scope 0 at $DIR/copy_propagation_arg.rs:+2:5: +2:17
-- StorageDead(_2); // scope 0 at $DIR/copy_propagation_arg.rs:+2:16: +2:17
-+ nop; // scope 0 at $DIR/copy_propagation_arg.rs:+2:5: +2:17
-+ nop; // scope 0 at $DIR/copy_propagation_arg.rs:+2:16: +2:17
- _0 = const (); // scope 0 at $DIR/copy_propagation_arg.rs:+0:19: +3:2
- return; // scope 0 at $DIR/copy_propagation_arg.rs:+3:2: +3:2
- }
- }
-
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.panic-abort.diff b/tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.panic-abort.diff
new file mode 100644
index 000000000..54875cade
--- /dev/null
+++ b/tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.panic-abort.diff
@@ -0,0 +1,29 @@
+- // MIR for `foo` before DestinationPropagation
++ // MIR for `foo` after DestinationPropagation
+
+ fn foo(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let mut _2: u8;
+ let mut _3: u8;
+
+ bb0: {
+- StorageLive(_2);
++ nop;
+ StorageLive(_3);
+ _3 = _1;
+- _2 = dummy(move _3) -> [return: bb1, unwind unreachable];
++ _1 = dummy(move _3) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_3);
+- _1 = move _2;
+- StorageDead(_2);
++ nop;
++ nop;
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.panic-unwind.diff b/tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.panic-unwind.diff
new file mode 100644
index 000000000..b4c8a8927
--- /dev/null
+++ b/tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.panic-unwind.diff
@@ -0,0 +1,29 @@
+- // MIR for `foo` before DestinationPropagation
++ // MIR for `foo` after DestinationPropagation
+
+ fn foo(_1: u8) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let mut _2: u8;
+ let mut _3: u8;
+
+ bb0: {
+- StorageLive(_2);
++ nop;
+ StorageLive(_3);
+ _3 = _1;
+- _2 = dummy(move _3) -> [return: bb1, unwind continue];
++ _1 = dummy(move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_3);
+- _1 = move _2;
+- StorageDead(_2);
++ nop;
++ nop;
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/copy_propagation_arg.rs b/tests/mir-opt/dest-prop/copy_propagation_arg.rs
index 57cb328c2..1f8d58892 100644
--- a/tests/mir-opt/dest-prop/copy_propagation_arg.rs
+++ b/tests/mir-opt/dest-prop/copy_propagation_arg.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Check that DestinationPropagation does not propagate an assignment to a function argument
// (doing so can break usages of the original argument value)
// unit-test: DestinationPropagation
diff --git a/tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.diff b/tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.diff
deleted file mode 100644
index b06f069a2..000000000
--- a/tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.diff
+++ /dev/null
@@ -1,77 +0,0 @@
-- // MIR for `main` before DestinationPropagation
-+ // MIR for `main` after DestinationPropagation
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/cycle.rs:+0:11: +0:11
- let mut _1: i32; // in scope 0 at $DIR/cycle.rs:+1:9: +1:14
- let mut _4: i32; // in scope 0 at $DIR/cycle.rs:+4:9: +4:10
- let _5: (); // in scope 0 at $DIR/cycle.rs:+6:5: +6:12
- let mut _6: i32; // in scope 0 at $DIR/cycle.rs:+6:10: +6:11
- scope 1 {
-- debug x => _1; // in scope 1 at $DIR/cycle.rs:+1:9: +1:14
-+ debug x => _6; // in scope 1 at $DIR/cycle.rs:+1:9: +1:14
- let _2: i32; // in scope 1 at $DIR/cycle.rs:+2:9: +2:10
- scope 2 {
-- debug y => _2; // in scope 2 at $DIR/cycle.rs:+2:9: +2:10
-+ debug y => _6; // in scope 2 at $DIR/cycle.rs:+2:9: +2:10
- let _3: i32; // in scope 2 at $DIR/cycle.rs:+3:9: +3:10
- scope 3 {
-- debug z => _3; // in scope 3 at $DIR/cycle.rs:+3:9: +3:10
-+ debug z => _6; // in scope 3 at $DIR/cycle.rs:+3:9: +3:10
- }
- }
- }
-
- bb0: {
-- StorageLive(_1); // scope 0 at $DIR/cycle.rs:+1:9: +1:14
-- _1 = val() -> bb1; // scope 0 at $DIR/cycle.rs:+1:17: +1:22
-+ nop; // scope 0 at $DIR/cycle.rs:+1:9: +1:14
-+ _6 = val() -> bb1; // scope 0 at $DIR/cycle.rs:+1:17: +1:22
- // mir::Constant
- // + span: $DIR/cycle.rs:10:17: 10:20
- // + literal: Const { ty: fn() -> i32 {val}, val: Value(<ZST>) }
- }
-
- bb1: {
-- StorageLive(_2); // scope 1 at $DIR/cycle.rs:+2:9: +2:10
-- _2 = _1; // scope 1 at $DIR/cycle.rs:+2:13: +2:14
-- StorageLive(_3); // scope 2 at $DIR/cycle.rs:+3:9: +3:10
-- _3 = _2; // scope 2 at $DIR/cycle.rs:+3:13: +3:14
-- StorageLive(_4); // scope 3 at $DIR/cycle.rs:+4:9: +4:10
-- _4 = _3; // scope 3 at $DIR/cycle.rs:+4:9: +4:10
-- _1 = move _4; // scope 3 at $DIR/cycle.rs:+4:5: +4:10
-- StorageDead(_4); // scope 3 at $DIR/cycle.rs:+4:9: +4:10
-+ nop; // scope 1 at $DIR/cycle.rs:+2:9: +2:10
-+ nop; // scope 1 at $DIR/cycle.rs:+2:13: +2:14
-+ nop; // scope 2 at $DIR/cycle.rs:+3:9: +3:10
-+ nop; // scope 2 at $DIR/cycle.rs:+3:13: +3:14
-+ nop; // scope 3 at $DIR/cycle.rs:+4:9: +4:10
-+ nop; // scope 3 at $DIR/cycle.rs:+4:9: +4:10
-+ nop; // scope 3 at $DIR/cycle.rs:+4:5: +4:10
-+ nop; // scope 3 at $DIR/cycle.rs:+4:9: +4:10
- StorageLive(_5); // scope 3 at $DIR/cycle.rs:+6:5: +6:12
-- StorageLive(_6); // scope 3 at $DIR/cycle.rs:+6:10: +6:11
-- _6 = _1; // scope 3 at $DIR/cycle.rs:+6:10: +6:11
-+ nop; // scope 3 at $DIR/cycle.rs:+6:10: +6:11
-+ nop; // scope 3 at $DIR/cycle.rs:+6:10: +6:11
- _5 = std::mem::drop::<i32>(move _6) -> bb2; // scope 3 at $DIR/cycle.rs:+6:5: +6:12
- // mir::Constant
- // + span: $DIR/cycle.rs:15:5: 15:9
- // + literal: Const { ty: fn(i32) {std::mem::drop::<i32>}, val: Value(<ZST>) }
- }
-
- bb2: {
-- StorageDead(_6); // scope 3 at $DIR/cycle.rs:+6:11: +6:12
-+ nop; // scope 3 at $DIR/cycle.rs:+6:11: +6:12
- StorageDead(_5); // scope 3 at $DIR/cycle.rs:+6:12: +6:13
- _0 = const (); // scope 0 at $DIR/cycle.rs:+0:11: +7:2
-- StorageDead(_3); // scope 2 at $DIR/cycle.rs:+7:1: +7:2
-- StorageDead(_2); // scope 1 at $DIR/cycle.rs:+7:1: +7:2
-- StorageDead(_1); // scope 0 at $DIR/cycle.rs:+7:1: +7:2
-+ nop; // scope 2 at $DIR/cycle.rs:+7:1: +7:2
-+ nop; // scope 1 at $DIR/cycle.rs:+7:1: +7:2
-+ nop; // scope 0 at $DIR/cycle.rs:+7:1: +7:2
- return; // scope 0 at $DIR/cycle.rs:+7:2: +7:2
- }
- }
-
diff --git a/tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.panic-abort.diff b/tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.panic-abort.diff
new file mode 100644
index 000000000..98b4ee866
--- /dev/null
+++ b/tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.panic-abort.diff
@@ -0,0 +1,71 @@
+- // MIR for `main` before DestinationPropagation
++ // MIR for `main` after DestinationPropagation
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _4: i32;
+ let _5: ();
+ let mut _6: i32;
+ scope 1 {
+- debug x => _1;
++ debug x => _6;
+ let _2: i32;
+ scope 2 {
+- debug y => _2;
++ debug y => _6;
+ let _3: i32;
+ scope 3 {
+- debug z => _3;
++ debug z => _6;
+ }
+ }
+ }
+
+ bb0: {
+- StorageLive(_1);
+- _1 = val() -> [return: bb1, unwind unreachable];
++ nop;
++ _6 = val() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- StorageLive(_2);
+- _2 = _1;
+- StorageLive(_3);
+- _3 = _2;
+- StorageLive(_4);
+- _4 = _3;
+- _1 = move _4;
+- StorageDead(_4);
++ nop;
++ nop;
++ nop;
++ nop;
++ nop;
++ nop;
++ nop;
++ nop;
+ StorageLive(_5);
+- StorageLive(_6);
+- _6 = _1;
++ nop;
++ nop;
+ _5 = std::mem::drop::<i32>(move _6) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+- StorageDead(_6);
++ nop;
+ StorageDead(_5);
+ _0 = const ();
+- StorageDead(_3);
+- StorageDead(_2);
+- StorageDead(_1);
++ nop;
++ nop;
++ nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.panic-unwind.diff b/tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.panic-unwind.diff
new file mode 100644
index 000000000..6f6e01d37
--- /dev/null
+++ b/tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.panic-unwind.diff
@@ -0,0 +1,71 @@
+- // MIR for `main` before DestinationPropagation
++ // MIR for `main` after DestinationPropagation
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _4: i32;
+ let _5: ();
+ let mut _6: i32;
+ scope 1 {
+- debug x => _1;
++ debug x => _6;
+ let _2: i32;
+ scope 2 {
+- debug y => _2;
++ debug y => _6;
+ let _3: i32;
+ scope 3 {
+- debug z => _3;
++ debug z => _6;
+ }
+ }
+ }
+
+ bb0: {
+- StorageLive(_1);
+- _1 = val() -> [return: bb1, unwind continue];
++ nop;
++ _6 = val() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+- StorageLive(_2);
+- _2 = _1;
+- StorageLive(_3);
+- _3 = _2;
+- StorageLive(_4);
+- _4 = _3;
+- _1 = move _4;
+- StorageDead(_4);
++ nop;
++ nop;
++ nop;
++ nop;
++ nop;
++ nop;
++ nop;
++ nop;
+ StorageLive(_5);
+- StorageLive(_6);
+- _6 = _1;
++ nop;
++ nop;
+ _5 = std::mem::drop::<i32>(move _6) -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+- StorageDead(_6);
++ nop;
+ StorageDead(_5);
+ _0 = const ();
+- StorageDead(_3);
+- StorageDead(_2);
+- StorageDead(_1);
++ nop;
++ nop;
++ nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/cycle.rs b/tests/mir-opt/dest-prop/cycle.rs
index 3aea19d80..9bc0cb05a 100644
--- a/tests/mir-opt/dest-prop/cycle.rs
+++ b/tests/mir-opt/dest-prop/cycle.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
//! Tests that cyclic assignments don't hang DestinationPropagation, and result in reasonable code.
// unit-test: DestinationPropagation
fn val() -> i32 {
diff --git a/tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.mir b/tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.mir
deleted file mode 100644
index b9d4b59d2..000000000
--- a/tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.mir
+++ /dev/null
@@ -1,34 +0,0 @@
-// MIR for `f` after DestinationPropagation
-
-fn f(_1: usize) -> usize {
- debug a => _1; // in scope 0 at $DIR/dead_stores_79191.rs:+0:6: +0:11
- let mut _0: usize; // return place in scope 0 at $DIR/dead_stores_79191.rs:+0:23: +0:28
- let _2: usize; // in scope 0 at $DIR/dead_stores_79191.rs:+1:9: +1:10
- let mut _3: usize; // in scope 0 at $DIR/dead_stores_79191.rs:+3:9: +3:10
- let mut _4: usize; // in scope 0 at $DIR/dead_stores_79191.rs:+4:8: +4:9
- scope 1 {
- debug b => _3; // in scope 1 at $DIR/dead_stores_79191.rs:+1:9: +1:10
- }
-
- bb0: {
- nop; // scope 0 at $DIR/dead_stores_79191.rs:+1:9: +1:10
- _3 = _1; // scope 0 at $DIR/dead_stores_79191.rs:+1:13: +1:14
- _1 = const 5_usize; // scope 1 at $DIR/dead_stores_79191.rs:+2:5: +2:10
- nop; // scope 1 at $DIR/dead_stores_79191.rs:+3:9: +3:10
- nop; // scope 1 at $DIR/dead_stores_79191.rs:+3:9: +3:10
- _1 = move _3; // scope 1 at $DIR/dead_stores_79191.rs:+3:5: +3:10
- nop; // scope 1 at $DIR/dead_stores_79191.rs:+3:9: +3:10
- nop; // scope 1 at $DIR/dead_stores_79191.rs:+4:8: +4:9
- nop; // scope 1 at $DIR/dead_stores_79191.rs:+4:8: +4:9
- _0 = id::<usize>(move _1) -> bb1; // scope 1 at $DIR/dead_stores_79191.rs:+4:5: +4:10
- // mir::Constant
- // + span: $DIR/dead_stores_79191.rs:13:5: 13:7
- // + literal: Const { ty: fn(usize) -> usize {id::<usize>}, val: Value(<ZST>) }
- }
-
- bb1: {
- nop; // scope 1 at $DIR/dead_stores_79191.rs:+4:9: +4:10
- nop; // scope 0 at $DIR/dead_stores_79191.rs:+5:1: +5:2
- return; // scope 0 at $DIR/dead_stores_79191.rs:+5:2: +5:2
- }
-}
diff --git a/tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.panic-abort.mir b/tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.panic-abort.mir
new file mode 100644
index 000000000..eb160fc19
--- /dev/null
+++ b/tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.panic-abort.mir
@@ -0,0 +1,31 @@
+// MIR for `f` after DestinationPropagation
+
+fn f(_1: usize) -> usize {
+ debug a => _1;
+ let mut _0: usize;
+ let _2: usize;
+ let mut _3: usize;
+ let mut _4: usize;
+ scope 1 {
+ debug b => _3;
+ }
+
+ bb0: {
+ nop;
+ _3 = _1;
+ _1 = const 5_usize;
+ nop;
+ nop;
+ _1 = move _3;
+ nop;
+ nop;
+ nop;
+ _0 = id::<usize>(move _1) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ nop;
+ nop;
+ return;
+ }
+}
diff --git a/tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.panic-unwind.mir b/tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.panic-unwind.mir
new file mode 100644
index 000000000..9147de2ec
--- /dev/null
+++ b/tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.panic-unwind.mir
@@ -0,0 +1,31 @@
+// MIR for `f` after DestinationPropagation
+
+fn f(_1: usize) -> usize {
+ debug a => _1;
+ let mut _0: usize;
+ let _2: usize;
+ let mut _3: usize;
+ let mut _4: usize;
+ scope 1 {
+ debug b => _3;
+ }
+
+ bb0: {
+ nop;
+ _3 = _1;
+ _1 = const 5_usize;
+ nop;
+ nop;
+ _1 = move _3;
+ nop;
+ nop;
+ nop;
+ _0 = id::<usize>(move _1) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ nop;
+ nop;
+ return;
+ }
+}
diff --git a/tests/mir-opt/dest-prop/dead_stores_79191.rs b/tests/mir-opt/dest-prop/dead_stores_79191.rs
index 9d4814838..2f95ba0e3 100644
--- a/tests/mir-opt/dest-prop/dead_stores_79191.rs
+++ b/tests/mir-opt/dest-prop/dead_stores_79191.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: DestinationPropagation
fn id<T>(x: T) -> T {
diff --git a/tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.mir b/tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.mir
deleted file mode 100644
index 9eb0e09bf..000000000
--- a/tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.mir
+++ /dev/null
@@ -1,33 +0,0 @@
-// MIR for `f` after DestinationPropagation
-
-fn f(_1: usize) -> usize {
- debug a => _1; // in scope 0 at $DIR/dead_stores_better.rs:+0:10: +0:15
- let mut _0: usize; // return place in scope 0 at $DIR/dead_stores_better.rs:+0:27: +0:32
- let _2: usize; // in scope 0 at $DIR/dead_stores_better.rs:+1:9: +1:10
- let mut _3: usize; // in scope 0 at $DIR/dead_stores_better.rs:+3:9: +3:10
- let mut _4: usize; // in scope 0 at $DIR/dead_stores_better.rs:+4:8: +4:9
- scope 1 {
- debug b => _1; // in scope 1 at $DIR/dead_stores_better.rs:+1:9: +1:10
- }
-
- bb0: {
- nop; // scope 0 at $DIR/dead_stores_better.rs:+1:9: +1:10
- nop; // scope 0 at $DIR/dead_stores_better.rs:+1:13: +1:14
- nop; // scope 1 at $DIR/dead_stores_better.rs:+3:9: +3:10
- nop; // scope 1 at $DIR/dead_stores_better.rs:+3:9: +3:10
- nop; // scope 1 at $DIR/dead_stores_better.rs:+3:5: +3:10
- nop; // scope 1 at $DIR/dead_stores_better.rs:+3:9: +3:10
- nop; // scope 1 at $DIR/dead_stores_better.rs:+4:8: +4:9
- nop; // scope 1 at $DIR/dead_stores_better.rs:+4:8: +4:9
- _0 = id::<usize>(move _1) -> bb1; // scope 1 at $DIR/dead_stores_better.rs:+4:5: +4:10
- // mir::Constant
- // + span: $DIR/dead_stores_better.rs:17:5: 17:7
- // + literal: Const { ty: fn(usize) -> usize {id::<usize>}, val: Value(<ZST>) }
- }
-
- bb1: {
- nop; // scope 1 at $DIR/dead_stores_better.rs:+4:9: +4:10
- nop; // scope 0 at $DIR/dead_stores_better.rs:+5:1: +5:2
- return; // scope 0 at $DIR/dead_stores_better.rs:+5:2: +5:2
- }
-}
diff --git a/tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.panic-abort.mir b/tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.panic-abort.mir
new file mode 100644
index 000000000..a3ec09010
--- /dev/null
+++ b/tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.panic-abort.mir
@@ -0,0 +1,30 @@
+// MIR for `f` after DestinationPropagation
+
+fn f(_1: usize) -> usize {
+ debug a => _1;
+ let mut _0: usize;
+ let _2: usize;
+ let mut _3: usize;
+ let mut _4: usize;
+ scope 1 {
+ debug b => _1;
+ }
+
+ bb0: {
+ nop;
+ nop;
+ nop;
+ nop;
+ nop;
+ nop;
+ nop;
+ nop;
+ _0 = id::<usize>(move _1) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ nop;
+ nop;
+ return;
+ }
+}
diff --git a/tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.panic-unwind.mir b/tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.panic-unwind.mir
new file mode 100644
index 000000000..185feb4b4
--- /dev/null
+++ b/tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.panic-unwind.mir
@@ -0,0 +1,30 @@
+// MIR for `f` after DestinationPropagation
+
+fn f(_1: usize) -> usize {
+ debug a => _1;
+ let mut _0: usize;
+ let _2: usize;
+ let mut _3: usize;
+ let mut _4: usize;
+ scope 1 {
+ debug b => _1;
+ }
+
+ bb0: {
+ nop;
+ nop;
+ nop;
+ nop;
+ nop;
+ nop;
+ nop;
+ nop;
+ _0 = id::<usize>(move _1) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ nop;
+ nop;
+ return;
+ }
+}
diff --git a/tests/mir-opt/dest-prop/dead_stores_better.rs b/tests/mir-opt/dest-prop/dead_stores_better.rs
index 72d406bfd..e67653c57 100644
--- a/tests/mir-opt/dest-prop/dead_stores_better.rs
+++ b/tests/mir-opt/dest-prop/dead_stores_better.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// This is a copy of the `dead_stores_79191` test, except that we turn on DSE. This demonstrates
// that that pass enables this one to do more optimizations.
diff --git a/tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.diff b/tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.diff
deleted file mode 100644
index c2a3a0025..000000000
--- a/tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.diff
+++ /dev/null
@@ -1,43 +0,0 @@
-- // MIR for `nrvo` before DestinationPropagation
-+ // MIR for `nrvo` after DestinationPropagation
-
- fn nrvo(_1: for<'a> fn(&'a mut [u8; 1024])) -> [u8; 1024] {
- debug init => _1; // in scope 0 at $DIR/simple.rs:+0:9: +0:13
- let mut _0: [u8; 1024]; // return place in scope 0 at $DIR/simple.rs:+0:39: +0:49
- let mut _2: [u8; 1024]; // in scope 0 at $DIR/simple.rs:+1:9: +1:16
- let _3: (); // in scope 0 at $DIR/simple.rs:+2:5: +2:19
- let mut _4: for<'a> fn(&'a mut [u8; 1024]); // in scope 0 at $DIR/simple.rs:+2:5: +2:9
- let mut _5: &mut [u8; 1024]; // in scope 0 at $DIR/simple.rs:+2:10: +2:18
- let mut _6: &mut [u8; 1024]; // in scope 0 at $DIR/simple.rs:+2:10: +2:18
- scope 1 {
- debug buf => _2; // in scope 1 at $DIR/simple.rs:+1:9: +1:16
- }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/simple.rs:+1:9: +1:16
- _2 = [const 0_u8; 1024]; // scope 0 at $DIR/simple.rs:+1:19: +1:28
- StorageLive(_3); // scope 1 at $DIR/simple.rs:+2:5: +2:19
-- StorageLive(_4); // scope 1 at $DIR/simple.rs:+2:5: +2:9
-- _4 = _1; // scope 1 at $DIR/simple.rs:+2:5: +2:9
-+ nop; // scope 1 at $DIR/simple.rs:+2:5: +2:9
-+ nop; // scope 1 at $DIR/simple.rs:+2:5: +2:9
- StorageLive(_5); // scope 1 at $DIR/simple.rs:+2:10: +2:18
- StorageLive(_6); // scope 1 at $DIR/simple.rs:+2:10: +2:18
- _6 = &mut _2; // scope 1 at $DIR/simple.rs:+2:10: +2:18
- _5 = &mut (*_6); // scope 1 at $DIR/simple.rs:+2:10: +2:18
-- _3 = move _4(move _5) -> bb1; // scope 1 at $DIR/simple.rs:+2:5: +2:19
-+ _3 = move _1(move _5) -> bb1; // scope 1 at $DIR/simple.rs:+2:5: +2:19
- }
-
- bb1: {
- StorageDead(_5); // scope 1 at $DIR/simple.rs:+2:18: +2:19
-- StorageDead(_4); // scope 1 at $DIR/simple.rs:+2:18: +2:19
-+ nop; // scope 1 at $DIR/simple.rs:+2:18: +2:19
- StorageDead(_6); // scope 1 at $DIR/simple.rs:+2:19: +2:20
- StorageDead(_3); // scope 1 at $DIR/simple.rs:+2:19: +2:20
- _0 = _2; // scope 1 at $DIR/simple.rs:+3:5: +3:8
- StorageDead(_2); // scope 0 at $DIR/simple.rs:+4:1: +4:2
- return; // scope 0 at $DIR/simple.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.panic-abort.diff b/tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.panic-abort.diff
new file mode 100644
index 000000000..4d34f43fd
--- /dev/null
+++ b/tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.panic-abort.diff
@@ -0,0 +1,43 @@
+- // MIR for `nrvo` before DestinationPropagation
++ // MIR for `nrvo` after DestinationPropagation
+
+ fn nrvo(_1: for<'a> fn(&'a mut [u8; 1024])) -> [u8; 1024] {
+ debug init => _1;
+ let mut _0: [u8; 1024];
+ let mut _2: [u8; 1024];
+ let _3: ();
+ let mut _4: for<'a> fn(&'a mut [u8; 1024]);
+ let mut _5: &mut [u8; 1024];
+ let mut _6: &mut [u8; 1024];
+ scope 1 {
+ debug buf => _2;
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = [const 0_u8; 1024];
+ StorageLive(_3);
+- StorageLive(_4);
+- _4 = _1;
++ nop;
++ nop;
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = &mut _2;
+ _5 = &mut (*_6);
+- _3 = move _4(move _5) -> [return: bb1, unwind unreachable];
++ _3 = move _1(move _5) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_5);
+- StorageDead(_4);
++ nop;
+ StorageDead(_6);
+ StorageDead(_3);
+ _0 = _2;
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.panic-unwind.diff b/tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.panic-unwind.diff
new file mode 100644
index 000000000..9c3cbef38
--- /dev/null
+++ b/tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.panic-unwind.diff
@@ -0,0 +1,43 @@
+- // MIR for `nrvo` before DestinationPropagation
++ // MIR for `nrvo` after DestinationPropagation
+
+ fn nrvo(_1: for<'a> fn(&'a mut [u8; 1024])) -> [u8; 1024] {
+ debug init => _1;
+ let mut _0: [u8; 1024];
+ let mut _2: [u8; 1024];
+ let _3: ();
+ let mut _4: for<'a> fn(&'a mut [u8; 1024]);
+ let mut _5: &mut [u8; 1024];
+ let mut _6: &mut [u8; 1024];
+ scope 1 {
+ debug buf => _2;
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = [const 0_u8; 1024];
+ StorageLive(_3);
+- StorageLive(_4);
+- _4 = _1;
++ nop;
++ nop;
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = &mut _2;
+ _5 = &mut (*_6);
+- _3 = move _4(move _5) -> [return: bb1, unwind continue];
++ _3 = move _1(move _5) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_5);
+- StorageDead(_4);
++ nop;
+ StorageDead(_6);
+ StorageDead(_3);
+ _0 = _2;
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/simple.rs b/tests/mir-opt/dest-prop/simple.rs
index 3a4aec34e..0bcb2924f 100644
--- a/tests/mir-opt/dest-prop/simple.rs
+++ b/tests/mir-opt/dest-prop/simple.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
//! Copy of `nrvo-simple.rs`, to ensure that full dest-prop handles it too.
// unit-test: DestinationPropagation
// EMIT_MIR simple.nrvo.DestinationPropagation.diff
diff --git a/tests/mir-opt/dest-prop/union.main.DestinationPropagation.diff b/tests/mir-opt/dest-prop/union.main.DestinationPropagation.diff
deleted file mode 100644
index 457fc8308..000000000
--- a/tests/mir-opt/dest-prop/union.main.DestinationPropagation.diff
+++ /dev/null
@@ -1,35 +0,0 @@
-- // MIR for `main` before DestinationPropagation
-+ // MIR for `main` after DestinationPropagation
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/union.rs:+0:11: +0:11
- let _1: main::Un; // in scope 0 at $DIR/union.rs:+5:9: +5:11
- let mut _2: u32; // in scope 0 at $DIR/union.rs:+5:23: +5:28
- let mut _3: u32; // in scope 0 at $DIR/union.rs:+7:10: +7:26
- scope 1 {
- debug un => _1; // in scope 1 at $DIR/union.rs:+5:9: +5:11
- scope 2 {
- }
- scope 3 (inlined std::mem::drop::<u32>) { // at $DIR/union.rs:16:5: 16:27
- debug _x => _3; // in scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/union.rs:+5:9: +5:11
- StorageLive(_2); // scope 0 at $DIR/union.rs:+5:23: +5:28
- _2 = val() -> bb1; // scope 0 at $DIR/union.rs:+5:23: +5:28
- // mir::Constant
- // + span: $DIR/union.rs:14:23: 14:26
- // + literal: Const { ty: fn() -> u32 {val}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_2); // scope 0 at $DIR/union.rs:+5:29: +5:30
- StorageLive(_3); // scope 1 at $DIR/union.rs:+7:10: +7:26
- StorageDead(_3); // scope 1 at $DIR/union.rs:+7:26: +7:27
- StorageDead(_1); // scope 0 at $DIR/union.rs:+8:1: +8:2
- return; // scope 0 at $DIR/union.rs:+8:2: +8:2
- }
- }
-
diff --git a/tests/mir-opt/dest-prop/union.main.DestinationPropagation.panic-abort.diff b/tests/mir-opt/dest-prop/union.main.DestinationPropagation.panic-abort.diff
new file mode 100644
index 000000000..459a9c442
--- /dev/null
+++ b/tests/mir-opt/dest-prop/union.main.DestinationPropagation.panic-abort.diff
@@ -0,0 +1,32 @@
+- // MIR for `main` before DestinationPropagation
++ // MIR for `main` after DestinationPropagation
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: main::Un;
+ let mut _2: u32;
+ let mut _3: u32;
+ scope 1 {
+ debug un => _1;
+ scope 2 {
+ }
+ scope 3 (inlined std::mem::drop::<u32>) {
+ debug _x => _3;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = val() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ StorageLive(_3);
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/union.main.DestinationPropagation.panic-unwind.diff b/tests/mir-opt/dest-prop/union.main.DestinationPropagation.panic-unwind.diff
new file mode 100644
index 000000000..d2eef9058
--- /dev/null
+++ b/tests/mir-opt/dest-prop/union.main.DestinationPropagation.panic-unwind.diff
@@ -0,0 +1,32 @@
+- // MIR for `main` before DestinationPropagation
++ // MIR for `main` after DestinationPropagation
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: main::Un;
+ let mut _2: u32;
+ let mut _3: u32;
+ scope 1 {
+ debug un => _1;
+ scope 2 {
+ }
+ scope 3 (inlined std::mem::drop::<u32>) {
+ debug _x => _3;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = val() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ StorageLive(_3);
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/union.rs b/tests/mir-opt/dest-prop/union.rs
index 062d02d06..4bc6f28c6 100644
--- a/tests/mir-opt/dest-prop/union.rs
+++ b/tests/mir-opt/dest-prop/union.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
//! Tests that we can propagate into places that are projections into unions
// compile-flags: -Zunsound-mir-opts
fn val() -> u32 {
diff --git a/tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.diff b/tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.diff
deleted file mode 100644
index ae63d724d..000000000
--- a/tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.diff
+++ /dev/null
@@ -1,86 +0,0 @@
-- // MIR for `f` before DestinationPropagation
-+ // MIR for `f` after DestinationPropagation
-
- fn f(_1: T) -> () {
- debug a => _1; // in scope 0 at $DIR/unreachable.rs:+0:19: +0:20
- let mut _0: (); // return place in scope 0 at $DIR/unreachable.rs:+0:25: +0:25
- let _2: T; // in scope 0 at $DIR/unreachable.rs:+1:9: +1:10
- let mut _3: bool; // in scope 0 at $DIR/unreachable.rs:+2:8: +2:13
- let _4: (); // in scope 0 at $DIR/unreachable.rs:+3:9: +3:16
- let mut _5: T; // in scope 0 at $DIR/unreachable.rs:+3:11: +3:12
- let mut _6: T; // in scope 0 at $DIR/unreachable.rs:+3:14: +3:15
- let _7: (); // in scope 0 at $DIR/unreachable.rs:+5:9: +5:16
- let mut _8: T; // in scope 0 at $DIR/unreachable.rs:+5:11: +5:12
- let mut _9: T; // in scope 0 at $DIR/unreachable.rs:+5:14: +5:15
- scope 1 {
-- debug b => _2; // in scope 1 at $DIR/unreachable.rs:+1:9: +1:10
-+ debug b => _1; // in scope 1 at $DIR/unreachable.rs:+1:9: +1:10
- }
-
- bb0: {
-- StorageLive(_2); // scope 0 at $DIR/unreachable.rs:+1:9: +1:10
-- _2 = _1; // scope 0 at $DIR/unreachable.rs:+1:13: +1:14
-+ nop; // scope 0 at $DIR/unreachable.rs:+1:9: +1:10
-+ nop; // scope 0 at $DIR/unreachable.rs:+1:13: +1:14
- StorageLive(_3); // scope 1 at $DIR/unreachable.rs:+2:8: +2:13
- _3 = const false; // scope 1 at $DIR/unreachable.rs:+2:8: +2:13
-- goto -> bb3; // scope 1 at $DIR/unreachable.rs:+2:8: +2:13
-+ goto -> bb1; // scope 1 at $DIR/unreachable.rs:+2:8: +2:13
- }
-
- bb1: {
-- StorageLive(_4); // scope 1 at $DIR/unreachable.rs:+3:9: +3:16
-- StorageLive(_5); // scope 1 at $DIR/unreachable.rs:+3:11: +3:12
-- _5 = _1; // scope 1 at $DIR/unreachable.rs:+3:11: +3:12
-- StorageLive(_6); // scope 1 at $DIR/unreachable.rs:+3:14: +3:15
-- _6 = _2; // scope 1 at $DIR/unreachable.rs:+3:14: +3:15
-- _4 = g::<T>(move _5, move _6) -> bb2; // scope 1 at $DIR/unreachable.rs:+3:9: +3:16
-- // mir::Constant
-- // + span: $DIR/unreachable.rs:12:9: 12:10
-- // + literal: Const { ty: fn(T, T) {g::<T>}, val: Value(<ZST>) }
-- }
--
-- bb2: {
-- StorageDead(_6); // scope 1 at $DIR/unreachable.rs:+3:15: +3:16
-- StorageDead(_5); // scope 1 at $DIR/unreachable.rs:+3:15: +3:16
-- StorageDead(_4); // scope 1 at $DIR/unreachable.rs:+3:16: +3:17
-- _0 = const (); // scope 1 at $DIR/unreachable.rs:+2:14: +4:6
-- goto -> bb5; // scope 1 at $DIR/unreachable.rs:+2:5: +6:6
-- }
--
-- bb3: {
- StorageLive(_7); // scope 1 at $DIR/unreachable.rs:+5:9: +5:16
-- StorageLive(_8); // scope 1 at $DIR/unreachable.rs:+5:11: +5:12
-- _8 = _2; // scope 1 at $DIR/unreachable.rs:+5:11: +5:12
-+ nop; // scope 1 at $DIR/unreachable.rs:+5:11: +5:12
-+ nop; // scope 1 at $DIR/unreachable.rs:+5:11: +5:12
- StorageLive(_9); // scope 1 at $DIR/unreachable.rs:+5:14: +5:15
-- _9 = _2; // scope 1 at $DIR/unreachable.rs:+5:14: +5:15
-- _7 = g::<T>(move _8, move _9) -> bb4; // scope 1 at $DIR/unreachable.rs:+5:9: +5:16
-+ _9 = _1; // scope 1 at $DIR/unreachable.rs:+5:14: +5:15
-+ _7 = g::<T>(move _1, move _9) -> bb2; // scope 1 at $DIR/unreachable.rs:+5:9: +5:16
- // mir::Constant
- // + span: $DIR/unreachable.rs:14:9: 14:10
- // + literal: Const { ty: fn(T, T) {g::<T>}, val: Value(<ZST>) }
- }
-
-- bb4: {
-+ bb2: {
- StorageDead(_9); // scope 1 at $DIR/unreachable.rs:+5:15: +5:16
-- StorageDead(_8); // scope 1 at $DIR/unreachable.rs:+5:15: +5:16
-+ nop; // scope 1 at $DIR/unreachable.rs:+5:15: +5:16
- StorageDead(_7); // scope 1 at $DIR/unreachable.rs:+5:16: +5:17
- _0 = const (); // scope 1 at $DIR/unreachable.rs:+4:12: +6:6
-- goto -> bb5; // scope 1 at $DIR/unreachable.rs:+2:5: +6:6
-+ goto -> bb3; // scope 1 at $DIR/unreachable.rs:+2:5: +6:6
- }
-
-- bb5: {
-+ bb3: {
- StorageDead(_3); // scope 1 at $DIR/unreachable.rs:+6:5: +6:6
-- StorageDead(_2); // scope 0 at $DIR/unreachable.rs:+7:1: +7:2
-+ nop; // scope 0 at $DIR/unreachable.rs:+7:1: +7:2
- return; // scope 0 at $DIR/unreachable.rs:+7:2: +7:2
- }
- }
-
diff --git a/tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.panic-abort.diff b/tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.panic-abort.diff
new file mode 100644
index 000000000..97ca82509
--- /dev/null
+++ b/tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.panic-abort.diff
@@ -0,0 +1,80 @@
+- // MIR for `f` before DestinationPropagation
++ // MIR for `f` after DestinationPropagation
+
+ fn f(_1: T) -> () {
+ debug a => _1;
+ let mut _0: ();
+ let _2: T;
+ let mut _3: bool;
+ let _4: ();
+ let mut _5: T;
+ let mut _6: T;
+ let _7: ();
+ let mut _8: T;
+ let mut _9: T;
+ scope 1 {
+- debug b => _2;
++ debug b => _1;
+ }
+
+ bb0: {
+- StorageLive(_2);
+- _2 = _1;
++ nop;
++ nop;
+ StorageLive(_3);
+ _3 = const false;
+- goto -> bb3;
++ goto -> bb1;
+ }
+
+ bb1: {
+- StorageLive(_4);
+- StorageLive(_5);
+- _5 = _1;
+- StorageLive(_6);
+- _6 = _2;
+- _4 = g::<T>(move _5, move _6) -> [return: bb2, unwind unreachable];
+- }
+-
+- bb2: {
+- StorageDead(_6);
+- StorageDead(_5);
+- StorageDead(_4);
+- _0 = const ();
+- goto -> bb5;
+- }
+-
+- bb3: {
+ StorageLive(_7);
+- StorageLive(_8);
+- _8 = _2;
++ nop;
++ nop;
+ StorageLive(_9);
+- _9 = _2;
+- _7 = g::<T>(move _8, move _9) -> [return: bb4, unwind unreachable];
++ _9 = _1;
++ _7 = g::<T>(move _1, move _9) -> [return: bb2, unwind unreachable];
+ }
+
+- bb4: {
++ bb2: {
+ StorageDead(_9);
+- StorageDead(_8);
++ nop;
+ StorageDead(_7);
+ _0 = const ();
+- goto -> bb5;
++ goto -> bb3;
+ }
+
+- bb5: {
++ bb3: {
+ StorageDead(_3);
+- StorageDead(_2);
++ nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.panic-unwind.diff b/tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.panic-unwind.diff
new file mode 100644
index 000000000..7f730a77b
--- /dev/null
+++ b/tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.panic-unwind.diff
@@ -0,0 +1,80 @@
+- // MIR for `f` before DestinationPropagation
++ // MIR for `f` after DestinationPropagation
+
+ fn f(_1: T) -> () {
+ debug a => _1;
+ let mut _0: ();
+ let _2: T;
+ let mut _3: bool;
+ let _4: ();
+ let mut _5: T;
+ let mut _6: T;
+ let _7: ();
+ let mut _8: T;
+ let mut _9: T;
+ scope 1 {
+- debug b => _2;
++ debug b => _1;
+ }
+
+ bb0: {
+- StorageLive(_2);
+- _2 = _1;
++ nop;
++ nop;
+ StorageLive(_3);
+ _3 = const false;
+- goto -> bb3;
++ goto -> bb1;
+ }
+
+ bb1: {
+- StorageLive(_4);
+- StorageLive(_5);
+- _5 = _1;
+- StorageLive(_6);
+- _6 = _2;
+- _4 = g::<T>(move _5, move _6) -> [return: bb2, unwind continue];
+- }
+-
+- bb2: {
+- StorageDead(_6);
+- StorageDead(_5);
+- StorageDead(_4);
+- _0 = const ();
+- goto -> bb5;
+- }
+-
+- bb3: {
+ StorageLive(_7);
+- StorageLive(_8);
+- _8 = _2;
++ nop;
++ nop;
+ StorageLive(_9);
+- _9 = _2;
+- _7 = g::<T>(move _8, move _9) -> [return: bb4, unwind continue];
++ _9 = _1;
++ _7 = g::<T>(move _1, move _9) -> [return: bb2, unwind continue];
+ }
+
+- bb4: {
++ bb2: {
+ StorageDead(_9);
+- StorageDead(_8);
++ nop;
+ StorageDead(_7);
+ _0 = const ();
+- goto -> bb5;
++ goto -> bb3;
+ }
+
+- bb5: {
++ bb3: {
+ StorageDead(_3);
+- StorageDead(_2);
++ nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/dest-prop/unreachable.rs b/tests/mir-opt/dest-prop/unreachable.rs
index c73d11ae3..e950dbbf5 100644
--- a/tests/mir-opt/dest-prop/unreachable.rs
+++ b/tests/mir-opt/dest-prop/unreachable.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Check that unreachable code is removed after the destination propagation.
// Regression test for issue #105428.
//
diff --git a/tests/mir-opt/dont_yeet_assert.generic.InstSimplify.diff b/tests/mir-opt/dont_yeet_assert.generic.InstSimplify.diff
index cadf05152..98d9d24af 100644
--- a/tests/mir-opt/dont_yeet_assert.generic.InstSimplify.diff
+++ b/tests/mir-opt/dont_yeet_assert.generic.InstSimplify.diff
@@ -2,22 +2,18 @@
+ // MIR for `generic` after InstSimplify
fn generic() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/dont_yeet_assert.rs:+0:21: +0:21
- let _1: (); // in scope 0 at $DIR/dont_yeet_assert.rs:+1:5: +1:61
+ let mut _0: ();
+ let _1: ();
bb0: {
- StorageLive(_1); // scope 0 at $DIR/dont_yeet_assert.rs:+1:5: +1:61
- _1 = assert_mem_uninitialized_valid::<&T>() -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/dont_yeet_assert.rs:+1:5: +1:61
- // mir::Constant
- // + span: $DIR/dont_yeet_assert.rs:10:5: 10:59
- // + user_ty: UserType(0)
- // + literal: Const { ty: extern "rust-intrinsic" fn() {assert_mem_uninitialized_valid::<&T>}, val: Value(<ZST>) }
+ StorageLive(_1);
+ _1 = assert_mem_uninitialized_valid::<&T>() -> [return: bb1, unwind unreachable];
}
bb1: {
- StorageDead(_1); // scope 0 at $DIR/dont_yeet_assert.rs:+1:61: +1:62
- _0 = const (); // scope 0 at $DIR/dont_yeet_assert.rs:+0:21: +2:2
- return; // scope 0 at $DIR/dont_yeet_assert.rs:+2:2: +2:2
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/early_otherwise_branch.opt1.EarlyOtherwiseBranch.diff b/tests/mir-opt/early_otherwise_branch.opt1.EarlyOtherwiseBranch.diff
index 5383d1be1..7a374c567 100644
--- a/tests/mir-opt/early_otherwise_branch.opt1.EarlyOtherwiseBranch.diff
+++ b/tests/mir-opt/early_otherwise_branch.opt1.EarlyOtherwiseBranch.diff
@@ -2,75 +2,75 @@
+ // MIR for `opt1` after EarlyOtherwiseBranch
fn opt1(_1: Option<u32>, _2: Option<u32>) -> u32 {
- debug x => _1; // in scope 0 at $DIR/early_otherwise_branch.rs:+0:9: +0:10
- debug y => _2; // in scope 0 at $DIR/early_otherwise_branch.rs:+0:25: +0:26
- let mut _0: u32; // return place in scope 0 at $DIR/early_otherwise_branch.rs:+0:44: +0:47
- let mut _3: (std::option::Option<u32>, std::option::Option<u32>); // in scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
- let mut _4: std::option::Option<u32>; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13
- let mut _5: std::option::Option<u32>; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
- let mut _6: isize; // in scope 0 at $DIR/early_otherwise_branch.rs:+2:19: +2:26
- let mut _7: isize; // in scope 0 at $DIR/early_otherwise_branch.rs:+2:10: +2:17
- let _8: u32; // in scope 0 at $DIR/early_otherwise_branch.rs:+2:15: +2:16
- let _9: u32; // in scope 0 at $DIR/early_otherwise_branch.rs:+2:24: +2:25
-+ let mut _10: isize; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ let mut _11: bool; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
+ debug x => _1;
+ debug y => _2;
+ let mut _0: u32;
+ let mut _3: (std::option::Option<u32>, std::option::Option<u32>);
+ let mut _4: std::option::Option<u32>;
+ let mut _5: std::option::Option<u32>;
+ let mut _6: isize;
+ let mut _7: isize;
+ let _8: u32;
+ let _9: u32;
++ let mut _10: isize;
++ let mut _11: bool;
scope 1 {
- debug a => _8; // in scope 1 at $DIR/early_otherwise_branch.rs:+2:15: +2:16
- debug b => _9; // in scope 1 at $DIR/early_otherwise_branch.rs:+2:24: +2:25
+ debug a => _8;
+ debug b => _9;
}
bb0: {
- StorageLive(_3); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
- StorageLive(_4); // scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13
- _4 = _1; // scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13
- StorageLive(_5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
- _5 = _2; // scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
- _3 = (move _4, move _5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
- StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:16: +1:17
- StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch.rs:+1:16: +1:17
- _7 = discriminant((_3.0: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
-- switchInt(move _7) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ StorageLive(_10); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ _10 = discriminant((_3.1: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ StorageLive(_11); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ _11 = Ne(_7, move _10); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ StorageDead(_10); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ switchInt(move _11) -> [0: bb4, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ _5 = _2;
+ _3 = (move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ _7 = discriminant((_3.0: std::option::Option<u32>));
+- switchInt(move _7) -> [1: bb2, otherwise: bb1];
++ StorageLive(_10);
++ _10 = discriminant((_3.1: std::option::Option<u32>));
++ StorageLive(_11);
++ _11 = Ne(_7, move _10);
++ StorageDead(_10);
++ switchInt(move _11) -> [0: bb4, otherwise: bb1];
}
bb1: {
-+ StorageDead(_11); // scope 0 at $DIR/early_otherwise_branch.rs:+3:14: +3:15
- _0 = const 1_u32; // scope 0 at $DIR/early_otherwise_branch.rs:+3:14: +3:15
-- goto -> bb4; // scope 0 at $DIR/early_otherwise_branch.rs:+3:14: +3:15
-+ goto -> bb3; // scope 0 at $DIR/early_otherwise_branch.rs:+3:14: +3:15
++ StorageDead(_11);
+ _0 = const 1_u32;
+- goto -> bb4;
++ goto -> bb3;
}
bb2: {
-- _6 = discriminant((_3.1: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
-- switchInt(move _6) -> [1: bb3, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
+- _6 = discriminant((_3.1: std::option::Option<u32>));
+- switchInt(move _6) -> [1: bb3, otherwise: bb1];
- }
-
- bb3: {
- StorageLive(_8); // scope 0 at $DIR/early_otherwise_branch.rs:+2:15: +2:16
- _8 = (((_3.0: std::option::Option<u32>) as Some).0: u32); // scope 0 at $DIR/early_otherwise_branch.rs:+2:15: +2:16
- StorageLive(_9); // scope 0 at $DIR/early_otherwise_branch.rs:+2:24: +2:25
- _9 = (((_3.1: std::option::Option<u32>) as Some).0: u32); // scope 0 at $DIR/early_otherwise_branch.rs:+2:24: +2:25
- _0 = const 0_u32; // scope 1 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
- StorageDead(_9); // scope 0 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
- StorageDead(_8); // scope 0 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
-- goto -> bb4; // scope 0 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
-+ goto -> bb3; // scope 0 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
+ StorageLive(_8);
+ _8 = (((_3.0: std::option::Option<u32>) as Some).0: u32);
+ StorageLive(_9);
+ _9 = (((_3.1: std::option::Option<u32>) as Some).0: u32);
+ _0 = const 0_u32;
+ StorageDead(_9);
+ StorageDead(_8);
+- goto -> bb4;
++ goto -> bb3;
}
- bb4: {
+ bb3: {
- StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch.rs:+5:1: +5:2
- return; // scope 0 at $DIR/early_otherwise_branch.rs:+5:2: +5:2
+ StorageDead(_3);
+ return;
+ }
+
+ bb4: {
-+ StorageDead(_11); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ switchInt(_7) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
++ StorageDead(_11);
++ switchInt(_7) -> [1: bb2, otherwise: bb1];
}
}
diff --git a/tests/mir-opt/early_otherwise_branch.opt2.EarlyOtherwiseBranch.diff b/tests/mir-opt/early_otherwise_branch.opt2.EarlyOtherwiseBranch.diff
index b3e21ff49..21f58a14a 100644
--- a/tests/mir-opt/early_otherwise_branch.opt2.EarlyOtherwiseBranch.diff
+++ b/tests/mir-opt/early_otherwise_branch.opt2.EarlyOtherwiseBranch.diff
@@ -2,89 +2,89 @@
+ // MIR for `opt2` after EarlyOtherwiseBranch
fn opt2(_1: Option<u32>, _2: Option<u32>) -> u32 {
- debug x => _1; // in scope 0 at $DIR/early_otherwise_branch.rs:+0:9: +0:10
- debug y => _2; // in scope 0 at $DIR/early_otherwise_branch.rs:+0:25: +0:26
- let mut _0: u32; // return place in scope 0 at $DIR/early_otherwise_branch.rs:+0:44: +0:47
- let mut _3: (std::option::Option<u32>, std::option::Option<u32>); // in scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
- let mut _4: std::option::Option<u32>; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13
- let mut _5: std::option::Option<u32>; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
- let mut _6: isize; // in scope 0 at $DIR/early_otherwise_branch.rs:+3:16: +3:20
- let mut _7: isize; // in scope 0 at $DIR/early_otherwise_branch.rs:+2:19: +2:26
- let mut _8: isize; // in scope 0 at $DIR/early_otherwise_branch.rs:+2:10: +2:17
- let _9: u32; // in scope 0 at $DIR/early_otherwise_branch.rs:+2:15: +2:16
- let _10: u32; // in scope 0 at $DIR/early_otherwise_branch.rs:+2:24: +2:25
-+ let mut _11: isize; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ let mut _12: bool; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
+ debug x => _1;
+ debug y => _2;
+ let mut _0: u32;
+ let mut _3: (std::option::Option<u32>, std::option::Option<u32>);
+ let mut _4: std::option::Option<u32>;
+ let mut _5: std::option::Option<u32>;
+ let mut _6: isize;
+ let mut _7: isize;
+ let mut _8: isize;
+ let _9: u32;
+ let _10: u32;
++ let mut _11: isize;
++ let mut _12: bool;
scope 1 {
- debug a => _9; // in scope 1 at $DIR/early_otherwise_branch.rs:+2:15: +2:16
- debug b => _10; // in scope 1 at $DIR/early_otherwise_branch.rs:+2:24: +2:25
+ debug a => _9;
+ debug b => _10;
}
bb0: {
- StorageLive(_3); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
- StorageLive(_4); // scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13
- _4 = _1; // scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13
- StorageLive(_5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
- _5 = _2; // scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
- _3 = (move _4, move _5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
- StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:16: +1:17
- StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch.rs:+1:16: +1:17
- _8 = discriminant((_3.0: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
-- switchInt(move _8) -> [0: bb1, 1: bb3, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ StorageLive(_11); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ _11 = discriminant((_3.1: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ StorageLive(_12); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ _12 = Ne(_8, move _11); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ StorageDead(_11); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ switchInt(move _12) -> [0: bb5, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ _5 = _2;
+ _3 = (move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ _8 = discriminant((_3.0: std::option::Option<u32>));
+- switchInt(move _8) -> [0: bb1, 1: bb3, otherwise: bb2];
++ StorageLive(_11);
++ _11 = discriminant((_3.1: std::option::Option<u32>));
++ StorageLive(_12);
++ _12 = Ne(_8, move _11);
++ StorageDead(_11);
++ switchInt(move _12) -> [0: bb5, otherwise: bb1];
}
bb1: {
-- _6 = discriminant((_3.1: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
-- switchInt(move _6) -> [0: bb5, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
+- _6 = discriminant((_3.1: std::option::Option<u32>));
+- switchInt(move _6) -> [0: bb5, otherwise: bb2];
- }
-
- bb2: {
-+ StorageDead(_12); // scope 0 at $DIR/early_otherwise_branch.rs:+4:14: +4:15
- _0 = const 1_u32; // scope 0 at $DIR/early_otherwise_branch.rs:+4:14: +4:15
-- goto -> bb6; // scope 0 at $DIR/early_otherwise_branch.rs:+4:14: +4:15
-+ goto -> bb4; // scope 0 at $DIR/early_otherwise_branch.rs:+4:14: +4:15
++ StorageDead(_12);
+ _0 = const 1_u32;
+- goto -> bb6;
++ goto -> bb4;
}
- bb3: {
-- _7 = discriminant((_3.1: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
-- switchInt(move _7) -> [1: bb4, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
+- _7 = discriminant((_3.1: std::option::Option<u32>));
+- switchInt(move _7) -> [1: bb4, otherwise: bb2];
- }
-
- bb4: {
+ bb2: {
- StorageLive(_9); // scope 0 at $DIR/early_otherwise_branch.rs:+2:15: +2:16
- _9 = (((_3.0: std::option::Option<u32>) as Some).0: u32); // scope 0 at $DIR/early_otherwise_branch.rs:+2:15: +2:16
- StorageLive(_10); // scope 0 at $DIR/early_otherwise_branch.rs:+2:24: +2:25
- _10 = (((_3.1: std::option::Option<u32>) as Some).0: u32); // scope 0 at $DIR/early_otherwise_branch.rs:+2:24: +2:25
- _0 = const 0_u32; // scope 1 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
- StorageDead(_10); // scope 0 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
- StorageDead(_9); // scope 0 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
-- goto -> bb6; // scope 0 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
-+ goto -> bb4; // scope 0 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
+ StorageLive(_9);
+ _9 = (((_3.0: std::option::Option<u32>) as Some).0: u32);
+ StorageLive(_10);
+ _10 = (((_3.1: std::option::Option<u32>) as Some).0: u32);
+ _0 = const 0_u32;
+ StorageDead(_10);
+ StorageDead(_9);
+- goto -> bb6;
++ goto -> bb4;
}
- bb5: {
+ bb3: {
- _0 = const 0_u32; // scope 0 at $DIR/early_otherwise_branch.rs:+3:25: +3:26
-- goto -> bb6; // scope 0 at $DIR/early_otherwise_branch.rs:+3:25: +3:26
-+ goto -> bb4; // scope 0 at $DIR/early_otherwise_branch.rs:+3:25: +3:26
+ _0 = const 0_u32;
+- goto -> bb6;
++ goto -> bb4;
}
- bb6: {
+ bb4: {
- StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch.rs:+6:1: +6:2
- return; // scope 0 at $DIR/early_otherwise_branch.rs:+6:2: +6:2
+ StorageDead(_3);
+ return;
+ }
+
+ bb5: {
-+ StorageDead(_12); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ switchInt(_8) -> [0: bb3, 1: bb2, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
++ StorageDead(_12);
++ switchInt(_8) -> [0: bb3, 1: bb2, otherwise: bb1];
}
}
diff --git a/tests/mir-opt/early_otherwise_branch.opt3.EarlyOtherwiseBranch.diff b/tests/mir-opt/early_otherwise_branch.opt3.EarlyOtherwiseBranch.diff
index e098a88eb..e058c409c 100644
--- a/tests/mir-opt/early_otherwise_branch.opt3.EarlyOtherwiseBranch.diff
+++ b/tests/mir-opt/early_otherwise_branch.opt3.EarlyOtherwiseBranch.diff
@@ -2,75 +2,75 @@
+ // MIR for `opt3` after EarlyOtherwiseBranch
fn opt3(_1: Option<u32>, _2: Option<bool>) -> u32 {
- debug x => _1; // in scope 0 at $DIR/early_otherwise_branch.rs:+0:9: +0:10
- debug y => _2; // in scope 0 at $DIR/early_otherwise_branch.rs:+0:25: +0:26
- let mut _0: u32; // return place in scope 0 at $DIR/early_otherwise_branch.rs:+0:45: +0:48
- let mut _3: (std::option::Option<u32>, std::option::Option<bool>); // in scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
- let mut _4: std::option::Option<u32>; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13
- let mut _5: std::option::Option<bool>; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
- let mut _6: isize; // in scope 0 at $DIR/early_otherwise_branch.rs:+2:19: +2:26
- let mut _7: isize; // in scope 0 at $DIR/early_otherwise_branch.rs:+2:10: +2:17
- let _8: u32; // in scope 0 at $DIR/early_otherwise_branch.rs:+2:15: +2:16
- let _9: bool; // in scope 0 at $DIR/early_otherwise_branch.rs:+2:24: +2:25
-+ let mut _10: isize; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ let mut _11: bool; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
+ debug x => _1;
+ debug y => _2;
+ let mut _0: u32;
+ let mut _3: (std::option::Option<u32>, std::option::Option<bool>);
+ let mut _4: std::option::Option<u32>;
+ let mut _5: std::option::Option<bool>;
+ let mut _6: isize;
+ let mut _7: isize;
+ let _8: u32;
+ let _9: bool;
++ let mut _10: isize;
++ let mut _11: bool;
scope 1 {
- debug a => _8; // in scope 1 at $DIR/early_otherwise_branch.rs:+2:15: +2:16
- debug b => _9; // in scope 1 at $DIR/early_otherwise_branch.rs:+2:24: +2:25
+ debug a => _8;
+ debug b => _9;
}
bb0: {
- StorageLive(_3); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
- StorageLive(_4); // scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13
- _4 = _1; // scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13
- StorageLive(_5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
- _5 = _2; // scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
- _3 = (move _4, move _5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
- StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:16: +1:17
- StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch.rs:+1:16: +1:17
- _7 = discriminant((_3.0: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
-- switchInt(move _7) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ StorageLive(_10); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ _10 = discriminant((_3.1: std::option::Option<bool>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ StorageLive(_11); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ _11 = Ne(_7, move _10); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ StorageDead(_10); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ switchInt(move _11) -> [0: bb4, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ _5 = _2;
+ _3 = (move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ _7 = discriminant((_3.0: std::option::Option<u32>));
+- switchInt(move _7) -> [1: bb2, otherwise: bb1];
++ StorageLive(_10);
++ _10 = discriminant((_3.1: std::option::Option<bool>));
++ StorageLive(_11);
++ _11 = Ne(_7, move _10);
++ StorageDead(_10);
++ switchInt(move _11) -> [0: bb4, otherwise: bb1];
}
bb1: {
-+ StorageDead(_11); // scope 0 at $DIR/early_otherwise_branch.rs:+3:14: +3:15
- _0 = const 1_u32; // scope 0 at $DIR/early_otherwise_branch.rs:+3:14: +3:15
-- goto -> bb4; // scope 0 at $DIR/early_otherwise_branch.rs:+3:14: +3:15
-+ goto -> bb3; // scope 0 at $DIR/early_otherwise_branch.rs:+3:14: +3:15
++ StorageDead(_11);
+ _0 = const 1_u32;
+- goto -> bb4;
++ goto -> bb3;
}
bb2: {
-- _6 = discriminant((_3.1: std::option::Option<bool>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
-- switchInt(move _6) -> [1: bb3, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
+- _6 = discriminant((_3.1: std::option::Option<bool>));
+- switchInt(move _6) -> [1: bb3, otherwise: bb1];
- }
-
- bb3: {
- StorageLive(_8); // scope 0 at $DIR/early_otherwise_branch.rs:+2:15: +2:16
- _8 = (((_3.0: std::option::Option<u32>) as Some).0: u32); // scope 0 at $DIR/early_otherwise_branch.rs:+2:15: +2:16
- StorageLive(_9); // scope 0 at $DIR/early_otherwise_branch.rs:+2:24: +2:25
- _9 = (((_3.1: std::option::Option<bool>) as Some).0: bool); // scope 0 at $DIR/early_otherwise_branch.rs:+2:24: +2:25
- _0 = const 0_u32; // scope 1 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
- StorageDead(_9); // scope 0 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
- StorageDead(_8); // scope 0 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
-- goto -> bb4; // scope 0 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
-+ goto -> bb3; // scope 0 at $DIR/early_otherwise_branch.rs:+2:31: +2:32
+ StorageLive(_8);
+ _8 = (((_3.0: std::option::Option<u32>) as Some).0: u32);
+ StorageLive(_9);
+ _9 = (((_3.1: std::option::Option<bool>) as Some).0: bool);
+ _0 = const 0_u32;
+ StorageDead(_9);
+ StorageDead(_8);
+- goto -> bb4;
++ goto -> bb3;
}
- bb4: {
+ bb3: {
- StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch.rs:+5:1: +5:2
- return; // scope 0 at $DIR/early_otherwise_branch.rs:+5:2: +5:2
+ StorageDead(_3);
+ return;
+ }
+
+ bb4: {
-+ StorageDead(_11); // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
-+ switchInt(_7) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch.rs:+1:5: +1:17
++ StorageDead(_11);
++ switchInt(_7) -> [1: bb2, otherwise: bb1];
}
}
diff --git a/tests/mir-opt/early_otherwise_branch_3_element_tuple.opt1.EarlyOtherwiseBranch.diff b/tests/mir-opt/early_otherwise_branch_3_element_tuple.opt1.EarlyOtherwiseBranch.diff
index ec3b4bbdf..f98d68e6f 100644
--- a/tests/mir-opt/early_otherwise_branch_3_element_tuple.opt1.EarlyOtherwiseBranch.diff
+++ b/tests/mir-opt/early_otherwise_branch_3_element_tuple.opt1.EarlyOtherwiseBranch.diff
@@ -2,96 +2,96 @@
+ // MIR for `opt1` after EarlyOtherwiseBranch
fn opt1(_1: Option<u32>, _2: Option<u32>, _3: Option<u32>) -> u32 {
- debug x => _1; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+0:9: +0:10
- debug y => _2; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+0:25: +0:26
- debug z => _3; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+0:41: +0:42
- let mut _0: u32; // return place in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+0:60: +0:63
- let mut _4: (std::option::Option<u32>, std::option::Option<u32>, std::option::Option<u32>); // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:11: +1:20
- let mut _5: std::option::Option<u32>; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:12: +1:13
- let mut _6: std::option::Option<u32>; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:15: +1:16
- let mut _7: std::option::Option<u32>; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:18: +1:19
- let mut _8: isize; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:28: +2:35
- let mut _9: isize; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:19: +2:26
- let mut _10: isize; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:10: +2:17
- let _11: u32; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:15: +2:16
- let _12: u32; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:24: +2:25
- let _13: u32; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:33: +2:34
-+ let mut _14: isize; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
-+ let mut _15: bool; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
-+ let mut _16: isize; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
-+ let mut _17: bool; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
+ debug x => _1;
+ debug y => _2;
+ debug z => _3;
+ let mut _0: u32;
+ let mut _4: (std::option::Option<u32>, std::option::Option<u32>, std::option::Option<u32>);
+ let mut _5: std::option::Option<u32>;
+ let mut _6: std::option::Option<u32>;
+ let mut _7: std::option::Option<u32>;
+ let mut _8: isize;
+ let mut _9: isize;
+ let mut _10: isize;
+ let _11: u32;
+ let _12: u32;
+ let _13: u32;
++ let mut _14: isize;
++ let mut _15: bool;
++ let mut _16: isize;
++ let mut _17: bool;
scope 1 {
- debug a => _11; // in scope 1 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:15: +2:16
- debug b => _12; // in scope 1 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:24: +2:25
- debug c => _13; // in scope 1 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:33: +2:34
+ debug a => _11;
+ debug b => _12;
+ debug c => _13;
}
bb0: {
- StorageLive(_4); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:11: +1:20
- StorageLive(_5); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:12: +1:13
- _5 = _1; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:12: +1:13
- StorageLive(_6); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:15: +1:16
- _6 = _2; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:15: +1:16
- StorageLive(_7); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:18: +1:19
- _7 = _3; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:18: +1:19
- _4 = (move _5, move _6, move _7); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:11: +1:20
- StorageDead(_7); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:19: +1:20
- StorageDead(_6); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:19: +1:20
- StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:19: +1:20
- _10 = discriminant((_4.0: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:11: +1:20
-- switchInt(move _10) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
-+ StorageLive(_14); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
-+ _14 = discriminant((_4.1: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
-+ StorageLive(_15); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
-+ _15 = Ne(_10, move _14); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
-+ StorageDead(_14); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
-+ switchInt(move _15) -> [0: bb5, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _1;
+ StorageLive(_6);
+ _6 = _2;
+ StorageLive(_7);
+ _7 = _3;
+ _4 = (move _5, move _6, move _7);
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_5);
+ _10 = discriminant((_4.0: std::option::Option<u32>));
+- switchInt(move _10) -> [1: bb2, otherwise: bb1];
++ StorageLive(_14);
++ _14 = discriminant((_4.1: std::option::Option<u32>));
++ StorageLive(_15);
++ _15 = Ne(_10, move _14);
++ StorageDead(_14);
++ switchInt(move _15) -> [0: bb5, otherwise: bb1];
}
bb1: {
-+ StorageDead(_17); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+3:14: +3:15
-+ StorageDead(_15); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+3:14: +3:15
- _0 = const 1_u32; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+3:14: +3:15
-- goto -> bb5; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+3:14: +3:15
-+ goto -> bb4; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+3:14: +3:15
++ StorageDead(_17);
++ StorageDead(_15);
+ _0 = const 1_u32;
+- goto -> bb5;
++ goto -> bb4;
}
bb2: {
-- _9 = discriminant((_4.1: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:11: +1:20
-- switchInt(move _9) -> [1: bb3, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
+- _9 = discriminant((_4.1: std::option::Option<u32>));
+- switchInt(move _9) -> [1: bb3, otherwise: bb1];
- }
-
- bb3: {
- _8 = discriminant((_4.2: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:11: +1:20
-- switchInt(move _8) -> [1: bb4, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
-+ switchInt(move _8) -> [1: bb3, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
+ _8 = discriminant((_4.2: std::option::Option<u32>));
+- switchInt(move _8) -> [1: bb4, otherwise: bb1];
++ switchInt(move _8) -> [1: bb3, otherwise: bb1];
}
- bb4: {
+ bb3: {
- StorageLive(_11); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:15: +2:16
- _11 = (((_4.0: std::option::Option<u32>) as Some).0: u32); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:15: +2:16
- StorageLive(_12); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:24: +2:25
- _12 = (((_4.1: std::option::Option<u32>) as Some).0: u32); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:24: +2:25
- StorageLive(_13); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:33: +2:34
- _13 = (((_4.2: std::option::Option<u32>) as Some).0: u32); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:33: +2:34
- _0 = const 0_u32; // scope 1 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:40: +2:41
- StorageDead(_13); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:40: +2:41
- StorageDead(_12); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:40: +2:41
- StorageDead(_11); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:40: +2:41
-- goto -> bb5; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:40: +2:41
-+ goto -> bb4; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+2:40: +2:41
+ StorageLive(_11);
+ _11 = (((_4.0: std::option::Option<u32>) as Some).0: u32);
+ StorageLive(_12);
+ _12 = (((_4.1: std::option::Option<u32>) as Some).0: u32);
+ StorageLive(_13);
+ _13 = (((_4.2: std::option::Option<u32>) as Some).0: u32);
+ _0 = const 0_u32;
+ StorageDead(_13);
+ StorageDead(_12);
+ StorageDead(_11);
+- goto -> bb5;
++ goto -> bb4;
}
- bb5: {
+ bb4: {
- StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+5:1: +5:2
- return; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+5:2: +5:2
+ StorageDead(_4);
+ return;
+ }
+
+ bb5: {
-+ StorageDead(_15); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
-+ switchInt(_10) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:5: +1:20
++ StorageDead(_15);
++ switchInt(_10) -> [1: bb2, otherwise: bb1];
}
}
diff --git a/tests/mir-opt/early_otherwise_branch_68867.try_sum.EarlyOtherwiseBranch.diff b/tests/mir-opt/early_otherwise_branch_68867.try_sum.EarlyOtherwiseBranch.diff
index a91d0d7cf..0c94794fa 100644
--- a/tests/mir-opt/early_otherwise_branch_68867.try_sum.EarlyOtherwiseBranch.diff
+++ b/tests/mir-opt/early_otherwise_branch_68867.try_sum.EarlyOtherwiseBranch.diff
@@ -2,216 +2,216 @@
+ // MIR for `try_sum` after EarlyOtherwiseBranch
fn try_sum(_1: &ViewportPercentageLength, _2: &ViewportPercentageLength) -> Result<ViewportPercentageLength, ()> {
- debug x => _1; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+1:5: +1:6
- debug other => _2; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+2:5: +2:10
- let mut _0: std::result::Result<ViewportPercentageLength, ()>; // return place in scope 0 at $DIR/early_otherwise_branch_68867.rs:+3:6: +3:42
- let mut _3: ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +11:6
- let mut _4: (&ViewportPercentageLength, &ViewportPercentageLength); // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _5: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:15: +5:16
- let mut _6: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:18: +5:23
- let mut _7: isize; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:21: +6:30
- let mut _8: isize; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:21: +7:30
- let mut _9: isize; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:23: +8:34
- let mut _10: isize; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:23: +9:34
- let mut _11: isize; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:11: +6:18
- let _12: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
- let _13: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
- let mut _14: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:49
- let mut _15: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:41
- let mut _16: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:44: +6:49
- let _17: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
- let _18: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
- let mut _19: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:49
- let mut _20: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:41
- let mut _21: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:44: +7:49
- let _22: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
- let _23: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
- let mut _24: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:55
- let mut _25: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:47
- let mut _26: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:50: +8:55
- let _27: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
- let _28: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
- let mut _29: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:55
- let mut _30: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:47
- let mut _31: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:50: +9:55
- let mut _32: !; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:14: +10:28
- let mut _33: (); // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
- let mut _34: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _35: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _36: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _37: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _38: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _39: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _40: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _41: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _42: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _43: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _44: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _45: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- let mut _46: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
+ debug x => _1;
+ debug other => _2;
+ let mut _0: std::result::Result<ViewportPercentageLength, ()>;
+ let mut _3: ViewportPercentageLength;
+ let mut _4: (&ViewportPercentageLength, &ViewportPercentageLength);
+ let mut _5: &ViewportPercentageLength;
+ let mut _6: &ViewportPercentageLength;
+ let mut _7: isize;
+ let mut _8: isize;
+ let mut _9: isize;
+ let mut _10: isize;
+ let mut _11: isize;
+ let _12: f32;
+ let _13: f32;
+ let mut _14: f32;
+ let mut _15: f32;
+ let mut _16: f32;
+ let _17: f32;
+ let _18: f32;
+ let mut _19: f32;
+ let mut _20: f32;
+ let mut _21: f32;
+ let _22: f32;
+ let _23: f32;
+ let mut _24: f32;
+ let mut _25: f32;
+ let mut _26: f32;
+ let _27: f32;
+ let _28: f32;
+ let mut _29: f32;
+ let mut _30: f32;
+ let mut _31: f32;
+ let mut _32: !;
+ let mut _33: ();
+ let mut _34: &ViewportPercentageLength;
+ let mut _35: &ViewportPercentageLength;
+ let mut _36: &ViewportPercentageLength;
+ let mut _37: &ViewportPercentageLength;
+ let mut _38: &ViewportPercentageLength;
+ let mut _39: &ViewportPercentageLength;
+ let mut _40: &ViewportPercentageLength;
+ let mut _41: &ViewportPercentageLength;
+ let mut _42: &ViewportPercentageLength;
+ let mut _43: &ViewportPercentageLength;
+ let mut _44: &ViewportPercentageLength;
+ let mut _45: &ViewportPercentageLength;
+ let mut _46: &ViewportPercentageLength;
scope 1 {
- debug one => _12; // in scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
- debug other => _13; // in scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
+ debug one => _12;
+ debug other => _13;
}
scope 2 {
- debug one => _17; // in scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
- debug other => _18; // in scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
+ debug one => _17;
+ debug other => _18;
}
scope 3 {
- debug one => _22; // in scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
- debug other => _23; // in scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
+ debug one => _22;
+ debug other => _23;
}
scope 4 {
- debug one => _27; // in scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
- debug other => _28; // in scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
+ debug one => _27;
+ debug other => _28;
}
bb0: {
- StorageLive(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +11:6
- StorageLive(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- StorageLive(_5); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:15: +5:16
- _5 = _1; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:15: +5:16
- StorageLive(_6); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:18: +5:23
- _6 = _2; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:18: +5:23
- _4 = (move _5, move _6); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- StorageDead(_6); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:23: +5:24
- StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:23: +5:24
- _34 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- _11 = discriminant((*_34)); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- switchInt(move _11) -> [0: bb1, 1: bb3, 2: bb4, 3: bb5, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +5:24
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _1;
+ StorageLive(_6);
+ _6 = _2;
+ _4 = (move _5, move _6);
+ StorageDead(_6);
+ StorageDead(_5);
+ _34 = deref_copy (_4.0: &ViewportPercentageLength);
+ _11 = discriminant((*_34));
+ switchInt(move _11) -> [0: bb1, 1: bb3, 2: bb4, 3: bb5, otherwise: bb2];
}
bb1: {
- _35 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- _7 = discriminant((*_35)); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- switchInt(move _7) -> [0: bb6, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +5:24
+ _35 = deref_copy (_4.1: &ViewportPercentageLength);
+ _7 = discriminant((*_35));
+ switchInt(move _7) -> [0: bb6, otherwise: bb2];
}
bb2: {
- StorageLive(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
- _33 = (); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
- _0 = Result::<ViewportPercentageLength, ()>::Err(move _33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
- StorageDead(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:27: +10:28
- StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+11:6: +11:7
- StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:1: +12:2
- goto -> bb11; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
+ StorageLive(_33);
+ _33 = ();
+ _0 = Result::<ViewportPercentageLength, ()>::Err(move _33);
+ StorageDead(_33);
+ StorageDead(_3);
+ StorageDead(_4);
+ goto -> bb11;
}
bb3: {
- _36 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- _8 = discriminant((*_36)); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- switchInt(move _8) -> [1: bb7, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +5:24
+ _36 = deref_copy (_4.1: &ViewportPercentageLength);
+ _8 = discriminant((*_36));
+ switchInt(move _8) -> [1: bb7, otherwise: bb2];
}
bb4: {
- _37 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- _9 = discriminant((*_37)); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- switchInt(move _9) -> [2: bb8, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +5:24
+ _37 = deref_copy (_4.1: &ViewportPercentageLength);
+ _9 = discriminant((*_37));
+ switchInt(move _9) -> [2: bb8, otherwise: bb2];
}
bb5: {
- _38 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- _10 = discriminant((*_38)); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
- switchInt(move _10) -> [3: bb9, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +5:24
+ _38 = deref_copy (_4.1: &ViewportPercentageLength);
+ _10 = discriminant((*_38));
+ switchInt(move _10) -> [3: bb9, otherwise: bb2];
}
bb6: {
- StorageLive(_12); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
- _39 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
- _12 = (((*_39) as Vw).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
- StorageLive(_13); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
- _40 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
- _13 = (((*_40) as Vw).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
- StorageLive(_14); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:49
- StorageLive(_15); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:41
- _15 = _12; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:41
- StorageLive(_16); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:44: +6:49
- _16 = _13; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:44: +6:49
- _14 = Add(move _15, move _16); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:49
- StorageDead(_16); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:48: +6:49
- StorageDead(_15); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:48: +6:49
- _3 = ViewportPercentageLength::Vw(move _14); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:35: +6:50
- StorageDead(_14); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
- StorageDead(_13); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
- StorageDead(_12); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
- goto -> bb10; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
+ StorageLive(_12);
+ _39 = deref_copy (_4.0: &ViewportPercentageLength);
+ _12 = (((*_39) as Vw).0: f32);
+ StorageLive(_13);
+ _40 = deref_copy (_4.1: &ViewportPercentageLength);
+ _13 = (((*_40) as Vw).0: f32);
+ StorageLive(_14);
+ StorageLive(_15);
+ _15 = _12;
+ StorageLive(_16);
+ _16 = _13;
+ _14 = Add(move _15, move _16);
+ StorageDead(_16);
+ StorageDead(_15);
+ _3 = ViewportPercentageLength::Vw(move _14);
+ StorageDead(_14);
+ StorageDead(_13);
+ StorageDead(_12);
+ goto -> bb10;
}
bb7: {
- StorageLive(_17); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
- _41 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
- _17 = (((*_41) as Vh).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
- StorageLive(_18); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
- _42 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
- _18 = (((*_42) as Vh).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
- StorageLive(_19); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:49
- StorageLive(_20); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:41
- _20 = _17; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:41
- StorageLive(_21); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:44: +7:49
- _21 = _18; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:44: +7:49
- _19 = Add(move _20, move _21); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:49
- StorageDead(_21); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:48: +7:49
- StorageDead(_20); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:48: +7:49
- _3 = ViewportPercentageLength::Vh(move _19); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:35: +7:50
- StorageDead(_19); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
- StorageDead(_18); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
- StorageDead(_17); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
- goto -> bb10; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
+ StorageLive(_17);
+ _41 = deref_copy (_4.0: &ViewportPercentageLength);
+ _17 = (((*_41) as Vh).0: f32);
+ StorageLive(_18);
+ _42 = deref_copy (_4.1: &ViewportPercentageLength);
+ _18 = (((*_42) as Vh).0: f32);
+ StorageLive(_19);
+ StorageLive(_20);
+ _20 = _17;
+ StorageLive(_21);
+ _21 = _18;
+ _19 = Add(move _20, move _21);
+ StorageDead(_21);
+ StorageDead(_20);
+ _3 = ViewportPercentageLength::Vh(move _19);
+ StorageDead(_19);
+ StorageDead(_18);
+ StorageDead(_17);
+ goto -> bb10;
}
bb8: {
- StorageLive(_22); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
- _43 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
- _22 = (((*_43) as Vmin).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
- StorageLive(_23); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
- _44 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
- _23 = (((*_44) as Vmin).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
- StorageLive(_24); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:55
- StorageLive(_25); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:47
- _25 = _22; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:47
- StorageLive(_26); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:50: +8:55
- _26 = _23; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:50: +8:55
- _24 = Add(move _25, move _26); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:55
- StorageDead(_26); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:54: +8:55
- StorageDead(_25); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:54: +8:55
- _3 = ViewportPercentageLength::Vmin(move _24); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:39: +8:56
- StorageDead(_24); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
- StorageDead(_23); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
- StorageDead(_22); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
- goto -> bb10; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
+ StorageLive(_22);
+ _43 = deref_copy (_4.0: &ViewportPercentageLength);
+ _22 = (((*_43) as Vmin).0: f32);
+ StorageLive(_23);
+ _44 = deref_copy (_4.1: &ViewportPercentageLength);
+ _23 = (((*_44) as Vmin).0: f32);
+ StorageLive(_24);
+ StorageLive(_25);
+ _25 = _22;
+ StorageLive(_26);
+ _26 = _23;
+ _24 = Add(move _25, move _26);
+ StorageDead(_26);
+ StorageDead(_25);
+ _3 = ViewportPercentageLength::Vmin(move _24);
+ StorageDead(_24);
+ StorageDead(_23);
+ StorageDead(_22);
+ goto -> bb10;
}
bb9: {
- StorageLive(_27); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
- _45 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
- _27 = (((*_45) as Vmax).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
- StorageLive(_28); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
- _46 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
- _28 = (((*_46) as Vmax).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
- StorageLive(_29); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:55
- StorageLive(_30); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:47
- _30 = _27; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:47
- StorageLive(_31); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:50: +9:55
- _31 = _28; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:50: +9:55
- _29 = Add(move _30, move _31); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:55
- StorageDead(_31); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:54: +9:55
- StorageDead(_30); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:54: +9:55
- _3 = ViewportPercentageLength::Vmax(move _29); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:39: +9:56
- StorageDead(_29); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
- StorageDead(_28); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
- StorageDead(_27); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
- goto -> bb10; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
+ StorageLive(_27);
+ _45 = deref_copy (_4.0: &ViewportPercentageLength);
+ _27 = (((*_45) as Vmax).0: f32);
+ StorageLive(_28);
+ _46 = deref_copy (_4.1: &ViewportPercentageLength);
+ _28 = (((*_46) as Vmax).0: f32);
+ StorageLive(_29);
+ StorageLive(_30);
+ _30 = _27;
+ StorageLive(_31);
+ _31 = _28;
+ _29 = Add(move _30, move _31);
+ StorageDead(_31);
+ StorageDead(_30);
+ _3 = ViewportPercentageLength::Vmax(move _29);
+ StorageDead(_29);
+ StorageDead(_28);
+ StorageDead(_27);
+ goto -> bb10;
}
bb10: {
- _0 = Result::<ViewportPercentageLength, ()>::Ok(move _3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:5: +11:7
- StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+11:6: +11:7
- StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:1: +12:2
- goto -> bb11; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
+ _0 = Result::<ViewportPercentageLength, ()>::Ok(move _3);
+ StorageDead(_3);
+ StorageDead(_4);
+ goto -> bb11;
}
bb11: {
- return; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
+ return;
}
}
diff --git a/tests/mir-opt/early_otherwise_branch_noopt.noopt1.EarlyOtherwiseBranch.diff b/tests/mir-opt/early_otherwise_branch_noopt.noopt1.EarlyOtherwiseBranch.diff
index 6468eb5f8..09cdce718 100644
--- a/tests/mir-opt/early_otherwise_branch_noopt.noopt1.EarlyOtherwiseBranch.diff
+++ b/tests/mir-opt/early_otherwise_branch_noopt.noopt1.EarlyOtherwiseBranch.diff
@@ -2,92 +2,92 @@
+ // MIR for `noopt1` after EarlyOtherwiseBranch
fn noopt1(_1: Option<u32>, _2: Option<u32>) -> u32 {
- debug x => _1; // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+0:11: +0:12
- debug y => _2; // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+0:27: +0:28
- let mut _0: u32; // return place in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+0:46: +0:49
- let mut _3: (std::option::Option<u32>, std::option::Option<u32>); // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17
- let mut _4: std::option::Option<u32>; // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:12: +1:13
- let mut _5: std::option::Option<u32>; // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:15: +1:16
- let mut _6: isize; // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+4:16: +4:23
- let mut _7: isize; // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+2:19: +2:26
- let mut _8: isize; // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+2:10: +2:17
- let _9: u32; // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+2:15: +2:16
- let _10: u32; // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+2:24: +2:25
- let _11: u32; // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+3:15: +3:16
- let _12: u32; // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+4:21: +4:22
+ debug x => _1;
+ debug y => _2;
+ let mut _0: u32;
+ let mut _3: (std::option::Option<u32>, std::option::Option<u32>);
+ let mut _4: std::option::Option<u32>;
+ let mut _5: std::option::Option<u32>;
+ let mut _6: isize;
+ let mut _7: isize;
+ let mut _8: isize;
+ let _9: u32;
+ let _10: u32;
+ let _11: u32;
+ let _12: u32;
scope 1 {
- debug a => _9; // in scope 1 at $DIR/early_otherwise_branch_noopt.rs:+2:15: +2:16
- debug b => _10; // in scope 1 at $DIR/early_otherwise_branch_noopt.rs:+2:24: +2:25
+ debug a => _9;
+ debug b => _10;
}
scope 2 {
- debug a => _11; // in scope 2 at $DIR/early_otherwise_branch_noopt.rs:+3:15: +3:16
+ debug a => _11;
}
scope 3 {
- debug b => _12; // in scope 3 at $DIR/early_otherwise_branch_noopt.rs:+4:21: +4:22
+ debug b => _12;
}
bb0: {
- StorageLive(_3); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17
- StorageLive(_4); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:12: +1:13
- _4 = _1; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:12: +1:13
- StorageLive(_5); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:15: +1:16
- _5 = _2; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:15: +1:16
- _3 = (move _4, move _5); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17
- StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:16: +1:17
- StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:16: +1:17
- _8 = discriminant((_3.0: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17
- switchInt(move _8) -> [0: bb1, 1: bb4, otherwise: bb3]; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:5: +1:17
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ _5 = _2;
+ _3 = (move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ _8 = discriminant((_3.0: std::option::Option<u32>));
+ switchInt(move _8) -> [0: bb1, 1: bb4, otherwise: bb3];
}
bb1: {
- _6 = discriminant((_3.1: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17
- switchInt(move _6) -> [0: bb2, 1: bb7, otherwise: bb3]; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:5: +1:17
+ _6 = discriminant((_3.1: std::option::Option<u32>));
+ switchInt(move _6) -> [0: bb2, 1: bb7, otherwise: bb3];
}
bb2: {
- _0 = const 3_u32; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+5:25: +5:26
- goto -> bb8; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+5:25: +5:26
+ _0 = const 3_u32;
+ goto -> bb8;
}
bb3: {
- unreachable; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17
+ unreachable;
}
bb4: {
- _7 = discriminant((_3.1: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17
- switchInt(move _7) -> [0: bb6, 1: bb5, otherwise: bb3]; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:5: +1:17
+ _7 = discriminant((_3.1: std::option::Option<u32>));
+ switchInt(move _7) -> [0: bb6, 1: bb5, otherwise: bb3];
}
bb5: {
- StorageLive(_9); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+2:15: +2:16
- _9 = (((_3.0: std::option::Option<u32>) as Some).0: u32); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+2:15: +2:16
- StorageLive(_10); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+2:24: +2:25
- _10 = (((_3.1: std::option::Option<u32>) as Some).0: u32); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+2:24: +2:25
- _0 = const 0_u32; // scope 1 at $DIR/early_otherwise_branch_noopt.rs:+2:31: +2:32
- StorageDead(_10); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+2:31: +2:32
- StorageDead(_9); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+2:31: +2:32
- goto -> bb8; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+2:31: +2:32
+ StorageLive(_9);
+ _9 = (((_3.0: std::option::Option<u32>) as Some).0: u32);
+ StorageLive(_10);
+ _10 = (((_3.1: std::option::Option<u32>) as Some).0: u32);
+ _0 = const 0_u32;
+ StorageDead(_10);
+ StorageDead(_9);
+ goto -> bb8;
}
bb6: {
- StorageLive(_11); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+3:15: +3:16
- _11 = (((_3.0: std::option::Option<u32>) as Some).0: u32); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+3:15: +3:16
- _0 = const 1_u32; // scope 2 at $DIR/early_otherwise_branch_noopt.rs:+3:28: +3:29
- StorageDead(_11); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+3:28: +3:29
- goto -> bb8; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+3:28: +3:29
+ StorageLive(_11);
+ _11 = (((_3.0: std::option::Option<u32>) as Some).0: u32);
+ _0 = const 1_u32;
+ StorageDead(_11);
+ goto -> bb8;
}
bb7: {
- StorageLive(_12); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+4:21: +4:22
- _12 = (((_3.1: std::option::Option<u32>) as Some).0: u32); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+4:21: +4:22
- _0 = const 2_u32; // scope 3 at $DIR/early_otherwise_branch_noopt.rs:+4:28: +4:29
- StorageDead(_12); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+4:28: +4:29
- goto -> bb8; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+4:28: +4:29
+ StorageLive(_12);
+ _12 = (((_3.1: std::option::Option<u32>) as Some).0: u32);
+ _0 = const 2_u32;
+ StorageDead(_12);
+ goto -> bb8;
}
bb8: {
- StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+7:1: +7:2
- return; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+7:2: +7:2
+ StorageDead(_3);
+ return;
}
}
diff --git a/tests/mir-opt/early_otherwise_branch_soundness.no_deref_ptr.EarlyOtherwiseBranch.diff b/tests/mir-opt/early_otherwise_branch_soundness.no_deref_ptr.EarlyOtherwiseBranch.diff
index a3fa2529b..b24ff6ec7 100644
--- a/tests/mir-opt/early_otherwise_branch_soundness.no_deref_ptr.EarlyOtherwiseBranch.diff
+++ b/tests/mir-opt/early_otherwise_branch_soundness.no_deref_ptr.EarlyOtherwiseBranch.diff
@@ -2,46 +2,46 @@
+ // MIR for `no_deref_ptr` after EarlyOtherwiseBranch
fn no_deref_ptr(_1: Option<i32>, _2: *const Option<i32>) -> i32 {
- debug a => _1; // in scope 0 at $DIR/early_otherwise_branch_soundness.rs:+0:24: +0:25
- debug b => _2; // in scope 0 at $DIR/early_otherwise_branch_soundness.rs:+0:40: +0:41
- let mut _0: i32; // return place in scope 0 at $DIR/early_otherwise_branch_soundness.rs:+0:66: +0:69
- let mut _3: isize; // in scope 0 at $DIR/early_otherwise_branch_soundness.rs:+3:9: +3:16
- let mut _4: isize; // in scope 0 at $DIR/early_otherwise_branch_soundness.rs:+4:13: +4:20
- let _5: i32; // in scope 0 at $DIR/early_otherwise_branch_soundness.rs:+4:18: +4:19
+ debug a => _1;
+ debug b => _2;
+ let mut _0: i32;
+ let mut _3: isize;
+ let mut _4: isize;
+ let _5: i32;
scope 1 {
- debug v => _5; // in scope 1 at $DIR/early_otherwise_branch_soundness.rs:+4:18: +4:19
+ debug v => _5;
}
bb0: {
- _3 = discriminant(_1); // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+1:11: +1:12
- switchInt(move _3) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+1:5: +1:12
+ _3 = discriminant(_1);
+ switchInt(move _3) -> [1: bb2, otherwise: bb1];
}
bb1: {
- _0 = const 0_i32; // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+7:14: +7:15
- goto -> bb5; // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+7:14: +7:15
+ _0 = const 0_i32;
+ goto -> bb5;
}
bb2: {
- _4 = discriminant((*_2)); // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+3:26: +3:28
- switchInt(move _4) -> [1: bb4, otherwise: bb3]; // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+3:20: +3:28
+ _4 = discriminant((*_2));
+ switchInt(move _4) -> [1: bb4, otherwise: bb3];
}
bb3: {
- _0 = const 0_i32; // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+5:18: +5:19
- goto -> bb5; // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+5:18: +5:19
+ _0 = const 0_i32;
+ goto -> bb5;
}
bb4: {
- StorageLive(_5); // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+4:18: +4:19
- _5 = (((*_2) as Some).0: i32); // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+4:18: +4:19
- _0 = _5; // scope 1 at $DIR/early_otherwise_branch_soundness.rs:+4:24: +4:25
- StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+4:24: +4:25
- goto -> bb5; // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+4:24: +4:25
+ StorageLive(_5);
+ _5 = (((*_2) as Some).0: i32);
+ _0 = _5;
+ StorageDead(_5);
+ goto -> bb5;
}
bb5: {
- return; // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+9:2: +9:2
+ return;
}
}
diff --git a/tests/mir-opt/early_otherwise_branch_soundness.no_downcast.EarlyOtherwiseBranch.diff b/tests/mir-opt/early_otherwise_branch_soundness.no_downcast.EarlyOtherwiseBranch.diff
index 6d0224b54..c3ea975ce 100644
--- a/tests/mir-opt/early_otherwise_branch_soundness.no_downcast.EarlyOtherwiseBranch.diff
+++ b/tests/mir-opt/early_otherwise_branch_soundness.no_downcast.EarlyOtherwiseBranch.diff
@@ -2,37 +2,37 @@
+ // MIR for `no_downcast` after EarlyOtherwiseBranch
fn no_downcast(_1: &E<'_>) -> u32 {
- debug e => _1; // in scope 0 at $DIR/early_otherwise_branch_soundness.rs:+0:16: +0:17
- let mut _0: u32; // return place in scope 0 at $DIR/early_otherwise_branch_soundness.rs:+0:26: +0:29
- let mut _2: isize; // in scope 0 at $DIR/early_otherwise_branch_soundness.rs:+1:20: +1:30
- let mut _3: isize; // in scope 0 at $DIR/early_otherwise_branch_soundness.rs:+1:12: +1:31
- let mut _4: &E<'_>; // in scope 0 at $DIR/early_otherwise_branch_soundness.rs:+0:16: +0:17
+ debug e => _1;
+ let mut _0: u32;
+ let mut _2: isize;
+ let mut _3: isize;
+ let mut _4: &E<'_>;
scope 1 {
}
bb0: {
- _3 = discriminant((*_1)); // scope 1 at $DIR/early_otherwise_branch_soundness.rs:+1:12: +1:31
- switchInt(move _3) -> [1: bb1, otherwise: bb3]; // scope 1 at $DIR/early_otherwise_branch_soundness.rs:+1:12: +1:31
+ _3 = discriminant((*_1));
+ switchInt(move _3) -> [1: bb1, otherwise: bb3];
}
bb1: {
- _4 = deref_copy (((*_1) as Some).0: &E<'_>); // scope 1 at $DIR/early_otherwise_branch_soundness.rs:+1:12: +1:31
- _2 = discriminant((*_4)); // scope 1 at $DIR/early_otherwise_branch_soundness.rs:+1:12: +1:31
- switchInt(move _2) -> [1: bb2, otherwise: bb3]; // scope 1 at $DIR/early_otherwise_branch_soundness.rs:+1:12: +1:31
+ _4 = deref_copy (((*_1) as Some).0: &E<'_>);
+ _2 = discriminant((*_4));
+ switchInt(move _2) -> [1: bb2, otherwise: bb3];
}
bb2: {
- _0 = const 1_u32; // scope 1 at $DIR/early_otherwise_branch_soundness.rs:+1:38: +1:39
- goto -> bb4; // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+1:5: +1:52
+ _0 = const 1_u32;
+ goto -> bb4;
}
bb3: {
- _0 = const 2_u32; // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+1:49: +1:50
- goto -> bb4; // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+1:5: +1:52
+ _0 = const 2_u32;
+ goto -> bb4;
}
bb4: {
- return; // scope 0 at $DIR/early_otherwise_branch_soundness.rs:+2:2: +2:2
+ return;
}
}
diff --git a/tests/mir-opt/enum_opt.cand.EnumSizeOpt.32bit.diff b/tests/mir-opt/enum_opt.cand.EnumSizeOpt.32bit.diff
index b139deeee..9d9a7a1e4 100644
--- a/tests/mir-opt/enum_opt.cand.EnumSizeOpt.32bit.diff
+++ b/tests/mir-opt/enum_opt.cand.EnumSizeOpt.32bit.diff
@@ -2,67 +2,67 @@
+ // MIR for `cand` after EnumSizeOpt
fn cand() -> Candidate {
- let mut _0: Candidate; // return place in scope 0 at $DIR/enum_opt.rs:+0:18: +0:27
- let mut _1: Candidate; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- let mut _2: Candidate; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:34
- let mut _3: [u8; 8196]; // in scope 0 at $DIR/enum_opt.rs:+2:24: +2:33
-+ let mut _4: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _5: isize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _6: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _7: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _8: *mut Candidate; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _9: *mut u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _10: *const Candidate; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _11: *const u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _12: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _13: isize; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _14: usize; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _15: usize; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _16: *mut Candidate; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _17: *mut u8; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _18: *const Candidate; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _19: *const u8; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
+ let mut _0: Candidate;
+ let mut _1: Candidate;
+ let mut _2: Candidate;
+ let mut _3: [u8; 8196];
++ let mut _4: [usize; 2];
++ let mut _5: isize;
++ let mut _6: usize;
++ let mut _7: usize;
++ let mut _8: *mut Candidate;
++ let mut _9: *mut u8;
++ let mut _10: *const Candidate;
++ let mut _11: *const u8;
++ let mut _12: [usize; 2];
++ let mut _13: isize;
++ let mut _14: usize;
++ let mut _15: usize;
++ let mut _16: *mut Candidate;
++ let mut _17: *mut u8;
++ let mut _18: *const Candidate;
++ let mut _19: *const u8;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
+ debug a => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- _1 = Candidate::Small(const 1_u8); // scope 0 at $DIR/enum_opt.rs:+1:15: +1:34
- StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
- StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
- _3 = [const 1_u8; 8196]; // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
- _2 = Candidate::Large(move _3); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
- StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
-- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _4 = const [2_usize, 8197_usize]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _5 = discriminant(_2); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _6 = _5 as usize (IntToInt); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _7 = _4[_6]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _8 = &raw mut _1; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _9 = _8 as *mut u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _10 = &raw const _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _11 = _10 as *const u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ Deinit(_8); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ copy_nonoverlapping(dst = _9, src = _11, count = _7); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
- StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
-- _0 = move _1; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ StorageLive(_12); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _12 = const [2_usize, 8197_usize]; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _13 = discriminant(_1); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _14 = _13 as usize (IntToInt); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _15 = _12[_14]; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _16 = &raw mut _0; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _17 = _16 as *mut u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _18 = &raw const _1; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _19 = _18 as *const u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ Deinit(_16); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ copy_nonoverlapping(dst = _17, src = _19, count = _15); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ StorageDead(_12); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
- StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+4:1: +4:2
- return; // scope 0 at $DIR/enum_opt.rs:+4:2: +4:2
+ StorageLive(_1);
+ _1 = Candidate::Small(const 1_u8);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = [const 1_u8; 8196];
+ _2 = Candidate::Large(move _3);
+ StorageDead(_3);
+- _1 = move _2;
++ StorageLive(_4);
++ _4 = const [2_usize, 8197_usize];
++ _5 = discriminant(_2);
++ _6 = _5 as usize (IntToInt);
++ _7 = _4[_6];
++ _8 = &raw mut _1;
++ _9 = _8 as *mut u8 (PtrToPtr);
++ _10 = &raw const _2;
++ _11 = _10 as *const u8 (PtrToPtr);
++ Deinit(_8);
++ copy_nonoverlapping(dst = _9, src = _11, count = _7);
++ StorageDead(_4);
+ StorageDead(_2);
+- _0 = move _1;
++ StorageLive(_12);
++ _12 = const [2_usize, 8197_usize];
++ _13 = discriminant(_1);
++ _14 = _13 as usize (IntToInt);
++ _15 = _12[_14];
++ _16 = &raw mut _0;
++ _17 = _16 as *mut u8 (PtrToPtr);
++ _18 = &raw const _1;
++ _19 = _18 as *const u8 (PtrToPtr);
++ Deinit(_16);
++ copy_nonoverlapping(dst = _17, src = _19, count = _15);
++ StorageDead(_12);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/enum_opt.cand.EnumSizeOpt.64bit.diff b/tests/mir-opt/enum_opt.cand.EnumSizeOpt.64bit.diff
index b139deeee..9d9a7a1e4 100644
--- a/tests/mir-opt/enum_opt.cand.EnumSizeOpt.64bit.diff
+++ b/tests/mir-opt/enum_opt.cand.EnumSizeOpt.64bit.diff
@@ -2,67 +2,67 @@
+ // MIR for `cand` after EnumSizeOpt
fn cand() -> Candidate {
- let mut _0: Candidate; // return place in scope 0 at $DIR/enum_opt.rs:+0:18: +0:27
- let mut _1: Candidate; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- let mut _2: Candidate; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:34
- let mut _3: [u8; 8196]; // in scope 0 at $DIR/enum_opt.rs:+2:24: +2:33
-+ let mut _4: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _5: isize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _6: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _7: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _8: *mut Candidate; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _9: *mut u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _10: *const Candidate; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _11: *const u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
-+ let mut _12: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _13: isize; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _14: usize; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _15: usize; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _16: *mut Candidate; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _17: *mut u8; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _18: *const Candidate; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _19: *const u8; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
+ let mut _0: Candidate;
+ let mut _1: Candidate;
+ let mut _2: Candidate;
+ let mut _3: [u8; 8196];
++ let mut _4: [usize; 2];
++ let mut _5: isize;
++ let mut _6: usize;
++ let mut _7: usize;
++ let mut _8: *mut Candidate;
++ let mut _9: *mut u8;
++ let mut _10: *const Candidate;
++ let mut _11: *const u8;
++ let mut _12: [usize; 2];
++ let mut _13: isize;
++ let mut _14: usize;
++ let mut _15: usize;
++ let mut _16: *mut Candidate;
++ let mut _17: *mut u8;
++ let mut _18: *const Candidate;
++ let mut _19: *const u8;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
+ debug a => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- _1 = Candidate::Small(const 1_u8); // scope 0 at $DIR/enum_opt.rs:+1:15: +1:34
- StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
- StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
- _3 = [const 1_u8; 8196]; // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
- _2 = Candidate::Large(move _3); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
- StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
-- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _4 = const [2_usize, 8197_usize]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _5 = discriminant(_2); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _6 = _5 as usize (IntToInt); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _7 = _4[_6]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _8 = &raw mut _1; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _9 = _8 as *mut u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _10 = &raw const _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ _11 = _10 as *const u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ Deinit(_8); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ copy_nonoverlapping(dst = _9, src = _11, count = _7); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
-+ StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
- StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
-- _0 = move _1; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ StorageLive(_12); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _12 = const [2_usize, 8197_usize]; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _13 = discriminant(_1); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _14 = _13 as usize (IntToInt); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _15 = _12[_14]; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _16 = &raw mut _0; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _17 = _16 as *mut u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _18 = &raw const _1; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _19 = _18 as *const u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ Deinit(_16); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ copy_nonoverlapping(dst = _17, src = _19, count = _15); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ StorageDead(_12); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
- StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+4:1: +4:2
- return; // scope 0 at $DIR/enum_opt.rs:+4:2: +4:2
+ StorageLive(_1);
+ _1 = Candidate::Small(const 1_u8);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = [const 1_u8; 8196];
+ _2 = Candidate::Large(move _3);
+ StorageDead(_3);
+- _1 = move _2;
++ StorageLive(_4);
++ _4 = const [2_usize, 8197_usize];
++ _5 = discriminant(_2);
++ _6 = _5 as usize (IntToInt);
++ _7 = _4[_6];
++ _8 = &raw mut _1;
++ _9 = _8 as *mut u8 (PtrToPtr);
++ _10 = &raw const _2;
++ _11 = _10 as *const u8 (PtrToPtr);
++ Deinit(_8);
++ copy_nonoverlapping(dst = _9, src = _11, count = _7);
++ StorageDead(_4);
+ StorageDead(_2);
+- _0 = move _1;
++ StorageLive(_12);
++ _12 = const [2_usize, 8197_usize];
++ _13 = discriminant(_1);
++ _14 = _13 as usize (IntToInt);
++ _15 = _12[_14];
++ _16 = &raw mut _0;
++ _17 = _16 as *mut u8 (PtrToPtr);
++ _18 = &raw const _1;
++ _19 = _18 as *const u8 (PtrToPtr);
++ Deinit(_16);
++ copy_nonoverlapping(dst = _17, src = _19, count = _15);
++ StorageDead(_12);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/enum_opt.invalid.EnumSizeOpt.32bit.diff b/tests/mir-opt/enum_opt.invalid.EnumSizeOpt.32bit.diff
index a80001149..b627fd279 100644
--- a/tests/mir-opt/enum_opt.invalid.EnumSizeOpt.32bit.diff
+++ b/tests/mir-opt/enum_opt.invalid.EnumSizeOpt.32bit.diff
@@ -2,27 +2,27 @@
+ // MIR for `invalid` after EnumSizeOpt
fn invalid() -> InvalidIdxs {
- let mut _0: InvalidIdxs; // return place in scope 0 at $DIR/enum_opt.rs:+0:21: +0:32
- let mut _1: InvalidIdxs; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- let mut _2: InvalidIdxs; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:36
- let mut _3: [u64; 1024]; // in scope 0 at $DIR/enum_opt.rs:+2:26: +2:35
+ let mut _0: InvalidIdxs;
+ let mut _1: InvalidIdxs;
+ let mut _2: InvalidIdxs;
+ let mut _3: [u64; 1024];
scope 1 {
- debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
+ debug a => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- _1 = InvalidIdxs::A; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:29
- StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:36
- StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:26: +2:35
- _3 = [const 0_u64; 1024]; // scope 1 at $DIR/enum_opt.rs:+2:26: +2:35
- _2 = InvalidIdxs::Large(move _3); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:36
- StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:35: +2:36
- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:36
- StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:35: +2:36
- _0 = move _1; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
- StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+4:1: +4:2
- return; // scope 0 at $DIR/enum_opt.rs:+4:2: +4:2
+ StorageLive(_1);
+ _1 = InvalidIdxs::A;
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = [const 0_u64; 1024];
+ _2 = InvalidIdxs::Large(move _3);
+ StorageDead(_3);
+ _1 = move _2;
+ StorageDead(_2);
+ _0 = move _1;
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/enum_opt.invalid.EnumSizeOpt.64bit.diff b/tests/mir-opt/enum_opt.invalid.EnumSizeOpt.64bit.diff
index a80001149..b627fd279 100644
--- a/tests/mir-opt/enum_opt.invalid.EnumSizeOpt.64bit.diff
+++ b/tests/mir-opt/enum_opt.invalid.EnumSizeOpt.64bit.diff
@@ -2,27 +2,27 @@
+ // MIR for `invalid` after EnumSizeOpt
fn invalid() -> InvalidIdxs {
- let mut _0: InvalidIdxs; // return place in scope 0 at $DIR/enum_opt.rs:+0:21: +0:32
- let mut _1: InvalidIdxs; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- let mut _2: InvalidIdxs; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:36
- let mut _3: [u64; 1024]; // in scope 0 at $DIR/enum_opt.rs:+2:26: +2:35
+ let mut _0: InvalidIdxs;
+ let mut _1: InvalidIdxs;
+ let mut _2: InvalidIdxs;
+ let mut _3: [u64; 1024];
scope 1 {
- debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
+ debug a => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- _1 = InvalidIdxs::A; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:29
- StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:36
- StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:26: +2:35
- _3 = [const 0_u64; 1024]; // scope 1 at $DIR/enum_opt.rs:+2:26: +2:35
- _2 = InvalidIdxs::Large(move _3); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:36
- StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:35: +2:36
- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:36
- StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:35: +2:36
- _0 = move _1; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
- StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+4:1: +4:2
- return; // scope 0 at $DIR/enum_opt.rs:+4:2: +4:2
+ StorageLive(_1);
+ _1 = InvalidIdxs::A;
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = [const 0_u64; 1024];
+ _2 = InvalidIdxs::Large(move _3);
+ StorageDead(_3);
+ _1 = move _2;
+ StorageDead(_2);
+ _0 = move _1;
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/enum_opt.trunc.EnumSizeOpt.32bit.diff b/tests/mir-opt/enum_opt.trunc.EnumSizeOpt.32bit.diff
index 1ef79044d..100a73e56 100644
--- a/tests/mir-opt/enum_opt.trunc.EnumSizeOpt.32bit.diff
+++ b/tests/mir-opt/enum_opt.trunc.EnumSizeOpt.32bit.diff
@@ -2,36 +2,36 @@
+ // MIR for `trunc` after EnumSizeOpt
fn trunc() -> NotTrunctable {
- let mut _0: NotTrunctable; // return place in scope 0 at $DIR/enum_opt.rs:+0:19: +0:32
- let mut _1: NotTrunctable; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- let mut _2: NotTrunctable; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:34
- let mut _3: [u8; 1024]; // in scope 0 at $DIR/enum_opt.rs:+2:24: +2:33
- let mut _4: NotTrunctable; // in scope 0 at $DIR/enum_opt.rs:+3:7: +3:34
- let mut _5: [u8; 4096]; // in scope 0 at $DIR/enum_opt.rs:+3:24: +3:33
+ let mut _0: NotTrunctable;
+ let mut _1: NotTrunctable;
+ let mut _2: NotTrunctable;
+ let mut _3: [u8; 1024];
+ let mut _4: NotTrunctable;
+ let mut _5: [u8; 4096];
scope 1 {
- debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
+ debug a => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- _1 = NotTrunctable::A; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:31
- StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
- StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
- _3 = [const 0_u8; 1024]; // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
- _2 = NotTrunctable::B(move _3); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
- StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
- StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
- StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:+3:7: +3:34
- StorageLive(_5); // scope 1 at $DIR/enum_opt.rs:+3:24: +3:33
- _5 = [const 0_u8; 4096]; // scope 1 at $DIR/enum_opt.rs:+3:24: +3:33
- _4 = NotTrunctable::C(move _5); // scope 1 at $DIR/enum_opt.rs:+3:7: +3:34
- StorageDead(_5); // scope 1 at $DIR/enum_opt.rs:+3:33: +3:34
- _1 = move _4; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:34
- StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:+3:33: +3:34
- _0 = move _1; // scope 1 at $DIR/enum_opt.rs:+4:3: +4:4
- StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+5:1: +5:2
- return; // scope 0 at $DIR/enum_opt.rs:+5:2: +5:2
+ StorageLive(_1);
+ _1 = NotTrunctable::A;
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = [const 0_u8; 1024];
+ _2 = NotTrunctable::B(move _3);
+ StorageDead(_3);
+ _1 = move _2;
+ StorageDead(_2);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = [const 0_u8; 4096];
+ _4 = NotTrunctable::C(move _5);
+ StorageDead(_5);
+ _1 = move _4;
+ StorageDead(_4);
+ _0 = move _1;
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/enum_opt.trunc.EnumSizeOpt.64bit.diff b/tests/mir-opt/enum_opt.trunc.EnumSizeOpt.64bit.diff
index 1ef79044d..100a73e56 100644
--- a/tests/mir-opt/enum_opt.trunc.EnumSizeOpt.64bit.diff
+++ b/tests/mir-opt/enum_opt.trunc.EnumSizeOpt.64bit.diff
@@ -2,36 +2,36 @@
+ // MIR for `trunc` after EnumSizeOpt
fn trunc() -> NotTrunctable {
- let mut _0: NotTrunctable; // return place in scope 0 at $DIR/enum_opt.rs:+0:19: +0:32
- let mut _1: NotTrunctable; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- let mut _2: NotTrunctable; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:34
- let mut _3: [u8; 1024]; // in scope 0 at $DIR/enum_opt.rs:+2:24: +2:33
- let mut _4: NotTrunctable; // in scope 0 at $DIR/enum_opt.rs:+3:7: +3:34
- let mut _5: [u8; 4096]; // in scope 0 at $DIR/enum_opt.rs:+3:24: +3:33
+ let mut _0: NotTrunctable;
+ let mut _1: NotTrunctable;
+ let mut _2: NotTrunctable;
+ let mut _3: [u8; 1024];
+ let mut _4: NotTrunctable;
+ let mut _5: [u8; 4096];
scope 1 {
- debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
+ debug a => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- _1 = NotTrunctable::A; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:31
- StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
- StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
- _3 = [const 0_u8; 1024]; // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
- _2 = NotTrunctable::B(move _3); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
- StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
- StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
- StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:+3:7: +3:34
- StorageLive(_5); // scope 1 at $DIR/enum_opt.rs:+3:24: +3:33
- _5 = [const 0_u8; 4096]; // scope 1 at $DIR/enum_opt.rs:+3:24: +3:33
- _4 = NotTrunctable::C(move _5); // scope 1 at $DIR/enum_opt.rs:+3:7: +3:34
- StorageDead(_5); // scope 1 at $DIR/enum_opt.rs:+3:33: +3:34
- _1 = move _4; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:34
- StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:+3:33: +3:34
- _0 = move _1; // scope 1 at $DIR/enum_opt.rs:+4:3: +4:4
- StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+5:1: +5:2
- return; // scope 0 at $DIR/enum_opt.rs:+5:2: +5:2
+ StorageLive(_1);
+ _1 = NotTrunctable::A;
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = [const 0_u8; 1024];
+ _2 = NotTrunctable::B(move _3);
+ StorageDead(_3);
+ _1 = move _2;
+ StorageDead(_2);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = [const 0_u8; 4096];
+ _4 = NotTrunctable::C(move _5);
+ StorageDead(_5);
+ _1 = move _4;
+ StorageDead(_4);
+ _0 = move _1;
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/enum_opt.unin.EnumSizeOpt.32bit.diff b/tests/mir-opt/enum_opt.unin.EnumSizeOpt.32bit.diff
index ad9f12cf9..4306f38b8 100644
--- a/tests/mir-opt/enum_opt.unin.EnumSizeOpt.32bit.diff
+++ b/tests/mir-opt/enum_opt.unin.EnumSizeOpt.32bit.diff
@@ -2,67 +2,67 @@
+ // MIR for `unin` after EnumSizeOpt
fn unin() -> NoData {
- let mut _0: NoData; // return place in scope 0 at $DIR/enum_opt.rs:+0:18: +0:24
- let mut _1: NoData; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- let mut _2: NoData; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:31
- let mut _3: [u8; 8196]; // in scope 0 at $DIR/enum_opt.rs:+2:21: +2:30
-+ let mut _4: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _5: isize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _6: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _7: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _8: *mut NoData; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _9: *mut u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _10: *const NoData; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _11: *const u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _12: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _13: isize; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _14: usize; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _15: usize; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _16: *mut NoData; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _17: *mut u8; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _18: *const NoData; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _19: *const u8; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
+ let mut _0: NoData;
+ let mut _1: NoData;
+ let mut _2: NoData;
+ let mut _3: [u8; 8196];
++ let mut _4: [usize; 2];
++ let mut _5: isize;
++ let mut _6: usize;
++ let mut _7: usize;
++ let mut _8: *mut NoData;
++ let mut _9: *mut u8;
++ let mut _10: *const NoData;
++ let mut _11: *const u8;
++ let mut _12: [usize; 2];
++ let mut _13: isize;
++ let mut _14: usize;
++ let mut _15: usize;
++ let mut _16: *mut NoData;
++ let mut _17: *mut u8;
++ let mut _18: *const NoData;
++ let mut _19: *const u8;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
+ debug a => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- _1 = NoData::None; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:27
- StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:31
- StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:21: +2:30
- _3 = [const 1_u8; 8196]; // scope 1 at $DIR/enum_opt.rs:+2:21: +2:30
- _2 = NoData::Large(move _3); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:31
- StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:30: +2:31
-- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _4 = const [8197_usize, 1_usize]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _5 = discriminant(_2); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _6 = _5 as usize (IntToInt); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _7 = _4[_6]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _8 = &raw mut _1; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _9 = _8 as *mut u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _10 = &raw const _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _11 = _10 as *const u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ Deinit(_8); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ copy_nonoverlapping(dst = _9, src = _11, count = _7); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
- StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:30: +2:31
-- _0 = move _1; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ StorageLive(_12); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _12 = const [8197_usize, 1_usize]; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _13 = discriminant(_1); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _14 = _13 as usize (IntToInt); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _15 = _12[_14]; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _16 = &raw mut _0; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _17 = _16 as *mut u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _18 = &raw const _1; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _19 = _18 as *const u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ Deinit(_16); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ copy_nonoverlapping(dst = _17, src = _19, count = _15); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ StorageDead(_12); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
- StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+4:1: +4:2
- return; // scope 0 at $DIR/enum_opt.rs:+4:2: +4:2
+ StorageLive(_1);
+ _1 = NoData::None;
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = [const 1_u8; 8196];
+ _2 = NoData::Large(move _3);
+ StorageDead(_3);
+- _1 = move _2;
++ StorageLive(_4);
++ _4 = const [8197_usize, 1_usize];
++ _5 = discriminant(_2);
++ _6 = _5 as usize (IntToInt);
++ _7 = _4[_6];
++ _8 = &raw mut _1;
++ _9 = _8 as *mut u8 (PtrToPtr);
++ _10 = &raw const _2;
++ _11 = _10 as *const u8 (PtrToPtr);
++ Deinit(_8);
++ copy_nonoverlapping(dst = _9, src = _11, count = _7);
++ StorageDead(_4);
+ StorageDead(_2);
+- _0 = move _1;
++ StorageLive(_12);
++ _12 = const [8197_usize, 1_usize];
++ _13 = discriminant(_1);
++ _14 = _13 as usize (IntToInt);
++ _15 = _12[_14];
++ _16 = &raw mut _0;
++ _17 = _16 as *mut u8 (PtrToPtr);
++ _18 = &raw const _1;
++ _19 = _18 as *const u8 (PtrToPtr);
++ Deinit(_16);
++ copy_nonoverlapping(dst = _17, src = _19, count = _15);
++ StorageDead(_12);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/enum_opt.unin.EnumSizeOpt.64bit.diff b/tests/mir-opt/enum_opt.unin.EnumSizeOpt.64bit.diff
index ad9f12cf9..4306f38b8 100644
--- a/tests/mir-opt/enum_opt.unin.EnumSizeOpt.64bit.diff
+++ b/tests/mir-opt/enum_opt.unin.EnumSizeOpt.64bit.diff
@@ -2,67 +2,67 @@
+ // MIR for `unin` after EnumSizeOpt
fn unin() -> NoData {
- let mut _0: NoData; // return place in scope 0 at $DIR/enum_opt.rs:+0:18: +0:24
- let mut _1: NoData; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- let mut _2: NoData; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:31
- let mut _3: [u8; 8196]; // in scope 0 at $DIR/enum_opt.rs:+2:21: +2:30
-+ let mut _4: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _5: isize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _6: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _7: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _8: *mut NoData; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _9: *mut u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _10: *const NoData; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _11: *const u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
-+ let mut _12: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _13: isize; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _14: usize; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _15: usize; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _16: *mut NoData; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _17: *mut u8; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _18: *const NoData; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
-+ let mut _19: *const u8; // in scope 0 at $DIR/enum_opt.rs:+3:3: +3:4
+ let mut _0: NoData;
+ let mut _1: NoData;
+ let mut _2: NoData;
+ let mut _3: [u8; 8196];
++ let mut _4: [usize; 2];
++ let mut _5: isize;
++ let mut _6: usize;
++ let mut _7: usize;
++ let mut _8: *mut NoData;
++ let mut _9: *mut u8;
++ let mut _10: *const NoData;
++ let mut _11: *const u8;
++ let mut _12: [usize; 2];
++ let mut _13: isize;
++ let mut _14: usize;
++ let mut _15: usize;
++ let mut _16: *mut NoData;
++ let mut _17: *mut u8;
++ let mut _18: *const NoData;
++ let mut _19: *const u8;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
+ debug a => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
- _1 = NoData::None; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:27
- StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:31
- StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:21: +2:30
- _3 = [const 1_u8; 8196]; // scope 1 at $DIR/enum_opt.rs:+2:21: +2:30
- _2 = NoData::Large(move _3); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:31
- StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:30: +2:31
-- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _4 = const [8197_usize, 1_usize]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _5 = discriminant(_2); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _6 = _5 as usize (IntToInt); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _7 = _4[_6]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _8 = &raw mut _1; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _9 = _8 as *mut u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _10 = &raw const _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ _11 = _10 as *const u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ Deinit(_8); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ copy_nonoverlapping(dst = _9, src = _11, count = _7); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
-+ StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
- StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:30: +2:31
-- _0 = move _1; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ StorageLive(_12); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _12 = const [8197_usize, 1_usize]; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _13 = discriminant(_1); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _14 = _13 as usize (IntToInt); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _15 = _12[_14]; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _16 = &raw mut _0; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _17 = _16 as *mut u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _18 = &raw const _1; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ _19 = _18 as *const u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ Deinit(_16); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ copy_nonoverlapping(dst = _17, src = _19, count = _15); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
-+ StorageDead(_12); // scope 1 at $DIR/enum_opt.rs:+3:3: +3:4
- StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+4:1: +4:2
- return; // scope 0 at $DIR/enum_opt.rs:+4:2: +4:2
+ StorageLive(_1);
+ _1 = NoData::None;
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = [const 1_u8; 8196];
+ _2 = NoData::Large(move _3);
+ StorageDead(_3);
+- _1 = move _2;
++ StorageLive(_4);
++ _4 = const [8197_usize, 1_usize];
++ _5 = discriminant(_2);
++ _6 = _5 as usize (IntToInt);
++ _7 = _4[_6];
++ _8 = &raw mut _1;
++ _9 = _8 as *mut u8 (PtrToPtr);
++ _10 = &raw const _2;
++ _11 = _10 as *const u8 (PtrToPtr);
++ Deinit(_8);
++ copy_nonoverlapping(dst = _9, src = _11, count = _7);
++ StorageDead(_4);
+ StorageDead(_2);
+- _0 = move _1;
++ StorageLive(_12);
++ _12 = const [8197_usize, 1_usize];
++ _13 = discriminant(_1);
++ _14 = _13 as usize (IntToInt);
++ _15 = _12[_14];
++ _16 = &raw mut _0;
++ _17 = _16 as *mut u8 (PtrToPtr);
++ _18 = &raw const _1;
++ _19 = _18 as *const u8 (PtrToPtr);
++ Deinit(_16);
++ copy_nonoverlapping(dst = _17, src = _19, count = _15);
++ StorageDead(_12);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/equal_true.opt.InstSimplify.diff b/tests/mir-opt/equal_true.opt.InstSimplify.diff
index 4ef413200..7b38862e4 100644
--- a/tests/mir-opt/equal_true.opt.InstSimplify.diff
+++ b/tests/mir-opt/equal_true.opt.InstSimplify.diff
@@ -2,34 +2,34 @@
+ // MIR for `opt` after InstSimplify
fn opt(_1: bool) -> i32 {
- debug x => _1; // in scope 0 at $DIR/equal_true.rs:+0:8: +0:9
- let mut _0: i32; // return place in scope 0 at $DIR/equal_true.rs:+0:20: +0:23
- let mut _2: bool; // in scope 0 at $DIR/equal_true.rs:+1:8: +1:17
- let mut _3: bool; // in scope 0 at $DIR/equal_true.rs:+1:8: +1:9
+ debug x => _1;
+ let mut _0: i32;
+ let mut _2: bool;
+ let mut _3: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/equal_true.rs:+1:8: +1:17
- StorageLive(_3); // scope 0 at $DIR/equal_true.rs:+1:8: +1:9
- _3 = _1; // scope 0 at $DIR/equal_true.rs:+1:8: +1:9
-- _2 = Eq(move _3, const true); // scope 0 at $DIR/equal_true.rs:+1:8: +1:17
-+ _2 = move _3; // scope 0 at $DIR/equal_true.rs:+1:8: +1:17
- StorageDead(_3); // scope 0 at $DIR/equal_true.rs:+1:16: +1:17
- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/equal_true.rs:+1:8: +1:17
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = Eq(move _3, const true);
++ _2 = move _3;
+ StorageDead(_3);
+ switchInt(move _2) -> [0: bb2, otherwise: bb1];
}
bb1: {
- _0 = const 0_i32; // scope 0 at $DIR/equal_true.rs:+1:20: +1:21
- goto -> bb3; // scope 0 at $DIR/equal_true.rs:+1:5: +1:34
+ _0 = const 0_i32;
+ goto -> bb3;
}
bb2: {
- _0 = const 1_i32; // scope 0 at $DIR/equal_true.rs:+1:31: +1:32
- goto -> bb3; // scope 0 at $DIR/equal_true.rs:+1:5: +1:34
+ _0 = const 1_i32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/equal_true.rs:+1:33: +1:34
- return; // scope 0 at $DIR/equal_true.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/exponential_or.match_tuple.SimplifyCfg-initial.after.mir b/tests/mir-opt/exponential_or.match_tuple.SimplifyCfg-initial.after.mir
index ab9550499..fba616d04 100644
--- a/tests/mir-opt/exponential_or.match_tuple.SimplifyCfg-initial.after.mir
+++ b/tests/mir-opt/exponential_or.match_tuple.SimplifyCfg-initial.after.mir
@@ -1,83 +1,83 @@
// MIR for `match_tuple` after SimplifyCfg-initial
fn match_tuple(_1: (u32, bool, Option<i32>, u32)) -> u32 {
- debug x => _1; // in scope 0 at $DIR/exponential_or.rs:+0:16: +0:17
- let mut _0: u32; // return place in scope 0 at $DIR/exponential_or.rs:+0:53: +0:56
- let mut _2: isize; // in scope 0 at $DIR/exponential_or.rs:+2:37: +2:48
- let mut _3: bool; // in scope 0 at $DIR/exponential_or.rs:+2:70: +2:77
- let mut _4: bool; // in scope 0 at $DIR/exponential_or.rs:+2:70: +2:77
- let mut _5: bool; // in scope 0 at $DIR/exponential_or.rs:+2:62: +2:67
- let mut _6: bool; // in scope 0 at $DIR/exponential_or.rs:+2:62: +2:67
- let _7: u32; // in scope 0 at $DIR/exponential_or.rs:+2:10: +2:11
- let _8: u32; // in scope 0 at $DIR/exponential_or.rs:+2:57: +2:58
- let mut _9: u32; // in scope 0 at $DIR/exponential_or.rs:+2:83: +2:84
- let mut _10: u32; // in scope 0 at $DIR/exponential_or.rs:+2:87: +2:88
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: isize;
+ let mut _3: bool;
+ let mut _4: bool;
+ let mut _5: bool;
+ let mut _6: bool;
+ let _7: u32;
+ let _8: u32;
+ let mut _9: u32;
+ let mut _10: u32;
scope 1 {
- debug y => _7; // in scope 1 at $DIR/exponential_or.rs:+2:10: +2:11
- debug z => _8; // in scope 1 at $DIR/exponential_or.rs:+2:57: +2:58
+ debug y => _7;
+ debug z => _8;
}
bb0: {
- FakeRead(ForMatchedPlace(None), _1); // scope 0 at $DIR/exponential_or.rs:+1:11: +1:12
- switchInt((_1.0: u32)) -> [1: bb2, 4: bb2, otherwise: bb1]; // scope 0 at $DIR/exponential_or.rs:+2:15: +2:20
+ FakeRead(ForMatchedPlace(None), _1);
+ switchInt((_1.0: u32)) -> [1: bb2, 4: bb2, otherwise: bb1];
}
bb1: {
- _0 = const 0_u32; // scope 0 at $DIR/exponential_or.rs:+3:14: +3:15
- goto -> bb10; // scope 0 at $DIR/exponential_or.rs:+3:14: +3:15
+ _0 = const 0_u32;
+ goto -> bb10;
}
bb2: {
- _2 = discriminant((_1.2: std::option::Option<i32>)); // scope 0 at $DIR/exponential_or.rs:+2:37: +2:55
- switchInt(move _2) -> [0: bb4, 1: bb3, otherwise: bb1]; // scope 0 at $DIR/exponential_or.rs:+2:37: +2:55
+ _2 = discriminant((_1.2: std::option::Option<i32>));
+ switchInt(move _2) -> [0: bb4, 1: bb3, otherwise: bb1];
}
bb3: {
- switchInt((((_1.2: std::option::Option<i32>) as Some).0: i32)) -> [1: bb4, 8: bb4, otherwise: bb1]; // scope 0 at $DIR/exponential_or.rs:+2:37: +2:55
+ switchInt((((_1.2: std::option::Option<i32>) as Some).0: i32)) -> [1: bb4, 8: bb4, otherwise: bb1];
}
bb4: {
- _5 = Le(const 6_u32, (_1.3: u32)); // scope 0 at $DIR/exponential_or.rs:+2:62: +2:67
- switchInt(move _5) -> [0: bb6, otherwise: bb5]; // scope 0 at $DIR/exponential_or.rs:+2:62: +2:67
+ _5 = Le(const 6_u32, (_1.3: u32));
+ switchInt(move _5) -> [0: bb6, otherwise: bb5];
}
bb5: {
- _6 = Le((_1.3: u32), const 9_u32); // scope 0 at $DIR/exponential_or.rs:+2:62: +2:67
- switchInt(move _6) -> [0: bb6, otherwise: bb8]; // scope 0 at $DIR/exponential_or.rs:+2:62: +2:67
+ _6 = Le((_1.3: u32), const 9_u32);
+ switchInt(move _6) -> [0: bb6, otherwise: bb8];
}
bb6: {
- _3 = Le(const 13_u32, (_1.3: u32)); // scope 0 at $DIR/exponential_or.rs:+2:70: +2:77
- switchInt(move _3) -> [0: bb1, otherwise: bb7]; // scope 0 at $DIR/exponential_or.rs:+2:70: +2:77
+ _3 = Le(const 13_u32, (_1.3: u32));
+ switchInt(move _3) -> [0: bb1, otherwise: bb7];
}
bb7: {
- _4 = Le((_1.3: u32), const 16_u32); // scope 0 at $DIR/exponential_or.rs:+2:70: +2:77
- switchInt(move _4) -> [0: bb1, otherwise: bb8]; // scope 0 at $DIR/exponential_or.rs:+2:70: +2:77
+ _4 = Le((_1.3: u32), const 16_u32);
+ switchInt(move _4) -> [0: bb1, otherwise: bb8];
}
bb8: {
- falseEdge -> [real: bb9, imaginary: bb1]; // scope 0 at $DIR/exponential_or.rs:+2:9: +2:79
+ falseEdge -> [real: bb9, imaginary: bb1];
}
bb9: {
- StorageLive(_7); // scope 0 at $DIR/exponential_or.rs:+2:10: +2:11
- _7 = (_1.0: u32); // scope 0 at $DIR/exponential_or.rs:+2:10: +2:11
- StorageLive(_8); // scope 0 at $DIR/exponential_or.rs:+2:57: +2:58
- _8 = (_1.3: u32); // scope 0 at $DIR/exponential_or.rs:+2:57: +2:58
- StorageLive(_9); // scope 1 at $DIR/exponential_or.rs:+2:83: +2:84
- _9 = _7; // scope 1 at $DIR/exponential_or.rs:+2:83: +2:84
- StorageLive(_10); // scope 1 at $DIR/exponential_or.rs:+2:87: +2:88
- _10 = _8; // scope 1 at $DIR/exponential_or.rs:+2:87: +2:88
- _0 = BitXor(move _9, move _10); // scope 1 at $DIR/exponential_or.rs:+2:83: +2:88
- StorageDead(_10); // scope 1 at $DIR/exponential_or.rs:+2:87: +2:88
- StorageDead(_9); // scope 1 at $DIR/exponential_or.rs:+2:87: +2:88
- StorageDead(_8); // scope 0 at $DIR/exponential_or.rs:+2:87: +2:88
- StorageDead(_7); // scope 0 at $DIR/exponential_or.rs:+2:87: +2:88
- goto -> bb10; // scope 0 at $DIR/exponential_or.rs:+2:87: +2:88
+ StorageLive(_7);
+ _7 = (_1.0: u32);
+ StorageLive(_8);
+ _8 = (_1.3: u32);
+ StorageLive(_9);
+ _9 = _7;
+ StorageLive(_10);
+ _10 = _8;
+ _0 = BitXor(move _9, move _10);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_7);
+ goto -> bb10;
}
bb10: {
- return; // scope 0 at $DIR/exponential_or.rs:+5:2: +5:2
+ return;
}
}
diff --git a/tests/mir-opt/fn_ptr_shim.core.ops-function-Fn-call.AddMovesForPackedDrops.before.mir b/tests/mir-opt/fn_ptr_shim.core.ops-function-Fn-call.AddMovesForPackedDrops.before.mir
index c63433d36..5fddfd494 100644
--- a/tests/mir-opt/fn_ptr_shim.core.ops-function-Fn-call.AddMovesForPackedDrops.before.mir
+++ b/tests/mir-opt/fn_ptr_shim.core.ops-function-Fn-call.AddMovesForPackedDrops.before.mir
@@ -1,13 +1,13 @@
// MIR for `std::ops::Fn::call` before AddMovesForPackedDrops
-fn std::ops::Fn::call(_1: *const fn(), _2: ()) -> <fn() as FnOnce<()>>::Output {
- let mut _0: <fn() as std::ops::FnOnce<()>>::Output; // return place in scope 0 at $SRC_DIR/core/src/ops/function.rs:+0:5: +0:67
+fn std::ops::Fn::call(_1: &fn(), _2: ()) -> <fn() as FnOnce<()>>::Output {
+ let mut _0: <fn() as std::ops::FnOnce<()>>::Output;
bb0: {
- _0 = move (*_1)() -> bb1; // scope 0 at $SRC_DIR/core/src/ops/function.rs:+0:5: +0:67
+ _0 = move (*_1)() -> [return: bb1, unwind continue];
}
bb1: {
- return; // scope 0 at $SRC_DIR/core/src/ops/function.rs:+0:5: +0:67
+ return;
}
}
diff --git a/tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.diff b/tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.diff
deleted file mode 100644
index 8a4a16825..000000000
--- a/tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.diff
+++ /dev/null
@@ -1,129 +0,0 @@
-- // MIR for `float_to_exponential_common` before ConstProp
-+ // MIR for `float_to_exponential_common` after ConstProp
-
- fn float_to_exponential_common(_1: &mut Formatter<'_>, _2: &T, _3: bool) -> Result<(), std::fmt::Error> {
- debug fmt => _1; // in scope 0 at $DIR/funky_arms.rs:+0:35: +0:38
- debug num => _2; // in scope 0 at $DIR/funky_arms.rs:+0:60: +0:63
- debug upper => _3; // in scope 0 at $DIR/funky_arms.rs:+0:69: +0:74
- let mut _0: std::result::Result<(), std::fmt::Error>; // return place in scope 0 at $DIR/funky_arms.rs:+0:85: +0:91
- let _4: bool; // in scope 0 at $DIR/funky_arms.rs:+4:9: +4:19
- let mut _5: &std::fmt::Formatter<'_>; // in scope 0 at $DIR/funky_arms.rs:+4:22: +4:37
- let mut _7: std::option::Option<usize>; // in scope 0 at $DIR/funky_arms.rs:+13:30: +13:45
- let mut _8: &std::fmt::Formatter<'_>; // in scope 0 at $DIR/funky_arms.rs:+13:30: +13:45
- let mut _9: isize; // in scope 0 at $DIR/funky_arms.rs:+13:12: +13:27
- let mut _11: &mut std::fmt::Formatter<'_>; // in scope 0 at $DIR/funky_arms.rs:+15:43: +15:46
- let mut _12: &T; // in scope 0 at $DIR/funky_arms.rs:+15:48: +15:51
- let mut _13: core::num::flt2dec::Sign; // in scope 0 at $DIR/funky_arms.rs:+15:53: +15:57
- let mut _14: u32; // in scope 0 at $DIR/funky_arms.rs:+15:59: +15:79
- let mut _15: u32; // in scope 0 at $DIR/funky_arms.rs:+15:59: +15:75
- let mut _16: usize; // in scope 0 at $DIR/funky_arms.rs:+15:59: +15:68
- let mut _17: bool; // in scope 0 at $DIR/funky_arms.rs:+15:81: +15:86
- let mut _18: &mut std::fmt::Formatter<'_>; // in scope 0 at $DIR/funky_arms.rs:+17:46: +17:49
- let mut _19: &T; // in scope 0 at $DIR/funky_arms.rs:+17:51: +17:54
- let mut _20: core::num::flt2dec::Sign; // in scope 0 at $DIR/funky_arms.rs:+17:56: +17:60
- let mut _21: bool; // in scope 0 at $DIR/funky_arms.rs:+17:62: +17:67
- scope 1 {
- debug force_sign => _4; // in scope 1 at $DIR/funky_arms.rs:+4:9: +4:19
- let _6: core::num::flt2dec::Sign; // in scope 1 at $DIR/funky_arms.rs:+8:9: +8:13
- scope 2 {
- debug sign => _6; // in scope 2 at $DIR/funky_arms.rs:+8:9: +8:13
- scope 3 {
- debug precision => _10; // in scope 3 at $DIR/funky_arms.rs:+13:17: +13:26
- let _10: usize; // in scope 3 at $DIR/funky_arms.rs:+13:17: +13:26
- }
- }
- }
-
- bb0: {
- StorageLive(_4); // scope 0 at $DIR/funky_arms.rs:+4:9: +4:19
- StorageLive(_5); // scope 0 at $DIR/funky_arms.rs:+4:22: +4:37
- _5 = &(*_1); // scope 0 at $DIR/funky_arms.rs:+4:22: +4:37
- _4 = Formatter::<'_>::sign_plus(move _5) -> bb1; // scope 0 at $DIR/funky_arms.rs:+4:22: +4:37
- // mir::Constant
- // + span: $DIR/funky_arms.rs:16:26: 16:35
- // + literal: Const { ty: for<'a> fn(&'a Formatter<'_>) -> bool {Formatter::<'_>::sign_plus}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_5); // scope 0 at $DIR/funky_arms.rs:+4:36: +4:37
- StorageLive(_6); // scope 1 at $DIR/funky_arms.rs:+8:9: +8:13
- switchInt(_4) -> [0: bb3, otherwise: bb2]; // scope 1 at $DIR/funky_arms.rs:+8:16: +8:32
- }
-
- bb2: {
-- _6 = MinusPlus; // scope 1 at $DIR/funky_arms.rs:+10:17: +10:41
-+ _6 = const MinusPlus; // scope 1 at $DIR/funky_arms.rs:+10:17: +10:41
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: Sign, val: Value(Scalar(0x01)) }
- goto -> bb4; // scope 1 at $DIR/funky_arms.rs:+10:17: +10:41
- }
-
- bb3: {
-- _6 = Minus; // scope 1 at $DIR/funky_arms.rs:+9:18: +9:38
-+ _6 = const Minus; // scope 1 at $DIR/funky_arms.rs:+9:18: +9:38
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: Sign, val: Value(Scalar(0x00)) }
- goto -> bb4; // scope 1 at $DIR/funky_arms.rs:+9:18: +9:38
- }
-
- bb4: {
- StorageLive(_7); // scope 3 at $DIR/funky_arms.rs:+13:30: +13:45
- StorageLive(_8); // scope 3 at $DIR/funky_arms.rs:+13:30: +13:45
- _8 = &(*_1); // scope 3 at $DIR/funky_arms.rs:+13:30: +13:45
- _7 = Formatter::<'_>::precision(move _8) -> bb5; // scope 3 at $DIR/funky_arms.rs:+13:30: +13:45
- // mir::Constant
- // + span: $DIR/funky_arms.rs:25:34: 25:43
- // + literal: Const { ty: for<'a> fn(&'a Formatter<'_>) -> Option<usize> {Formatter::<'_>::precision}, val: Value(<ZST>) }
- }
-
- bb5: {
- StorageDead(_8); // scope 3 at $DIR/funky_arms.rs:+13:44: +13:45
- _9 = discriminant(_7); // scope 3 at $DIR/funky_arms.rs:+13:12: +13:27
- switchInt(move _9) -> [1: bb6, otherwise: bb8]; // scope 3 at $DIR/funky_arms.rs:+13:12: +13:27
- }
-
- bb6: {
- _10 = ((_7 as Some).0: usize); // scope 3 at $DIR/funky_arms.rs:+13:17: +13:26
- StorageLive(_13); // scope 3 at $DIR/funky_arms.rs:+15:53: +15:57
- _13 = _6; // scope 3 at $DIR/funky_arms.rs:+15:53: +15:57
- StorageLive(_14); // scope 3 at $DIR/funky_arms.rs:+15:59: +15:79
- StorageLive(_15); // scope 3 at $DIR/funky_arms.rs:+15:59: +15:75
- _15 = _10 as u32 (IntToInt); // scope 3 at $DIR/funky_arms.rs:+15:59: +15:75
- _14 = Add(move _15, const 1_u32); // scope 3 at $DIR/funky_arms.rs:+15:59: +15:79
- StorageDead(_15); // scope 3 at $DIR/funky_arms.rs:+15:78: +15:79
- _0 = float_to_exponential_common_exact::<T>(_1, _2, move _13, move _14, _3) -> bb7; // scope 3 at $DIR/funky_arms.rs:+15:9: +15:87
- // mir::Constant
- // + span: $DIR/funky_arms.rs:27:9: 27:42
- // + literal: Const { ty: for<'a, 'b, 'c> fn(&'a mut Formatter<'b>, &'c T, Sign, u32, bool) -> Result<(), std::fmt::Error> {float_to_exponential_common_exact::<T>}, val: Value(<ZST>) }
- }
-
- bb7: {
- StorageDead(_14); // scope 3 at $DIR/funky_arms.rs:+15:86: +15:87
- StorageDead(_13); // scope 3 at $DIR/funky_arms.rs:+15:86: +15:87
- goto -> bb10; // scope 2 at $DIR/funky_arms.rs:+13:5: +18:6
- }
-
- bb8: {
- StorageLive(_20); // scope 2 at $DIR/funky_arms.rs:+17:56: +17:60
- _20 = _6; // scope 2 at $DIR/funky_arms.rs:+17:56: +17:60
- _0 = float_to_exponential_common_shortest::<T>(_1, _2, move _20, _3) -> bb9; // scope 2 at $DIR/funky_arms.rs:+17:9: +17:68
- // mir::Constant
- // + span: $DIR/funky_arms.rs:29:9: 29:45
- // + literal: Const { ty: for<'a, 'b, 'c> fn(&'a mut Formatter<'b>, &'c T, Sign, bool) -> Result<(), std::fmt::Error> {float_to_exponential_common_shortest::<T>}, val: Value(<ZST>) }
- }
-
- bb9: {
- StorageDead(_20); // scope 2 at $DIR/funky_arms.rs:+17:67: +17:68
- goto -> bb10; // scope 2 at $DIR/funky_arms.rs:+13:5: +18:6
- }
-
- bb10: {
- StorageDead(_6); // scope 1 at $DIR/funky_arms.rs:+19:1: +19:2
- StorageDead(_4); // scope 0 at $DIR/funky_arms.rs:+19:1: +19:2
- StorageDead(_7); // scope 0 at $DIR/funky_arms.rs:+19:1: +19:2
- return; // scope 0 at $DIR/funky_arms.rs:+19:2: +19:2
- }
- }
-
diff --git a/tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.panic-abort.diff b/tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..a538756ba
--- /dev/null
+++ b/tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.panic-abort.diff
@@ -0,0 +1,111 @@
+- // MIR for `float_to_exponential_common` before ConstProp
++ // MIR for `float_to_exponential_common` after ConstProp
+
+ fn float_to_exponential_common(_1: &mut Formatter<'_>, _2: &T, _3: bool) -> Result<(), std::fmt::Error> {
+ debug fmt => _1;
+ debug num => _2;
+ debug upper => _3;
+ let mut _0: std::result::Result<(), std::fmt::Error>;
+ let _4: bool;
+ let mut _5: &std::fmt::Formatter<'_>;
+ let mut _7: std::option::Option<usize>;
+ let mut _8: &std::fmt::Formatter<'_>;
+ let mut _9: isize;
+ let mut _11: &mut std::fmt::Formatter<'_>;
+ let mut _12: &T;
+ let mut _13: core::num::flt2dec::Sign;
+ let mut _14: u32;
+ let mut _15: u32;
+ let mut _16: usize;
+ let mut _17: bool;
+ let mut _18: &mut std::fmt::Formatter<'_>;
+ let mut _19: &T;
+ let mut _20: core::num::flt2dec::Sign;
+ let mut _21: bool;
+ scope 1 {
+ debug force_sign => _4;
+ let _6: core::num::flt2dec::Sign;
+ scope 2 {
+ debug sign => _6;
+ scope 3 {
+ debug precision => _10;
+ let _10: usize;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = &(*_1);
+ _4 = Formatter::<'_>::sign_plus(move _5) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageLive(_6);
+ switchInt(_4) -> [0: bb3, otherwise: bb2];
+ }
+
+ bb2: {
+- _6 = MinusPlus;
++ _6 = const MinusPlus;
+ goto -> bb4;
+ }
+
+ bb3: {
+- _6 = Minus;
++ _6 = const Minus;
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = &(*_1);
+ _7 = Formatter::<'_>::precision(move _8) -> [return: bb5, unwind unreachable];
+ }
+
+ bb5: {
+ StorageDead(_8);
+ _9 = discriminant(_7);
+ switchInt(move _9) -> [1: bb6, otherwise: bb8];
+ }
+
+ bb6: {
+ _10 = ((_7 as Some).0: usize);
+ StorageLive(_13);
+ _13 = _6;
+ StorageLive(_14);
+ StorageLive(_15);
+ _15 = _10 as u32 (IntToInt);
+ _14 = Add(move _15, const 1_u32);
+ StorageDead(_15);
+ _0 = float_to_exponential_common_exact::<T>(_1, _2, move _13, move _14, _3) -> [return: bb7, unwind unreachable];
+ }
+
+ bb7: {
+ StorageDead(_14);
+ StorageDead(_13);
+ goto -> bb10;
+ }
+
+ bb8: {
+ StorageLive(_20);
+ _20 = _6;
+ _0 = float_to_exponential_common_shortest::<T>(_1, _2, move _20, _3) -> [return: bb9, unwind unreachable];
+ }
+
+ bb9: {
+ StorageDead(_20);
+ goto -> bb10;
+ }
+
+ bb10: {
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_7);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.panic-unwind.diff b/tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..8a3dcfab4
--- /dev/null
+++ b/tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.panic-unwind.diff
@@ -0,0 +1,111 @@
+- // MIR for `float_to_exponential_common` before ConstProp
++ // MIR for `float_to_exponential_common` after ConstProp
+
+ fn float_to_exponential_common(_1: &mut Formatter<'_>, _2: &T, _3: bool) -> Result<(), std::fmt::Error> {
+ debug fmt => _1;
+ debug num => _2;
+ debug upper => _3;
+ let mut _0: std::result::Result<(), std::fmt::Error>;
+ let _4: bool;
+ let mut _5: &std::fmt::Formatter<'_>;
+ let mut _7: std::option::Option<usize>;
+ let mut _8: &std::fmt::Formatter<'_>;
+ let mut _9: isize;
+ let mut _11: &mut std::fmt::Formatter<'_>;
+ let mut _12: &T;
+ let mut _13: core::num::flt2dec::Sign;
+ let mut _14: u32;
+ let mut _15: u32;
+ let mut _16: usize;
+ let mut _17: bool;
+ let mut _18: &mut std::fmt::Formatter<'_>;
+ let mut _19: &T;
+ let mut _20: core::num::flt2dec::Sign;
+ let mut _21: bool;
+ scope 1 {
+ debug force_sign => _4;
+ let _6: core::num::flt2dec::Sign;
+ scope 2 {
+ debug sign => _6;
+ scope 3 {
+ debug precision => _10;
+ let _10: usize;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = &(*_1);
+ _4 = Formatter::<'_>::sign_plus(move _5) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageLive(_6);
+ switchInt(_4) -> [0: bb3, otherwise: bb2];
+ }
+
+ bb2: {
+- _6 = MinusPlus;
++ _6 = const MinusPlus;
+ goto -> bb4;
+ }
+
+ bb3: {
+- _6 = Minus;
++ _6 = const Minus;
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = &(*_1);
+ _7 = Formatter::<'_>::precision(move _8) -> [return: bb5, unwind continue];
+ }
+
+ bb5: {
+ StorageDead(_8);
+ _9 = discriminant(_7);
+ switchInt(move _9) -> [1: bb6, otherwise: bb8];
+ }
+
+ bb6: {
+ _10 = ((_7 as Some).0: usize);
+ StorageLive(_13);
+ _13 = _6;
+ StorageLive(_14);
+ StorageLive(_15);
+ _15 = _10 as u32 (IntToInt);
+ _14 = Add(move _15, const 1_u32);
+ StorageDead(_15);
+ _0 = float_to_exponential_common_exact::<T>(_1, _2, move _13, move _14, _3) -> [return: bb7, unwind continue];
+ }
+
+ bb7: {
+ StorageDead(_14);
+ StorageDead(_13);
+ goto -> bb10;
+ }
+
+ bb8: {
+ StorageLive(_20);
+ _20 = _6;
+ _0 = float_to_exponential_common_shortest::<T>(_1, _2, move _20, _3) -> [return: bb9, unwind continue];
+ }
+
+ bb9: {
+ StorageDead(_20);
+ goto -> bb10;
+ }
+
+ bb10: {
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_7);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/funky_arms.rs b/tests/mir-opt/funky_arms.rs
index c4f75b5df..6b4f4c805 100644
--- a/tests/mir-opt/funky_arms.rs
+++ b/tests/mir-opt/funky_arms.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// compile-flags: --crate-type lib -Cdebug-assertions=no
#![feature(flt2dec)]
diff --git a/tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.mir b/tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.mir
deleted file mode 100644
index afe518642..000000000
--- a/tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.mir
+++ /dev/null
@@ -1,91 +0,0 @@
-// MIR for `main::{closure#0}` 0 generator_drop
-/* generator_layout = GeneratorLayout {
- field_tys: {
- _0: GeneratorSavedTy {
- ty: std::string::String,
- source_info: SourceInfo {
- span: $DIR/generator_drop_cleanup.rs:11:13: 11:15 (#0),
- scope: scope[0],
- },
- ignore_for_traits: false,
- },
- },
- variant_fields: {
- Unresumed(0): [],
- Returned (1): [],
- Panicked (2): [],
- Suspend0 (3): [_0],
- },
- storage_conflicts: BitMatrix(1x1) {
- (_0, _0),
- },
-} */
-
-fn main::{closure#0}(_1: *mut [generator@$DIR/generator_drop_cleanup.rs:10:15: 10:17]) -> () {
- let mut _0: (); // return place in scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- let mut _2: (); // in scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- let _3: std::string::String; // in scope 0 at $DIR/generator_drop_cleanup.rs:+1:13: +1:15
- let _4: (); // in scope 0 at $DIR/generator_drop_cleanup.rs:+2:9: +2:14
- let mut _5: (); // in scope 0 at $DIR/generator_drop_cleanup.rs:+2:9: +2:14
- let mut _6: (); // in scope 0 at $DIR/generator_drop_cleanup.rs:+0:18: +0:18
- let mut _7: (); // in scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- let mut _8: u32; // in scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- scope 1 {
- debug _s => (((*_1) as variant#3).0: std::string::String); // in scope 1 at $DIR/generator_drop_cleanup.rs:+1:13: +1:15
- }
-
- bb0: {
- _8 = discriminant((*_1)); // scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- switchInt(move _8) -> [0: bb7, 3: bb10, otherwise: bb11]; // scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- }
-
- bb1: {
- StorageDead(_5); // scope 1 at $DIR/generator_drop_cleanup.rs:+2:13: +2:14
- StorageDead(_4); // scope 1 at $DIR/generator_drop_cleanup.rs:+2:14: +2:15
- drop((((*_1) as variant#3).0: std::string::String)) -> [return: bb2, unwind: bb5]; // scope 0 at $DIR/generator_drop_cleanup.rs:+3:5: +3:6
- }
-
- bb2: {
- nop; // scope 0 at $DIR/generator_drop_cleanup.rs:+3:5: +3:6
- goto -> bb8; // scope 0 at $DIR/generator_drop_cleanup.rs:+3:5: +3:6
- }
-
- bb3: {
- return; // scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- }
-
- bb4 (cleanup): {
- resume; // scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- }
-
- bb5 (cleanup): {
- nop; // scope 0 at $DIR/generator_drop_cleanup.rs:+3:5: +3:6
- goto -> bb4; // scope 0 at $DIR/generator_drop_cleanup.rs:+3:5: +3:6
- }
-
- bb6: {
- return; // scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- }
-
- bb7: {
- goto -> bb9; // scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- }
-
- bb8: {
- goto -> bb3; // scope 0 at $DIR/generator_drop_cleanup.rs:+3:5: +3:6
- }
-
- bb9: {
- goto -> bb6; // scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- }
-
- bb10: {
- StorageLive(_4); // scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- StorageLive(_5); // scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- goto -> bb1; // scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- }
-
- bb11: {
- return; // scope 0 at $DIR/generator_drop_cleanup.rs:+0:15: +3:6
- }
-}
diff --git a/tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.panic-abort.mir b/tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.panic-abort.mir
new file mode 100644
index 000000000..958078b97
--- /dev/null
+++ b/tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.panic-abort.mir
@@ -0,0 +1,82 @@
+// MIR for `main::{closure#0}` 0 generator_drop
+/* generator_layout = GeneratorLayout {
+ field_tys: {
+ _0: GeneratorSavedTy {
+ ty: std::string::String,
+ source_info: SourceInfo {
+ span: $DIR/generator_drop_cleanup.rs:11:13: 11:15 (#0),
+ scope: scope[0],
+ },
+ ignore_for_traits: false,
+ },
+ },
+ variant_fields: {
+ Unresumed(0): [],
+ Returned (1): [],
+ Panicked (2): [],
+ Suspend0 (3): [_0],
+ },
+ storage_conflicts: BitMatrix(1x1) {
+ (_0, _0),
+ },
+} */
+
+fn main::{closure#0}(_1: *mut [generator@$DIR/generator_drop_cleanup.rs:10:15: 10:17]) -> () {
+ let mut _0: ();
+ let mut _2: ();
+ let _3: std::string::String;
+ let _4: ();
+ let mut _5: ();
+ let mut _6: ();
+ let mut _7: ();
+ let mut _8: u32;
+ scope 1 {
+ debug _s => (((*_1) as variant#3).0: std::string::String);
+ }
+
+ bb0: {
+ _8 = discriminant((*_1));
+ switchInt(move _8) -> [0: bb5, 3: bb8, otherwise: bb9];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ drop((((*_1) as variant#3).0: std::string::String)) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ nop;
+ goto -> bb6;
+ }
+
+ bb3: {
+ return;
+ }
+
+ bb4: {
+ return;
+ }
+
+ bb5: {
+ goto -> bb7;
+ }
+
+ bb6: {
+ goto -> bb3;
+ }
+
+ bb7: {
+ goto -> bb4;
+ }
+
+ bb8: {
+ StorageLive(_4);
+ StorageLive(_5);
+ goto -> bb1;
+ }
+
+ bb9: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.panic-unwind.mir b/tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.panic-unwind.mir
new file mode 100644
index 000000000..7e050e585
--- /dev/null
+++ b/tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.panic-unwind.mir
@@ -0,0 +1,91 @@
+// MIR for `main::{closure#0}` 0 generator_drop
+/* generator_layout = GeneratorLayout {
+ field_tys: {
+ _0: GeneratorSavedTy {
+ ty: std::string::String,
+ source_info: SourceInfo {
+ span: $DIR/generator_drop_cleanup.rs:11:13: 11:15 (#0),
+ scope: scope[0],
+ },
+ ignore_for_traits: false,
+ },
+ },
+ variant_fields: {
+ Unresumed(0): [],
+ Returned (1): [],
+ Panicked (2): [],
+ Suspend0 (3): [_0],
+ },
+ storage_conflicts: BitMatrix(1x1) {
+ (_0, _0),
+ },
+} */
+
+fn main::{closure#0}(_1: *mut [generator@$DIR/generator_drop_cleanup.rs:10:15: 10:17]) -> () {
+ let mut _0: ();
+ let mut _2: ();
+ let _3: std::string::String;
+ let _4: ();
+ let mut _5: ();
+ let mut _6: ();
+ let mut _7: ();
+ let mut _8: u32;
+ scope 1 {
+ debug _s => (((*_1) as variant#3).0: std::string::String);
+ }
+
+ bb0: {
+ _8 = discriminant((*_1));
+ switchInt(move _8) -> [0: bb7, 3: bb10, otherwise: bb11];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ drop((((*_1) as variant#3).0: std::string::String)) -> [return: bb2, unwind: bb5];
+ }
+
+ bb2: {
+ nop;
+ goto -> bb8;
+ }
+
+ bb3: {
+ return;
+ }
+
+ bb4 (cleanup): {
+ resume;
+ }
+
+ bb5 (cleanup): {
+ nop;
+ goto -> bb4;
+ }
+
+ bb6: {
+ return;
+ }
+
+ bb7: {
+ goto -> bb9;
+ }
+
+ bb8: {
+ goto -> bb3;
+ }
+
+ bb9: {
+ goto -> bb6;
+ }
+
+ bb10: {
+ StorageLive(_4);
+ StorageLive(_5);
+ goto -> bb1;
+ }
+
+ bb11: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/generator_drop_cleanup.rs b/tests/mir-opt/generator_drop_cleanup.rs
index 82c1292cb..7e0d7bb59 100644
--- a/tests/mir-opt/generator_drop_cleanup.rs
+++ b/tests/mir-opt/generator_drop_cleanup.rs
@@ -1,6 +1,6 @@
#![feature(generators, generator_trait)]
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Regression test for #58892, generator drop shims should not have blocks
// spuriously marked as cleanup
diff --git a/tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.mir b/tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.mir
deleted file mode 100644
index 32b472ebe..000000000
--- a/tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.mir
+++ /dev/null
@@ -1,124 +0,0 @@
-// MIR for `main::{closure#0}` before StateTransform
-
-fn main::{closure#0}(_1: [generator@$DIR/generator_storage_dead_unwind.rs:22:16: 22:18], _2: ()) -> ()
-yields ()
- {
- let mut _0: (); // return place in scope 0 at $DIR/generator_storage_dead_unwind.rs:+0:19: +0:19
- let _3: Foo; // in scope 0 at $DIR/generator_storage_dead_unwind.rs:+1:13: +1:14
- let _5: (); // in scope 0 at $DIR/generator_storage_dead_unwind.rs:+3:9: +3:14
- let mut _6: (); // in scope 0 at $DIR/generator_storage_dead_unwind.rs:+3:9: +3:14
- let _7: (); // in scope 0 at $DIR/generator_storage_dead_unwind.rs:+4:9: +4:16
- let mut _8: Foo; // in scope 0 at $DIR/generator_storage_dead_unwind.rs:+4:14: +4:15
- let _9: (); // in scope 0 at $DIR/generator_storage_dead_unwind.rs:+5:9: +5:16
- let mut _10: Bar; // in scope 0 at $DIR/generator_storage_dead_unwind.rs:+5:14: +5:15
- scope 1 {
- debug a => _3; // in scope 1 at $DIR/generator_storage_dead_unwind.rs:+1:13: +1:14
- let _4: Bar; // in scope 1 at $DIR/generator_storage_dead_unwind.rs:+2:13: +2:14
- scope 2 {
- debug b => _4; // in scope 2 at $DIR/generator_storage_dead_unwind.rs:+2:13: +2:14
- }
- }
-
- bb0: {
- StorageLive(_3); // scope 0 at $DIR/generator_storage_dead_unwind.rs:+1:13: +1:14
- _3 = Foo(const 5_i32); // scope 0 at $DIR/generator_storage_dead_unwind.rs:+1:17: +1:23
- StorageLive(_4); // scope 1 at $DIR/generator_storage_dead_unwind.rs:+2:13: +2:14
- _4 = Bar(const 6_i32); // scope 1 at $DIR/generator_storage_dead_unwind.rs:+2:17: +2:23
- StorageLive(_5); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+3:9: +3:14
- StorageLive(_6); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+3:9: +3:14
- _6 = (); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+3:9: +3:14
- _5 = yield(move _6) -> [resume: bb1, drop: bb6]; // scope 2 at $DIR/generator_storage_dead_unwind.rs:+3:9: +3:14
- }
-
- bb1: {
- StorageDead(_6); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+3:13: +3:14
- StorageDead(_5); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+3:14: +3:15
- StorageLive(_7); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+4:9: +4:16
- StorageLive(_8); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+4:14: +4:15
- _8 = move _3; // scope 2 at $DIR/generator_storage_dead_unwind.rs:+4:14: +4:15
- _7 = take::<Foo>(move _8) -> [return: bb2, unwind: bb10]; // scope 2 at $DIR/generator_storage_dead_unwind.rs:+4:9: +4:16
- // mir::Constant
- // + span: $DIR/generator_storage_dead_unwind.rs:26:9: 26:13
- // + literal: Const { ty: fn(Foo) {take::<Foo>}, val: Value(<ZST>) }
- }
-
- bb2: {
- StorageDead(_8); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+4:15: +4:16
- StorageDead(_7); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+4:16: +4:17
- StorageLive(_9); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+5:9: +5:16
- StorageLive(_10); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+5:14: +5:15
- _10 = move _4; // scope 2 at $DIR/generator_storage_dead_unwind.rs:+5:14: +5:15
- _9 = take::<Bar>(move _10) -> [return: bb3, unwind: bb9]; // scope 2 at $DIR/generator_storage_dead_unwind.rs:+5:9: +5:16
- // mir::Constant
- // + span: $DIR/generator_storage_dead_unwind.rs:27:9: 27:13
- // + literal: Const { ty: fn(Bar) {take::<Bar>}, val: Value(<ZST>) }
- }
-
- bb3: {
- StorageDead(_10); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+5:15: +5:16
- StorageDead(_9); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+5:16: +5:17
- _0 = const (); // scope 0 at $DIR/generator_storage_dead_unwind.rs:+0:19: +6:6
- StorageDead(_4); // scope 1 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- goto -> bb4; // scope 0 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- }
-
- bb4: {
- StorageDead(_3); // scope 0 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- drop(_1) -> [return: bb5, unwind: bb14]; // scope 0 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- }
-
- bb5: {
- return; // scope 0 at $DIR/generator_storage_dead_unwind.rs:+6:6: +6:6
- }
-
- bb6: {
- StorageDead(_6); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+3:13: +3:14
- StorageDead(_5); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+3:14: +3:15
- StorageDead(_4); // scope 1 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- drop(_3) -> [return: bb7, unwind: bb15]; // scope 0 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- }
-
- bb7: {
- StorageDead(_3); // scope 0 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- drop(_1) -> [return: bb8, unwind: bb14]; // scope 0 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- }
-
- bb8: {
- generator_drop; // scope 0 at $DIR/generator_storage_dead_unwind.rs:+0:16: +6:6
- }
-
- bb9 (cleanup): {
- StorageDead(_10); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+5:15: +5:16
- StorageDead(_9); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+5:16: +5:17
- goto -> bb12; // scope 2 at no-location
- }
-
- bb10 (cleanup): {
- goto -> bb11; // scope 2 at $DIR/generator_storage_dead_unwind.rs:+4:15: +4:16
- }
-
- bb11 (cleanup): {
- StorageDead(_8); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+4:15: +4:16
- StorageDead(_7); // scope 2 at $DIR/generator_storage_dead_unwind.rs:+4:16: +4:17
- goto -> bb12; // scope 2 at no-location
- }
-
- bb12 (cleanup): {
- StorageDead(_4); // scope 1 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- goto -> bb13; // scope 0 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- }
-
- bb13 (cleanup): {
- StorageDead(_3); // scope 0 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- drop(_1) -> [return: bb14, unwind terminate]; // scope 0 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- }
-
- bb14 (cleanup): {
- resume; // scope 0 at $DIR/generator_storage_dead_unwind.rs:+0:16: +6:6
- }
-
- bb15 (cleanup): {
- StorageDead(_3); // scope 0 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- drop(_1) -> [return: bb14, unwind terminate]; // scope 0 at $DIR/generator_storage_dead_unwind.rs:+6:5: +6:6
- }
-}
diff --git a/tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.panic-abort.mir b/tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.panic-abort.mir
new file mode 100644
index 000000000..25c656b3a
--- /dev/null
+++ b/tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.panic-abort.mir
@@ -0,0 +1,83 @@
+// MIR for `main::{closure#0}` before StateTransform
+
+fn main::{closure#0}(_1: [generator@$DIR/generator_storage_dead_unwind.rs:22:16: 22:18], _2: ()) -> ()
+yields ()
+ {
+ let mut _0: ();
+ let _3: Foo;
+ let _5: ();
+ let mut _6: ();
+ let _7: ();
+ let mut _8: Foo;
+ let _9: ();
+ let mut _10: Bar;
+ scope 1 {
+ debug a => _3;
+ let _4: Bar;
+ scope 2 {
+ debug b => _4;
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = Foo(const 5_i32);
+ StorageLive(_4);
+ _4 = Bar(const 6_i32);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = ();
+ _5 = yield(move _6) -> [resume: bb1, drop: bb6];
+ }
+
+ bb1: {
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = move _3;
+ _7 = take::<Foo>(move _8) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = move _4;
+ _9 = take::<Bar>(move _10) -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ StorageDead(_10);
+ StorageDead(_9);
+ _0 = const ();
+ StorageDead(_4);
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageDead(_3);
+ drop(_1) -> [return: bb5, unwind unreachable];
+ }
+
+ bb5: {
+ return;
+ }
+
+ bb6: {
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageDead(_4);
+ drop(_3) -> [return: bb7, unwind unreachable];
+ }
+
+ bb7: {
+ StorageDead(_3);
+ drop(_1) -> [return: bb8, unwind unreachable];
+ }
+
+ bb8: {
+ generator_drop;
+ }
+}
diff --git a/tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.panic-unwind.mir b/tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.panic-unwind.mir
new file mode 100644
index 000000000..6a4c5436f
--- /dev/null
+++ b/tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.panic-unwind.mir
@@ -0,0 +1,118 @@
+// MIR for `main::{closure#0}` before StateTransform
+
+fn main::{closure#0}(_1: [generator@$DIR/generator_storage_dead_unwind.rs:22:16: 22:18], _2: ()) -> ()
+yields ()
+ {
+ let mut _0: ();
+ let _3: Foo;
+ let _5: ();
+ let mut _6: ();
+ let _7: ();
+ let mut _8: Foo;
+ let _9: ();
+ let mut _10: Bar;
+ scope 1 {
+ debug a => _3;
+ let _4: Bar;
+ scope 2 {
+ debug b => _4;
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = Foo(const 5_i32);
+ StorageLive(_4);
+ _4 = Bar(const 6_i32);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = ();
+ _5 = yield(move _6) -> [resume: bb1, drop: bb6];
+ }
+
+ bb1: {
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = move _3;
+ _7 = take::<Foo>(move _8) -> [return: bb2, unwind: bb10];
+ }
+
+ bb2: {
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = move _4;
+ _9 = take::<Bar>(move _10) -> [return: bb3, unwind: bb9];
+ }
+
+ bb3: {
+ StorageDead(_10);
+ StorageDead(_9);
+ _0 = const ();
+ StorageDead(_4);
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageDead(_3);
+ drop(_1) -> [return: bb5, unwind: bb14];
+ }
+
+ bb5: {
+ return;
+ }
+
+ bb6: {
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageDead(_4);
+ drop(_3) -> [return: bb7, unwind: bb15];
+ }
+
+ bb7: {
+ StorageDead(_3);
+ drop(_1) -> [return: bb8, unwind: bb14];
+ }
+
+ bb8: {
+ generator_drop;
+ }
+
+ bb9 (cleanup): {
+ StorageDead(_10);
+ StorageDead(_9);
+ goto -> bb12;
+ }
+
+ bb10 (cleanup): {
+ goto -> bb11;
+ }
+
+ bb11 (cleanup): {
+ StorageDead(_8);
+ StorageDead(_7);
+ goto -> bb12;
+ }
+
+ bb12 (cleanup): {
+ StorageDead(_4);
+ goto -> bb13;
+ }
+
+ bb13 (cleanup): {
+ StorageDead(_3);
+ drop(_1) -> [return: bb14, unwind terminate];
+ }
+
+ bb14 (cleanup): {
+ resume;
+ }
+
+ bb15 (cleanup): {
+ StorageDead(_3);
+ drop(_1) -> [return: bb14, unwind terminate];
+ }
+}
diff --git a/tests/mir-opt/generator_storage_dead_unwind.rs b/tests/mir-opt/generator_storage_dead_unwind.rs
index b72170ade..664f7ef67 100644
--- a/tests/mir-opt/generator_storage_dead_unwind.rs
+++ b/tests/mir-opt/generator_storage_dead_unwind.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Test that we generate StorageDead on unwind paths for generators.
//
diff --git a/tests/mir-opt/generator_tiny.main-{closure#0}.generator_resume.0.mir b/tests/mir-opt/generator_tiny.main-{closure#0}.generator_resume.0.mir
index dc9bb533f..13d703b90 100644
--- a/tests/mir-opt/generator_tiny.main-{closure#0}.generator_resume.0.mir
+++ b/tests/mir-opt/generator_tiny.main-{closure#0}.generator_resume.0.mir
@@ -22,68 +22,65 @@
} */
fn main::{closure#0}(_1: Pin<&mut [generator@$DIR/generator_tiny.rs:19:16: 19:24]>, _2: u8) -> GeneratorState<(), ()> {
- debug _x => _10; // in scope 0 at $DIR/generator_tiny.rs:+0:17: +0:19
- let mut _0: std::ops::GeneratorState<(), ()>; // return place in scope 0 at $DIR/generator_tiny.rs:+0:16: +6:6
- let _3: HasDrop; // in scope 0 at $DIR/generator_tiny.rs:+1:13: +1:15
- let mut _4: !; // in scope 0 at $DIR/generator_tiny.rs:+2:9: +5:10
- let mut _5: (); // in scope 0 at $DIR/generator_tiny.rs:+0:16: +6:6
- let _6: u8; // in scope 0 at $DIR/generator_tiny.rs:+3:13: +3:18
- let mut _7: (); // in scope 0 at $DIR/generator_tiny.rs:+3:13: +3:18
- let _8: (); // in scope 0 at $DIR/generator_tiny.rs:+4:13: +4:21
- let mut _9: (); // in scope 0 at $DIR/generator_tiny.rs:+0:25: +0:25
- let _10: u8; // in scope 0 at $DIR/generator_tiny.rs:+0:17: +0:19
- let mut _11: u32; // in scope 0 at $DIR/generator_tiny.rs:+0:16: +6:6
+ debug _x => _10;
+ let mut _0: std::ops::GeneratorState<(), ()>;
+ let _3: HasDrop;
+ let mut _4: !;
+ let mut _5: ();
+ let _6: u8;
+ let mut _7: ();
+ let _8: ();
+ let mut _9: ();
+ let _10: u8;
+ let mut _11: u32;
scope 1 {
- debug _d => (((*(_1.0: &mut [generator@$DIR/generator_tiny.rs:19:16: 19:24])) as variant#3).0: HasDrop); // in scope 1 at $DIR/generator_tiny.rs:+1:13: +1:15
+ debug _d => (((*(_1.0: &mut [generator@$DIR/generator_tiny.rs:19:16: 19:24])) as variant#3).0: HasDrop);
}
bb0: {
- _11 = discriminant((*(_1.0: &mut [generator@$DIR/generator_tiny.rs:19:16: 19:24]))); // scope 0 at $DIR/generator_tiny.rs:+0:16: +6:6
- switchInt(move _11) -> [0: bb1, 3: bb5, otherwise: bb6]; // scope 0 at $DIR/generator_tiny.rs:+0:16: +6:6
+ _11 = discriminant((*(_1.0: &mut [generator@$DIR/generator_tiny.rs:19:16: 19:24])));
+ switchInt(move _11) -> [0: bb1, 3: bb5, otherwise: bb6];
}
bb1: {
- _10 = move _2; // scope 0 at $DIR/generator_tiny.rs:+0:16: +6:6
- nop; // scope 0 at $DIR/generator_tiny.rs:+1:13: +1:15
- (((*(_1.0: &mut [generator@$DIR/generator_tiny.rs:19:16: 19:24])) as variant#3).0: HasDrop) = HasDrop; // scope 0 at $DIR/generator_tiny.rs:+1:18: +1:25
- StorageLive(_4); // scope 1 at $DIR/generator_tiny.rs:+2:9: +5:10
- goto -> bb2; // scope 1 at $DIR/generator_tiny.rs:+2:9: +5:10
+ _10 = move _2;
+ nop;
+ (((*(_1.0: &mut [generator@$DIR/generator_tiny.rs:19:16: 19:24])) as variant#3).0: HasDrop) = HasDrop;
+ StorageLive(_4);
+ goto -> bb2;
}
bb2: {
- StorageLive(_6); // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
- StorageLive(_7); // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
- _7 = (); // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
- _0 = GeneratorState::<(), ()>::Yielded(move _7); // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
- discriminant((*(_1.0: &mut [generator@$DIR/generator_tiny.rs:19:16: 19:24]))) = 3; // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
- return; // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = ();
+ _0 = GeneratorState::<(), ()>::Yielded(move _7);
+ discriminant((*(_1.0: &mut [generator@$DIR/generator_tiny.rs:19:16: 19:24]))) = 3;
+ return;
}
bb3: {
- StorageDead(_7); // scope 1 at $DIR/generator_tiny.rs:+3:17: +3:18
- StorageDead(_6); // scope 1 at $DIR/generator_tiny.rs:+3:18: +3:19
- StorageLive(_8); // scope 1 at $DIR/generator_tiny.rs:+4:13: +4:21
- _8 = callee() -> [return: bb4, unwind unreachable]; // scope 1 at $DIR/generator_tiny.rs:+4:13: +4:21
- // mir::Constant
- // + span: $DIR/generator_tiny.rs:23:13: 23:19
- // + literal: Const { ty: fn() {callee}, val: Value(<ZST>) }
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageLive(_8);
+ _8 = callee() -> [return: bb4, unwind unreachable];
}
bb4: {
- StorageDead(_8); // scope 1 at $DIR/generator_tiny.rs:+4:21: +4:22
- _5 = const (); // scope 1 at $DIR/generator_tiny.rs:+2:14: +5:10
- goto -> bb2; // scope 1 at $DIR/generator_tiny.rs:+2:9: +5:10
+ StorageDead(_8);
+ _5 = const ();
+ goto -> bb2;
}
bb5: {
- StorageLive(_4); // scope 0 at $DIR/generator_tiny.rs:+0:16: +6:6
- StorageLive(_6); // scope 0 at $DIR/generator_tiny.rs:+0:16: +6:6
- StorageLive(_7); // scope 0 at $DIR/generator_tiny.rs:+0:16: +6:6
- _6 = move _2; // scope 0 at $DIR/generator_tiny.rs:+0:16: +6:6
- goto -> bb3; // scope 0 at $DIR/generator_tiny.rs:+0:16: +6:6
+ StorageLive(_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ _6 = move _2;
+ goto -> bb3;
}
bb6: {
- unreachable; // scope 0 at $DIR/generator_tiny.rs:+0:16: +6:6
+ unreachable;
}
}
diff --git a/tests/mir-opt/if_condition_int.dont_opt_bool.SimplifyComparisonIntegral.diff b/tests/mir-opt/if_condition_int.dont_opt_bool.SimplifyComparisonIntegral.diff
index de4235c9e..083515aeb 100644
--- a/tests/mir-opt/if_condition_int.dont_opt_bool.SimplifyComparisonIntegral.diff
+++ b/tests/mir-opt/if_condition_int.dont_opt_bool.SimplifyComparisonIntegral.diff
@@ -2,29 +2,29 @@
+ // MIR for `dont_opt_bool` after SimplifyComparisonIntegral
fn dont_opt_bool(_1: bool) -> u32 {
- debug x => _1; // in scope 0 at $DIR/if_condition_int.rs:+0:18: +0:19
- let mut _0: u32; // return place in scope 0 at $DIR/if_condition_int.rs:+0:30: +0:33
- let mut _2: bool; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
- _2 = _1; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
+ StorageLive(_2);
+ _2 = _1;
+ switchInt(move _2) -> [0: bb2, otherwise: bb1];
}
bb1: {
- _0 = const 0_u32; // scope 0 at $DIR/if_condition_int.rs:+1:12: +1:13
- goto -> bb3; // scope 0 at $DIR/if_condition_int.rs:+1:5: +1:26
+ _0 = const 0_u32;
+ goto -> bb3;
}
bb2: {
- _0 = const 1_u32; // scope 0 at $DIR/if_condition_int.rs:+1:23: +1:24
- goto -> bb3; // scope 0 at $DIR/if_condition_int.rs:+1:5: +1:26
+ _0 = const 1_u32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/if_condition_int.rs:+1:25: +1:26
- return; // scope 0 at $DIR/if_condition_int.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/if_condition_int.dont_opt_floats.SimplifyComparisonIntegral.diff b/tests/mir-opt/if_condition_int.dont_opt_floats.SimplifyComparisonIntegral.diff
index 754c6579a..8483b89f8 100644
--- a/tests/mir-opt/if_condition_int.dont_opt_floats.SimplifyComparisonIntegral.diff
+++ b/tests/mir-opt/if_condition_int.dont_opt_floats.SimplifyComparisonIntegral.diff
@@ -2,33 +2,33 @@
+ // MIR for `dont_opt_floats` after SimplifyComparisonIntegral
fn dont_opt_floats(_1: f32) -> i32 {
- debug a => _1; // in scope 0 at $DIR/if_condition_int.rs:+0:20: +0:21
- let mut _0: i32; // return place in scope 0 at $DIR/if_condition_int.rs:+0:31: +0:34
- let mut _2: bool; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:18
- let mut _3: f32; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
+ debug a => _1;
+ let mut _0: i32;
+ let mut _2: bool;
+ let mut _3: f32;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:18
- StorageLive(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
- _3 = _1; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
- _2 = Eq(move _3, const -42f32); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:18
- StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:17: +1:18
- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:18
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = Eq(move _3, const -42f32);
+ StorageDead(_3);
+ switchInt(move _2) -> [0: bb2, otherwise: bb1];
}
bb1: {
- _0 = const 0_i32; // scope 0 at $DIR/if_condition_int.rs:+1:21: +1:22
- goto -> bb3; // scope 0 at $DIR/if_condition_int.rs:+1:5: +1:35
+ _0 = const 0_i32;
+ goto -> bb3;
}
bb2: {
- _0 = const 1_i32; // scope 0 at $DIR/if_condition_int.rs:+1:32: +1:33
- goto -> bb3; // scope 0 at $DIR/if_condition_int.rs:+1:5: +1:35
+ _0 = const 1_i32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/if_condition_int.rs:+1:34: +1:35
- return; // scope 0 at $DIR/if_condition_int.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/if_condition_int.dont_remove_comparison.SimplifyComparisonIntegral.diff b/tests/mir-opt/if_condition_int.dont_remove_comparison.SimplifyComparisonIntegral.diff
index ff23839e2..218d7fd59 100644
--- a/tests/mir-opt/if_condition_int.dont_remove_comparison.SimplifyComparisonIntegral.diff
+++ b/tests/mir-opt/if_condition_int.dont_remove_comparison.SimplifyComparisonIntegral.diff
@@ -2,57 +2,57 @@
+ // MIR for `dont_remove_comparison` after SimplifyComparisonIntegral
fn dont_remove_comparison(_1: i8) -> i32 {
- debug a => _1; // in scope 0 at $DIR/if_condition_int.rs:+0:27: +0:28
- let mut _0: i32; // return place in scope 0 at $DIR/if_condition_int.rs:+0:37: +0:40
- let _2: bool; // in scope 0 at $DIR/if_condition_int.rs:+1:9: +1:10
- let mut _3: i8; // in scope 0 at $DIR/if_condition_int.rs:+1:13: +1:14
- let mut _4: i32; // in scope 0 at $DIR/if_condition_int.rs:+3:23: +3:31
- let mut _5: bool; // in scope 0 at $DIR/if_condition_int.rs:+3:23: +3:24
- let mut _6: i32; // in scope 0 at $DIR/if_condition_int.rs:+4:23: +4:31
- let mut _7: bool; // in scope 0 at $DIR/if_condition_int.rs:+4:23: +4:24
+ debug a => _1;
+ let mut _0: i32;
+ let _2: bool;
+ let mut _3: i8;
+ let mut _4: i32;
+ let mut _5: bool;
+ let mut _6: i32;
+ let mut _7: bool;
scope 1 {
- debug b => _2; // in scope 1 at $DIR/if_condition_int.rs:+1:9: +1:10
+ debug b => _2;
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/if_condition_int.rs:+1:9: +1:10
- StorageLive(_3); // scope 0 at $DIR/if_condition_int.rs:+1:13: +1:14
- _3 = _1; // scope 0 at $DIR/if_condition_int.rs:+1:13: +1:14
-- _2 = Eq(move _3, const 17_i8); // scope 0 at $DIR/if_condition_int.rs:+1:13: +1:20
-- StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:19: +1:20
-- switchInt(_2) -> [0: bb2, otherwise: bb1]; // scope 1 at $DIR/if_condition_int.rs:+2:5: +2:12
-+ _2 = Eq(_3, const 17_i8); // scope 0 at $DIR/if_condition_int.rs:+1:13: +1:20
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+1:19: +1:20
-+ switchInt(move _3) -> [17: bb1, otherwise: bb2]; // scope 1 at $DIR/if_condition_int.rs:+2:5: +2:12
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = Eq(move _3, const 17_i8);
+- StorageDead(_3);
+- switchInt(_2) -> [0: bb2, otherwise: bb1];
++ _2 = Eq(_3, const 17_i8);
++ nop;
++ switchInt(move _3) -> [17: bb1, otherwise: bb2];
}
bb1: {
-+ StorageDead(_3); // scope 1 at $DIR/if_condition_int.rs:+2:5: +2:12
- StorageLive(_6); // scope 1 at $DIR/if_condition_int.rs:+4:23: +4:31
- StorageLive(_7); // scope 1 at $DIR/if_condition_int.rs:+4:23: +4:24
- _7 = _2; // scope 1 at $DIR/if_condition_int.rs:+4:23: +4:24
- _6 = move _7 as i32 (IntToInt); // scope 1 at $DIR/if_condition_int.rs:+4:23: +4:31
- StorageDead(_7); // scope 1 at $DIR/if_condition_int.rs:+4:30: +4:31
- _0 = Add(const 100_i32, move _6); // scope 1 at $DIR/if_condition_int.rs:+4:17: +4:31
- StorageDead(_6); // scope 1 at $DIR/if_condition_int.rs:+4:30: +4:31
- goto -> bb3; // scope 1 at $DIR/if_condition_int.rs:+4:30: +4:31
++ StorageDead(_3);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = _2;
+ _6 = move _7 as i32 (IntToInt);
+ StorageDead(_7);
+ _0 = Add(const 100_i32, move _6);
+ StorageDead(_6);
+ goto -> bb3;
}
bb2: {
-+ StorageDead(_3); // scope 1 at $DIR/if_condition_int.rs:+2:5: +2:12
- StorageLive(_4); // scope 1 at $DIR/if_condition_int.rs:+3:23: +3:31
- StorageLive(_5); // scope 1 at $DIR/if_condition_int.rs:+3:23: +3:24
- _5 = _2; // scope 1 at $DIR/if_condition_int.rs:+3:23: +3:24
- _4 = move _5 as i32 (IntToInt); // scope 1 at $DIR/if_condition_int.rs:+3:23: +3:31
- StorageDead(_5); // scope 1 at $DIR/if_condition_int.rs:+3:30: +3:31
- _0 = Add(const 10_i32, move _4); // scope 1 at $DIR/if_condition_int.rs:+3:18: +3:31
- StorageDead(_4); // scope 1 at $DIR/if_condition_int.rs:+3:30: +3:31
- goto -> bb3; // scope 1 at $DIR/if_condition_int.rs:+3:30: +3:31
++ StorageDead(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _2;
+ _4 = move _5 as i32 (IntToInt);
+ StorageDead(_5);
+ _0 = Add(const 10_i32, move _4);
+ StorageDead(_4);
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/if_condition_int.rs:+6:1: +6:2
- return; // scope 0 at $DIR/if_condition_int.rs:+6:2: +6:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/if_condition_int.opt_char.SimplifyComparisonIntegral.diff b/tests/mir-opt/if_condition_int.opt_char.SimplifyComparisonIntegral.diff
index 5964d76a4..837841b00 100644
--- a/tests/mir-opt/if_condition_int.opt_char.SimplifyComparisonIntegral.diff
+++ b/tests/mir-opt/if_condition_int.opt_char.SimplifyComparisonIntegral.diff
@@ -2,38 +2,38 @@
+ // MIR for `opt_char` after SimplifyComparisonIntegral
fn opt_char(_1: char) -> u32 {
- debug x => _1; // in scope 0 at $DIR/if_condition_int.rs:+0:13: +0:14
- let mut _0: u32; // return place in scope 0 at $DIR/if_condition_int.rs:+0:25: +0:28
- let mut _2: bool; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
- let mut _3: char; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: bool;
+ let mut _3: char;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
- StorageLive(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
- _3 = _1; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
-- _2 = Eq(move _3, const 'x'); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
-- StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:15: +1:16
-- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+1:15: +1:16
-+ switchInt(move _3) -> [120: bb1, otherwise: bb2]; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = Eq(move _3, const 'x');
+- StorageDead(_3);
+- switchInt(move _2) -> [0: bb2, otherwise: bb1];
++ nop;
++ nop;
++ switchInt(move _3) -> [120: bb1, otherwise: bb2];
}
bb1: {
-+ StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
- _0 = const 0_u32; // scope 0 at $DIR/if_condition_int.rs:+1:19: +1:20
- goto -> bb3; // scope 0 at $DIR/if_condition_int.rs:+1:5: +1:33
++ StorageDead(_3);
+ _0 = const 0_u32;
+ goto -> bb3;
}
bb2: {
-+ StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
- _0 = const 1_u32; // scope 0 at $DIR/if_condition_int.rs:+1:30: +1:31
- goto -> bb3; // scope 0 at $DIR/if_condition_int.rs:+1:5: +1:33
++ StorageDead(_3);
+ _0 = const 1_u32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/if_condition_int.rs:+1:32: +1:33
- return; // scope 0 at $DIR/if_condition_int.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/if_condition_int.opt_i8.SimplifyComparisonIntegral.diff b/tests/mir-opt/if_condition_int.opt_i8.SimplifyComparisonIntegral.diff
index 98918cc74..3cbf91299 100644
--- a/tests/mir-opt/if_condition_int.opt_i8.SimplifyComparisonIntegral.diff
+++ b/tests/mir-opt/if_condition_int.opt_i8.SimplifyComparisonIntegral.diff
@@ -2,38 +2,38 @@
+ // MIR for `opt_i8` after SimplifyComparisonIntegral
fn opt_i8(_1: i8) -> u32 {
- debug x => _1; // in scope 0 at $DIR/if_condition_int.rs:+0:11: +0:12
- let mut _0: u32; // return place in scope 0 at $DIR/if_condition_int.rs:+0:21: +0:24
- let mut _2: bool; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
- let mut _3: i8; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: bool;
+ let mut _3: i8;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
- StorageLive(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
- _3 = _1; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
-- _2 = Eq(move _3, const 42_i8); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
-- StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:14: +1:15
-- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+1:14: +1:15
-+ switchInt(move _3) -> [42: bb1, otherwise: bb2]; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = Eq(move _3, const 42_i8);
+- StorageDead(_3);
+- switchInt(move _2) -> [0: bb2, otherwise: bb1];
++ nop;
++ nop;
++ switchInt(move _3) -> [42: bb1, otherwise: bb2];
}
bb1: {
-+ StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
- _0 = const 0_u32; // scope 0 at $DIR/if_condition_int.rs:+1:18: +1:19
- goto -> bb3; // scope 0 at $DIR/if_condition_int.rs:+1:5: +1:32
++ StorageDead(_3);
+ _0 = const 0_u32;
+ goto -> bb3;
}
bb2: {
-+ StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
- _0 = const 1_u32; // scope 0 at $DIR/if_condition_int.rs:+1:29: +1:30
- goto -> bb3; // scope 0 at $DIR/if_condition_int.rs:+1:5: +1:32
++ StorageDead(_3);
+ _0 = const 1_u32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/if_condition_int.rs:+1:31: +1:32
- return; // scope 0 at $DIR/if_condition_int.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/if_condition_int.opt_multiple_ifs.SimplifyComparisonIntegral.diff b/tests/mir-opt/if_condition_int.opt_multiple_ifs.SimplifyComparisonIntegral.diff
index db38140b8..8d6f3b224 100644
--- a/tests/mir-opt/if_condition_int.opt_multiple_ifs.SimplifyComparisonIntegral.diff
+++ b/tests/mir-opt/if_condition_int.opt_multiple_ifs.SimplifyComparisonIntegral.diff
@@ -2,64 +2,64 @@
+ // MIR for `opt_multiple_ifs` after SimplifyComparisonIntegral
fn opt_multiple_ifs(_1: u32) -> u32 {
- debug x => _1; // in scope 0 at $DIR/if_condition_int.rs:+0:21: +0:22
- let mut _0: u32; // return place in scope 0 at $DIR/if_condition_int.rs:+0:32: +0:35
- let mut _2: bool; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
- let mut _3: u32; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
- let mut _4: bool; // in scope 0 at $DIR/if_condition_int.rs:+3:15: +3:22
- let mut _5: u32; // in scope 0 at $DIR/if_condition_int.rs:+3:15: +3:16
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: bool;
+ let mut _3: u32;
+ let mut _4: bool;
+ let mut _5: u32;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
- StorageLive(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
- _3 = _1; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
-- _2 = Eq(move _3, const 42_u32); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
-- StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:14: +1:15
-- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+1:14: +1:15
-+ switchInt(move _3) -> [42: bb1, otherwise: bb2]; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = Eq(move _3, const 42_u32);
+- StorageDead(_3);
+- switchInt(move _2) -> [0: bb2, otherwise: bb1];
++ nop;
++ nop;
++ switchInt(move _3) -> [42: bb1, otherwise: bb2];
}
bb1: {
-+ StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
- _0 = const 0_u32; // scope 0 at $DIR/if_condition_int.rs:+2:9: +2:10
- goto -> bb6; // scope 0 at $DIR/if_condition_int.rs:+1:5: +7:6
++ StorageDead(_3);
+ _0 = const 0_u32;
+ goto -> bb6;
}
bb2: {
-+ StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
- StorageLive(_4); // scope 0 at $DIR/if_condition_int.rs:+3:15: +3:22
- StorageLive(_5); // scope 0 at $DIR/if_condition_int.rs:+3:15: +3:16
- _5 = _1; // scope 0 at $DIR/if_condition_int.rs:+3:15: +3:16
-- _4 = Ne(move _5, const 21_u32); // scope 0 at $DIR/if_condition_int.rs:+3:15: +3:22
-- StorageDead(_5); // scope 0 at $DIR/if_condition_int.rs:+3:21: +3:22
-- switchInt(move _4) -> [0: bb4, otherwise: bb3]; // scope 0 at $DIR/if_condition_int.rs:+3:15: +3:22
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+3:15: +3:22
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+3:21: +3:22
-+ switchInt(move _5) -> [21: bb4, otherwise: bb3]; // scope 0 at $DIR/if_condition_int.rs:+3:15: +3:22
++ StorageDead(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _1;
+- _4 = Ne(move _5, const 21_u32);
+- StorageDead(_5);
+- switchInt(move _4) -> [0: bb4, otherwise: bb3];
++ nop;
++ nop;
++ switchInt(move _5) -> [21: bb4, otherwise: bb3];
}
bb3: {
-+ StorageDead(_5); // scope 0 at $DIR/if_condition_int.rs:+3:15: +3:22
- _0 = const 1_u32; // scope 0 at $DIR/if_condition_int.rs:+4:9: +4:10
- goto -> bb5; // scope 0 at $DIR/if_condition_int.rs:+3:12: +7:6
++ StorageDead(_5);
+ _0 = const 1_u32;
+ goto -> bb5;
}
bb4: {
-+ StorageDead(_5); // scope 0 at $DIR/if_condition_int.rs:+3:15: +3:22
- _0 = const 2_u32; // scope 0 at $DIR/if_condition_int.rs:+6:9: +6:10
- goto -> bb5; // scope 0 at $DIR/if_condition_int.rs:+3:12: +7:6
++ StorageDead(_5);
+ _0 = const 2_u32;
+ goto -> bb5;
}
bb5: {
- StorageDead(_4); // scope 0 at $DIR/if_condition_int.rs:+7:5: +7:6
- goto -> bb6; // scope 0 at $DIR/if_condition_int.rs:+1:5: +7:6
+ StorageDead(_4);
+ goto -> bb6;
}
bb6: {
- StorageDead(_2); // scope 0 at $DIR/if_condition_int.rs:+7:5: +7:6
- return; // scope 0 at $DIR/if_condition_int.rs:+8:2: +8:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/if_condition_int.opt_negative.SimplifyComparisonIntegral.diff b/tests/mir-opt/if_condition_int.opt_negative.SimplifyComparisonIntegral.diff
index 1a1ac4caa..e2566b13c 100644
--- a/tests/mir-opt/if_condition_int.opt_negative.SimplifyComparisonIntegral.diff
+++ b/tests/mir-opt/if_condition_int.opt_negative.SimplifyComparisonIntegral.diff
@@ -2,38 +2,38 @@
+ // MIR for `opt_negative` after SimplifyComparisonIntegral
fn opt_negative(_1: i32) -> u32 {
- debug x => _1; // in scope 0 at $DIR/if_condition_int.rs:+0:17: +0:18
- let mut _0: u32; // return place in scope 0 at $DIR/if_condition_int.rs:+0:28: +0:31
- let mut _2: bool; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
- let mut _3: i32; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: bool;
+ let mut _3: i32;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
- StorageLive(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
- _3 = _1; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
-- _2 = Eq(move _3, const -42_i32); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
-- StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:15: +1:16
-- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+1:15: +1:16
-+ switchInt(move _3) -> [4294967254: bb1, otherwise: bb2]; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = Eq(move _3, const -42_i32);
+- StorageDead(_3);
+- switchInt(move _2) -> [0: bb2, otherwise: bb1];
++ nop;
++ nop;
++ switchInt(move _3) -> [4294967254: bb1, otherwise: bb2];
}
bb1: {
-+ StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
- _0 = const 0_u32; // scope 0 at $DIR/if_condition_int.rs:+1:19: +1:20
- goto -> bb3; // scope 0 at $DIR/if_condition_int.rs:+1:5: +1:33
++ StorageDead(_3);
+ _0 = const 0_u32;
+ goto -> bb3;
}
bb2: {
-+ StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:16
- _0 = const 1_u32; // scope 0 at $DIR/if_condition_int.rs:+1:30: +1:31
- goto -> bb3; // scope 0 at $DIR/if_condition_int.rs:+1:5: +1:33
++ StorageDead(_3);
+ _0 = const 1_u32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/if_condition_int.rs:+1:32: +1:33
- return; // scope 0 at $DIR/if_condition_int.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/if_condition_int.opt_u32.SimplifyComparisonIntegral.diff b/tests/mir-opt/if_condition_int.opt_u32.SimplifyComparisonIntegral.diff
index fc3f50227..dc8da5b44 100644
--- a/tests/mir-opt/if_condition_int.opt_u32.SimplifyComparisonIntegral.diff
+++ b/tests/mir-opt/if_condition_int.opt_u32.SimplifyComparisonIntegral.diff
@@ -2,38 +2,38 @@
+ // MIR for `opt_u32` after SimplifyComparisonIntegral
fn opt_u32(_1: u32) -> u32 {
- debug x => _1; // in scope 0 at $DIR/if_condition_int.rs:+0:12: +0:13
- let mut _0: u32; // return place in scope 0 at $DIR/if_condition_int.rs:+0:23: +0:26
- let mut _2: bool; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
- let mut _3: u32; // in scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: bool;
+ let mut _3: u32;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
- StorageLive(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
- _3 = _1; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:9
-- _2 = Eq(move _3, const 42_u32); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
-- StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:14: +1:15
-- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
-+ nop; // scope 0 at $DIR/if_condition_int.rs:+1:14: +1:15
-+ switchInt(move _3) -> [42: bb1, otherwise: bb2]; // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = Eq(move _3, const 42_u32);
+- StorageDead(_3);
+- switchInt(move _2) -> [0: bb2, otherwise: bb1];
++ nop;
++ nop;
++ switchInt(move _3) -> [42: bb1, otherwise: bb2];
}
bb1: {
-+ StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
- _0 = const 0_u32; // scope 0 at $DIR/if_condition_int.rs:+1:18: +1:19
- goto -> bb3; // scope 0 at $DIR/if_condition_int.rs:+1:5: +1:32
++ StorageDead(_3);
+ _0 = const 0_u32;
+ goto -> bb3;
}
bb2: {
-+ StorageDead(_3); // scope 0 at $DIR/if_condition_int.rs:+1:8: +1:15
- _0 = const 1_u32; // scope 0 at $DIR/if_condition_int.rs:+1:29: +1:30
- goto -> bb3; // scope 0 at $DIR/if_condition_int.rs:+1:5: +1:32
++ StorageDead(_3);
+ _0 = const 1_u32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/if_condition_int.rs:+1:31: +1:32
- return; // scope 0 at $DIR/if_condition_int.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/inline/asm_unwind.main.Inline.diff b/tests/mir-opt/inline/asm_unwind.main.Inline.diff
deleted file mode 100644
index ba1bfec05..000000000
--- a/tests/mir-opt/inline/asm_unwind.main.Inline.diff
+++ /dev/null
@@ -1,45 +0,0 @@
-- // MIR for `main` before Inline
-+ // MIR for `main` after Inline
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/asm_unwind.rs:+0:15: +0:15
- let _1: (); // in scope 0 at $DIR/asm_unwind.rs:+1:5: +1:10
-+ scope 1 (inlined foo) { // at $DIR/asm_unwind.rs:21:5: 21:10
-+ let _2: D; // in scope 1 at $DIR/asm_unwind.rs:15:9: 15:11
-+ scope 2 {
-+ debug _d => const D; // in scope 2 at $DIR/asm_unwind.rs:15:9: 15:11
-+ scope 3 {
-+ }
-+ }
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/asm_unwind.rs:+1:5: +1:10
-- _1 = foo() -> bb1; // scope 0 at $DIR/asm_unwind.rs:+1:5: +1:10
-- // mir::Constant
-- // + span: $DIR/asm_unwind.rs:21:5: 21:8
-- // + literal: Const { ty: fn() {foo}, val: Value(<ZST>) }
-+ StorageLive(_2); // scope 0 at $DIR/asm_unwind.rs:+1:5: +1:10
-+ asm!("", options(MAY_UNWIND)) -> [return: bb2, unwind: bb3]; // scope 3 at $DIR/asm_unwind.rs:16:14: 16:54
- }
-
- bb1: {
-+ StorageDead(_2); // scope 0 at $DIR/asm_unwind.rs:+1:5: +1:10
- StorageDead(_1); // scope 0 at $DIR/asm_unwind.rs:+1:10: +1:11
- _0 = const (); // scope 0 at $DIR/asm_unwind.rs:+0:15: +2:2
- return; // scope 0 at $DIR/asm_unwind.rs:+2:2: +2:2
-+ }
-+
-+ bb2: {
-+ drop(_2) -> bb1; // scope 1 at $DIR/asm_unwind.rs:17:1: 17:2
-+ }
-+
-+ bb3 (cleanup): {
-+ drop(_2) -> [return: bb4, unwind terminate]; // scope 1 at $DIR/asm_unwind.rs:17:1: 17:2
-+ }
-+
-+ bb4 (cleanup): {
-+ resume; // scope 1 at $DIR/asm_unwind.rs:14:1: 17:2
- }
- }
-
diff --git a/tests/mir-opt/inline/asm_unwind.main.Inline.panic-abort.diff b/tests/mir-opt/inline/asm_unwind.main.Inline.panic-abort.diff
new file mode 100644
index 000000000..503dc5beb
--- /dev/null
+++ b/tests/mir-opt/inline/asm_unwind.main.Inline.panic-abort.diff
@@ -0,0 +1,34 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
++ scope 1 (inlined foo) {
++ let _2: D;
++ scope 2 {
++ debug _d => const D;
++ scope 3 {
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = foo() -> [return: bb1, unwind unreachable];
++ StorageLive(_2);
++ asm!("", options(MAY_UNWIND)) -> [return: bb2, unwind terminate];
+ }
+
+ bb1: {
++ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
++ }
++
++ bb2: {
++ drop(_2) -> [return: bb1, unwind unreachable];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/asm_unwind.main.Inline.panic-unwind.diff b/tests/mir-opt/inline/asm_unwind.main.Inline.panic-unwind.diff
new file mode 100644
index 000000000..684211b53
--- /dev/null
+++ b/tests/mir-opt/inline/asm_unwind.main.Inline.panic-unwind.diff
@@ -0,0 +1,42 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
++ scope 1 (inlined foo) {
++ let _2: D;
++ scope 2 {
++ debug _d => const D;
++ scope 3 {
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = foo() -> [return: bb1, unwind continue];
++ StorageLive(_2);
++ asm!("", options(MAY_UNWIND)) -> [return: bb2, unwind: bb3];
+ }
+
+ bb1: {
++ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
++ }
++
++ bb2: {
++ drop(_2) -> [return: bb1, unwind continue];
++ }
++
++ bb3 (cleanup): {
++ drop(_2) -> [return: bb4, unwind terminate];
++ }
++
++ bb4 (cleanup): {
++ resume;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/asm_unwind.rs b/tests/mir-opt/inline/asm_unwind.rs
index c03feb433..573ae1ba6 100644
--- a/tests/mir-opt/inline/asm_unwind.rs
+++ b/tests/mir-opt/inline/asm_unwind.rs
@@ -1,7 +1,8 @@
// Tests inlining of `may_unwind` inline assembly.
//
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// needs-asm-support
+// compile-flags: -Zinline-mir-hint-threshold=1000
#![feature(asm_unwind)]
struct D;
@@ -10,7 +11,7 @@ impl Drop for D {
fn drop(&mut self) {}
}
-#[inline(always)]
+#[inline]
fn foo() {
let _d = D;
unsafe { std::arch::asm!("", options(may_unwind)) };
diff --git a/tests/mir-opt/inline/caller_with_trivial_bound.foo.Inline.diff b/tests/mir-opt/inline/caller_with_trivial_bound.foo.Inline.diff
deleted file mode 100644
index 8b0300678..000000000
--- a/tests/mir-opt/inline/caller_with_trivial_bound.foo.Inline.diff
+++ /dev/null
@@ -1,33 +0,0 @@
-- // MIR for `foo` before Inline
-+ // MIR for `foo` after Inline
-
- fn foo() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/caller_with_trivial_bound.rs:+1:1: +1:1
- let mut _1: <IntFactory as Factory<T>>::Item; // in scope 0 at $DIR/caller_with_trivial_bound.rs:+4:9: +4:14
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/caller_with_trivial_bound.rs:+4:9: +4:14
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/caller_with_trivial_bound.rs:+4:9: +4:14
- _1 = bar::<T>() -> bb1; // scope 0 at $DIR/caller_with_trivial_bound.rs:+4:51: +4:61
- // mir::Constant
- // + span: $DIR/caller_with_trivial_bound.rs:20:51: 20:59
- // + literal: Const { ty: fn() -> <IntFactory as Factory<T>>::Item {bar::<T>}, val: Value(<ZST>) }
- }
-
- bb1: {
- _0 = const (); // scope 0 at $DIR/caller_with_trivial_bound.rs:+3:1: +5:2
- drop(_1) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/caller_with_trivial_bound.rs:+5:1: +5:2
- }
-
- bb2: {
- StorageDead(_1); // scope 0 at $DIR/caller_with_trivial_bound.rs:+5:1: +5:2
- return; // scope 0 at $DIR/caller_with_trivial_bound.rs:+5:2: +5:2
- }
-
- bb3 (cleanup): {
- resume; // scope 0 at $DIR/caller_with_trivial_bound.rs:+0:1: +5:2
- }
- }
-
diff --git a/tests/mir-opt/inline/caller_with_trivial_bound.foo.Inline.panic-unwind.diff b/tests/mir-opt/inline/caller_with_trivial_bound.foo.Inline.panic-unwind.diff
new file mode 100644
index 000000000..d4427b2a8
--- /dev/null
+++ b/tests/mir-opt/inline/caller_with_trivial_bound.foo.Inline.panic-unwind.diff
@@ -0,0 +1,30 @@
+- // MIR for `foo` before Inline
++ // MIR for `foo` after Inline
+
+ fn foo() -> () {
+ let mut _0: ();
+ let mut _1: <IntFactory as Factory<T>>::Item;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = bar::<T>() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ _0 = const ();
+ drop(_1) -> [return: bb2, unwind: bb3];
+ }
+
+ bb2: {
+ StorageDead(_1);
+ return;
+ }
+
+ bb3 (cleanup): {
+ resume;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/caller_with_trivial_bound.rs b/tests/mir-opt/inline/caller_with_trivial_bound.rs
index 8545db894..a8f101d48 100644
--- a/tests/mir-opt/inline/caller_with_trivial_bound.rs
+++ b/tests/mir-opt/inline/caller_with_trivial_bound.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// needs-unwind
#![crate_type = "lib"]
diff --git a/tests/mir-opt/inline/cycle.f.Inline.diff b/tests/mir-opt/inline/cycle.f.Inline.diff
deleted file mode 100644
index 8da597577..000000000
--- a/tests/mir-opt/inline/cycle.f.Inline.diff
+++ /dev/null
@@ -1,43 +0,0 @@
-- // MIR for `f` before Inline
-+ // MIR for `f` after Inline
-
- fn f(_1: impl Fn()) -> () {
- debug g => _1; // in scope 0 at $DIR/cycle.rs:+0:6: +0:7
- let mut _0: (); // return place in scope 0 at $DIR/cycle.rs:+0:20: +0:20
- let _2: (); // in scope 0 at $DIR/cycle.rs:+1:5: +1:8
- let mut _3: &impl Fn(); // in scope 0 at $DIR/cycle.rs:+1:5: +1:6
- let mut _4: (); // in scope 0 at $DIR/cycle.rs:+1:5: +1:8
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/cycle.rs:+1:5: +1:8
- StorageLive(_3); // scope 0 at $DIR/cycle.rs:+1:5: +1:6
- _3 = &_1; // scope 0 at $DIR/cycle.rs:+1:5: +1:6
- StorageLive(_4); // scope 0 at $DIR/cycle.rs:+1:5: +1:8
- _4 = (); // scope 0 at $DIR/cycle.rs:+1:5: +1:8
- _2 = <impl Fn() as Fn<()>>::call(move _3, move _4) -> [return: bb1, unwind: bb3]; // scope 0 at $DIR/cycle.rs:+1:5: +1:8
- // mir::Constant
- // + span: $DIR/cycle.rs:6:5: 6:6
- // + literal: Const { ty: for<'a> extern "rust-call" fn(&'a impl Fn(), ()) -> <impl Fn() as FnOnce<()>>::Output {<impl Fn() as Fn<()>>::call}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_4); // scope 0 at $DIR/cycle.rs:+1:7: +1:8
- StorageDead(_3); // scope 0 at $DIR/cycle.rs:+1:7: +1:8
- StorageDead(_2); // scope 0 at $DIR/cycle.rs:+1:8: +1:9
- _0 = const (); // scope 0 at $DIR/cycle.rs:+0:20: +2:2
- drop(_1) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/cycle.rs:+2:1: +2:2
- }
-
- bb2: {
- return; // scope 0 at $DIR/cycle.rs:+2:2: +2:2
- }
-
- bb3 (cleanup): {
- drop(_1) -> [return: bb4, unwind terminate]; // scope 0 at $DIR/cycle.rs:+2:1: +2:2
- }
-
- bb4 (cleanup): {
- resume; // scope 0 at $DIR/cycle.rs:+0:1: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/cycle.f.Inline.panic-abort.diff b/tests/mir-opt/inline/cycle.f.Inline.panic-abort.diff
new file mode 100644
index 000000000..861b2fc9f
--- /dev/null
+++ b/tests/mir-opt/inline/cycle.f.Inline.panic-abort.diff
@@ -0,0 +1,32 @@
+- // MIR for `f` before Inline
++ // MIR for `f` after Inline
+
+ fn f(_1: impl Fn()) -> () {
+ debug g => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: &impl Fn();
+ let mut _4: ();
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &_1;
+ StorageLive(_4);
+ _4 = ();
+ _2 = <impl Fn() as Fn<()>>::call(move _3, move _4) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ drop(_1) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/cycle.f.Inline.panic-unwind.diff b/tests/mir-opt/inline/cycle.f.Inline.panic-unwind.diff
new file mode 100644
index 000000000..f3a6ee22c
--- /dev/null
+++ b/tests/mir-opt/inline/cycle.f.Inline.panic-unwind.diff
@@ -0,0 +1,40 @@
+- // MIR for `f` before Inline
++ // MIR for `f` after Inline
+
+ fn f(_1: impl Fn()) -> () {
+ debug g => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: &impl Fn();
+ let mut _4: ();
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &_1;
+ StorageLive(_4);
+ _4 = ();
+ _2 = <impl Fn() as Fn<()>>::call(move _3, move _4) -> [return: bb1, unwind: bb3];
+ }
+
+ bb1: {
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ drop(_1) -> [return: bb2, unwind: bb4];
+ }
+
+ bb2: {
+ return;
+ }
+
+ bb3 (cleanup): {
+ drop(_1) -> [return: bb4, unwind terminate];
+ }
+
+ bb4 (cleanup): {
+ resume;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/cycle.g.Inline.diff b/tests/mir-opt/inline/cycle.g.Inline.diff
deleted file mode 100644
index 1e6e30f9e..000000000
--- a/tests/mir-opt/inline/cycle.g.Inline.diff
+++ /dev/null
@@ -1,58 +0,0 @@
-- // MIR for `g` before Inline
-+ // MIR for `g` after Inline
-
- fn g() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/cycle.rs:+0:8: +0:8
- let _1: (); // in scope 0 at $DIR/cycle.rs:+1:5: +1:12
-+ let mut _2: fn() {main}; // in scope 0 at $DIR/cycle.rs:+1:5: +1:12
-+ let mut _5: (); // in scope 0 at $DIR/cycle.rs:6:5: 6:8
-+ scope 1 (inlined f::<fn() {main}>) { // at $DIR/cycle.rs:12:5: 12:12
-+ debug g => _2; // in scope 1 at $DIR/cycle.rs:5:6: 5:7
-+ let _3: (); // in scope 1 at $DIR/cycle.rs:6:5: 6:8
-+ let mut _4: &fn() {main}; // in scope 1 at $DIR/cycle.rs:6:5: 6:6
-+ scope 2 (inlined <fn() {main} as Fn<()>>::call - shim(fn() {main})) { // at $DIR/cycle.rs:6:5: 6:8
-+ }
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/cycle.rs:+1:5: +1:12
-- _1 = f::<fn() {main}>(main) -> bb1; // scope 0 at $DIR/cycle.rs:+1:5: +1:12
-+ StorageLive(_2); // scope 0 at $DIR/cycle.rs:+1:5: +1:12
-+ _2 = main; // scope 0 at $DIR/cycle.rs:+1:5: +1:12
- // mir::Constant
-- // + span: $DIR/cycle.rs:12:5: 12:6
-- // + literal: Const { ty: fn(fn() {main}) {f::<fn() {main}>}, val: Value(<ZST>) }
-- // mir::Constant
- // + span: $DIR/cycle.rs:12:7: 12:11
- // + literal: Const { ty: fn() {main}, val: Value(<ZST>) }
-+ StorageLive(_3); // scope 0 at $DIR/cycle.rs:+1:5: +1:12
-+ StorageLive(_4); // scope 1 at $DIR/cycle.rs:6:5: 6:6
-+ _4 = &_2; // scope 1 at $DIR/cycle.rs:6:5: 6:6
-+ StorageLive(_5); // scope 1 at $DIR/cycle.rs:6:5: 6:8
-+ _5 = const (); // scope 1 at $DIR/cycle.rs:6:5: 6:8
-+ _3 = move (*_4)() -> [return: bb4, unwind: bb2]; // scope 2 at $SRC_DIR/core/src/ops/function.rs:LL:COL
- }
-
- bb1: {
-+ StorageDead(_3); // scope 0 at $DIR/cycle.rs:+1:5: +1:12
-+ StorageDead(_2); // scope 0 at $DIR/cycle.rs:+1:5: +1:12
- StorageDead(_1); // scope 0 at $DIR/cycle.rs:+1:12: +1:13
- _0 = const (); // scope 0 at $DIR/cycle.rs:+0:8: +2:2
- return; // scope 0 at $DIR/cycle.rs:+2:2: +2:2
-+ }
-+
-+ bb2 (cleanup): {
-+ drop(_2) -> [return: bb3, unwind terminate]; // scope 1 at $DIR/cycle.rs:7:1: 7:2
-+ }
-+
-+ bb3 (cleanup): {
-+ resume; // scope 1 at $DIR/cycle.rs:5:1: 7:2
-+ }
-+
-+ bb4: {
-+ StorageDead(_5); // scope 1 at $DIR/cycle.rs:6:5: 6:8
-+ StorageDead(_4); // scope 1 at $DIR/cycle.rs:6:7: 6:8
-+ drop(_2) -> bb1; // scope 1 at $DIR/cycle.rs:7:1: 7:2
- }
- }
-
diff --git a/tests/mir-opt/inline/cycle.g.Inline.panic-abort.diff b/tests/mir-opt/inline/cycle.g.Inline.panic-abort.diff
new file mode 100644
index 000000000..f3f4d895a
--- /dev/null
+++ b/tests/mir-opt/inline/cycle.g.Inline.panic-abort.diff
@@ -0,0 +1,44 @@
+- // MIR for `g` before Inline
++ // MIR for `g` after Inline
+
+ fn g() -> () {
+ let mut _0: ();
+ let _1: ();
++ let mut _2: fn() {main};
++ let mut _5: ();
++ scope 1 (inlined f::<fn() {main}>) {
++ debug g => _2;
++ let mut _3: &fn() {main};
++ let _4: ();
++ scope 2 (inlined <fn() {main} as Fn<()>>::call - shim(fn() {main})) {
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = f::<fn() {main}>(main) -> [return: bb1, unwind unreachable];
++ StorageLive(_2);
++ _2 = main;
++ StorageLive(_4);
++ StorageLive(_3);
++ _3 = &_2;
++ StorageLive(_5);
++ _5 = const ();
++ _4 = move (*_3)() -> [return: bb2, unwind unreachable];
+ }
+
+ bb1: {
++ StorageDead(_4);
++ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
++ }
++
++ bb2: {
++ StorageDead(_5);
++ StorageDead(_3);
++ drop(_2) -> [return: bb1, unwind unreachable];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/cycle.g.Inline.panic-unwind.diff b/tests/mir-opt/inline/cycle.g.Inline.panic-unwind.diff
new file mode 100644
index 000000000..3ce8d9acf
--- /dev/null
+++ b/tests/mir-opt/inline/cycle.g.Inline.panic-unwind.diff
@@ -0,0 +1,52 @@
+- // MIR for `g` before Inline
++ // MIR for `g` after Inline
+
+ fn g() -> () {
+ let mut _0: ();
+ let _1: ();
++ let mut _2: fn() {main};
++ let mut _5: ();
++ scope 1 (inlined f::<fn() {main}>) {
++ debug g => _2;
++ let mut _3: &fn() {main};
++ let _4: ();
++ scope 2 (inlined <fn() {main} as Fn<()>>::call - shim(fn() {main})) {
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = f::<fn() {main}>(main) -> [return: bb1, unwind continue];
++ StorageLive(_2);
++ _2 = main;
++ StorageLive(_4);
++ StorageLive(_3);
++ _3 = &_2;
++ StorageLive(_5);
++ _5 = const ();
++ _4 = move (*_3)() -> [return: bb4, unwind: bb2];
+ }
+
+ bb1: {
++ StorageDead(_4);
++ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
++ }
++
++ bb2 (cleanup): {
++ drop(_2) -> [return: bb3, unwind terminate];
++ }
++
++ bb3 (cleanup): {
++ resume;
++ }
++
++ bb4: {
++ StorageDead(_5);
++ StorageDead(_3);
++ drop(_2) -> [return: bb1, unwind continue];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/cycle.main.Inline.diff b/tests/mir-opt/inline/cycle.main.Inline.diff
deleted file mode 100644
index 315634945..000000000
--- a/tests/mir-opt/inline/cycle.main.Inline.diff
+++ /dev/null
@@ -1,58 +0,0 @@
-- // MIR for `main` before Inline
-+ // MIR for `main` after Inline
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/cycle.rs:+0:11: +0:11
- let _1: (); // in scope 0 at $DIR/cycle.rs:+1:5: +1:9
-+ let mut _2: fn() {g}; // in scope 0 at $DIR/cycle.rs:+1:5: +1:9
-+ let mut _5: (); // in scope 0 at $DIR/cycle.rs:6:5: 6:8
-+ scope 1 (inlined f::<fn() {g}>) { // at $DIR/cycle.rs:17:5: 17:9
-+ debug g => _2; // in scope 1 at $DIR/cycle.rs:5:6: 5:7
-+ let _3: (); // in scope 1 at $DIR/cycle.rs:6:5: 6:8
-+ let mut _4: &fn() {g}; // in scope 1 at $DIR/cycle.rs:6:5: 6:6
-+ scope 2 (inlined <fn() {g} as Fn<()>>::call - shim(fn() {g})) { // at $DIR/cycle.rs:6:5: 6:8
-+ }
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/cycle.rs:+1:5: +1:9
-- _1 = f::<fn() {g}>(g) -> bb1; // scope 0 at $DIR/cycle.rs:+1:5: +1:9
-+ StorageLive(_2); // scope 0 at $DIR/cycle.rs:+1:5: +1:9
-+ _2 = g; // scope 0 at $DIR/cycle.rs:+1:5: +1:9
- // mir::Constant
-- // + span: $DIR/cycle.rs:17:5: 17:6
-- // + literal: Const { ty: fn(fn() {g}) {f::<fn() {g}>}, val: Value(<ZST>) }
-- // mir::Constant
- // + span: $DIR/cycle.rs:17:7: 17:8
- // + literal: Const { ty: fn() {g}, val: Value(<ZST>) }
-+ StorageLive(_3); // scope 0 at $DIR/cycle.rs:+1:5: +1:9
-+ StorageLive(_4); // scope 1 at $DIR/cycle.rs:6:5: 6:6
-+ _4 = &_2; // scope 1 at $DIR/cycle.rs:6:5: 6:6
-+ StorageLive(_5); // scope 1 at $DIR/cycle.rs:6:5: 6:8
-+ _5 = const (); // scope 1 at $DIR/cycle.rs:6:5: 6:8
-+ _3 = move (*_4)() -> [return: bb4, unwind: bb2]; // scope 2 at $SRC_DIR/core/src/ops/function.rs:LL:COL
- }
-
- bb1: {
-+ StorageDead(_3); // scope 0 at $DIR/cycle.rs:+1:5: +1:9
-+ StorageDead(_2); // scope 0 at $DIR/cycle.rs:+1:5: +1:9
- StorageDead(_1); // scope 0 at $DIR/cycle.rs:+1:9: +1:10
- _0 = const (); // scope 0 at $DIR/cycle.rs:+0:11: +2:2
- return; // scope 0 at $DIR/cycle.rs:+2:2: +2:2
-+ }
-+
-+ bb2 (cleanup): {
-+ drop(_2) -> [return: bb3, unwind terminate]; // scope 1 at $DIR/cycle.rs:7:1: 7:2
-+ }
-+
-+ bb3 (cleanup): {
-+ resume; // scope 1 at $DIR/cycle.rs:5:1: 7:2
-+ }
-+
-+ bb4: {
-+ StorageDead(_5); // scope 1 at $DIR/cycle.rs:6:5: 6:8
-+ StorageDead(_4); // scope 1 at $DIR/cycle.rs:6:7: 6:8
-+ drop(_2) -> bb1; // scope 1 at $DIR/cycle.rs:7:1: 7:2
- }
- }
-
diff --git a/tests/mir-opt/inline/cycle.main.Inline.panic-abort.diff b/tests/mir-opt/inline/cycle.main.Inline.panic-abort.diff
new file mode 100644
index 000000000..eb0076354
--- /dev/null
+++ b/tests/mir-opt/inline/cycle.main.Inline.panic-abort.diff
@@ -0,0 +1,54 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
++ let mut _2: fn() {g};
++ let mut _5: ();
++ scope 1 (inlined f::<fn() {g}>) {
++ debug g => _2;
++ let mut _3: &fn() {g};
++ let _4: ();
++ scope 2 (inlined <fn() {g} as Fn<()>>::call - shim(fn() {g})) {
++ scope 3 (inlined g) {
++ scope 4 (inlined f::<fn() {main}>) {
++ debug g => main;
++ let _6: ();
++ scope 5 (inlined <fn() {main} as Fn<()>>::call - shim(fn() {main})) {
++ }
++ }
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = f::<fn() {g}>(g) -> [return: bb1, unwind unreachable];
++ StorageLive(_2);
++ _2 = g;
++ StorageLive(_4);
++ StorageLive(_3);
++ _3 = &_2;
++ StorageLive(_5);
++ _5 = const ();
++ StorageLive(_6);
++ _6 = main() -> [return: bb2, unwind unreachable];
+ }
+
+ bb1: {
++ StorageDead(_4);
++ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
++ }
++
++ bb2: {
++ StorageDead(_6);
++ StorageDead(_5);
++ StorageDead(_3);
++ drop(_2) -> [return: bb1, unwind unreachable];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/cycle.main.Inline.panic-unwind.diff b/tests/mir-opt/inline/cycle.main.Inline.panic-unwind.diff
new file mode 100644
index 000000000..198a23226
--- /dev/null
+++ b/tests/mir-opt/inline/cycle.main.Inline.panic-unwind.diff
@@ -0,0 +1,62 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
++ let mut _2: fn() {g};
++ let mut _5: ();
++ scope 1 (inlined f::<fn() {g}>) {
++ debug g => _2;
++ let mut _3: &fn() {g};
++ let _4: ();
++ scope 2 (inlined <fn() {g} as Fn<()>>::call - shim(fn() {g})) {
++ scope 3 (inlined g) {
++ scope 4 (inlined f::<fn() {main}>) {
++ debug g => main;
++ let _6: ();
++ scope 5 (inlined <fn() {main} as Fn<()>>::call - shim(fn() {main})) {
++ }
++ }
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = f::<fn() {g}>(g) -> [return: bb1, unwind continue];
++ StorageLive(_2);
++ _2 = g;
++ StorageLive(_4);
++ StorageLive(_3);
++ _3 = &_2;
++ StorageLive(_5);
++ _5 = const ();
++ StorageLive(_6);
++ _6 = main() -> [return: bb4, unwind: bb2];
+ }
+
+ bb1: {
++ StorageDead(_4);
++ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
++ }
++
++ bb2 (cleanup): {
++ drop(_2) -> [return: bb3, unwind terminate];
++ }
++
++ bb3 (cleanup): {
++ resume;
++ }
++
++ bb4: {
++ StorageDead(_6);
++ StorageDead(_5);
++ StorageDead(_3);
++ drop(_2) -> [return: bb1, unwind continue];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/cycle.rs b/tests/mir-opt/inline/cycle.rs
index 9e8950d8a..1b74d8184 100644
--- a/tests/mir-opt/inline/cycle.rs
+++ b/tests/mir-opt/inline/cycle.rs
@@ -1,4 +1,5 @@
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
+// compile-flags: -Zinline-mir-hint-threshold=1000
// EMIT_MIR cycle.f.Inline.diff
#[inline(always)]
diff --git a/tests/mir-opt/inline/dyn_trait.get_query.Inline.diff b/tests/mir-opt/inline/dyn_trait.get_query.Inline.diff
deleted file mode 100644
index 75d9bd54d..000000000
--- a/tests/mir-opt/inline/dyn_trait.get_query.Inline.diff
+++ /dev/null
@@ -1,54 +0,0 @@
-- // MIR for `get_query` before Inline
-+ // MIR for `get_query` after Inline
-
- fn get_query(_1: &T) -> () {
- debug t => _1; // in scope 0 at $DIR/dyn_trait.rs:+0:31: +0:32
- let mut _0: (); // return place in scope 0 at $DIR/dyn_trait.rs:+0:38: +0:38
- let _2: &<Q as Query>::C; // in scope 0 at $DIR/dyn_trait.rs:+1:9: +1:10
- let mut _3: &T; // in scope 0 at $DIR/dyn_trait.rs:+1:22: +1:23
- let mut _4: &<Q as Query>::C; // in scope 0 at $DIR/dyn_trait.rs:+2:23: +2:24
- scope 1 {
- debug c => _2; // in scope 1 at $DIR/dyn_trait.rs:+1:9: +1:10
-+ scope 2 (inlined try_execute_query::<<Q as Query>::C>) { // at $DIR/dyn_trait.rs:35:5: 35:25
-+ debug c => _4; // in scope 2 at $DIR/dyn_trait.rs:27:36: 27:37
-+ let mut _5: &dyn Cache<V = <Q as Query>::V>; // in scope 2 at $DIR/dyn_trait.rs:28:14: 28:15
-+ scope 3 (inlined mk_cycle::<<Q as Query>::V>) { // at $DIR/dyn_trait.rs:28:5: 28:16
-+ debug c => _5; // in scope 3 at $DIR/dyn_trait.rs:21:27: 21:28
-+ }
-+ }
- }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/dyn_trait.rs:+1:9: +1:10
- StorageLive(_3); // scope 0 at $DIR/dyn_trait.rs:+1:22: +1:23
- _3 = &(*_1); // scope 0 at $DIR/dyn_trait.rs:+1:22: +1:23
- _2 = <Q as Query>::cache::<T>(move _3) -> bb1; // scope 0 at $DIR/dyn_trait.rs:+1:13: +1:24
- // mir::Constant
- // + span: $DIR/dyn_trait.rs:34:13: 34:21
- // + user_ty: UserType(0)
- // + literal: Const { ty: for<'a> fn(&'a T) -> &'a <Q as Query>::C {<Q as Query>::cache::<T>}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_3); // scope 0 at $DIR/dyn_trait.rs:+1:23: +1:24
- StorageLive(_4); // scope 1 at $DIR/dyn_trait.rs:+2:23: +2:24
- _4 = &(*_2); // scope 1 at $DIR/dyn_trait.rs:+2:23: +2:24
-- _0 = try_execute_query::<<Q as Query>::C>(move _4) -> bb2; // scope 1 at $DIR/dyn_trait.rs:+2:5: +2:25
-+ StorageLive(_5); // scope 2 at $DIR/dyn_trait.rs:28:14: 28:15
-+ _5 = _4 as &dyn Cache<V = <Q as Query>::V> (Pointer(Unsize)); // scope 2 at $DIR/dyn_trait.rs:28:14: 28:15
-+ _0 = <dyn Cache<V = <Q as Query>::V> as Cache>::store_nocache(_5) -> bb2; // scope 3 at $DIR/dyn_trait.rs:22:5: 22:22
- // mir::Constant
-- // + span: $DIR/dyn_trait.rs:35:5: 35:22
-- // + literal: Const { ty: for<'a> fn(&'a <Q as Query>::C) {try_execute_query::<<Q as Query>::C>}, val: Value(<ZST>) }
-+ // + span: $DIR/dyn_trait.rs:22:7: 22:20
-+ // + literal: Const { ty: for<'a> fn(&'a dyn Cache<V = <Q as Query>::V>) {<dyn Cache<V = <Q as Query>::V> as Cache>::store_nocache}, val: Value(<ZST>) }
- }
-
- bb2: {
-+ StorageDead(_5); // scope 2 at $DIR/dyn_trait.rs:28:15: 28:16
- StorageDead(_4); // scope 1 at $DIR/dyn_trait.rs:+2:24: +2:25
- StorageDead(_2); // scope 0 at $DIR/dyn_trait.rs:+3:1: +3:2
- return; // scope 0 at $DIR/dyn_trait.rs:+3:2: +3:2
- }
- }
-
diff --git a/tests/mir-opt/inline/dyn_trait.get_query.Inline.panic-abort.diff b/tests/mir-opt/inline/dyn_trait.get_query.Inline.panic-abort.diff
new file mode 100644
index 000000000..57b0849e1
--- /dev/null
+++ b/tests/mir-opt/inline/dyn_trait.get_query.Inline.panic-abort.diff
@@ -0,0 +1,45 @@
+- // MIR for `get_query` before Inline
++ // MIR for `get_query` after Inline
+
+ fn get_query(_1: &T) -> () {
+ debug t => _1;
+ let mut _0: ();
+ let _2: &<Q as Query>::C;
+ let mut _3: &T;
+ let mut _4: &<Q as Query>::C;
+ scope 1 {
+ debug c => _2;
++ scope 2 (inlined try_execute_query::<<Q as Query>::C>) {
++ debug c => _4;
++ let mut _5: &dyn Cache<V = <Q as Query>::V>;
++ scope 3 (inlined mk_cycle::<<Q as Query>::V>) {
++ debug c => _5;
++ }
++ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _2 = <Q as Query>::cache::<T>(move _3) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageLive(_4);
+ _4 = &(*_2);
+- _0 = try_execute_query::<<Q as Query>::C>(move _4) -> [return: bb2, unwind unreachable];
++ StorageLive(_5);
++ _5 = _4 as &dyn Cache<V = <Q as Query>::V> (PointerCoercion(Unsize));
++ _0 = <dyn Cache<V = <Q as Query>::V> as Cache>::store_nocache(_5) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
++ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/dyn_trait.get_query.Inline.panic-unwind.diff b/tests/mir-opt/inline/dyn_trait.get_query.Inline.panic-unwind.diff
new file mode 100644
index 000000000..706c1d481
--- /dev/null
+++ b/tests/mir-opt/inline/dyn_trait.get_query.Inline.panic-unwind.diff
@@ -0,0 +1,45 @@
+- // MIR for `get_query` before Inline
++ // MIR for `get_query` after Inline
+
+ fn get_query(_1: &T) -> () {
+ debug t => _1;
+ let mut _0: ();
+ let _2: &<Q as Query>::C;
+ let mut _3: &T;
+ let mut _4: &<Q as Query>::C;
+ scope 1 {
+ debug c => _2;
++ scope 2 (inlined try_execute_query::<<Q as Query>::C>) {
++ debug c => _4;
++ let mut _5: &dyn Cache<V = <Q as Query>::V>;
++ scope 3 (inlined mk_cycle::<<Q as Query>::V>) {
++ debug c => _5;
++ }
++ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _2 = <Q as Query>::cache::<T>(move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageLive(_4);
+ _4 = &(*_2);
+- _0 = try_execute_query::<<Q as Query>::C>(move _4) -> [return: bb2, unwind continue];
++ StorageLive(_5);
++ _5 = _4 as &dyn Cache<V = <Q as Query>::V> (PointerCoercion(Unsize));
++ _0 = <dyn Cache<V = <Q as Query>::V> as Cache>::store_nocache(_5) -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
++ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.diff b/tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.diff
deleted file mode 100644
index 925c95988..000000000
--- a/tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.diff
+++ /dev/null
@@ -1,23 +0,0 @@
-- // MIR for `mk_cycle` before Inline
-+ // MIR for `mk_cycle` after Inline
-
- fn mk_cycle(_1: &dyn Cache<V = V>) -> () {
- debug c => _1; // in scope 0 at $DIR/dyn_trait.rs:+0:27: +0:28
- let mut _0: (); // return place in scope 0 at $DIR/dyn_trait.rs:+0:49: +0:49
- let mut _2: &dyn Cache<V = V>; // in scope 0 at $DIR/dyn_trait.rs:+1:5: +1:22
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/dyn_trait.rs:+1:5: +1:22
- _2 = &(*_1); // scope 0 at $DIR/dyn_trait.rs:+1:5: +1:22
- _0 = <dyn Cache<V = V> as Cache>::store_nocache(move _2) -> bb1; // scope 0 at $DIR/dyn_trait.rs:+1:5: +1:22
- // mir::Constant
- // + span: $DIR/dyn_trait.rs:22:7: 22:20
- // + literal: Const { ty: for<'a> fn(&'a dyn Cache<V = V>) {<dyn Cache<V = V> as Cache>::store_nocache}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_2); // scope 0 at $DIR/dyn_trait.rs:+1:21: +1:22
- return; // scope 0 at $DIR/dyn_trait.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.panic-abort.diff b/tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.panic-abort.diff
new file mode 100644
index 000000000..d7801b7a0
--- /dev/null
+++ b/tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.panic-abort.diff
@@ -0,0 +1,20 @@
+- // MIR for `mk_cycle` before Inline
++ // MIR for `mk_cycle` after Inline
+
+ fn mk_cycle(_1: &dyn Cache<V = V>) -> () {
+ debug c => _1;
+ let mut _0: ();
+ let mut _2: &dyn Cache<V = V>;
+
+ bb0: {
+ StorageLive(_2);
+ _2 = &(*_1);
+ _0 = <dyn Cache<V = V> as Cache>::store_nocache(move _2) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.panic-unwind.diff b/tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.panic-unwind.diff
new file mode 100644
index 000000000..7b1cf895a
--- /dev/null
+++ b/tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.panic-unwind.diff
@@ -0,0 +1,20 @@
+- // MIR for `mk_cycle` before Inline
++ // MIR for `mk_cycle` after Inline
+
+ fn mk_cycle(_1: &dyn Cache<V = V>) -> () {
+ debug c => _1;
+ let mut _0: ();
+ let mut _2: &dyn Cache<V = V>;
+
+ bb0: {
+ StorageLive(_2);
+ _2 = &(*_1);
+ _0 = <dyn Cache<V = V> as Cache>::store_nocache(move _2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/dyn_trait.rs b/tests/mir-opt/inline/dyn_trait.rs
index 2af81f825..0faeec0bb 100644
--- a/tests/mir-opt/inline/dyn_trait.rs
+++ b/tests/mir-opt/inline/dyn_trait.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![crate_type = "lib"]
use std::fmt::Debug;
diff --git a/tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.diff b/tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.diff
deleted file mode 100644
index f4e5272ab..000000000
--- a/tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.diff
+++ /dev/null
@@ -1,33 +0,0 @@
-- // MIR for `try_execute_query` before Inline
-+ // MIR for `try_execute_query` after Inline
-
- fn try_execute_query(_1: &C) -> () {
- debug c => _1; // in scope 0 at $DIR/dyn_trait.rs:+0:36: +0:37
- let mut _0: (); // return place in scope 0 at $DIR/dyn_trait.rs:+0:43: +0:43
- let mut _2: &dyn Cache<V = <C as Cache>::V>; // in scope 0 at $DIR/dyn_trait.rs:+1:14: +1:15
- let mut _3: &C; // in scope 0 at $DIR/dyn_trait.rs:+1:14: +1:15
-+ scope 1 (inlined mk_cycle::<<C as Cache>::V>) { // at $DIR/dyn_trait.rs:28:5: 28:16
-+ debug c => _2; // in scope 1 at $DIR/dyn_trait.rs:21:27: 21:28
-+ }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/dyn_trait.rs:+1:14: +1:15
- StorageLive(_3); // scope 0 at $DIR/dyn_trait.rs:+1:14: +1:15
- _3 = &(*_1); // scope 0 at $DIR/dyn_trait.rs:+1:14: +1:15
- _2 = move _3 as &dyn Cache<V = <C as Cache>::V> (Pointer(Unsize)); // scope 0 at $DIR/dyn_trait.rs:+1:14: +1:15
- StorageDead(_3); // scope 0 at $DIR/dyn_trait.rs:+1:14: +1:15
-- _0 = mk_cycle::<<C as Cache>::V>(move _2) -> bb1; // scope 0 at $DIR/dyn_trait.rs:+1:5: +1:16
-+ _0 = <dyn Cache<V = <C as Cache>::V> as Cache>::store_nocache(_2) -> bb1; // scope 1 at $DIR/dyn_trait.rs:22:5: 22:22
- // mir::Constant
-- // + span: $DIR/dyn_trait.rs:28:5: 28:13
-- // + literal: Const { ty: for<'a> fn(&'a (dyn Cache<V = <C as Cache>::V> + 'a)) {mk_cycle::<<C as Cache>::V>}, val: Value(<ZST>) }
-+ // + span: $DIR/dyn_trait.rs:22:7: 22:20
-+ // + literal: Const { ty: for<'a> fn(&'a dyn Cache<V = <C as Cache>::V>) {<dyn Cache<V = <C as Cache>::V> as Cache>::store_nocache}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_2); // scope 0 at $DIR/dyn_trait.rs:+1:15: +1:16
- return; // scope 0 at $DIR/dyn_trait.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.panic-abort.diff b/tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.panic-abort.diff
new file mode 100644
index 000000000..9a6d3596f
--- /dev/null
+++ b/tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.panic-abort.diff
@@ -0,0 +1,28 @@
+- // MIR for `try_execute_query` before Inline
++ // MIR for `try_execute_query` after Inline
+
+ fn try_execute_query(_1: &C) -> () {
+ debug c => _1;
+ let mut _0: ();
+ let mut _2: &dyn Cache<V = <C as Cache>::V>;
+ let mut _3: &C;
++ scope 1 (inlined mk_cycle::<<C as Cache>::V>) {
++ debug c => _2;
++ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _2 = move _3 as &dyn Cache<V = <C as Cache>::V> (PointerCoercion(Unsize));
+ StorageDead(_3);
+- _0 = mk_cycle::<<C as Cache>::V>(move _2) -> [return: bb1, unwind unreachable];
++ _0 = <dyn Cache<V = <C as Cache>::V> as Cache>::store_nocache(_2) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.panic-unwind.diff b/tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.panic-unwind.diff
new file mode 100644
index 000000000..1a08df2b0
--- /dev/null
+++ b/tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.panic-unwind.diff
@@ -0,0 +1,28 @@
+- // MIR for `try_execute_query` before Inline
++ // MIR for `try_execute_query` after Inline
+
+ fn try_execute_query(_1: &C) -> () {
+ debug c => _1;
+ let mut _0: ();
+ let mut _2: &dyn Cache<V = <C as Cache>::V>;
+ let mut _3: &C;
++ scope 1 (inlined mk_cycle::<<C as Cache>::V>) {
++ debug c => _2;
++ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _2 = move _3 as &dyn Cache<V = <C as Cache>::V> (PointerCoercion(Unsize));
+ StorageDead(_3);
+- _0 = mk_cycle::<<C as Cache>::V>(move _2) -> [return: bb1, unwind continue];
++ _0 = <dyn Cache<V = <C as Cache>::V> as Cache>::store_nocache(_2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/exponential_runtime.main.Inline.diff b/tests/mir-opt/inline/exponential_runtime.main.Inline.diff
deleted file mode 100644
index 30af8661d..000000000
--- a/tests/mir-opt/inline/exponential_runtime.main.Inline.diff
+++ /dev/null
@@ -1,75 +0,0 @@
-- // MIR for `main` before Inline
-+ // MIR for `main` after Inline
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/exponential_runtime.rs:+0:11: +0:11
- let _1: (); // in scope 0 at $DIR/exponential_runtime.rs:+1:5: +1:22
-+ scope 1 (inlined <() as G>::call) { // at $DIR/exponential_runtime.rs:87:5: 87:22
-+ let _2: (); // in scope 1 at $DIR/exponential_runtime.rs:74:9: 74:25
-+ let _3: (); // in scope 1 at $DIR/exponential_runtime.rs:75:9: 75:25
-+ let _4: (); // in scope 1 at $DIR/exponential_runtime.rs:76:9: 76:25
-+ scope 2 (inlined <() as F>::call) { // at $DIR/exponential_runtime.rs:74:9: 74:25
-+ let _5: (); // in scope 2 at $DIR/exponential_runtime.rs:62:9: 62:25
-+ let _6: (); // in scope 2 at $DIR/exponential_runtime.rs:63:9: 63:25
-+ let _7: (); // in scope 2 at $DIR/exponential_runtime.rs:64:9: 64:25
-+ }
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/exponential_runtime.rs:+1:5: +1:22
-- _1 = <() as G>::call() -> bb1; // scope 0 at $DIR/exponential_runtime.rs:+1:5: +1:22
-+ StorageLive(_2); // scope 0 at $DIR/exponential_runtime.rs:+1:5: +1:22
-+ StorageLive(_3); // scope 0 at $DIR/exponential_runtime.rs:+1:5: +1:22
-+ StorageLive(_4); // scope 0 at $DIR/exponential_runtime.rs:+1:5: +1:22
-+ StorageLive(_5); // scope 1 at $DIR/exponential_runtime.rs:74:9: 74:25
-+ StorageLive(_6); // scope 1 at $DIR/exponential_runtime.rs:74:9: 74:25
-+ StorageLive(_7); // scope 1 at $DIR/exponential_runtime.rs:74:9: 74:25
-+ _5 = <() as E>::call() -> bb4; // scope 2 at $DIR/exponential_runtime.rs:62:9: 62:25
- // mir::Constant
-- // + span: $DIR/exponential_runtime.rs:87:5: 87:20
-- // + literal: Const { ty: fn() {<() as G>::call}, val: Value(<ZST>) }
-+ // + span: $DIR/exponential_runtime.rs:62:9: 62:23
-+ // + literal: Const { ty: fn() {<() as E>::call}, val: Value(<ZST>) }
- }
-
- bb1: {
-+ StorageDead(_4); // scope 0 at $DIR/exponential_runtime.rs:+1:5: +1:22
-+ StorageDead(_3); // scope 0 at $DIR/exponential_runtime.rs:+1:5: +1:22
-+ StorageDead(_2); // scope 0 at $DIR/exponential_runtime.rs:+1:5: +1:22
- StorageDead(_1); // scope 0 at $DIR/exponential_runtime.rs:+1:22: +1:23
- _0 = const (); // scope 0 at $DIR/exponential_runtime.rs:+0:11: +2:2
- return; // scope 0 at $DIR/exponential_runtime.rs:+2:2: +2:2
-+ }
-+
-+ bb2: {
-+ StorageDead(_7); // scope 1 at $DIR/exponential_runtime.rs:74:9: 74:25
-+ StorageDead(_6); // scope 1 at $DIR/exponential_runtime.rs:74:9: 74:25
-+ StorageDead(_5); // scope 1 at $DIR/exponential_runtime.rs:74:9: 74:25
-+ _3 = <() as F>::call() -> bb3; // scope 1 at $DIR/exponential_runtime.rs:75:9: 75:25
-+ // mir::Constant
-+ // + span: $DIR/exponential_runtime.rs:75:9: 75:23
-+ // + literal: Const { ty: fn() {<() as F>::call}, val: Value(<ZST>) }
-+ }
-+
-+ bb3: {
-+ _4 = <() as F>::call() -> bb1; // scope 1 at $DIR/exponential_runtime.rs:76:9: 76:25
-+ // mir::Constant
-+ // + span: $DIR/exponential_runtime.rs:76:9: 76:23
-+ // + literal: Const { ty: fn() {<() as F>::call}, val: Value(<ZST>) }
-+ }
-+
-+ bb4: {
-+ _6 = <() as E>::call() -> bb5; // scope 2 at $DIR/exponential_runtime.rs:63:9: 63:25
-+ // mir::Constant
-+ // + span: $DIR/exponential_runtime.rs:63:9: 63:23
-+ // + literal: Const { ty: fn() {<() as E>::call}, val: Value(<ZST>) }
-+ }
-+
-+ bb5: {
-+ _7 = <() as E>::call() -> bb2; // scope 2 at $DIR/exponential_runtime.rs:64:9: 64:25
-+ // mir::Constant
-+ // + span: $DIR/exponential_runtime.rs:64:9: 64:23
-+ // + literal: Const { ty: fn() {<() as E>::call}, val: Value(<ZST>) }
- }
- }
-
diff --git a/tests/mir-opt/inline/exponential_runtime.main.Inline.panic-abort.diff b/tests/mir-opt/inline/exponential_runtime.main.Inline.panic-abort.diff
new file mode 100644
index 000000000..217c8b802
--- /dev/null
+++ b/tests/mir-opt/inline/exponential_runtime.main.Inline.panic-abort.diff
@@ -0,0 +1,134 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
++ scope 1 (inlined <() as G>::call) {
++ let _2: ();
++ let _3: ();
++ let _4: ();
++ scope 2 (inlined <() as F>::call) {
++ let _5: ();
++ let _6: ();
++ let _7: ();
++ scope 3 (inlined <() as E>::call) {
++ let _8: ();
++ let _9: ();
++ let _10: ();
++ scope 4 (inlined <() as D>::call) {
++ let _11: ();
++ let _12: ();
++ let _13: ();
++ scope 5 (inlined <() as C>::call) {
++ let _14: ();
++ let _15: ();
++ let _16: ();
++ scope 6 (inlined <() as B>::call) {
++ let _17: ();
++ let _18: ();
++ let _19: ();
++ }
++ }
++ }
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = <() as G>::call() -> [return: bb1, unwind unreachable];
++ StorageLive(_2);
++ StorageLive(_3);
++ StorageLive(_4);
++ StorageLive(_5);
++ StorageLive(_6);
++ StorageLive(_7);
++ StorageLive(_8);
++ StorageLive(_9);
++ StorageLive(_10);
++ StorageLive(_11);
++ StorageLive(_12);
++ StorageLive(_13);
++ StorageLive(_14);
++ StorageLive(_15);
++ StorageLive(_16);
++ StorageLive(_17);
++ StorageLive(_18);
++ StorageLive(_19);
++ _17 = <() as A>::call() -> [return: bb12, unwind unreachable];
+ }
+
+ bb1: {
++ StorageDead(_4);
++ StorageDead(_3);
++ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
++ }
++
++ bb2: {
++ StorageDead(_7);
++ StorageDead(_6);
++ StorageDead(_5);
++ _3 = <() as F>::call() -> [return: bb3, unwind unreachable];
++ }
++
++ bb3: {
++ _4 = <() as F>::call() -> [return: bb1, unwind unreachable];
++ }
++
++ bb4: {
++ StorageDead(_10);
++ StorageDead(_9);
++ StorageDead(_8);
++ _6 = <() as E>::call() -> [return: bb5, unwind unreachable];
++ }
++
++ bb5: {
++ _7 = <() as E>::call() -> [return: bb2, unwind unreachable];
++ }
++
++ bb6: {
++ StorageDead(_13);
++ StorageDead(_12);
++ StorageDead(_11);
++ _9 = <() as D>::call() -> [return: bb7, unwind unreachable];
++ }
++
++ bb7: {
++ _10 = <() as D>::call() -> [return: bb4, unwind unreachable];
++ }
++
++ bb8: {
++ StorageDead(_16);
++ StorageDead(_15);
++ StorageDead(_14);
++ _12 = <() as C>::call() -> [return: bb9, unwind unreachable];
++ }
++
++ bb9: {
++ _13 = <() as C>::call() -> [return: bb6, unwind unreachable];
++ }
++
++ bb10: {
++ StorageDead(_19);
++ StorageDead(_18);
++ StorageDead(_17);
++ _15 = <() as B>::call() -> [return: bb11, unwind unreachable];
++ }
++
++ bb11: {
++ _16 = <() as B>::call() -> [return: bb8, unwind unreachable];
++ }
++
++ bb12: {
++ _18 = <() as A>::call() -> [return: bb13, unwind unreachable];
++ }
++
++ bb13: {
++ _19 = <() as A>::call() -> [return: bb10, unwind unreachable];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/exponential_runtime.main.Inline.panic-unwind.diff b/tests/mir-opt/inline/exponential_runtime.main.Inline.panic-unwind.diff
new file mode 100644
index 000000000..0a4ce40c5
--- /dev/null
+++ b/tests/mir-opt/inline/exponential_runtime.main.Inline.panic-unwind.diff
@@ -0,0 +1,134 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
++ scope 1 (inlined <() as G>::call) {
++ let _2: ();
++ let _3: ();
++ let _4: ();
++ scope 2 (inlined <() as F>::call) {
++ let _5: ();
++ let _6: ();
++ let _7: ();
++ scope 3 (inlined <() as E>::call) {
++ let _8: ();
++ let _9: ();
++ let _10: ();
++ scope 4 (inlined <() as D>::call) {
++ let _11: ();
++ let _12: ();
++ let _13: ();
++ scope 5 (inlined <() as C>::call) {
++ let _14: ();
++ let _15: ();
++ let _16: ();
++ scope 6 (inlined <() as B>::call) {
++ let _17: ();
++ let _18: ();
++ let _19: ();
++ }
++ }
++ }
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = <() as G>::call() -> [return: bb1, unwind continue];
++ StorageLive(_2);
++ StorageLive(_3);
++ StorageLive(_4);
++ StorageLive(_5);
++ StorageLive(_6);
++ StorageLive(_7);
++ StorageLive(_8);
++ StorageLive(_9);
++ StorageLive(_10);
++ StorageLive(_11);
++ StorageLive(_12);
++ StorageLive(_13);
++ StorageLive(_14);
++ StorageLive(_15);
++ StorageLive(_16);
++ StorageLive(_17);
++ StorageLive(_18);
++ StorageLive(_19);
++ _17 = <() as A>::call() -> [return: bb12, unwind continue];
+ }
+
+ bb1: {
++ StorageDead(_4);
++ StorageDead(_3);
++ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
++ }
++
++ bb2: {
++ StorageDead(_7);
++ StorageDead(_6);
++ StorageDead(_5);
++ _3 = <() as F>::call() -> [return: bb3, unwind continue];
++ }
++
++ bb3: {
++ _4 = <() as F>::call() -> [return: bb1, unwind continue];
++ }
++
++ bb4: {
++ StorageDead(_10);
++ StorageDead(_9);
++ StorageDead(_8);
++ _6 = <() as E>::call() -> [return: bb5, unwind continue];
++ }
++
++ bb5: {
++ _7 = <() as E>::call() -> [return: bb2, unwind continue];
++ }
++
++ bb6: {
++ StorageDead(_13);
++ StorageDead(_12);
++ StorageDead(_11);
++ _9 = <() as D>::call() -> [return: bb7, unwind continue];
++ }
++
++ bb7: {
++ _10 = <() as D>::call() -> [return: bb4, unwind continue];
++ }
++
++ bb8: {
++ StorageDead(_16);
++ StorageDead(_15);
++ StorageDead(_14);
++ _12 = <() as C>::call() -> [return: bb9, unwind continue];
++ }
++
++ bb9: {
++ _13 = <() as C>::call() -> [return: bb6, unwind continue];
++ }
++
++ bb10: {
++ StorageDead(_19);
++ StorageDead(_18);
++ StorageDead(_17);
++ _15 = <() as B>::call() -> [return: bb11, unwind continue];
++ }
++
++ bb11: {
++ _16 = <() as B>::call() -> [return: bb8, unwind continue];
++ }
++
++ bb12: {
++ _18 = <() as A>::call() -> [return: bb13, unwind continue];
++ }
++
++ bb13: {
++ _19 = <() as A>::call() -> [return: bb10, unwind continue];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/exponential_runtime.rs b/tests/mir-opt/inline/exponential_runtime.rs
index 39985528f..cfa9ff210 100644
--- a/tests/mir-opt/inline/exponential_runtime.rs
+++ b/tests/mir-opt/inline/exponential_runtime.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Checks that code with exponential runtime does not have exponential behavior in inlining.
trait A {
diff --git a/tests/mir-opt/inline/inline_any_operand.bar.Inline.after.mir b/tests/mir-opt/inline/inline_any_operand.bar.Inline.after.mir
index 20f737cc2..2d0b71e0a 100644
--- a/tests/mir-opt/inline/inline_any_operand.bar.Inline.after.mir
+++ b/tests/mir-opt/inline/inline_any_operand.bar.Inline.after.mir
@@ -1,36 +1,33 @@
// MIR for `bar` after Inline
fn bar() -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/inline_any_operand.rs:+0:13: +0:17
- let _1: fn(i32, i32) -> bool {foo}; // in scope 0 at $DIR/inline_any_operand.rs:+1:9: +1:10
- let mut _2: fn(i32, i32) -> bool {foo}; // in scope 0 at $DIR/inline_any_operand.rs:+2:5: +2:6
- let mut _3: i32; // in scope 0 at $DIR/inline_any_operand.rs:+2:5: +2:13
- let mut _4: i32; // in scope 0 at $DIR/inline_any_operand.rs:+2:5: +2:13
+ let mut _0: bool;
+ let _1: fn(i32, i32) -> bool {foo};
+ let mut _2: fn(i32, i32) -> bool {foo};
+ let mut _3: i32;
+ let mut _4: i32;
scope 1 {
- debug f => _1; // in scope 1 at $DIR/inline_any_operand.rs:+1:9: +1:10
- scope 2 (inlined foo) { // at $DIR/inline_any_operand.rs:12:5: 12:13
- debug x => _3; // in scope 2 at $DIR/inline_any_operand.rs:16:8: 16:9
- debug y => _4; // in scope 2 at $DIR/inline_any_operand.rs:16:16: 16:17
+ debug f => _1;
+ scope 2 (inlined foo) {
+ debug x => _3;
+ debug y => _4;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_any_operand.rs:+1:9: +1:10
- _1 = foo; // scope 0 at $DIR/inline_any_operand.rs:+1:13: +1:16
- // mir::Constant
- // + span: $DIR/inline_any_operand.rs:11:13: 11:16
- // + literal: Const { ty: fn(i32, i32) -> bool {foo}, val: Value(<ZST>) }
- StorageLive(_2); // scope 1 at $DIR/inline_any_operand.rs:+2:5: +2:6
- _2 = _1; // scope 1 at $DIR/inline_any_operand.rs:+2:5: +2:6
- StorageLive(_3); // scope 1 at $DIR/inline_any_operand.rs:+2:5: +2:13
- _3 = const 1_i32; // scope 1 at $DIR/inline_any_operand.rs:+2:5: +2:13
- StorageLive(_4); // scope 1 at $DIR/inline_any_operand.rs:+2:5: +2:13
- _4 = const -1_i32; // scope 1 at $DIR/inline_any_operand.rs:+2:5: +2:13
- _0 = Eq(_3, _4); // scope 2 at $DIR/inline_any_operand.rs:17:5: 17:11
- StorageDead(_4); // scope 1 at $DIR/inline_any_operand.rs:+2:5: +2:13
- StorageDead(_3); // scope 1 at $DIR/inline_any_operand.rs:+2:5: +2:13
- StorageDead(_2); // scope 1 at $DIR/inline_any_operand.rs:+2:12: +2:13
- StorageDead(_1); // scope 0 at $DIR/inline_any_operand.rs:+3:1: +3:2
- return; // scope 0 at $DIR/inline_any_operand.rs:+3:2: +3:2
+ StorageLive(_1);
+ _1 = foo;
+ StorageLive(_2);
+ _2 = _1;
+ StorageLive(_3);
+ _3 = const 1_i32;
+ StorageLive(_4);
+ _4 = const -1_i32;
+ _0 = Eq(_3, _4);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/inline/inline_closure.foo.Inline.after.mir b/tests/mir-opt/inline/inline_closure.foo.Inline.after.mir
index 1d2f99cbe..9384064c5 100644
--- a/tests/mir-opt/inline/inline_closure.foo.Inline.after.mir
+++ b/tests/mir-opt/inline/inline_closure.foo.Inline.after.mir
@@ -1,55 +1,47 @@
// MIR for `foo` after Inline
fn foo(_1: T, _2: i32) -> i32 {
- debug _t => _1; // in scope 0 at $DIR/inline_closure.rs:+0:17: +0:19
- debug q => _2; // in scope 0 at $DIR/inline_closure.rs:+0:24: +0:25
- let mut _0: i32; // return place in scope 0 at $DIR/inline_closure.rs:+0:35: +0:38
- let _3: [closure@foo<T>::{closure#0}]; // in scope 0 at $DIR/inline_closure.rs:+1:9: +1:10
- let mut _4: &[closure@foo<T>::{closure#0}]; // in scope 0 at $DIR/inline_closure.rs:+2:5: +2:6
- let mut _5: (i32, i32); // in scope 0 at $DIR/inline_closure.rs:+2:5: +2:12
- let mut _6: i32; // in scope 0 at $DIR/inline_closure.rs:+2:7: +2:8
- let mut _7: i32; // in scope 0 at $DIR/inline_closure.rs:+2:10: +2:11
- let mut _8: i32; // in scope 0 at $DIR/inline_closure.rs:+2:5: +2:12
- let mut _9: i32; // in scope 0 at $DIR/inline_closure.rs:+2:5: +2:12
+ debug _t => _1;
+ debug q => _2;
+ let mut _0: i32;
+ let _3: [closure@foo<T>::{closure#0}];
+ let mut _4: &[closure@foo<T>::{closure#0}];
+ let mut _5: (i32, i32);
+ let mut _6: i32;
+ let mut _7: i32;
+ let mut _8: i32;
+ let mut _9: i32;
scope 1 {
- debug x => _3; // in scope 1 at $DIR/inline_closure.rs:+1:9: +1:10
- scope 2 (inlined foo::<T>::{closure#0}) { // at $DIR/inline_closure.rs:12:5: 12:12
- debug _t => _8; // in scope 2 at $DIR/inline_closure.rs:+1:14: +1:16
- debug _q => _9; // in scope 2 at $DIR/inline_closure.rs:+1:18: +1:20
+ debug x => _3;
+ scope 2 (inlined foo::<T>::{closure#0}) {
+ debug _t => _8;
+ debug _q => _9;
}
}
bb0: {
- StorageLive(_3); // scope 0 at $DIR/inline_closure.rs:+1:9: +1:10
- _3 = [closure@foo::<T>::{closure#0}]; // scope 0 at $DIR/inline_closure.rs:+1:13: +1:24
- // closure
- // + def_id: DefId(0:6 ~ inline_closure[8f32]::foo::{closure#0})
- // + substs: [
- // T,
- // i8,
- // extern "rust-call" fn((i32, i32)) -> i32,
- // (),
- // ]
- StorageLive(_4); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:6
- _4 = &_3; // scope 1 at $DIR/inline_closure.rs:+2:5: +2:6
- StorageLive(_5); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
- StorageLive(_6); // scope 1 at $DIR/inline_closure.rs:+2:7: +2:8
- _6 = _2; // scope 1 at $DIR/inline_closure.rs:+2:7: +2:8
- StorageLive(_7); // scope 1 at $DIR/inline_closure.rs:+2:10: +2:11
- _7 = _2; // scope 1 at $DIR/inline_closure.rs:+2:10: +2:11
- _5 = (move _6, move _7); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
- StorageLive(_8); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
- _8 = move (_5.0: i32); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
- StorageLive(_9); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
- _9 = move (_5.1: i32); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
- _0 = _8; // scope 2 at $DIR/inline_closure.rs:+1:22: +1:24
- StorageDead(_9); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
- StorageDead(_8); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
- StorageDead(_7); // scope 1 at $DIR/inline_closure.rs:+2:11: +2:12
- StorageDead(_6); // scope 1 at $DIR/inline_closure.rs:+2:11: +2:12
- StorageDead(_5); // scope 1 at $DIR/inline_closure.rs:+2:11: +2:12
- StorageDead(_4); // scope 1 at $DIR/inline_closure.rs:+2:11: +2:12
- StorageDead(_3); // scope 0 at $DIR/inline_closure.rs:+3:1: +3:2
- return; // scope 0 at $DIR/inline_closure.rs:+3:2: +3:2
+ StorageLive(_3);
+ _3 = [closure@foo::<T>::{closure#0}];
+ StorageLive(_4);
+ _4 = &_3;
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = _2;
+ StorageLive(_7);
+ _7 = _2;
+ _5 = (move _6, move _7);
+ StorageLive(_8);
+ _8 = move (_5.0: i32);
+ StorageLive(_9);
+ _9 = move (_5.1: i32);
+ _0 = _8;
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ return;
}
}
diff --git a/tests/mir-opt/inline/inline_closure_borrows_arg.foo.Inline.after.mir b/tests/mir-opt/inline/inline_closure_borrows_arg.foo.Inline.after.mir
index 80274bb7e..17676638a 100644
--- a/tests/mir-opt/inline/inline_closure_borrows_arg.foo.Inline.after.mir
+++ b/tests/mir-opt/inline/inline_closure_borrows_arg.foo.Inline.after.mir
@@ -1,58 +1,50 @@
// MIR for `foo` after Inline
fn foo(_1: T, _2: &i32) -> i32 {
- debug _t => _1; // in scope 0 at $DIR/inline_closure_borrows_arg.rs:+0:17: +0:19
- debug q => _2; // in scope 0 at $DIR/inline_closure_borrows_arg.rs:+0:24: +0:25
- let mut _0: i32; // return place in scope 0 at $DIR/inline_closure_borrows_arg.rs:+0:36: +0:39
- let _3: [closure@foo<T>::{closure#0}]; // in scope 0 at $DIR/inline_closure_borrows_arg.rs:+1:9: +1:10
- let mut _4: &[closure@foo<T>::{closure#0}]; // in scope 0 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:6
- let mut _5: (&i32, &i32); // in scope 0 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
- let mut _6: &i32; // in scope 0 at $DIR/inline_closure_borrows_arg.rs:+5:7: +5:8
- let mut _7: &i32; // in scope 0 at $DIR/inline_closure_borrows_arg.rs:+5:10: +5:11
- let mut _8: &i32; // in scope 0 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
- let mut _9: &i32; // in scope 0 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
+ debug _t => _1;
+ debug q => _2;
+ let mut _0: i32;
+ let _3: [closure@foo<T>::{closure#0}];
+ let mut _4: &[closure@foo<T>::{closure#0}];
+ let mut _5: (&i32, &i32);
+ let mut _6: &i32;
+ let mut _7: &i32;
+ let mut _8: &i32;
+ let mut _9: &i32;
scope 1 {
- debug x => _3; // in scope 1 at $DIR/inline_closure_borrows_arg.rs:+1:9: +1:10
- scope 2 (inlined foo::<T>::{closure#0}) { // at $DIR/inline_closure_borrows_arg.rs:16:5: 16:12
- debug r => _8; // in scope 2 at $DIR/inline_closure_borrows_arg.rs:+1:14: +1:15
- debug _s => _9; // in scope 2 at $DIR/inline_closure_borrows_arg.rs:+1:23: +1:25
+ debug x => _3;
+ scope 2 (inlined foo::<T>::{closure#0}) {
+ debug r => _8;
+ debug _s => _9;
scope 3 {
- debug variable => _8; // in scope 3 at $DIR/inline_closure_borrows_arg.rs:+2:13: +2:21
+ debug variable => _8;
}
}
}
bb0: {
- StorageLive(_3); // scope 0 at $DIR/inline_closure_borrows_arg.rs:+1:9: +1:10
- _3 = [closure@foo::<T>::{closure#0}]; // scope 0 at $DIR/inline_closure_borrows_arg.rs:+1:13: +4:6
- // closure
- // + def_id: DefId(0:6 ~ inline_closure_borrows_arg[f89f]::foo::{closure#0})
- // + substs: [
- // T,
- // i8,
- // for<'a, 'b> extern "rust-call" fn((&'a i32, &'b i32)) -> i32,
- // (),
- // ]
- StorageLive(_4); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:6
- _4 = &_3; // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:6
- StorageLive(_5); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
- StorageLive(_6); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:7: +5:8
- _6 = &(*_2); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:7: +5:8
- StorageLive(_7); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:10: +5:11
- _7 = &(*_2); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:10: +5:11
- _5 = (move _6, move _7); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
- StorageLive(_8); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
- _8 = move (_5.0: &i32); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
- StorageLive(_9); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
- _9 = move (_5.1: &i32); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
- _0 = (*_8); // scope 3 at $DIR/inline_closure_borrows_arg.rs:+3:9: +3:18
- StorageDead(_9); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
- StorageDead(_8); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
- StorageDead(_7); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:11: +5:12
- StorageDead(_6); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:11: +5:12
- StorageDead(_5); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:11: +5:12
- StorageDead(_4); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:11: +5:12
- StorageDead(_3); // scope 0 at $DIR/inline_closure_borrows_arg.rs:+6:1: +6:2
- return; // scope 0 at $DIR/inline_closure_borrows_arg.rs:+6:2: +6:2
+ StorageLive(_3);
+ _3 = [closure@foo::<T>::{closure#0}];
+ StorageLive(_4);
+ _4 = &_3;
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = &(*_2);
+ StorageLive(_7);
+ _7 = &(*_2);
+ _5 = (move _6, move _7);
+ StorageLive(_8);
+ _8 = move (_5.0: &i32);
+ StorageLive(_9);
+ _9 = move (_5.1: &i32);
+ _0 = (*_8);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ return;
}
}
diff --git a/tests/mir-opt/inline/inline_closure_captures.foo.Inline.after.mir b/tests/mir-opt/inline/inline_closure_captures.foo.Inline.after.mir
index b36711f82..b8178d201 100644
--- a/tests/mir-opt/inline/inline_closure_captures.foo.Inline.after.mir
+++ b/tests/mir-opt/inline/inline_closure_captures.foo.Inline.after.mir
@@ -1,68 +1,60 @@
// MIR for `foo` after Inline
fn foo(_1: T, _2: i32) -> (i32, T) {
- debug t => _1; // in scope 0 at $DIR/inline_closure_captures.rs:+0:17: +0:18
- debug q => _2; // in scope 0 at $DIR/inline_closure_captures.rs:+0:23: +0:24
- let mut _0: (i32, T); // return place in scope 0 at $DIR/inline_closure_captures.rs:+0:34: +0:42
- let _3: [closure@foo<T>::{closure#0}]; // in scope 0 at $DIR/inline_closure_captures.rs:+1:9: +1:10
- let mut _4: &i32; // in scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
- let mut _5: &T; // in scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
- let mut _6: &[closure@foo<T>::{closure#0}]; // in scope 0 at $DIR/inline_closure_captures.rs:+2:5: +2:6
- let mut _7: (i32,); // in scope 0 at $DIR/inline_closure_captures.rs:+2:5: +2:9
- let mut _8: i32; // in scope 0 at $DIR/inline_closure_captures.rs:+2:7: +2:8
- let mut _9: i32; // in scope 0 at $DIR/inline_closure_captures.rs:+2:5: +2:9
+ debug t => _1;
+ debug q => _2;
+ let mut _0: (i32, T);
+ let _3: [closure@foo<T>::{closure#0}];
+ let mut _4: &i32;
+ let mut _5: &T;
+ let mut _6: &[closure@foo<T>::{closure#0}];
+ let mut _7: (i32,);
+ let mut _8: i32;
+ let mut _9: i32;
scope 1 {
- debug x => _3; // in scope 1 at $DIR/inline_closure_captures.rs:+1:9: +1:10
- scope 2 (inlined foo::<T>::{closure#0}) { // at $DIR/inline_closure_captures.rs:12:5: 12:9
- debug _q => _9; // in scope 2 at $DIR/inline_closure_captures.rs:+1:14: +1:16
- debug q => (*((*_6).0: &i32)); // in scope 2 at $DIR/inline_closure_captures.rs:+0:23: +0:24
- debug t => (*((*_6).1: &T)); // in scope 2 at $DIR/inline_closure_captures.rs:+0:17: +0:18
- let mut _10: i32; // in scope 2 at $DIR/inline_closure_captures.rs:+1:19: +1:20
- let mut _11: T; // in scope 2 at $DIR/inline_closure_captures.rs:+1:22: +1:23
- let mut _12: &i32; // in scope 2 at $DIR/inline_closure_captures.rs:+1:13: +1:24
- let mut _13: &T; // in scope 2 at $DIR/inline_closure_captures.rs:+1:13: +1:24
+ debug x => _3;
+ scope 2 (inlined foo::<T>::{closure#0}) {
+ debug _q => _9;
+ debug q => (*((*_6).0: &i32));
+ debug t => (*((*_6).1: &T));
+ let mut _10: &i32;
+ let mut _11: i32;
+ let mut _12: &T;
+ let mut _13: T;
}
}
bb0: {
- StorageLive(_3); // scope 0 at $DIR/inline_closure_captures.rs:+1:9: +1:10
- StorageLive(_4); // scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
- _4 = &_2; // scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
- StorageLive(_5); // scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
- _5 = &_1; // scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
- _3 = [closure@foo::<T>::{closure#0}] { q: move _4, t: move _5 }; // scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
- // closure
- // + def_id: DefId(0:6 ~ inline_closure_captures[63a5]::foo::{closure#0})
- // + substs: [
- // T,
- // i8,
- // extern "rust-call" fn((i32,)) -> (i32, T),
- // (&i32, &T),
- // ]
- StorageDead(_5); // scope 0 at $DIR/inline_closure_captures.rs:+1:16: +1:17
- StorageDead(_4); // scope 0 at $DIR/inline_closure_captures.rs:+1:16: +1:17
- StorageLive(_6); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:6
- _6 = &_3; // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:6
- StorageLive(_7); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:9
- StorageLive(_8); // scope 1 at $DIR/inline_closure_captures.rs:+2:7: +2:8
- _8 = _2; // scope 1 at $DIR/inline_closure_captures.rs:+2:7: +2:8
- _7 = (move _8,); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:9
- StorageLive(_9); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:9
- _9 = move (_7.0: i32); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:9
- StorageLive(_10); // scope 2 at $DIR/inline_closure_captures.rs:+1:19: +1:20
- _12 = deref_copy ((*_6).0: &i32); // scope 2 at $DIR/inline_closure_captures.rs:+1:19: +1:20
- _10 = (*_12); // scope 2 at $DIR/inline_closure_captures.rs:+1:19: +1:20
- StorageLive(_11); // scope 2 at $DIR/inline_closure_captures.rs:+1:22: +1:23
- _13 = deref_copy ((*_6).1: &T); // scope 2 at $DIR/inline_closure_captures.rs:+1:22: +1:23
- _11 = (*_13); // scope 2 at $DIR/inline_closure_captures.rs:+1:22: +1:23
- _0 = (move _10, move _11); // scope 2 at $DIR/inline_closure_captures.rs:+1:18: +1:24
- StorageDead(_11); // scope 2 at $DIR/inline_closure_captures.rs:+1:23: +1:24
- StorageDead(_10); // scope 2 at $DIR/inline_closure_captures.rs:+1:23: +1:24
- StorageDead(_9); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:9
- StorageDead(_8); // scope 1 at $DIR/inline_closure_captures.rs:+2:8: +2:9
- StorageDead(_7); // scope 1 at $DIR/inline_closure_captures.rs:+2:8: +2:9
- StorageDead(_6); // scope 1 at $DIR/inline_closure_captures.rs:+2:8: +2:9
- StorageDead(_3); // scope 0 at $DIR/inline_closure_captures.rs:+3:1: +3:2
- return; // scope 0 at $DIR/inline_closure_captures.rs:+3:2: +3:2
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &_2;
+ StorageLive(_5);
+ _5 = &_1;
+ _3 = [closure@foo::<T>::{closure#0}] { q: move _4, t: move _5 };
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_6);
+ _6 = &_3;
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = _2;
+ _7 = (move _8,);
+ StorageLive(_9);
+ _9 = move (_7.0: i32);
+ StorageLive(_11);
+ _10 = deref_copy ((*_6).0: &i32);
+ _11 = (*_10);
+ StorageLive(_13);
+ _12 = deref_copy ((*_6).1: &T);
+ _13 = (*_12);
+ _0 = (move _11, move _13);
+ StorageDead(_13);
+ StorageDead(_11);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_3);
+ return;
}
}
diff --git a/tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.diff b/tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.diff
deleted file mode 100644
index e30a5e116..000000000
--- a/tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.diff
+++ /dev/null
@@ -1,24 +0,0 @@
-- // MIR for `inlined_no_sanitize` before Inline
-+ // MIR for `inlined_no_sanitize` after Inline
-
- fn inlined_no_sanitize() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_compatibility.rs:+0:37: +0:37
- let _1: (); // in scope 0 at $DIR/inline_compatibility.rs:+1:5: +1:18
-+ scope 1 (inlined no_sanitize) { // at $DIR/inline_compatibility.rs:24:5: 24:18
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_compatibility.rs:+1:5: +1:18
-- _1 = no_sanitize() -> bb1; // scope 0 at $DIR/inline_compatibility.rs:+1:5: +1:18
-- // mir::Constant
-- // + span: $DIR/inline_compatibility.rs:24:5: 24:16
-- // + literal: Const { ty: unsafe fn() {no_sanitize}, val: Value(<ZST>) }
-- }
--
-- bb1: {
- StorageDead(_1); // scope 0 at $DIR/inline_compatibility.rs:+1:18: +1:19
- _0 = const (); // scope 0 at $DIR/inline_compatibility.rs:+0:37: +2:2
- return; // scope 0 at $DIR/inline_compatibility.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.panic-abort.diff
new file mode 100644
index 000000000..eac51000c
--- /dev/null
+++ b/tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.panic-abort.diff
@@ -0,0 +1,21 @@
+- // MIR for `inlined_no_sanitize` before Inline
++ // MIR for `inlined_no_sanitize` after Inline
+
+ fn inlined_no_sanitize() -> () {
+ let mut _0: ();
+ let _1: ();
++ scope 1 (inlined no_sanitize) {
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = no_sanitize() -> [return: bb1, unwind unreachable];
+- }
+-
+- bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.panic-unwind.diff
new file mode 100644
index 000000000..eba5ad9cf
--- /dev/null
+++ b/tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.panic-unwind.diff
@@ -0,0 +1,21 @@
+- // MIR for `inlined_no_sanitize` before Inline
++ // MIR for `inlined_no_sanitize` after Inline
+
+ fn inlined_no_sanitize() -> () {
+ let mut _0: ();
+ let _1: ();
++ scope 1 (inlined no_sanitize) {
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = no_sanitize() -> [return: bb1, unwind continue];
+- }
+-
+- bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.diff b/tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.diff
deleted file mode 100644
index c2b3c46a3..000000000
--- a/tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.diff
+++ /dev/null
@@ -1,24 +0,0 @@
-- // MIR for `inlined_target_feature` before Inline
-+ // MIR for `inlined_target_feature` after Inline
-
- fn inlined_target_feature() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_compatibility.rs:+0:40: +0:40
- let _1: (); // in scope 0 at $DIR/inline_compatibility.rs:+1:5: +1:21
-+ scope 1 (inlined target_feature) { // at $DIR/inline_compatibility.rs:13:5: 13:21
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_compatibility.rs:+1:5: +1:21
-- _1 = target_feature() -> bb1; // scope 0 at $DIR/inline_compatibility.rs:+1:5: +1:21
-- // mir::Constant
-- // + span: $DIR/inline_compatibility.rs:13:5: 13:19
-- // + literal: Const { ty: unsafe fn() {target_feature}, val: Value(<ZST>) }
-- }
--
-- bb1: {
- StorageDead(_1); // scope 0 at $DIR/inline_compatibility.rs:+1:21: +1:22
- _0 = const (); // scope 0 at $DIR/inline_compatibility.rs:+0:40: +2:2
- return; // scope 0 at $DIR/inline_compatibility.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.panic-abort.diff
new file mode 100644
index 000000000..c2a81b980
--- /dev/null
+++ b/tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.panic-abort.diff
@@ -0,0 +1,21 @@
+- // MIR for `inlined_target_feature` before Inline
++ // MIR for `inlined_target_feature` after Inline
+
+ fn inlined_target_feature() -> () {
+ let mut _0: ();
+ let _1: ();
++ scope 1 (inlined target_feature) {
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = target_feature() -> [return: bb1, unwind unreachable];
+- }
+-
+- bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.panic-unwind.diff
new file mode 100644
index 000000000..24457819b
--- /dev/null
+++ b/tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.panic-unwind.diff
@@ -0,0 +1,21 @@
+- // MIR for `inlined_target_feature` before Inline
++ // MIR for `inlined_target_feature` after Inline
+
+ fn inlined_target_feature() -> () {
+ let mut _0: ();
+ let _1: ();
++ scope 1 (inlined target_feature) {
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = target_feature() -> [return: bb1, unwind continue];
+- }
+-
+- bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.diff b/tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.diff
deleted file mode 100644
index 0ca5a5f70..000000000
--- a/tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-- // MIR for `not_inlined_c_variadic` before Inline
-+ // MIR for `not_inlined_c_variadic` after Inline
-
- fn not_inlined_c_variadic() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_compatibility.rs:+0:40: +0:40
- let _1: u32; // in scope 0 at $DIR/inline_compatibility.rs:+1:9: +1:10
- scope 1 {
- debug s => _1; // in scope 1 at $DIR/inline_compatibility.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_compatibility.rs:+1:9: +1:10
- _1 = sum(const 4_u32, const 4_u32, const 30_u32, const 200_u32, const 1000_u32) -> bb1; // scope 0 at $DIR/inline_compatibility.rs:+1:13: +1:52
- // mir::Constant
- // + span: $DIR/inline_compatibility.rs:42:13: 42:16
- // + literal: Const { ty: unsafe extern "C" fn(u32, ...) -> u32 {sum}, val: Value(<ZST>) }
- }
-
- bb1: {
- _0 = const (); // scope 0 at $DIR/inline_compatibility.rs:+0:40: +2:2
- StorageDead(_1); // scope 0 at $DIR/inline_compatibility.rs:+2:1: +2:2
- return; // scope 0 at $DIR/inline_compatibility.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.panic-abort.diff
new file mode 100644
index 000000000..791c5a0f2
--- /dev/null
+++ b/tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.panic-abort.diff
@@ -0,0 +1,22 @@
+- // MIR for `not_inlined_c_variadic` before Inline
++ // MIR for `not_inlined_c_variadic` after Inline
+
+ fn not_inlined_c_variadic() -> () {
+ let mut _0: ();
+ let _1: u32;
+ scope 1 {
+ debug s => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = sum(const 4_u32, const 4_u32, const 30_u32, const 200_u32, const 1000_u32) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.panic-unwind.diff
new file mode 100644
index 000000000..364acab6d
--- /dev/null
+++ b/tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.panic-unwind.diff
@@ -0,0 +1,22 @@
+- // MIR for `not_inlined_c_variadic` before Inline
++ // MIR for `not_inlined_c_variadic` after Inline
+
+ fn not_inlined_c_variadic() -> () {
+ let mut _0: ();
+ let _1: u32;
+ scope 1 {
+ debug s => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = sum(const 4_u32, const 4_u32, const 30_u32, const 200_u32, const 1000_u32) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.diff b/tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.diff
deleted file mode 100644
index 00d405c77..000000000
--- a/tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.diff
+++ /dev/null
@@ -1,22 +0,0 @@
-- // MIR for `not_inlined_no_sanitize` before Inline
-+ // MIR for `not_inlined_no_sanitize` after Inline
-
- fn not_inlined_no_sanitize() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_compatibility.rs:+0:41: +0:41
- let _1: (); // in scope 0 at $DIR/inline_compatibility.rs:+1:5: +1:18
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_compatibility.rs:+1:5: +1:18
- _1 = no_sanitize() -> bb1; // scope 0 at $DIR/inline_compatibility.rs:+1:5: +1:18
- // mir::Constant
- // + span: $DIR/inline_compatibility.rs:29:5: 29:16
- // + literal: Const { ty: unsafe fn() {no_sanitize}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_1); // scope 0 at $DIR/inline_compatibility.rs:+1:18: +1:19
- _0 = const (); // scope 0 at $DIR/inline_compatibility.rs:+0:41: +2:2
- return; // scope 0 at $DIR/inline_compatibility.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.panic-abort.diff
new file mode 100644
index 000000000..b9d0946b7
--- /dev/null
+++ b/tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.panic-abort.diff
@@ -0,0 +1,19 @@
+- // MIR for `not_inlined_no_sanitize` before Inline
++ // MIR for `not_inlined_no_sanitize` after Inline
+
+ fn not_inlined_no_sanitize() -> () {
+ let mut _0: ();
+ let _1: ();
+
+ bb0: {
+ StorageLive(_1);
+ _1 = no_sanitize() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.panic-unwind.diff
new file mode 100644
index 000000000..965b7ddca
--- /dev/null
+++ b/tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.panic-unwind.diff
@@ -0,0 +1,19 @@
+- // MIR for `not_inlined_no_sanitize` before Inline
++ // MIR for `not_inlined_no_sanitize` after Inline
+
+ fn not_inlined_no_sanitize() -> () {
+ let mut _0: ();
+ let _1: ();
+
+ bb0: {
+ StorageLive(_1);
+ _1 = no_sanitize() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.diff b/tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.diff
deleted file mode 100644
index 8b9c86f55..000000000
--- a/tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.diff
+++ /dev/null
@@ -1,22 +0,0 @@
-- // MIR for `not_inlined_target_feature` before Inline
-+ // MIR for `not_inlined_target_feature` after Inline
-
- fn not_inlined_target_feature() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_compatibility.rs:+0:44: +0:44
- let _1: (); // in scope 0 at $DIR/inline_compatibility.rs:+1:5: +1:21
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_compatibility.rs:+1:5: +1:21
- _1 = target_feature() -> bb1; // scope 0 at $DIR/inline_compatibility.rs:+1:5: +1:21
- // mir::Constant
- // + span: $DIR/inline_compatibility.rs:18:5: 18:19
- // + literal: Const { ty: unsafe fn() {target_feature}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_1); // scope 0 at $DIR/inline_compatibility.rs:+1:21: +1:22
- _0 = const (); // scope 0 at $DIR/inline_compatibility.rs:+0:44: +2:2
- return; // scope 0 at $DIR/inline_compatibility.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.panic-abort.diff
new file mode 100644
index 000000000..7c689a734
--- /dev/null
+++ b/tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.panic-abort.diff
@@ -0,0 +1,19 @@
+- // MIR for `not_inlined_target_feature` before Inline
++ // MIR for `not_inlined_target_feature` after Inline
+
+ fn not_inlined_target_feature() -> () {
+ let mut _0: ();
+ let _1: ();
+
+ bb0: {
+ StorageLive(_1);
+ _1 = target_feature() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.panic-unwind.diff
new file mode 100644
index 000000000..bcdbd6e33
--- /dev/null
+++ b/tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.panic-unwind.diff
@@ -0,0 +1,19 @@
+- // MIR for `not_inlined_target_feature` before Inline
++ // MIR for `not_inlined_target_feature` after Inline
+
+ fn not_inlined_target_feature() -> () {
+ let mut _0: ();
+ let _1: ();
+
+ bb0: {
+ StorageLive(_1);
+ _1 = target_feature() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_compatibility.rs b/tests/mir-opt/inline/inline_compatibility.rs
index 30aff0a64..1527fea1c 100644
--- a/tests/mir-opt/inline/inline_compatibility.rs
+++ b/tests/mir-opt/inline/inline_compatibility.rs
@@ -1,6 +1,7 @@
// Checks that only functions with compatible attributes are inlined.
//
// only-x86_64
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![crate_type = "lib"]
#![feature(no_sanitize)]
diff --git a/tests/mir-opt/inline/inline_cycle.one.Inline.diff b/tests/mir-opt/inline/inline_cycle.one.Inline.diff
deleted file mode 100644
index f6ba69a1d..000000000
--- a/tests/mir-opt/inline/inline_cycle.one.Inline.diff
+++ /dev/null
@@ -1,30 +0,0 @@
-- // MIR for `one` before Inline
-+ // MIR for `one` after Inline
-
- fn one() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_cycle.rs:+0:10: +0:10
- let _1: (); // in scope 0 at $DIR/inline_cycle.rs:+1:5: +1:24
-+ scope 1 (inlined <C as Call>::call) { // at $DIR/inline_cycle.rs:15:5: 15:24
-+ scope 2 (inlined <A<C> as Call>::call) { // at $DIR/inline_cycle.rs:44:9: 44:23
-+ scope 3 (inlined <B<C> as Call>::call) { // at $DIR/inline_cycle.rs:29:9: 29:31
-+ }
-+ }
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:24
-- _1 = <C as Call>::call() -> bb1; // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:24
-+ _1 = <C as Call>::call() -> bb1; // scope 3 at $DIR/inline_cycle.rs:37:9: 37:28
- // mir::Constant
-- // + span: $DIR/inline_cycle.rs:15:5: 15:22
-+ // + span: $DIR/inline_cycle.rs:37:9: 37:26
- // + literal: Const { ty: fn() {<C as Call>::call}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_1); // scope 0 at $DIR/inline_cycle.rs:+1:24: +1:25
- _0 = const (); // scope 0 at $DIR/inline_cycle.rs:+0:10: +2:2
- return; // scope 0 at $DIR/inline_cycle.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_cycle.one.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_cycle.one.Inline.panic-abort.diff
new file mode 100644
index 000000000..c8805a446
--- /dev/null
+++ b/tests/mir-opt/inline/inline_cycle.one.Inline.panic-abort.diff
@@ -0,0 +1,25 @@
+- // MIR for `one` before Inline
++ // MIR for `one` after Inline
+
+ fn one() -> () {
+ let mut _0: ();
+ let _1: ();
++ scope 1 (inlined <C as Call>::call) {
++ scope 2 (inlined <A<C> as Call>::call) {
++ scope 3 (inlined <B<C> as Call>::call) {
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = <C as Call>::call() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_cycle.one.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_cycle.one.Inline.panic-unwind.diff
new file mode 100644
index 000000000..75ac40bea
--- /dev/null
+++ b/tests/mir-opt/inline/inline_cycle.one.Inline.panic-unwind.diff
@@ -0,0 +1,25 @@
+- // MIR for `one` before Inline
++ // MIR for `one` after Inline
+
+ fn one() -> () {
+ let mut _0: ();
+ let _1: ();
++ scope 1 (inlined <C as Call>::call) {
++ scope 2 (inlined <A<C> as Call>::call) {
++ scope 3 (inlined <B<C> as Call>::call) {
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = <C as Call>::call() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_cycle.rs b/tests/mir-opt/inline/inline_cycle.rs
index 2f81696cf..42a6914c9 100644
--- a/tests/mir-opt/inline/inline_cycle.rs
+++ b/tests/mir-opt/inline/inline_cycle.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Check that inliner handles various forms of recursion and doesn't fall into
// an infinite inlining cycle. The particular outcome of inlining is not
// crucial otherwise.
diff --git a/tests/mir-opt/inline/inline_cycle.two.Inline.diff b/tests/mir-opt/inline/inline_cycle.two.Inline.diff
deleted file mode 100644
index c8f58111d..000000000
--- a/tests/mir-opt/inline/inline_cycle.two.Inline.diff
+++ /dev/null
@@ -1,42 +0,0 @@
-- // MIR for `two` before Inline
-+ // MIR for `two` after Inline
-
- fn two() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_cycle.rs:+0:10: +0:10
- let _1: (); // in scope 0 at $DIR/inline_cycle.rs:+1:5: +1:12
-+ let mut _2: fn() {f}; // in scope 0 at $DIR/inline_cycle.rs:+1:5: +1:12
-+ let mut _4: (); // in scope 0 at $DIR/inline_cycle.rs:55:5: 55:8
-+ scope 1 (inlined call::<fn() {f}>) { // at $DIR/inline_cycle.rs:50:5: 50:12
-+ debug f => _2; // in scope 1 at $DIR/inline_cycle.rs:54:22: 54:23
-+ let _3: (); // in scope 1 at $DIR/inline_cycle.rs:55:5: 55:8
-+ scope 2 (inlined <fn() {f} as FnOnce<()>>::call_once - shim(fn() {f})) { // at $DIR/inline_cycle.rs:55:5: 55:8
-+ }
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:12
-- _1 = call::<fn() {f}>(f) -> bb1; // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:12
-+ StorageLive(_2); // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:12
-+ _2 = f; // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:12
- // mir::Constant
-- // + span: $DIR/inline_cycle.rs:50:5: 50:9
-- // + literal: Const { ty: fn(fn() {f}) {call::<fn() {f}>}, val: Value(<ZST>) }
-- // mir::Constant
- // + span: $DIR/inline_cycle.rs:50:10: 50:11
- // + literal: Const { ty: fn() {f}, val: Value(<ZST>) }
-+ StorageLive(_3); // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:12
-+ StorageLive(_4); // scope 1 at $DIR/inline_cycle.rs:55:5: 55:8
-+ _4 = const (); // scope 1 at $DIR/inline_cycle.rs:55:5: 55:8
-+ _3 = move _2() -> bb1; // scope 2 at $SRC_DIR/core/src/ops/function.rs:LL:COL
- }
-
- bb1: {
-+ StorageDead(_4); // scope 1 at $DIR/inline_cycle.rs:55:5: 55:8
-+ StorageDead(_3); // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:12
-+ StorageDead(_2); // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:12
- StorageDead(_1); // scope 0 at $DIR/inline_cycle.rs:+1:12: +1:13
- _0 = const (); // scope 0 at $DIR/inline_cycle.rs:+0:10: +2:2
- return; // scope 0 at $DIR/inline_cycle.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_cycle.two.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_cycle.two.Inline.panic-abort.diff
new file mode 100644
index 000000000..d83c8d585
--- /dev/null
+++ b/tests/mir-opt/inline/inline_cycle.two.Inline.panic-abort.diff
@@ -0,0 +1,46 @@
+- // MIR for `two` before Inline
++ // MIR for `two` after Inline
+
+ fn two() -> () {
+ let mut _0: ();
+ let _1: ();
++ let mut _2: fn() {f};
++ let mut _4: ();
++ scope 1 (inlined call::<fn() {f}>) {
++ debug f => _2;
++ let _3: ();
++ scope 2 (inlined <fn() {f} as FnOnce<()>>::call_once - shim(fn() {f})) {
++ scope 3 (inlined f) {
++ scope 4 (inlined call::<fn() {f}>) {
++ debug f => f;
++ let _5: ();
++ scope 5 (inlined <fn() {f} as FnOnce<()>>::call_once - shim(fn() {f})) {
++ }
++ }
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = call::<fn() {f}>(f) -> [return: bb1, unwind unreachable];
++ StorageLive(_2);
++ _2 = f;
++ StorageLive(_3);
++ StorageLive(_4);
++ _4 = const ();
++ StorageLive(_5);
++ _5 = f() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
++ StorageDead(_5);
++ StorageDead(_4);
++ StorageDead(_3);
++ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_cycle.two.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_cycle.two.Inline.panic-unwind.diff
new file mode 100644
index 000000000..a08662959
--- /dev/null
+++ b/tests/mir-opt/inline/inline_cycle.two.Inline.panic-unwind.diff
@@ -0,0 +1,46 @@
+- // MIR for `two` before Inline
++ // MIR for `two` after Inline
+
+ fn two() -> () {
+ let mut _0: ();
+ let _1: ();
++ let mut _2: fn() {f};
++ let mut _4: ();
++ scope 1 (inlined call::<fn() {f}>) {
++ debug f => _2;
++ let _3: ();
++ scope 2 (inlined <fn() {f} as FnOnce<()>>::call_once - shim(fn() {f})) {
++ scope 3 (inlined f) {
++ scope 4 (inlined call::<fn() {f}>) {
++ debug f => f;
++ let _5: ();
++ scope 5 (inlined <fn() {f} as FnOnce<()>>::call_once - shim(fn() {f})) {
++ }
++ }
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = call::<fn() {f}>(f) -> [return: bb1, unwind continue];
++ StorageLive(_2);
++ _2 = f;
++ StorageLive(_3);
++ StorageLive(_4);
++ _4 = const ();
++ StorageLive(_5);
++ _5 = f() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
++ StorageDead(_5);
++ StorageDead(_4);
++ StorageDead(_3);
++ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_cycle_generic.main.Inline.diff b/tests/mir-opt/inline/inline_cycle_generic.main.Inline.diff
deleted file mode 100644
index 9429ca593..000000000
--- a/tests/mir-opt/inline/inline_cycle_generic.main.Inline.diff
+++ /dev/null
@@ -1,29 +0,0 @@
-- // MIR for `main` before Inline
-+ // MIR for `main` after Inline
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_cycle_generic.rs:+0:11: +0:11
- let _1: (); // in scope 0 at $DIR/inline_cycle_generic.rs:+1:5: +1:24
-+ scope 1 (inlined <C as Call>::call) { // at $DIR/inline_cycle_generic.rs:10:5: 10:24
-+ scope 2 (inlined <B<A> as Call>::call) { // at $DIR/inline_cycle_generic.rs:39:9: 39:31
-+ }
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_cycle_generic.rs:+1:5: +1:24
-- _1 = <C as Call>::call() -> bb1; // scope 0 at $DIR/inline_cycle_generic.rs:+1:5: +1:24
-+ _1 = <A as Call>::call() -> bb1; // scope 2 at $DIR/inline_cycle_generic.rs:32:9: 32:28
- // mir::Constant
-- // + span: $DIR/inline_cycle_generic.rs:10:5: 10:22
-- // + literal: Const { ty: fn() {<C as Call>::call}, val: Value(<ZST>) }
-+ // + span: $DIR/inline_cycle_generic.rs:32:9: 32:26
-+ // + literal: Const { ty: fn() {<A as Call>::call}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_1); // scope 0 at $DIR/inline_cycle_generic.rs:+1:24: +1:25
- _0 = const (); // scope 0 at $DIR/inline_cycle_generic.rs:+0:11: +2:2
- return; // scope 0 at $DIR/inline_cycle_generic.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_cycle_generic.main.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_cycle_generic.main.Inline.panic-abort.diff
new file mode 100644
index 000000000..d437dbf57
--- /dev/null
+++ b/tests/mir-opt/inline/inline_cycle_generic.main.Inline.panic-abort.diff
@@ -0,0 +1,26 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
++ scope 1 (inlined <C as Call>::call) {
++ scope 2 (inlined <B<A> as Call>::call) {
++ scope 3 (inlined <A as Call>::call) {
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = <C as Call>::call() -> [return: bb1, unwind unreachable];
++ _1 = <B<C> as Call>::call() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_cycle_generic.main.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_cycle_generic.main.Inline.panic-unwind.diff
new file mode 100644
index 000000000..8314526ee
--- /dev/null
+++ b/tests/mir-opt/inline/inline_cycle_generic.main.Inline.panic-unwind.diff
@@ -0,0 +1,26 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
++ scope 1 (inlined <C as Call>::call) {
++ scope 2 (inlined <B<A> as Call>::call) {
++ scope 3 (inlined <A as Call>::call) {
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = <C as Call>::call() -> [return: bb1, unwind continue];
++ _1 = <B<C> as Call>::call() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_cycle_generic.rs b/tests/mir-opt/inline/inline_cycle_generic.rs
index 84e6e4005..ef261b04c 100644
--- a/tests/mir-opt/inline/inline_cycle_generic.rs
+++ b/tests/mir-opt/inline/inline_cycle_generic.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Check that inliner handles various forms of recursion and doesn't fall into
// an infinite inlining cycle. The particular outcome of inlining is not
// crucial otherwise.
diff --git a/tests/mir-opt/inline/inline_diverging.f.Inline.diff b/tests/mir-opt/inline/inline_diverging.f.Inline.diff
deleted file mode 100644
index b49191f49..000000000
--- a/tests/mir-opt/inline/inline_diverging.f.Inline.diff
+++ /dev/null
@@ -1,24 +0,0 @@
-- // MIR for `f` before Inline
-+ // MIR for `f` after Inline
-
- fn f() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_diverging.rs:+0:12: +0:12
- let mut _1: !; // in scope 0 at $DIR/inline_diverging.rs:+0:12: +2:2
- let _2: !; // in scope 0 at $DIR/inline_diverging.rs:+1:5: +1:12
-+ scope 1 (inlined sleep) { // at $DIR/inline_diverging.rs:8:5: 8:12
-+ }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:12
-- _2 = sleep(); // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:12
-- // mir::Constant
-- // + span: $DIR/inline_diverging.rs:8:5: 8:10
-- // + literal: Const { ty: fn() -> ! {sleep}, val: Value(<ZST>) }
-+ goto -> bb1; // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:12
-+ }
-+
-+ bb1: {
-+ goto -> bb1; // scope 1 at $DIR/inline_diverging.rs:39:5: 39:12
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_diverging.f.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_diverging.f.Inline.panic-abort.diff
new file mode 100644
index 000000000..3de72d03c
--- /dev/null
+++ b/tests/mir-opt/inline/inline_diverging.f.Inline.panic-abort.diff
@@ -0,0 +1,21 @@
+- // MIR for `f` before Inline
++ // MIR for `f` after Inline
+
+ fn f() -> () {
+ let mut _0: ();
+ let mut _1: !;
+ let _2: !;
++ scope 1 (inlined sleep) {
++ }
+
+ bb0: {
+ StorageLive(_2);
+- _2 = sleep() -> unwind unreachable;
++ goto -> bb1;
++ }
++
++ bb1: {
++ goto -> bb1;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_diverging.f.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_diverging.f.Inline.panic-unwind.diff
new file mode 100644
index 000000000..b79918992
--- /dev/null
+++ b/tests/mir-opt/inline/inline_diverging.f.Inline.panic-unwind.diff
@@ -0,0 +1,21 @@
+- // MIR for `f` before Inline
++ // MIR for `f` after Inline
+
+ fn f() -> () {
+ let mut _0: ();
+ let mut _1: !;
+ let _2: !;
++ scope 1 (inlined sleep) {
++ }
+
+ bb0: {
+ StorageLive(_2);
+- _2 = sleep() -> unwind continue;
++ goto -> bb1;
++ }
++
++ bb1: {
++ goto -> bb1;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_diverging.g.Inline.diff b/tests/mir-opt/inline/inline_diverging.g.Inline.diff
deleted file mode 100644
index 4f22ad437..000000000
--- a/tests/mir-opt/inline/inline_diverging.g.Inline.diff
+++ /dev/null
@@ -1,49 +0,0 @@
-- // MIR for `g` before Inline
-+ // MIR for `g` after Inline
-
- fn g(_1: i32) -> u32 {
- debug i => _1; // in scope 0 at $DIR/inline_diverging.rs:+0:10: +0:11
- let mut _0: u32; // return place in scope 0 at $DIR/inline_diverging.rs:+0:21: +0:24
- let mut _2: bool; // in scope 0 at $DIR/inline_diverging.rs:+1:8: +1:13
- let mut _3: i32; // in scope 0 at $DIR/inline_diverging.rs:+1:8: +1:9
- let mut _4: i32; // in scope 0 at $DIR/inline_diverging.rs:+2:9: +2:10
- let mut _5: !; // in scope 0 at $DIR/inline_diverging.rs:+3:12: +5:6
- let _6: !; // in scope 0 at $DIR/inline_diverging.rs:+4:9: +4:16
-+ scope 1 (inlined panic) { // at $DIR/inline_diverging.rs:16:9: 16:16
-+ let mut _7: !; // in scope 1 at $SRC_DIR/std/src/panic.rs:LL:COL
-+ }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/inline_diverging.rs:+1:8: +1:13
- StorageLive(_3); // scope 0 at $DIR/inline_diverging.rs:+1:8: +1:9
- _3 = _1; // scope 0 at $DIR/inline_diverging.rs:+1:8: +1:9
- _2 = Gt(move _3, const 0_i32); // scope 0 at $DIR/inline_diverging.rs:+1:8: +1:13
- StorageDead(_3); // scope 0 at $DIR/inline_diverging.rs:+1:12: +1:13
- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/inline_diverging.rs:+1:8: +1:13
- }
-
- bb1: {
- StorageLive(_4); // scope 0 at $DIR/inline_diverging.rs:+2:9: +2:10
- _4 = _1; // scope 0 at $DIR/inline_diverging.rs:+2:9: +2:10
- _0 = move _4 as u32 (IntToInt); // scope 0 at $DIR/inline_diverging.rs:+2:9: +2:17
- StorageDead(_4); // scope 0 at $DIR/inline_diverging.rs:+2:16: +2:17
- StorageDead(_2); // scope 0 at $DIR/inline_diverging.rs:+5:5: +5:6
- return; // scope 0 at $DIR/inline_diverging.rs:+6:2: +6:2
- }
-
- bb2: {
- StorageLive(_6); // scope 0 at $DIR/inline_diverging.rs:+4:9: +4:16
-- _6 = panic(); // scope 0 at $DIR/inline_diverging.rs:+4:9: +4:16
-+ StorageLive(_7); // scope 0 at $DIR/inline_diverging.rs:+4:9: +4:16
-+ _7 = begin_panic::<&str>(const "explicit panic"); // scope 1 at $SRC_DIR/std/src/panic.rs:LL:COL
- // mir::Constant
-- // + span: $DIR/inline_diverging.rs:16:9: 16:14
-- // + literal: Const { ty: fn() -> ! {panic}, val: Value(<ZST>) }
-+ // + span: $SRC_DIR/std/src/panic.rs:LL:COL
-+ // + literal: Const { ty: fn(&str) -> ! {begin_panic::<&str>}, val: Value(<ZST>) }
-+ // mir::Constant
-+ // + span: $SRC_DIR/std/src/panic.rs:LL:COL
-+ // + literal: Const { ty: &str, val: Value(Slice(..)) }
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_diverging.g.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_diverging.g.Inline.panic-abort.diff
new file mode 100644
index 000000000..9db0d385d
--- /dev/null
+++ b/tests/mir-opt/inline/inline_diverging.g.Inline.panic-abort.diff
@@ -0,0 +1,41 @@
+- // MIR for `g` before Inline
++ // MIR for `g` after Inline
+
+ fn g(_1: i32) -> u32 {
+ debug i => _1;
+ let mut _0: u32;
+ let mut _2: bool;
+ let mut _3: i32;
+ let mut _4: i32;
+ let mut _5: !;
+ let _6: !;
++ scope 1 (inlined panic) {
++ let mut _7: !;
++ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = Gt(move _3, const 0_i32);
+ StorageDead(_3);
+ switchInt(move _2) -> [0: bb2, otherwise: bb1];
+ }
+
+ bb1: {
+ StorageLive(_4);
+ _4 = _1;
+ _0 = move _4 as u32 (IntToInt);
+ StorageDead(_4);
+ StorageDead(_2);
+ return;
+ }
+
+ bb2: {
+ StorageLive(_6);
+- _6 = panic() -> unwind unreachable;
++ StorageLive(_7);
++ _7 = begin_panic::<&str>(const "explicit panic") -> unwind unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_diverging.g.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_diverging.g.Inline.panic-unwind.diff
new file mode 100644
index 000000000..5663b4624
--- /dev/null
+++ b/tests/mir-opt/inline/inline_diverging.g.Inline.panic-unwind.diff
@@ -0,0 +1,41 @@
+- // MIR for `g` before Inline
++ // MIR for `g` after Inline
+
+ fn g(_1: i32) -> u32 {
+ debug i => _1;
+ let mut _0: u32;
+ let mut _2: bool;
+ let mut _3: i32;
+ let mut _4: i32;
+ let mut _5: !;
+ let _6: !;
++ scope 1 (inlined panic) {
++ let mut _7: !;
++ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = Gt(move _3, const 0_i32);
+ StorageDead(_3);
+ switchInt(move _2) -> [0: bb2, otherwise: bb1];
+ }
+
+ bb1: {
+ StorageLive(_4);
+ _4 = _1;
+ _0 = move _4 as u32 (IntToInt);
+ StorageDead(_4);
+ StorageDead(_2);
+ return;
+ }
+
+ bb2: {
+ StorageLive(_6);
+- _6 = panic() -> unwind continue;
++ StorageLive(_7);
++ _7 = begin_panic::<&str>(const "explicit panic") -> unwind continue;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_diverging.h.Inline.diff b/tests/mir-opt/inline/inline_diverging.h.Inline.diff
deleted file mode 100644
index d501b6ca8..000000000
--- a/tests/mir-opt/inline/inline_diverging.h.Inline.diff
+++ /dev/null
@@ -1,83 +0,0 @@
-- // MIR for `h` before Inline
-+ // MIR for `h` after Inline
-
- fn h() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_diverging.rs:+0:12: +0:12
- let _1: (!, !); // in scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
-+ let mut _2: fn() -> ! {sleep}; // in scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
-+ let mut _8: (); // in scope 0 at $DIR/inline_diverging.rs:27:13: 27:16
-+ scope 1 (inlined call_twice::<!, fn() -> ! {sleep}>) { // at $DIR/inline_diverging.rs:22:5: 22:22
-+ debug f => _2; // in scope 1 at $DIR/inline_diverging.rs:26:36: 26:37
-+ let _3: !; // in scope 1 at $DIR/inline_diverging.rs:27:9: 27:10
-+ let mut _4: &fn() -> ! {sleep}; // in scope 1 at $DIR/inline_diverging.rs:27:13: 27:14
-+ let mut _5: &fn() -> ! {sleep}; // in scope 1 at $DIR/inline_diverging.rs:28:13: 28:14
-+ let mut _6: !; // in scope 1 at $DIR/inline_diverging.rs:29:6: 29:7
-+ let mut _7: !; // in scope 1 at $DIR/inline_diverging.rs:29:9: 29:10
-+ scope 2 {
-+ debug a => _3; // in scope 2 at $DIR/inline_diverging.rs:27:9: 27:10
-+ scope 3 {
-+ debug b => _7; // in scope 3 at $DIR/inline_diverging.rs:28:9: 28:10
-+ }
-+ }
-+ scope 4 (inlined <fn() -> ! {sleep} as Fn<()>>::call - shim(fn() -> ! {sleep})) { // at $DIR/inline_diverging.rs:27:13: 27:16
-+ }
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
-- _1 = call_twice::<!, fn() -> ! {sleep}>(sleep); // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
-+ StorageLive(_2); // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
-+ _2 = sleep; // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
- // mir::Constant
-- // + span: $DIR/inline_diverging.rs:22:5: 22:15
-- // + literal: Const { ty: fn(fn() -> ! {sleep}) -> (!, !) {call_twice::<!, fn() -> ! {sleep}>}, val: Value(<ZST>) }
-- // mir::Constant
- // + span: $DIR/inline_diverging.rs:22:16: 22:21
- // + literal: Const { ty: fn() -> ! {sleep}, val: Value(<ZST>) }
-+ StorageLive(_7); // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
-+ StorageLive(_3); // scope 1 at $DIR/inline_diverging.rs:27:9: 27:10
-+ StorageLive(_4); // scope 1 at $DIR/inline_diverging.rs:27:13: 27:14
-+ _4 = &_2; // scope 1 at $DIR/inline_diverging.rs:27:13: 27:14
-+ StorageLive(_8); // scope 1 at $DIR/inline_diverging.rs:27:13: 27:16
-+ _8 = const (); // scope 1 at $DIR/inline_diverging.rs:27:13: 27:16
-+ _3 = move (*_4)() -> [return: bb6, unwind: bb4]; // scope 4 at $SRC_DIR/core/src/ops/function.rs:LL:COL
-+ }
-+
-+ bb1: {
-+ StorageDead(_5); // scope 2 at $DIR/inline_diverging.rs:28:15: 28:16
-+ StorageLive(_6); // scope 3 at $DIR/inline_diverging.rs:29:6: 29:7
-+ _6 = move _3; // scope 3 at $DIR/inline_diverging.rs:29:6: 29:7
-+ _1 = (move _6, move _7); // scope 3 at $DIR/inline_diverging.rs:29:5: 29:11
-+ StorageDead(_6); // scope 3 at $DIR/inline_diverging.rs:29:10: 29:11
-+ StorageDead(_3); // scope 1 at $DIR/inline_diverging.rs:30:1: 30:2
-+ drop(_2) -> bb2; // scope 1 at $DIR/inline_diverging.rs:30:1: 30:2
-+ }
-+
-+ bb2: {
-+ unreachable; // scope 0 at $DIR/inline_diverging.rs:30:2: 30:2
-+ }
-+
-+ bb3 (cleanup): {
-+ drop(_3) -> [return: bb4, unwind terminate]; // scope 1 at $DIR/inline_diverging.rs:30:1: 30:2
-+ }
-+
-+ bb4 (cleanup): {
-+ drop(_2) -> [return: bb5, unwind terminate]; // scope 1 at $DIR/inline_diverging.rs:30:1: 30:2
-+ }
-+
-+ bb5 (cleanup): {
-+ resume; // scope 1 at $DIR/inline_diverging.rs:26:1: 30:2
-+ }
-+
-+ bb6: {
-+ StorageDead(_8); // scope 1 at $DIR/inline_diverging.rs:27:13: 27:16
-+ StorageDead(_4); // scope 1 at $DIR/inline_diverging.rs:27:15: 27:16
-+ StorageLive(_5); // scope 2 at $DIR/inline_diverging.rs:28:13: 28:14
-+ _5 = &_2; // scope 2 at $DIR/inline_diverging.rs:28:13: 28:14
-+ _7 = <fn() -> ! {sleep} as Fn<()>>::call(move _5, const ()) -> [return: bb1, unwind: bb3]; // scope 2 at $DIR/inline_diverging.rs:28:13: 28:16
-+ // mir::Constant
-+ // + span: $DIR/inline_diverging.rs:28:13: 28:14
-+ // + literal: Const { ty: for<'a> extern "rust-call" fn(&'a fn() -> ! {sleep}, ()) -> <fn() -> ! {sleep} as FnOnce<()>>::Output {<fn() -> ! {sleep} as Fn<()>>::call}, val: Value(<ZST>) }
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_diverging.h.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_diverging.h.Inline.panic-abort.diff
new file mode 100644
index 000000000..0dcd5fae8
--- /dev/null
+++ b/tests/mir-opt/inline/inline_diverging.h.Inline.panic-abort.diff
@@ -0,0 +1,45 @@
+- // MIR for `h` before Inline
++ // MIR for `h` after Inline
+
+ fn h() -> () {
+ let mut _0: ();
+ let _1: (!, !);
++ let mut _2: fn() -> ! {sleep};
++ let mut _7: ();
++ scope 1 (inlined call_twice::<!, fn() -> ! {sleep}>) {
++ debug f => _2;
++ let mut _3: &fn() -> ! {sleep};
++ let mut _4: !;
++ let mut _5: &fn() -> ! {sleep};
++ let mut _6: !;
++ scope 2 {
++ debug a => _4;
++ scope 3 {
++ debug b => _6;
++ }
++ }
++ scope 4 (inlined <fn() -> ! {sleep} as Fn<()>>::call - shim(fn() -> ! {sleep})) {
++ scope 5 (inlined sleep) {
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = call_twice::<!, fn() -> ! {sleep}>(sleep) -> unwind unreachable;
++ StorageLive(_2);
++ _2 = sleep;
++ StorageLive(_4);
++ StorageLive(_6);
++ StorageLive(_3);
++ _3 = &_2;
++ StorageLive(_7);
++ _7 = const ();
++ goto -> bb1;
++ }
++
++ bb1: {
++ goto -> bb1;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_diverging.h.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_diverging.h.Inline.panic-unwind.diff
new file mode 100644
index 000000000..dfc12db12
--- /dev/null
+++ b/tests/mir-opt/inline/inline_diverging.h.Inline.panic-unwind.diff
@@ -0,0 +1,46 @@
+- // MIR for `h` before Inline
++ // MIR for `h` after Inline
+
+ fn h() -> () {
+ let mut _0: ();
+ let _1: (!, !);
++ let mut _2: fn() -> ! {sleep};
++ let mut _8: ();
++ scope 1 (inlined call_twice::<!, fn() -> ! {sleep}>) {
++ debug f => _2;
++ let mut _3: &fn() -> ! {sleep};
++ let _4: !;
++ let mut _5: &fn() -> ! {sleep};
++ let mut _6: !;
++ let mut _7: !;
++ scope 2 {
++ debug a => _4;
++ scope 3 {
++ debug b => _6;
++ }
++ }
++ scope 4 (inlined <fn() -> ! {sleep} as Fn<()>>::call - shim(fn() -> ! {sleep})) {
++ scope 5 (inlined sleep) {
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = call_twice::<!, fn() -> ! {sleep}>(sleep) -> unwind continue;
++ StorageLive(_2);
++ _2 = sleep;
++ StorageLive(_6);
++ StorageLive(_4);
++ StorageLive(_3);
++ _3 = &_2;
++ StorageLive(_8);
++ _8 = const ();
++ goto -> bb1;
++ }
++
++ bb1: {
++ goto -> bb1;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_diverging.rs b/tests/mir-opt/inline/inline_diverging.rs
index ae6f814c2..e01c4c1dd 100644
--- a/tests/mir-opt/inline/inline_diverging.rs
+++ b/tests/mir-opt/inline/inline_diverging.rs
@@ -1,6 +1,7 @@
// Tests inlining of diverging calls.
//
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
+// compile-flags: -Zinline-mir-hint-threshold=1000
#![crate_type = "lib"]
// EMIT_MIR inline_diverging.f.Inline.diff
diff --git a/tests/mir-opt/inline/inline_generator.main.Inline.diff b/tests/mir-opt/inline/inline_generator.main.Inline.diff
deleted file mode 100644
index c3ca2d7d4..000000000
--- a/tests/mir-opt/inline/inline_generator.main.Inline.diff
+++ /dev/null
@@ -1,132 +0,0 @@
-- // MIR for `main` before Inline
-+ // MIR for `main` after Inline
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_generator.rs:+0:11: +0:11
- let _1: std::ops::GeneratorState<i32, bool>; // in scope 0 at $DIR/inline_generator.rs:+1:9: +1:11
- let mut _2: std::pin::Pin<&mut [generator@$DIR/inline_generator.rs:15:5: 15:8]>; // in scope 0 at $DIR/inline_generator.rs:+1:14: +1:32
- let mut _3: &mut [generator@$DIR/inline_generator.rs:15:5: 15:8]; // in scope 0 at $DIR/inline_generator.rs:+1:23: +1:31
- let mut _4: [generator@$DIR/inline_generator.rs:15:5: 15:8]; // in scope 0 at $DIR/inline_generator.rs:+1:28: +1:31
-+ let mut _5: bool; // in scope 0 at $DIR/inline_generator.rs:+1:33: +1:46
- scope 1 {
- debug _r => _1; // in scope 1 at $DIR/inline_generator.rs:+1:9: +1:11
- }
-+ scope 2 (inlined g) { // at $DIR/inline_generator.rs:9:28: 9:31
-+ }
-+ scope 3 (inlined Pin::<&mut [generator@$DIR/inline_generator.rs:15:5: 15:8]>::new) { // at $DIR/inline_generator.rs:9:14: 9:32
-+ debug pointer => _3; // in scope 3 at $SRC_DIR/core/src/pin.rs:LL:COL
-+ scope 4 {
-+ scope 5 (inlined Pin::<&mut [generator@$DIR/inline_generator.rs:15:5: 15:8]>::new_unchecked) { // at $SRC_DIR/core/src/pin.rs:LL:COL
-+ debug pointer => _3; // in scope 5 at $SRC_DIR/core/src/pin.rs:LL:COL
-+ }
-+ }
-+ }
-+ scope 6 (inlined g::{closure#0}) { // at $DIR/inline_generator.rs:9:33: 9:46
-+ debug a => _5; // in scope 6 at $DIR/inline_generator.rs:15:6: 15:7
-+ let mut _6: i32; // in scope 6 at $DIR/inline_generator.rs:15:17: 15:39
-+ let mut _7: u32; // in scope 6 at $DIR/inline_generator.rs:15:5: 15:41
-+ let mut _8: &mut [generator@$DIR/inline_generator.rs:15:5: 15:8]; // in scope 6 at $DIR/inline_generator.rs:15:5: 15:41
-+ let mut _9: &mut [generator@$DIR/inline_generator.rs:15:5: 15:8]; // in scope 6 at $DIR/inline_generator.rs:15:5: 15:41
-+ let mut _10: &mut [generator@$DIR/inline_generator.rs:15:5: 15:8]; // in scope 6 at $DIR/inline_generator.rs:15:5: 15:41
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_generator.rs:+1:9: +1:11
- StorageLive(_2); // scope 0 at $DIR/inline_generator.rs:+1:14: +1:32
- StorageLive(_3); // scope 0 at $DIR/inline_generator.rs:+1:23: +1:31
- StorageLive(_4); // scope 0 at $DIR/inline_generator.rs:+1:28: +1:31
-- _4 = g() -> bb1; // scope 0 at $DIR/inline_generator.rs:+1:28: +1:31
-- // mir::Constant
-- // + span: $DIR/inline_generator.rs:9:28: 9:29
-- // + literal: Const { ty: fn() -> impl Generator<bool> {g}, val: Value(<ZST>) }
-- }
--
-- bb1: {
-+ _4 = [generator@$DIR/inline_generator.rs:15:5: 15:8 (#0)]; // scope 2 at $DIR/inline_generator.rs:15:5: 15:41
-+ // generator
-+ // + def_id: DefId(0:7 ~ inline_generator[e37e]::g::{closure#0})
-+ // + substs: [
-+ // bool,
-+ // i32,
-+ // bool,
-+ // {bool, i32},
-+ // (),
-+ // ]
-+ // + movability: Movable
- _3 = &mut _4; // scope 0 at $DIR/inline_generator.rs:+1:23: +1:31
-- _2 = Pin::<&mut [generator@$DIR/inline_generator.rs:15:5: 15:8]>::new(move _3) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/inline_generator.rs:+1:14: +1:32
-- // mir::Constant
-- // + span: $DIR/inline_generator.rs:9:14: 9:22
-- // + user_ty: UserType(0)
-- // + literal: Const { ty: fn(&mut [generator@$DIR/inline_generator.rs:15:5: 15:8]) -> Pin<&mut [generator@$DIR/inline_generator.rs:15:5: 15:8]> {Pin::<&mut [generator@$DIR/inline_generator.rs:15:5: 15:8]>::new}, val: Value(<ZST>) }
-- }
--
-- bb2: {
-+ _2 = Pin::<&mut [generator@$DIR/inline_generator.rs:15:5: 15:8]> { pointer: move _3 }; // scope 5 at $SRC_DIR/core/src/pin.rs:LL:COL
- StorageDead(_3); // scope 0 at $DIR/inline_generator.rs:+1:31: +1:32
-- _1 = <[generator@$DIR/inline_generator.rs:15:5: 15:8] as Generator<bool>>::resume(move _2, const false) -> [return: bb3, unwind: bb4]; // scope 0 at $DIR/inline_generator.rs:+1:14: +1:46
-- // mir::Constant
-- // + span: $DIR/inline_generator.rs:9:33: 9:39
-- // + literal: Const { ty: for<'a> fn(Pin<&'a mut [generator@$DIR/inline_generator.rs:15:5: 15:8]>, bool) -> GeneratorState<<[generator@$DIR/inline_generator.rs:15:5: 15:8] as Generator<bool>>::Yield, <[generator@$DIR/inline_generator.rs:15:5: 15:8] as Generator<bool>>::Return> {<[generator@$DIR/inline_generator.rs:15:5: 15:8] as Generator<bool>>::resume}, val: Value(<ZST>) }
-+ StorageLive(_5); // scope 0 at $DIR/inline_generator.rs:+1:33: +1:46
-+ _5 = const false; // scope 0 at $DIR/inline_generator.rs:+1:33: +1:46
-+ _8 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:15:5: 15:8]); // scope 6 at $DIR/inline_generator.rs:15:5: 15:41
-+ _7 = discriminant((*_8)); // scope 6 at $DIR/inline_generator.rs:15:5: 15:41
-+ switchInt(move _7) -> [0: bb3, 1: bb8, 3: bb7, otherwise: bb9]; // scope 6 at $DIR/inline_generator.rs:15:5: 15:41
- }
-
-- bb3: {
-+ bb1: {
-+ StorageDead(_5); // scope 0 at $DIR/inline_generator.rs:+1:33: +1:46
- StorageDead(_2); // scope 0 at $DIR/inline_generator.rs:+1:45: +1:46
- StorageDead(_4); // scope 0 at $DIR/inline_generator.rs:+1:46: +1:47
- _0 = const (); // scope 0 at $DIR/inline_generator.rs:+0:11: +2:2
- StorageDead(_1); // scope 0 at $DIR/inline_generator.rs:+2:1: +2:2
- return; // scope 0 at $DIR/inline_generator.rs:+2:2: +2:2
- }
-
-- bb4 (cleanup): {
-+ bb2 (cleanup): {
- resume; // scope 0 at $DIR/inline_generator.rs:+0:1: +2:2
-+ }
-+
-+ bb3: {
-+ StorageLive(_6); // scope 6 at $DIR/inline_generator.rs:15:17: 15:39
-+ switchInt(_5) -> [0: bb5, otherwise: bb4]; // scope 6 at $DIR/inline_generator.rs:15:20: 15:21
-+ }
-+
-+ bb4: {
-+ _6 = const 7_i32; // scope 6 at $DIR/inline_generator.rs:15:24: 15:25
-+ goto -> bb6; // scope 6 at $DIR/inline_generator.rs:15:17: 15:39
-+ }
-+
-+ bb5: {
-+ _6 = const 13_i32; // scope 6 at $DIR/inline_generator.rs:15:35: 15:37
-+ goto -> bb6; // scope 6 at $DIR/inline_generator.rs:15:17: 15:39
-+ }
-+
-+ bb6: {
-+ _1 = GeneratorState::<i32, bool>::Yielded(move _6); // scope 6 at $DIR/inline_generator.rs:15:11: 15:39
-+ _9 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:15:5: 15:8]); // scope 6 at $DIR/inline_generator.rs:15:11: 15:39
-+ discriminant((*_9)) = 3; // scope 6 at $DIR/inline_generator.rs:15:11: 15:39
-+ goto -> bb1; // scope 0 at $DIR/inline_generator.rs:15:11: 15:39
-+ }
-+
-+ bb7: {
-+ StorageLive(_6); // scope 6 at $DIR/inline_generator.rs:15:5: 15:41
-+ StorageDead(_6); // scope 6 at $DIR/inline_generator.rs:15:38: 15:39
-+ _1 = GeneratorState::<i32, bool>::Complete(_5); // scope 6 at $DIR/inline_generator.rs:15:41: 15:41
-+ _10 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:15:5: 15:8]); // scope 6 at $DIR/inline_generator.rs:15:41: 15:41
-+ discriminant((*_10)) = 1; // scope 6 at $DIR/inline_generator.rs:15:41: 15:41
-+ goto -> bb1; // scope 0 at $DIR/inline_generator.rs:15:41: 15:41
-+ }
-+
-+ bb8: {
-+ assert(const false, "generator resumed after completion") -> [success: bb8, unwind: bb2]; // scope 6 at $DIR/inline_generator.rs:15:5: 15:41
-+ }
-+
-+ bb9: {
-+ unreachable; // scope 6 at $DIR/inline_generator.rs:15:5: 15:41
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_generator.main.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_generator.main.Inline.panic-abort.diff
new file mode 100644
index 000000000..e05c605a4
--- /dev/null
+++ b/tests/mir-opt/inline/inline_generator.main.Inline.panic-abort.diff
@@ -0,0 +1,107 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: std::ops::GeneratorState<i32, bool>;
+ let mut _2: std::pin::Pin<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]>;
+ let mut _3: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8];
+ let mut _4: [generator@$DIR/inline_generator.rs:16:5: 16:8];
++ let mut _5: bool;
+ scope 1 {
+ debug _r => _1;
+ }
++ scope 2 (inlined g) {
++ }
++ scope 3 (inlined Pin::<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]>::new) {
++ debug pointer => _3;
++ scope 4 {
++ scope 5 (inlined Pin::<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]>::new_unchecked) {
++ debug pointer => _3;
++ }
++ }
++ }
++ scope 6 (inlined g::{closure#0}) {
++ debug a => _5;
++ let mut _6: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8];
++ let mut _7: u32;
++ let mut _8: i32;
++ let mut _9: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8];
++ let mut _10: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8];
++ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = g() -> [return: bb1, unwind unreachable];
+- }
+-
+- bb1: {
++ _4 = [generator@$DIR/inline_generator.rs:16:5: 16:8 (#0)];
+ _3 = &mut _4;
+- _2 = Pin::<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]>::new(move _3) -> [return: bb2, unwind unreachable];
+- }
+-
+- bb2: {
++ _2 = Pin::<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]> { pointer: move _3 };
+ StorageDead(_3);
+- _1 = <[generator@$DIR/inline_generator.rs:16:5: 16:8] as Generator<bool>>::resume(move _2, const false) -> [return: bb3, unwind unreachable];
++ StorageLive(_5);
++ _5 = const false;
++ _6 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]);
++ _7 = discriminant((*_6));
++ switchInt(move _7) -> [0: bb2, 1: bb6, 3: bb7, otherwise: bb8];
+ }
+
+- bb3: {
++ bb1: {
++ StorageDead(_5);
+ StorageDead(_2);
+ StorageDead(_4);
+ _0 = const ();
+ StorageDead(_1);
+ return;
++ }
++
++ bb2: {
++ StorageLive(_8);
++ switchInt(_5) -> [0: bb3, otherwise: bb4];
++ }
++
++ bb3: {
++ _8 = const 13_i32;
++ goto -> bb5;
++ }
++
++ bb4: {
++ _8 = const 7_i32;
++ goto -> bb5;
++ }
++
++ bb5: {
++ _1 = GeneratorState::<i32, bool>::Yielded(move _8);
++ _9 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]);
++ discriminant((*_9)) = 3;
++ goto -> bb1;
++ }
++
++ bb6: {
++ assert(const false, "generator resumed after completion") -> [success: bb6, unwind unreachable];
++ }
++
++ bb7: {
++ StorageLive(_8);
++ StorageDead(_8);
++ _1 = GeneratorState::<i32, bool>::Complete(_5);
++ _10 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]);
++ discriminant((*_10)) = 1;
++ goto -> bb1;
++ }
++
++ bb8: {
++ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_generator.main.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_generator.main.Inline.panic-unwind.diff
new file mode 100644
index 000000000..fedcf0423
--- /dev/null
+++ b/tests/mir-opt/inline/inline_generator.main.Inline.panic-unwind.diff
@@ -0,0 +1,112 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: std::ops::GeneratorState<i32, bool>;
+ let mut _2: std::pin::Pin<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]>;
+ let mut _3: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8];
+ let mut _4: [generator@$DIR/inline_generator.rs:16:5: 16:8];
++ let mut _5: bool;
+ scope 1 {
+ debug _r => _1;
+ }
++ scope 2 (inlined g) {
++ }
++ scope 3 (inlined Pin::<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]>::new) {
++ debug pointer => _3;
++ scope 4 {
++ scope 5 (inlined Pin::<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]>::new_unchecked) {
++ debug pointer => _3;
++ }
++ }
++ }
++ scope 6 (inlined g::{closure#0}) {
++ debug a => _5;
++ let mut _6: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8];
++ let mut _7: u32;
++ let mut _8: i32;
++ let mut _9: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8];
++ let mut _10: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8];
++ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = g() -> [return: bb1, unwind continue];
+- }
+-
+- bb1: {
++ _4 = [generator@$DIR/inline_generator.rs:16:5: 16:8 (#0)];
+ _3 = &mut _4;
+- _2 = Pin::<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]>::new(move _3) -> [return: bb2, unwind: bb4];
+- }
+-
+- bb2: {
++ _2 = Pin::<&mut [generator@$DIR/inline_generator.rs:16:5: 16:8]> { pointer: move _3 };
+ StorageDead(_3);
+- _1 = <[generator@$DIR/inline_generator.rs:16:5: 16:8] as Generator<bool>>::resume(move _2, const false) -> [return: bb3, unwind: bb4];
++ StorageLive(_5);
++ _5 = const false;
++ _6 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]);
++ _7 = discriminant((*_6));
++ switchInt(move _7) -> [0: bb3, 1: bb7, 3: bb8, otherwise: bb9];
+ }
+
+- bb3: {
++ bb1: {
++ StorageDead(_5);
+ StorageDead(_2);
+ StorageDead(_4);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+
+- bb4 (cleanup): {
++ bb2 (cleanup): {
+ resume;
++ }
++
++ bb3: {
++ StorageLive(_8);
++ switchInt(_5) -> [0: bb4, otherwise: bb5];
++ }
++
++ bb4: {
++ _8 = const 13_i32;
++ goto -> bb6;
++ }
++
++ bb5: {
++ _8 = const 7_i32;
++ goto -> bb6;
++ }
++
++ bb6: {
++ _1 = GeneratorState::<i32, bool>::Yielded(move _8);
++ _9 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]);
++ discriminant((*_9)) = 3;
++ goto -> bb1;
++ }
++
++ bb7: {
++ assert(const false, "generator resumed after completion") -> [success: bb7, unwind: bb2];
++ }
++
++ bb8: {
++ StorageLive(_8);
++ StorageDead(_8);
++ _1 = GeneratorState::<i32, bool>::Complete(_5);
++ _10 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:16:5: 16:8]);
++ discriminant((*_10)) = 1;
++ goto -> bb1;
++ }
++
++ bb9: {
++ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_generator.rs b/tests/mir-opt/inline/inline_generator.rs
index d11b3e548..2d71458c1 100644
--- a/tests/mir-opt/inline/inline_generator.rs
+++ b/tests/mir-opt/inline/inline_generator.rs
@@ -1,4 +1,5 @@
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
+// compile-flags: -Zinline-mir-hint-threshold=1000
#![feature(generators, generator_trait)]
use std::ops::Generator;
@@ -9,8 +10,8 @@ fn main() {
let _r = Pin::new(&mut g()).resume(false);
}
-#[inline(always)]
+#[inline]
pub fn g() -> impl Generator<bool> {
- #[inline(always)]
+ #[inline]
|a| { yield if a { 7 } else { 13 } }
}
diff --git a/tests/mir-opt/inline/inline_instruction_set.default.Inline.diff b/tests/mir-opt/inline/inline_instruction_set.default.Inline.diff
index a1d2423ae..6f8b730b4 100644
--- a/tests/mir-opt/inline/inline_instruction_set.default.Inline.diff
+++ b/tests/mir-opt/inline/inline_instruction_set.default.Inline.diff
@@ -2,59 +2,47 @@
+ // MIR for `default` after Inline
fn default() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_instruction_set.rs:+0:18: +0:18
- let _1: (); // in scope 0 at $DIR/inline_instruction_set.rs:+1:5: +1:26
- let _2: (); // in scope 0 at $DIR/inline_instruction_set.rs:+2:5: +2:26
- let _3: (); // in scope 0 at $DIR/inline_instruction_set.rs:+3:5: +3:30
- let _4: (); // in scope 0 at $DIR/inline_instruction_set.rs:+4:5: +4:41
-+ scope 1 (inlined instruction_set_default) { // at $DIR/inline_instruction_set.rs:59:5: 59:30
+ let mut _0: ();
+ let _1: ();
+ let _2: ();
+ let _3: ();
+ let _4: ();
++ scope 1 (inlined instruction_set_default) {
+ }
-+ scope 2 (inlined inline_always_and_using_inline_asm) { // at $DIR/inline_instruction_set.rs:60:5: 60:41
++ scope 2 (inlined inline_always_and_using_inline_asm) {
+ scope 3 {
+ }
+ }
bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_instruction_set.rs:+1:5: +1:26
- _1 = instruction_set_a32() -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/inline_instruction_set.rs:+1:5: +1:26
- // mir::Constant
- // + span: $DIR/inline_instruction_set.rs:57:5: 57:24
- // + literal: Const { ty: fn() {instruction_set_a32}, val: Value(<ZST>) }
+ StorageLive(_1);
+ _1 = instruction_set_a32() -> [return: bb1, unwind unreachable];
}
bb1: {
- StorageDead(_1); // scope 0 at $DIR/inline_instruction_set.rs:+1:26: +1:27
- StorageLive(_2); // scope 0 at $DIR/inline_instruction_set.rs:+2:5: +2:26
- _2 = instruction_set_t32() -> [return: bb2, unwind unreachable]; // scope 0 at $DIR/inline_instruction_set.rs:+2:5: +2:26
- // mir::Constant
- // + span: $DIR/inline_instruction_set.rs:58:5: 58:24
- // + literal: Const { ty: fn() {instruction_set_t32}, val: Value(<ZST>) }
+ StorageDead(_1);
+ StorageLive(_2);
+ _2 = instruction_set_t32() -> [return: bb2, unwind unreachable];
}
bb2: {
- StorageDead(_2); // scope 0 at $DIR/inline_instruction_set.rs:+2:26: +2:27
- StorageLive(_3); // scope 0 at $DIR/inline_instruction_set.rs:+3:5: +3:30
-- _3 = instruction_set_default() -> [return: bb3, unwind unreachable]; // scope 0 at $DIR/inline_instruction_set.rs:+3:5: +3:30
-- // mir::Constant
-- // + span: $DIR/inline_instruction_set.rs:59:5: 59:28
-- // + literal: Const { ty: fn() {instruction_set_default}, val: Value(<ZST>) }
+ StorageDead(_2);
+ StorageLive(_3);
+- _3 = instruction_set_default() -> [return: bb3, unwind unreachable];
- }
-
- bb3: {
- StorageDead(_3); // scope 0 at $DIR/inline_instruction_set.rs:+3:30: +3:31
- StorageLive(_4); // scope 0 at $DIR/inline_instruction_set.rs:+4:5: +4:41
-- _4 = inline_always_and_using_inline_asm() -> [return: bb4, unwind unreachable]; // scope 0 at $DIR/inline_instruction_set.rs:+4:5: +4:41
-- // mir::Constant
-- // + span: $DIR/inline_instruction_set.rs:60:5: 60:39
-- // + literal: Const { ty: fn() {inline_always_and_using_inline_asm}, val: Value(<ZST>) }
-+ asm!("/* do nothing */", options((empty))) -> [return: bb3, unwind unreachable]; // scope 3 at $DIR/inline_instruction_set.rs:43:14: 43:38
+ StorageDead(_3);
+ StorageLive(_4);
+- _4 = inline_always_and_using_inline_asm() -> [return: bb4, unwind unreachable];
++ asm!("/* do nothing */", options((empty))) -> [return: bb3, unwind unreachable];
}
- bb4: {
+ bb3: {
- StorageDead(_4); // scope 0 at $DIR/inline_instruction_set.rs:+4:41: +4:42
- _0 = const (); // scope 0 at $DIR/inline_instruction_set.rs:+0:18: +5:2
- return; // scope 0 at $DIR/inline_instruction_set.rs:+5:2: +5:2
+ StorageDead(_4);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/inline/inline_instruction_set.t32.Inline.diff b/tests/mir-opt/inline/inline_instruction_set.t32.Inline.diff
index 36aec4f47..33dc116f6 100644
--- a/tests/mir-opt/inline/inline_instruction_set.t32.Inline.diff
+++ b/tests/mir-opt/inline/inline_instruction_set.t32.Inline.diff
@@ -2,57 +2,45 @@
+ // MIR for `t32` after Inline
fn t32() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_instruction_set.rs:+0:14: +0:14
- let _1: (); // in scope 0 at $DIR/inline_instruction_set.rs:+1:5: +1:26
- let _2: (); // in scope 0 at $DIR/inline_instruction_set.rs:+2:5: +2:26
- let _3: (); // in scope 0 at $DIR/inline_instruction_set.rs:+3:5: +3:30
- let _4: (); // in scope 0 at $DIR/inline_instruction_set.rs:+4:5: +4:41
-+ scope 1 (inlined instruction_set_t32) { // at $DIR/inline_instruction_set.rs:50:5: 50:26
+ let mut _0: ();
+ let _1: ();
+ let _2: ();
+ let _3: ();
+ let _4: ();
++ scope 1 (inlined instruction_set_t32) {
+ }
-+ scope 2 (inlined instruction_set_default) { // at $DIR/inline_instruction_set.rs:51:5: 51:30
++ scope 2 (inlined instruction_set_default) {
+ }
bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_instruction_set.rs:+1:5: +1:26
- _1 = instruction_set_a32() -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/inline_instruction_set.rs:+1:5: +1:26
- // mir::Constant
- // + span: $DIR/inline_instruction_set.rs:49:5: 49:24
- // + literal: Const { ty: fn() {instruction_set_a32}, val: Value(<ZST>) }
+ StorageLive(_1);
+ _1 = instruction_set_a32() -> [return: bb1, unwind unreachable];
}
bb1: {
- StorageDead(_1); // scope 0 at $DIR/inline_instruction_set.rs:+1:26: +1:27
- StorageLive(_2); // scope 0 at $DIR/inline_instruction_set.rs:+2:5: +2:26
-- _2 = instruction_set_t32() -> [return: bb2, unwind unreachable]; // scope 0 at $DIR/inline_instruction_set.rs:+2:5: +2:26
-- // mir::Constant
-- // + span: $DIR/inline_instruction_set.rs:50:5: 50:24
-- // + literal: Const { ty: fn() {instruction_set_t32}, val: Value(<ZST>) }
+ StorageDead(_1);
+ StorageLive(_2);
+- _2 = instruction_set_t32() -> [return: bb2, unwind unreachable];
- }
-
- bb2: {
- StorageDead(_2); // scope 0 at $DIR/inline_instruction_set.rs:+2:26: +2:27
- StorageLive(_3); // scope 0 at $DIR/inline_instruction_set.rs:+3:5: +3:30
-- _3 = instruction_set_default() -> [return: bb3, unwind unreachable]; // scope 0 at $DIR/inline_instruction_set.rs:+3:5: +3:30
-- // mir::Constant
-- // + span: $DIR/inline_instruction_set.rs:51:5: 51:28
-- // + literal: Const { ty: fn() {instruction_set_default}, val: Value(<ZST>) }
+ StorageDead(_2);
+ StorageLive(_3);
+- _3 = instruction_set_default() -> [return: bb3, unwind unreachable];
- }
-
- bb3: {
- StorageDead(_3); // scope 0 at $DIR/inline_instruction_set.rs:+3:30: +3:31
- StorageLive(_4); // scope 0 at $DIR/inline_instruction_set.rs:+4:5: +4:41
-- _4 = inline_always_and_using_inline_asm() -> [return: bb4, unwind unreachable]; // scope 0 at $DIR/inline_instruction_set.rs:+4:5: +4:41
-+ _4 = inline_always_and_using_inline_asm() -> [return: bb2, unwind unreachable]; // scope 0 at $DIR/inline_instruction_set.rs:+4:5: +4:41
- // mir::Constant
- // + span: $DIR/inline_instruction_set.rs:52:5: 52:39
- // + literal: Const { ty: fn() {inline_always_and_using_inline_asm}, val: Value(<ZST>) }
+ StorageDead(_3);
+ StorageLive(_4);
+- _4 = inline_always_and_using_inline_asm() -> [return: bb4, unwind unreachable];
++ _4 = inline_always_and_using_inline_asm() -> [return: bb2, unwind unreachable];
}
- bb4: {
+ bb2: {
- StorageDead(_4); // scope 0 at $DIR/inline_instruction_set.rs:+4:41: +4:42
- _0 = const (); // scope 0 at $DIR/inline_instruction_set.rs:+0:14: +5:2
- return; // scope 0 at $DIR/inline_instruction_set.rs:+5:2: +5:2
+ StorageDead(_4);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/inline/inline_into_box_place.main.Inline.diff b/tests/mir-opt/inline/inline_into_box_place.main.Inline.diff
deleted file mode 100644
index a5129e0e8..000000000
--- a/tests/mir-opt/inline/inline_into_box_place.main.Inline.diff
+++ /dev/null
@@ -1,81 +0,0 @@
-- // MIR for `main` before Inline
-+ // MIR for `main` after Inline
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_into_box_place.rs:+0:11: +0:11
- let _1: std::boxed::Box<std::vec::Vec<u32>>; // in scope 0 at $DIR/inline_into_box_place.rs:+1:9: +1:11
- let mut _2: std::vec::Vec<u32>; // in scope 0 at $DIR/inline_into_box_place.rs:+1:38: +1:48
- scope 1 {
- debug _x => _1; // in scope 1 at $DIR/inline_into_box_place.rs:+1:9: +1:11
- }
-+ scope 2 (inlined Vec::<u32>::new) { // at $DIR/inline_into_box_place.rs:8:38: 8:48
-+ let mut _3: alloc::raw_vec::RawVec<u32>; // in scope 2 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
-+ }
-+ scope 3 (inlined Box::<Vec<u32>>::new) { // at $DIR/inline_into_box_place.rs:8:29: 8:49
-+ debug x => _2; // in scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
-+ let mut _4: usize; // in scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
-+ let mut _5: usize; // in scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
-+ let mut _6: *mut u8; // in scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
-+ let mut _7: *const std::vec::Vec<u32>; // in scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
-+ scope 4 {
-+ }
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_into_box_place.rs:+1:9: +1:11
- StorageLive(_2); // scope 0 at $DIR/inline_into_box_place.rs:+1:38: +1:48
-- _2 = Vec::<u32>::new() -> bb1; // scope 0 at $DIR/inline_into_box_place.rs:+1:38: +1:48
-+ StorageLive(_3); // scope 2 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
-+ _3 = const _; // scope 2 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
- // mir::Constant
-- // + span: $DIR/inline_into_box_place.rs:8:38: 8:46
-- // + user_ty: UserType(2)
-- // + literal: Const { ty: fn() -> Vec<u32> {Vec::<u32>::new}, val: Value(<ZST>) }
-+ // + span: $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
-+ // + user_ty: UserType(0)
-+ // + literal: Const { ty: alloc::raw_vec::RawVec<u32>, val: Unevaluated(alloc::raw_vec::RawVec::<T>::NEW, [u32], None) }
-+ _2 = Vec::<u32> { buf: move _3, len: const 0_usize }; // scope 2 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
-+ StorageDead(_3); // scope 2 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
-+ _4 = SizeOf(std::vec::Vec<u32>); // scope 4 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
-+ _5 = AlignOf(std::vec::Vec<u32>); // scope 4 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
-+ _6 = alloc::alloc::exchange_malloc(move _4, move _5) -> [return: bb3, unwind: bb4]; // scope 4 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
-+ // mir::Constant
-+ // + span: $SRC_DIR/alloc/src/boxed.rs:LL:COL
-+ // + literal: Const { ty: unsafe fn(usize, usize) -> *mut u8 {alloc::alloc::exchange_malloc}, val: Value(<ZST>) }
- }
-
- bb1: {
-- _1 = Box::<Vec<u32>>::new(move _2) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/inline_into_box_place.rs:+1:29: +1:49
-- // mir::Constant
-- // + span: $DIR/inline_into_box_place.rs:8:29: 8:37
-- // + user_ty: UserType(1)
-- // + literal: Const { ty: fn(Vec<u32>) -> Box<Vec<u32>> {Box::<Vec<u32>>::new}, val: Value(<ZST>) }
-+ StorageDead(_1); // scope 0 at $DIR/inline_into_box_place.rs:+2:1: +2:2
-+ return; // scope 0 at $DIR/inline_into_box_place.rs:+2:2: +2:2
- }
-
-- bb2: {
-- StorageDead(_2); // scope 0 at $DIR/inline_into_box_place.rs:+1:48: +1:49
-- _0 = const (); // scope 0 at $DIR/inline_into_box_place.rs:+0:11: +2:2
-- drop(_1) -> [return: bb3, unwind: bb4]; // scope 0 at $DIR/inline_into_box_place.rs:+2:1: +2:2
-+ bb2 (cleanup): {
-+ resume; // scope 0 at $DIR/inline_into_box_place.rs:+0:1: +2:2
- }
-
- bb3: {
-- StorageDead(_1); // scope 0 at $DIR/inline_into_box_place.rs:+2:1: +2:2
-- return; // scope 0 at $DIR/inline_into_box_place.rs:+2:2: +2:2
-+ _1 = ShallowInitBox(move _6, std::vec::Vec<u32>); // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
-+ _7 = (((_1.0: std::ptr::Unique<std::vec::Vec<u32>>).0: std::ptr::NonNull<std::vec::Vec<u32>>).0: *const std::vec::Vec<u32>); // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
-+ (*_7) = move _2; // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
-+ StorageDead(_2); // scope 0 at $DIR/inline_into_box_place.rs:+1:48: +1:49
-+ _0 = const (); // scope 0 at $DIR/inline_into_box_place.rs:+0:11: +2:2
-+ drop(_1) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/inline_into_box_place.rs:+2:1: +2:2
- }
-
- bb4 (cleanup): {
-- resume; // scope 0 at $DIR/inline_into_box_place.rs:+0:1: +2:2
-+ drop(_2) -> [return: bb2, unwind terminate]; // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_into_box_place.main.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_into_box_place.main.Inline.panic-abort.diff
new file mode 100644
index 000000000..3848196ec
--- /dev/null
+++ b/tests/mir-opt/inline/inline_into_box_place.main.Inline.panic-abort.diff
@@ -0,0 +1,205 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: std::boxed::Box<std::vec::Vec<u32>>;
+ let mut _2: std::vec::Vec<u32>;
+ scope 1 {
+ debug _x => _1;
+ }
++ scope 2 (inlined Vec::<u32>::new) {
++ let mut _3: alloc::raw_vec::RawVec<u32>;
++ }
++ scope 3 (inlined Box::<Vec<u32>>::new) {
++ debug x => _2;
++ let mut _4: usize;
++ let mut _5: usize;
++ let mut _6: *mut u8;
++ let mut _7: *const std::vec::Vec<u32>;
++ scope 4 {
++ scope 5 (inlined alloc::alloc::exchange_malloc) {
++ debug size => _4;
++ debug align => _5;
++ let _8: std::alloc::Layout;
++ let mut _9: std::result::Result<std::ptr::NonNull<[u8]>, std::alloc::AllocError>;
++ let mut _10: isize;
++ let mut _12: !;
++ scope 6 {
++ debug layout => _8;
++ let _11: std::ptr::NonNull<[u8]>;
++ let mut _13: &std::alloc::Global;
++ scope 8 {
++ debug ptr => _11;
++ scope 18 (inlined NonNull::<[u8]>::as_mut_ptr) {
++ debug self => _11;
++ let mut _16: std::ptr::NonNull<u8>;
++ scope 19 (inlined NonNull::<[u8]>::as_non_null_ptr) {
++ debug self => _11;
++ let mut _17: *mut u8;
++ let mut _18: *mut [u8];
++ scope 20 {
++ scope 21 (inlined NonNull::<[u8]>::as_ptr) {
++ debug self => _11;
++ let mut _19: *const [u8];
++ }
++ scope 22 (inlined ptr::mut_ptr::<impl *mut [u8]>::as_mut_ptr) {
++ debug self => _18;
++ }
++ scope 23 (inlined NonNull::<u8>::new_unchecked) {
++ debug ptr => _17;
++ let mut _20: *const u8;
++ let mut _21: *mut u8;
++ scope 24 {
++ scope 25 (inlined NonNull::<T>::new_unchecked::runtime::<u8>) {
++ debug ptr => _21;
++ scope 26 (inlined ptr::mut_ptr::<impl *mut u8>::is_null) {
++ debug self => _21;
++ let mut _22: *mut u8;
++ scope 27 {
++ scope 28 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) {
++ debug ptr => _22;
++ scope 29 (inlined ptr::mut_ptr::<impl *mut u8>::addr) {
++ debug self => _22;
++ scope 30 {
++ scope 31 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) {
++ debug self => _22;
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ scope 32 (inlined NonNull::<u8>::as_ptr) {
++ debug self => _16;
++ let mut _23: *const u8;
++ }
++ }
++ }
++ scope 17 (inlined <std::alloc::Global as Allocator>::allocate) {
++ debug self => const _;
++ debug layout => _8;
++ }
++ }
++ scope 7 {
++ scope 9 (inlined Layout::from_size_align_unchecked) {
++ debug size => _4;
++ debug align => _5;
++ let mut _14: std::ptr::Alignment;
++ scope 10 {
++ scope 11 (inlined std::ptr::Alignment::new_unchecked) {
++ debug align => _5;
++ let mut _15: usize;
++ scope 12 {
++ scope 14 (inlined std::ptr::Alignment::new_unchecked::runtime) {
++ debug align => _15;
++ scope 15 (inlined core::num::<impl usize>::is_power_of_two) {
++ debug self => _15;
++ scope 16 (inlined core::num::<impl usize>::count_ones) {
++ debug self => _15;
++ }
++ }
++ }
++ }
++ scope 13 {
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = Vec::<u32>::new() -> [return: bb1, unwind unreachable];
++ StorageLive(_3);
++ _3 = const _;
++ _2 = Vec::<u32> { buf: move _3, len: const 0_usize };
++ StorageDead(_3);
++ _4 = SizeOf(std::vec::Vec<u32>);
++ _5 = AlignOf(std::vec::Vec<u32>);
++ StorageLive(_8);
++ StorageLive(_11);
++ StorageLive(_12);
++ StorageLive(_13);
++ StorageLive(_14);
++ StorageLive(_15);
++ _14 = _5 as std::ptr::Alignment (Transmute);
++ StorageDead(_15);
++ _8 = Layout { size: _4, align: move _14 };
++ StorageDead(_14);
++ StorageLive(_9);
++ _13 = const _;
++ _9 = std::alloc::Global::alloc_impl(_13, _8, const false) -> [return: bb5, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = Box::<Vec<u32>>::new(move _2) -> [return: bb2, unwind unreachable];
++ StorageDead(_1);
++ return;
+ }
+
+ bb2: {
++ _12 = handle_alloc_error(_8) -> unwind unreachable;
++ }
++
++ bb3: {
++ unreachable;
++ }
++
++ bb4: {
++ _11 = ((_9 as Ok).0: std::ptr::NonNull<[u8]>);
++ StorageLive(_16);
++ StorageLive(_17);
++ StorageLive(_18);
++ StorageLive(_19);
++ _19 = (_11.0: *const [u8]);
++ _18 = move _19 as *mut [u8] (PtrToPtr);
++ StorageDead(_19);
++ _17 = _18 as *mut u8 (PtrToPtr);
++ StorageDead(_18);
++ StorageLive(_20);
++ StorageLive(_21);
++ StorageLive(_22);
++ _20 = _17 as *const u8 (PointerCoercion(MutToConstPointer));
++ _16 = NonNull::<u8> { pointer: _20 };
++ StorageDead(_22);
++ StorageDead(_21);
++ StorageDead(_20);
++ StorageDead(_17);
++ StorageLive(_23);
++ _23 = (_16.0: *const u8);
++ _6 = move _23 as *mut u8 (PtrToPtr);
++ StorageDead(_23);
++ StorageDead(_16);
++ StorageDead(_9);
++ StorageDead(_13);
++ StorageDead(_12);
++ StorageDead(_11);
++ StorageDead(_8);
++ _1 = ShallowInitBox(move _6, std::vec::Vec<u32>);
++ _7 = (((_1.0: std::ptr::Unique<std::vec::Vec<u32>>).0: std::ptr::NonNull<std::vec::Vec<u32>>).0: *const std::vec::Vec<u32>);
++ (*_7) = move _2;
+ StorageDead(_2);
+ _0 = const ();
+- drop(_1) -> [return: bb3, unwind unreachable];
++ drop(_1) -> [return: bb1, unwind unreachable];
+ }
+
+- bb3: {
+- StorageDead(_1);
+- return;
++ bb5: {
++ _10 = discriminant(_9);
++ switchInt(move _10) -> [0: bb4, 1: bb2, otherwise: bb3];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_into_box_place.main.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_into_box_place.main.Inline.panic-unwind.diff
new file mode 100644
index 000000000..80b5810aa
--- /dev/null
+++ b/tests/mir-opt/inline/inline_into_box_place.main.Inline.panic-unwind.diff
@@ -0,0 +1,218 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: std::boxed::Box<std::vec::Vec<u32>>;
+ let mut _2: std::vec::Vec<u32>;
+ scope 1 {
+ debug _x => _1;
+ }
++ scope 2 (inlined Vec::<u32>::new) {
++ let mut _3: alloc::raw_vec::RawVec<u32>;
++ }
++ scope 3 (inlined Box::<Vec<u32>>::new) {
++ debug x => _2;
++ let mut _4: usize;
++ let mut _5: usize;
++ let mut _6: *mut u8;
++ let mut _7: *const std::vec::Vec<u32>;
++ scope 4 {
++ scope 5 (inlined alloc::alloc::exchange_malloc) {
++ debug size => _4;
++ debug align => _5;
++ let _8: std::alloc::Layout;
++ let mut _9: std::result::Result<std::ptr::NonNull<[u8]>, std::alloc::AllocError>;
++ let mut _10: isize;
++ let mut _12: !;
++ scope 6 {
++ debug layout => _8;
++ let _11: std::ptr::NonNull<[u8]>;
++ let mut _13: &std::alloc::Global;
++ scope 8 {
++ debug ptr => _11;
++ scope 18 (inlined NonNull::<[u8]>::as_mut_ptr) {
++ debug self => _11;
++ let mut _16: std::ptr::NonNull<u8>;
++ scope 19 (inlined NonNull::<[u8]>::as_non_null_ptr) {
++ debug self => _11;
++ let mut _17: *mut u8;
++ let mut _18: *mut [u8];
++ scope 20 {
++ scope 21 (inlined NonNull::<[u8]>::as_ptr) {
++ debug self => _11;
++ let mut _19: *const [u8];
++ }
++ scope 22 (inlined ptr::mut_ptr::<impl *mut [u8]>::as_mut_ptr) {
++ debug self => _18;
++ }
++ scope 23 (inlined NonNull::<u8>::new_unchecked) {
++ debug ptr => _17;
++ let mut _20: *const u8;
++ let mut _21: *mut u8;
++ scope 24 {
++ scope 25 (inlined NonNull::<T>::new_unchecked::runtime::<u8>) {
++ debug ptr => _21;
++ scope 26 (inlined ptr::mut_ptr::<impl *mut u8>::is_null) {
++ debug self => _21;
++ let mut _22: *mut u8;
++ scope 27 {
++ scope 28 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) {
++ debug ptr => _22;
++ scope 29 (inlined ptr::mut_ptr::<impl *mut u8>::addr) {
++ debug self => _22;
++ scope 30 {
++ scope 31 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) {
++ debug self => _22;
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ scope 32 (inlined NonNull::<u8>::as_ptr) {
++ debug self => _16;
++ let mut _23: *const u8;
++ }
++ }
++ }
++ scope 17 (inlined <std::alloc::Global as Allocator>::allocate) {
++ debug self => const _;
++ debug layout => _8;
++ }
++ }
++ scope 7 {
++ scope 9 (inlined Layout::from_size_align_unchecked) {
++ debug size => _4;
++ debug align => _5;
++ let mut _14: std::ptr::Alignment;
++ scope 10 {
++ scope 11 (inlined std::ptr::Alignment::new_unchecked) {
++ debug align => _5;
++ let mut _15: usize;
++ scope 12 {
++ scope 14 (inlined std::ptr::Alignment::new_unchecked::runtime) {
++ debug align => _15;
++ scope 15 (inlined core::num::<impl usize>::is_power_of_two) {
++ debug self => _15;
++ scope 16 (inlined core::num::<impl usize>::count_ones) {
++ debug self => _15;
++ }
++ }
++ }
++ }
++ scope 13 {
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = Vec::<u32>::new() -> [return: bb1, unwind continue];
++ StorageLive(_3);
++ _3 = const _;
++ _2 = Vec::<u32> { buf: move _3, len: const 0_usize };
++ StorageDead(_3);
++ _4 = SizeOf(std::vec::Vec<u32>);
++ _5 = AlignOf(std::vec::Vec<u32>);
++ StorageLive(_8);
++ StorageLive(_11);
++ StorageLive(_12);
++ StorageLive(_13);
++ StorageLive(_14);
++ StorageLive(_15);
++ _14 = _5 as std::ptr::Alignment (Transmute);
++ StorageDead(_15);
++ _8 = Layout { size: _4, align: move _14 };
++ StorageDead(_14);
++ StorageLive(_9);
++ _13 = const _;
++ _9 = std::alloc::Global::alloc_impl(_13, _8, const false) -> [return: bb7, unwind: bb3];
+ }
+
+ bb1: {
+- _1 = Box::<Vec<u32>>::new(move _2) -> [return: bb2, unwind: bb4];
++ StorageDead(_1);
++ return;
+ }
+
+- bb2: {
+- StorageDead(_2);
+- _0 = const ();
+- drop(_1) -> [return: bb3, unwind: bb4];
++ bb2 (cleanup): {
++ resume;
+ }
+
+- bb3: {
+- StorageDead(_1);
+- return;
++ bb3 (cleanup): {
++ drop(_2) -> [return: bb2, unwind terminate];
+ }
+
+- bb4 (cleanup): {
+- resume;
++ bb4: {
++ _12 = handle_alloc_error(_8) -> bb3;
++ }
++
++ bb5: {
++ unreachable;
++ }
++
++ bb6: {
++ _11 = ((_9 as Ok).0: std::ptr::NonNull<[u8]>);
++ StorageLive(_16);
++ StorageLive(_17);
++ StorageLive(_18);
++ StorageLive(_19);
++ _19 = (_11.0: *const [u8]);
++ _18 = move _19 as *mut [u8] (PtrToPtr);
++ StorageDead(_19);
++ _17 = _18 as *mut u8 (PtrToPtr);
++ StorageDead(_18);
++ StorageLive(_20);
++ StorageLive(_21);
++ StorageLive(_22);
++ _20 = _17 as *const u8 (PointerCoercion(MutToConstPointer));
++ _16 = NonNull::<u8> { pointer: _20 };
++ StorageDead(_22);
++ StorageDead(_21);
++ StorageDead(_20);
++ StorageDead(_17);
++ StorageLive(_23);
++ _23 = (_16.0: *const u8);
++ _6 = move _23 as *mut u8 (PtrToPtr);
++ StorageDead(_23);
++ StorageDead(_16);
++ StorageDead(_9);
++ StorageDead(_13);
++ StorageDead(_12);
++ StorageDead(_11);
++ StorageDead(_8);
++ _1 = ShallowInitBox(move _6, std::vec::Vec<u32>);
++ _7 = (((_1.0: std::ptr::Unique<std::vec::Vec<u32>>).0: std::ptr::NonNull<std::vec::Vec<u32>>).0: *const std::vec::Vec<u32>);
++ (*_7) = move _2;
++ StorageDead(_2);
++ _0 = const ();
++ drop(_1) -> [return: bb1, unwind: bb2];
++ }
++
++ bb7: {
++ _10 = discriminant(_9);
++ switchInt(move _10) -> [0: bb6, 1: bb4, otherwise: bb5];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_into_box_place.rs b/tests/mir-opt/inline/inline_into_box_place.rs
index 02823e4e1..56f174e51 100644
--- a/tests/mir-opt/inline/inline_into_box_place.rs
+++ b/tests/mir-opt/inline/inline_into_box_place.rs
@@ -1,7 +1,7 @@
// ignore-endian-big
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// ignore-debug MIR alignment checks in std alter the diff, breaking the test
-// compile-flags: -Z mir-opt-level=4
+// compile-flags: -Zmir-opt-level=4 -Zinline-mir-hint-threshold=200
// EMIT_MIR inline_into_box_place.main.Inline.diff
fn main() {
diff --git a/tests/mir-opt/inline/inline_options.main.Inline.after.mir b/tests/mir-opt/inline/inline_options.main.Inline.after.mir
deleted file mode 100644
index a2938ead0..000000000
--- a/tests/mir-opt/inline/inline_options.main.Inline.after.mir
+++ /dev/null
@@ -1,55 +0,0 @@
-// MIR for `main` after Inline
-
-fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_options.rs:+0:11: +0:11
- let _1: (); // in scope 0 at $DIR/inline_options.rs:+1:5: +1:18
- let _2: (); // in scope 0 at $DIR/inline_options.rs:+2:5: +2:21
- scope 1 (inlined inlined::<u32>) { // at $DIR/inline_options.rs:11:5: 11:21
- let _3: (); // in scope 1 at $DIR/inline_options.rs:17:23: 17:26
- let _4: (); // in scope 1 at $DIR/inline_options.rs:17:28: 17:31
- let _5: (); // in scope 1 at $DIR/inline_options.rs:17:33: 17:36
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_options.rs:+1:5: +1:18
- _1 = not_inlined() -> bb1; // scope 0 at $DIR/inline_options.rs:+1:5: +1:18
- // mir::Constant
- // + span: $DIR/inline_options.rs:10:5: 10:16
- // + literal: Const { ty: fn() {not_inlined}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_1); // scope 0 at $DIR/inline_options.rs:+1:18: +1:19
- StorageLive(_2); // scope 0 at $DIR/inline_options.rs:+2:5: +2:21
- StorageLive(_3); // scope 0 at $DIR/inline_options.rs:+2:5: +2:21
- StorageLive(_4); // scope 0 at $DIR/inline_options.rs:+2:5: +2:21
- StorageLive(_5); // scope 0 at $DIR/inline_options.rs:+2:5: +2:21
- _3 = g() -> bb3; // scope 1 at $DIR/inline_options.rs:17:23: 17:26
- // mir::Constant
- // + span: $DIR/inline_options.rs:17:23: 17:24
- // + literal: Const { ty: fn() {g}, val: Value(<ZST>) }
- }
-
- bb2: {
- StorageDead(_5); // scope 0 at $DIR/inline_options.rs:+2:5: +2:21
- StorageDead(_4); // scope 0 at $DIR/inline_options.rs:+2:5: +2:21
- StorageDead(_3); // scope 0 at $DIR/inline_options.rs:+2:5: +2:21
- StorageDead(_2); // scope 0 at $DIR/inline_options.rs:+2:21: +2:22
- _0 = const (); // scope 0 at $DIR/inline_options.rs:+0:11: +3:2
- return; // scope 0 at $DIR/inline_options.rs:+3:2: +3:2
- }
-
- bb3: {
- _4 = g() -> bb4; // scope 1 at $DIR/inline_options.rs:17:28: 17:31
- // mir::Constant
- // + span: $DIR/inline_options.rs:17:28: 17:29
- // + literal: Const { ty: fn() {g}, val: Value(<ZST>) }
- }
-
- bb4: {
- _5 = g() -> bb2; // scope 1 at $DIR/inline_options.rs:17:33: 17:36
- // mir::Constant
- // + span: $DIR/inline_options.rs:17:33: 17:34
- // + literal: Const { ty: fn() {g}, val: Value(<ZST>) }
- }
-}
diff --git a/tests/mir-opt/inline/inline_options.main.Inline.after.panic-abort.mir b/tests/mir-opt/inline/inline_options.main.Inline.after.panic-abort.mir
new file mode 100644
index 000000000..3218c4e56
--- /dev/null
+++ b/tests/mir-opt/inline/inline_options.main.Inline.after.panic-abort.mir
@@ -0,0 +1,43 @@
+// MIR for `main` after Inline
+
+fn main() -> () {
+ let mut _0: ();
+ let _1: ();
+ let _2: ();
+ scope 1 (inlined inlined::<u32>) {
+ let _3: ();
+ let _4: ();
+ let _5: ();
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = not_inlined() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _3 = g() -> [return: bb3, unwind unreachable];
+ }
+
+ bb2: {
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ return;
+ }
+
+ bb3: {
+ _4 = g() -> [return: bb4, unwind unreachable];
+ }
+
+ bb4: {
+ _5 = g() -> [return: bb2, unwind unreachable];
+ }
+}
diff --git a/tests/mir-opt/inline/inline_options.main.Inline.after.panic-unwind.mir b/tests/mir-opt/inline/inline_options.main.Inline.after.panic-unwind.mir
new file mode 100644
index 000000000..df0cab513
--- /dev/null
+++ b/tests/mir-opt/inline/inline_options.main.Inline.after.panic-unwind.mir
@@ -0,0 +1,43 @@
+// MIR for `main` after Inline
+
+fn main() -> () {
+ let mut _0: ();
+ let _1: ();
+ let _2: ();
+ scope 1 (inlined inlined::<u32>) {
+ let _3: ();
+ let _4: ();
+ let _5: ();
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = not_inlined() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _3 = g() -> [return: bb3, unwind continue];
+ }
+
+ bb2: {
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ return;
+ }
+
+ bb3: {
+ _4 = g() -> [return: bb4, unwind continue];
+ }
+
+ bb4: {
+ _5 = g() -> [return: bb2, unwind continue];
+ }
+}
diff --git a/tests/mir-opt/inline/inline_options.rs b/tests/mir-opt/inline/inline_options.rs
index f0a898832..b247ecd0b 100644
--- a/tests/mir-opt/inline/inline_options.rs
+++ b/tests/mir-opt/inline/inline_options.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Checks that inlining threshold can be controlled with
// inline-mir-threshold and inline-hint-threshold options.
//
diff --git a/tests/mir-opt/inline/inline_retag.bar.Inline.after.mir b/tests/mir-opt/inline/inline_retag.bar.Inline.after.mir
index 60149ff36..8c3f3a458 100644
--- a/tests/mir-opt/inline/inline_retag.bar.Inline.after.mir
+++ b/tests/mir-opt/inline/inline_retag.bar.Inline.after.mir
@@ -1,68 +1,59 @@
// MIR for `bar` after Inline
fn bar() -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/inline_retag.rs:+0:13: +0:17
- let _1: for<'a, 'b> fn(&'a i32, &'b i32) -> bool {foo}; // in scope 0 at $DIR/inline_retag.rs:+1:9: +1:10
- let mut _2: for<'a, 'b> fn(&'a i32, &'b i32) -> bool {foo}; // in scope 0 at $DIR/inline_retag.rs:+2:5: +2:6
- let mut _3: &i32; // in scope 0 at $DIR/inline_retag.rs:+2:7: +2:9
- let _4: &i32; // in scope 0 at $DIR/inline_retag.rs:+2:7: +2:9
- let _5: i32; // in scope 0 at $DIR/inline_retag.rs:+2:8: +2:9
- let mut _6: &i32; // in scope 0 at $DIR/inline_retag.rs:+2:11: +2:14
- let _7: &i32; // in scope 0 at $DIR/inline_retag.rs:+2:11: +2:14
- let _8: i32; // in scope 0 at $DIR/inline_retag.rs:+2:12: +2:14
+ let mut _0: bool;
+ let _1: for<'a, 'b> fn(&'a i32, &'b i32) -> bool {foo};
+ let mut _2: for<'a, 'b> fn(&'a i32, &'b i32) -> bool {foo};
+ let mut _3: &i32;
+ let _4: &i32;
+ let _5: i32;
+ let mut _6: &i32;
+ let _7: &i32;
+ let _8: i32;
scope 1 {
- debug f => _1; // in scope 1 at $DIR/inline_retag.rs:+1:9: +1:10
- let mut _9: &i32; // in scope 1 at $DIR/inline_retag.rs:+2:11: +2:14
- let mut _10: &i32; // in scope 1 at $DIR/inline_retag.rs:+2:7: +2:9
- scope 2 (inlined foo) { // at $DIR/inline_retag.rs:12:5: 12:15
- debug x => _3; // in scope 2 at $DIR/inline_retag.rs:16:8: 16:9
- debug y => _6; // in scope 2 at $DIR/inline_retag.rs:16:17: 16:18
- let mut _11: i32; // in scope 2 at $DIR/inline_retag.rs:17:5: 17:7
- let mut _12: i32; // in scope 2 at $DIR/inline_retag.rs:17:11: 17:13
+ debug f => _1;
+ let mut _9: &i32;
+ let mut _10: &i32;
+ scope 2 (inlined foo) {
+ debug x => _3;
+ debug y => _6;
+ let mut _11: i32;
+ let mut _12: i32;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_retag.rs:+1:9: +1:10
- _1 = foo; // scope 0 at $DIR/inline_retag.rs:+1:13: +1:16
- // mir::Constant
- // + span: $DIR/inline_retag.rs:11:13: 11:16
- // + literal: Const { ty: for<'a, 'b> fn(&'a i32, &'b i32) -> bool {foo}, val: Value(<ZST>) }
- StorageLive(_2); // scope 1 at $DIR/inline_retag.rs:+2:5: +2:6
- _2 = _1; // scope 1 at $DIR/inline_retag.rs:+2:5: +2:6
- StorageLive(_3); // scope 1 at $DIR/inline_retag.rs:+2:7: +2:9
- StorageLive(_4); // scope 1 at $DIR/inline_retag.rs:+2:7: +2:9
- _10 = const _; // scope 1 at $DIR/inline_retag.rs:+2:7: +2:9
- // mir::Constant
- // + span: $DIR/inline_retag.rs:12:7: 12:9
- // + literal: Const { ty: &i32, val: Unevaluated(bar, [], Some(promoted[1])) }
- Retag(_10); // scope 1 at $DIR/inline_retag.rs:+2:7: +2:9
- _4 = &(*_10); // scope 1 at $DIR/inline_retag.rs:+2:7: +2:9
- _3 = &(*_4); // scope 1 at $DIR/inline_retag.rs:+2:7: +2:9
- StorageLive(_6); // scope 1 at $DIR/inline_retag.rs:+2:11: +2:14
- StorageLive(_7); // scope 1 at $DIR/inline_retag.rs:+2:11: +2:14
- _9 = const _; // scope 1 at $DIR/inline_retag.rs:+2:11: +2:14
- // mir::Constant
- // + span: $DIR/inline_retag.rs:12:11: 12:14
- // + literal: Const { ty: &i32, val: Unevaluated(bar, [], Some(promoted[0])) }
- Retag(_9); // scope 1 at $DIR/inline_retag.rs:+2:11: +2:14
- _7 = &(*_9); // scope 1 at $DIR/inline_retag.rs:+2:11: +2:14
- _6 = &(*_7); // scope 1 at $DIR/inline_retag.rs:+2:11: +2:14
- Retag(_3); // scope 2 at $DIR/inline_retag.rs:16:8: 16:9
- Retag(_6); // scope 2 at $DIR/inline_retag.rs:16:17: 16:18
- StorageLive(_11); // scope 2 at $DIR/inline_retag.rs:17:5: 17:7
- _11 = (*_3); // scope 2 at $DIR/inline_retag.rs:17:5: 17:7
- StorageLive(_12); // scope 2 at $DIR/inline_retag.rs:17:11: 17:13
- _12 = (*_6); // scope 2 at $DIR/inline_retag.rs:17:11: 17:13
- _0 = Eq(move _11, move _12); // scope 2 at $DIR/inline_retag.rs:17:5: 17:13
- StorageDead(_12); // scope 2 at $DIR/inline_retag.rs:17:12: 17:13
- StorageDead(_11); // scope 2 at $DIR/inline_retag.rs:17:12: 17:13
- StorageDead(_6); // scope 1 at $DIR/inline_retag.rs:+2:14: +2:15
- StorageDead(_3); // scope 1 at $DIR/inline_retag.rs:+2:14: +2:15
- StorageDead(_2); // scope 1 at $DIR/inline_retag.rs:+2:14: +2:15
- StorageDead(_1); // scope 0 at $DIR/inline_retag.rs:+3:1: +3:2
- StorageDead(_7); // scope 0 at $DIR/inline_retag.rs:+3:1: +3:2
- StorageDead(_4); // scope 0 at $DIR/inline_retag.rs:+3:1: +3:2
- return; // scope 0 at $DIR/inline_retag.rs:+3:2: +3:2
+ StorageLive(_1);
+ _1 = foo;
+ StorageLive(_2);
+ _2 = _1;
+ StorageLive(_3);
+ StorageLive(_4);
+ _10 = const _;
+ Retag(_10);
+ _4 = &(*_10);
+ _3 = &(*_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ _9 = const _;
+ Retag(_9);
+ _7 = &(*_9);
+ _6 = &(*_7);
+ Retag(_3);
+ Retag(_6);
+ StorageLive(_11);
+ _11 = (*_3);
+ StorageLive(_12);
+ _12 = (*_6);
+ _0 = Eq(move _11, move _12);
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_6);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ StorageDead(_7);
+ StorageDead(_4);
+ return;
}
}
diff --git a/tests/mir-opt/inline/inline_shims.clone.Inline.diff b/tests/mir-opt/inline/inline_shims.clone.Inline.diff
deleted file mode 100644
index 09dd35c4c..000000000
--- a/tests/mir-opt/inline/inline_shims.clone.Inline.diff
+++ /dev/null
@@ -1,26 +0,0 @@
-- // MIR for `clone` before Inline
-+ // MIR for `clone` after Inline
-
- fn clone(_1: fn(A, B)) -> fn(A, B) {
- debug f => _1; // in scope 0 at $DIR/inline_shims.rs:+0:20: +0:21
- let mut _0: fn(A, B); // return place in scope 0 at $DIR/inline_shims.rs:+0:36: +0:44
- let mut _2: &fn(A, B); // in scope 0 at $DIR/inline_shims.rs:+1:5: +1:14
-+ scope 1 (inlined <fn(A, B) as Clone>::clone - shim(fn(A, B))) { // at $DIR/inline_shims.rs:6:7: 6:14
-+ }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/inline_shims.rs:+1:5: +1:14
- _2 = &_1; // scope 0 at $DIR/inline_shims.rs:+1:5: +1:14
-- _0 = <fn(A, B) as Clone>::clone(move _2) -> bb1; // scope 0 at $DIR/inline_shims.rs:+1:5: +1:14
-- // mir::Constant
-- // + span: $DIR/inline_shims.rs:6:7: 6:12
-- // + literal: Const { ty: for<'a> fn(&'a fn(A, B)) -> fn(A, B) {<fn(A, B) as Clone>::clone}, val: Value(<ZST>) }
-- }
--
-- bb1: {
-+ _0 = (*_2); // scope 1 at $SRC_DIR/core/src/clone.rs:LL:COL
- StorageDead(_2); // scope 0 at $DIR/inline_shims.rs:+1:13: +1:14
- return; // scope 0 at $DIR/inline_shims.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_shims.clone.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_shims.clone.Inline.panic-abort.diff
new file mode 100644
index 000000000..8117e58fa
--- /dev/null
+++ b/tests/mir-opt/inline/inline_shims.clone.Inline.panic-abort.diff
@@ -0,0 +1,23 @@
+- // MIR for `clone` before Inline
++ // MIR for `clone` after Inline
+
+ fn clone(_1: fn(A, B)) -> fn(A, B) {
+ debug f => _1;
+ let mut _0: fn(A, B);
+ let mut _2: &fn(A, B);
++ scope 1 (inlined <fn(A, B) as Clone>::clone - shim(fn(A, B))) {
++ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = &_1;
+- _0 = <fn(A, B) as Clone>::clone(move _2) -> [return: bb1, unwind unreachable];
+- }
+-
+- bb1: {
++ _0 = (*_2);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_shims.clone.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_shims.clone.Inline.panic-unwind.diff
new file mode 100644
index 000000000..00e92a0f5
--- /dev/null
+++ b/tests/mir-opt/inline/inline_shims.clone.Inline.panic-unwind.diff
@@ -0,0 +1,23 @@
+- // MIR for `clone` before Inline
++ // MIR for `clone` after Inline
+
+ fn clone(_1: fn(A, B)) -> fn(A, B) {
+ debug f => _1;
+ let mut _0: fn(A, B);
+ let mut _2: &fn(A, B);
++ scope 1 (inlined <fn(A, B) as Clone>::clone - shim(fn(A, B))) {
++ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = &_1;
+- _0 = <fn(A, B) as Clone>::clone(move _2) -> [return: bb1, unwind continue];
+- }
+-
+- bb1: {
++ _0 = (*_2);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_shims.drop.Inline.diff b/tests/mir-opt/inline/inline_shims.drop.Inline.diff
deleted file mode 100644
index 36ddb189e..000000000
--- a/tests/mir-opt/inline/inline_shims.drop.Inline.diff
+++ /dev/null
@@ -1,56 +0,0 @@
-- // MIR for `drop` before Inline
-+ // MIR for `drop` after Inline
-
- fn drop(_1: *mut Vec<A>, _2: *mut Option<B>) -> () {
- debug a => _1; // in scope 0 at $DIR/inline_shims.rs:+0:19: +0:20
- debug b => _2; // in scope 0 at $DIR/inline_shims.rs:+0:35: +0:36
- let mut _0: (); // return place in scope 0 at $DIR/inline_shims.rs:+0:54: +0:54
- let _3: (); // in scope 0 at $DIR/inline_shims.rs:+1:14: +1:40
- let mut _4: *mut std::vec::Vec<A>; // in scope 0 at $DIR/inline_shims.rs:+1:38: +1:39
- let mut _5: *mut std::option::Option<B>; // in scope 0 at $DIR/inline_shims.rs:+2:38: +2:39
- scope 1 {
- }
- scope 2 {
-+ scope 3 (inlined std::ptr::drop_in_place::<Option<B>> - shim(Some(Option<B>))) { // at $DIR/inline_shims.rs:12:14: 12:40
-+ let mut _6: isize; // in scope 3 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
-+ let mut _7: isize; // in scope 3 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
-+ }
- }
-
- bb0: {
- StorageLive(_3); // scope 0 at $DIR/inline_shims.rs:+1:5: +1:42
- StorageLive(_4); // scope 1 at $DIR/inline_shims.rs:+1:38: +1:39
- _4 = _1; // scope 1 at $DIR/inline_shims.rs:+1:38: +1:39
- _3 = std::ptr::drop_in_place::<Vec<A>>(move _4) -> bb1; // scope 1 at $DIR/inline_shims.rs:+1:14: +1:40
- // mir::Constant
- // + span: $DIR/inline_shims.rs:11:14: 11:37
- // + literal: Const { ty: unsafe fn(*mut Vec<A>) {std::ptr::drop_in_place::<Vec<A>>}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_4); // scope 1 at $DIR/inline_shims.rs:+1:39: +1:40
- StorageDead(_3); // scope 0 at $DIR/inline_shims.rs:+1:41: +1:42
- StorageLive(_5); // scope 2 at $DIR/inline_shims.rs:+2:38: +2:39
- _5 = _2; // scope 2 at $DIR/inline_shims.rs:+2:38: +2:39
-- _0 = std::ptr::drop_in_place::<Option<B>>(move _5) -> bb2; // scope 2 at $DIR/inline_shims.rs:+2:14: +2:40
-- // mir::Constant
-- // + span: $DIR/inline_shims.rs:12:14: 12:37
-- // + literal: Const { ty: unsafe fn(*mut Option<B>) {std::ptr::drop_in_place::<Option<B>>}, val: Value(<ZST>) }
-+ StorageLive(_6); // scope 2 at $DIR/inline_shims.rs:+2:14: +2:40
-+ StorageLive(_7); // scope 2 at $DIR/inline_shims.rs:+2:14: +2:40
-+ _6 = discriminant((*_5)); // scope 3 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
-+ switchInt(move _6) -> [0: bb2, otherwise: bb3]; // scope 3 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- }
-
- bb2: {
-+ StorageDead(_7); // scope 2 at $DIR/inline_shims.rs:+2:14: +2:40
-+ StorageDead(_6); // scope 2 at $DIR/inline_shims.rs:+2:14: +2:40
- StorageDead(_5); // scope 2 at $DIR/inline_shims.rs:+2:39: +2:40
- return; // scope 0 at $DIR/inline_shims.rs:+3:2: +3:2
-+ }
-+
-+ bb3: {
-+ drop((((*_5) as Some).0: B)) -> bb2; // scope 3 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_shims.drop.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_shims.drop.Inline.panic-abort.diff
new file mode 100644
index 000000000..4fcd49994
--- /dev/null
+++ b/tests/mir-opt/inline/inline_shims.drop.Inline.panic-abort.diff
@@ -0,0 +1,64 @@
+- // MIR for `drop` before Inline
++ // MIR for `drop` after Inline
+
+ fn drop(_1: *mut Vec<A>, _2: *mut Option<B>) -> () {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: ();
+ let _3: ();
+ let mut _4: *mut std::vec::Vec<A>;
+ let mut _5: *mut std::option::Option<B>;
+ scope 1 {
++ scope 3 (inlined std::ptr::drop_in_place::<Vec<A>> - shim(Some(Vec<A>))) {
++ let mut _6: &mut std::vec::Vec<A>;
++ let mut _7: ();
++ }
+ }
+ scope 2 {
++ scope 4 (inlined std::ptr::drop_in_place::<Option<B>> - shim(Some(Option<B>))) {
++ let mut _8: isize;
++ let mut _9: isize;
++ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+- _3 = std::ptr::drop_in_place::<Vec<A>>(move _4) -> [return: bb1, unwind unreachable];
++ StorageLive(_6);
++ StorageLive(_7);
++ _6 = &mut (*_4);
++ _7 = <Vec<A> as Drop>::drop(move _6) -> [return: bb2, unwind unreachable];
+ }
+
+ bb1: {
++ StorageDead(_7);
++ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageLive(_5);
+ _5 = _2;
+- _0 = std::ptr::drop_in_place::<Option<B>>(move _5) -> [return: bb2, unwind unreachable];
++ StorageLive(_8);
++ StorageLive(_9);
++ _8 = discriminant((*_5));
++ switchInt(move _8) -> [0: bb3, otherwise: bb4];
+ }
+
+ bb2: {
++ drop(((*_4).0: alloc::raw_vec::RawVec<A>)) -> [return: bb1, unwind unreachable];
++ }
++
++ bb3: {
++ StorageDead(_9);
++ StorageDead(_8);
+ StorageDead(_5);
+ return;
++ }
++
++ bb4: {
++ drop((((*_5) as Some).0: B)) -> [return: bb3, unwind unreachable];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_shims.drop.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_shims.drop.Inline.panic-unwind.diff
new file mode 100644
index 000000000..4270ae00b
--- /dev/null
+++ b/tests/mir-opt/inline/inline_shims.drop.Inline.panic-unwind.diff
@@ -0,0 +1,50 @@
+- // MIR for `drop` before Inline
++ // MIR for `drop` after Inline
+
+ fn drop(_1: *mut Vec<A>, _2: *mut Option<B>) -> () {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: ();
+ let _3: ();
+ let mut _4: *mut std::vec::Vec<A>;
+ let mut _5: *mut std::option::Option<B>;
+ scope 1 {
+ }
+ scope 2 {
++ scope 3 (inlined std::ptr::drop_in_place::<Option<B>> - shim(Some(Option<B>))) {
++ let mut _6: isize;
++ let mut _7: isize;
++ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ _3 = std::ptr::drop_in_place::<Vec<A>>(move _4) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageLive(_5);
+ _5 = _2;
+- _0 = std::ptr::drop_in_place::<Option<B>>(move _5) -> [return: bb2, unwind continue];
++ StorageLive(_6);
++ StorageLive(_7);
++ _6 = discriminant((*_5));
++ switchInt(move _6) -> [0: bb2, otherwise: bb3];
+ }
+
+ bb2: {
++ StorageDead(_7);
++ StorageDead(_6);
+ StorageDead(_5);
+ return;
++ }
++
++ bb3: {
++ drop((((*_5) as Some).0: B)) -> [return: bb2, unwind continue];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_shims.rs b/tests/mir-opt/inline/inline_shims.rs
index 7c8618f71..eafbb962e 100644
--- a/tests/mir-opt/inline/inline_shims.rs
+++ b/tests/mir-opt/inline/inline_shims.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![crate_type = "lib"]
// EMIT_MIR inline_shims.clone.Inline.diff
diff --git a/tests/mir-opt/inline/inline_specialization.main.Inline.diff b/tests/mir-opt/inline/inline_specialization.main.Inline.diff
deleted file mode 100644
index 9dde9994d..000000000
--- a/tests/mir-opt/inline/inline_specialization.main.Inline.diff
+++ /dev/null
@@ -1,28 +0,0 @@
-- // MIR for `main` before Inline
-+ // MIR for `main` after Inline
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/inline_specialization.rs:+0:11: +0:11
- let _1: u32; // in scope 0 at $DIR/inline_specialization.rs:+1:9: +1:10
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/inline_specialization.rs:+1:9: +1:10
- }
-+ scope 2 (inlined <Vec<()> as Foo>::bar) { // at $DIR/inline_specialization.rs:6:13: 6:38
-+ }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/inline_specialization.rs:+1:9: +1:10
-- _1 = <Vec<()> as Foo>::bar() -> bb1; // scope 0 at $DIR/inline_specialization.rs:+1:13: +1:38
-- // mir::Constant
-- // + span: $DIR/inline_specialization.rs:6:13: 6:36
-- // + literal: Const { ty: fn() -> u32 {<Vec<()> as Foo>::bar}, val: Value(<ZST>) }
-- }
--
-- bb1: {
-+ _1 = const 123_u32; // scope 2 at $DIR/inline_specialization.rs:15:31: 15:34
- _0 = const (); // scope 0 at $DIR/inline_specialization.rs:+0:11: +2:2
- StorageDead(_1); // scope 0 at $DIR/inline_specialization.rs:+2:1: +2:2
- return; // scope 0 at $DIR/inline_specialization.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/inline_specialization.main.Inline.panic-abort.diff b/tests/mir-opt/inline/inline_specialization.main.Inline.panic-abort.diff
new file mode 100644
index 000000000..22afcd2ee
--- /dev/null
+++ b/tests/mir-opt/inline/inline_specialization.main.Inline.panic-abort.diff
@@ -0,0 +1,25 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ scope 1 {
+ debug x => _1;
+ }
++ scope 2 (inlined <Vec<()> as Foo>::bar) {
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = <Vec<()> as Foo>::bar() -> [return: bb1, unwind unreachable];
+- }
+-
+- bb1: {
++ _1 = const 123_u32;
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_specialization.main.Inline.panic-unwind.diff b/tests/mir-opt/inline/inline_specialization.main.Inline.panic-unwind.diff
new file mode 100644
index 000000000..bc841101d
--- /dev/null
+++ b/tests/mir-opt/inline/inline_specialization.main.Inline.panic-unwind.diff
@@ -0,0 +1,25 @@
+- // MIR for `main` before Inline
++ // MIR for `main` after Inline
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: u32;
+ scope 1 {
+ debug x => _1;
+ }
++ scope 2 (inlined <Vec<()> as Foo>::bar) {
++ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = <Vec<()> as Foo>::bar() -> [return: bb1, unwind continue];
+- }
+-
+- bb1: {
++ _1 = const 123_u32;
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/inline_specialization.rs b/tests/mir-opt/inline/inline_specialization.rs
index c24795e05..0311531dc 100644
--- a/tests/mir-opt/inline/inline_specialization.rs
+++ b/tests/mir-opt/inline/inline_specialization.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![feature(specialization)]
// EMIT_MIR inline_specialization.main.Inline.diff
diff --git a/tests/mir-opt/inline/inline_trait_method.rs b/tests/mir-opt/inline/inline_trait_method.rs
index 6aa957eb5..a9d2168c2 100644
--- a/tests/mir-opt/inline/inline_trait_method.rs
+++ b/tests/mir-opt/inline/inline_trait_method.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// compile-flags: -Z span_free_formats
fn main() {
diff --git a/tests/mir-opt/inline/inline_trait_method.test.Inline.after.mir b/tests/mir-opt/inline/inline_trait_method.test.Inline.after.mir
deleted file mode 100644
index a9020a5bb..000000000
--- a/tests/mir-opt/inline/inline_trait_method.test.Inline.after.mir
+++ /dev/null
@@ -1,21 +0,0 @@
-// MIR for `test` after Inline
-
-fn test(_1: &dyn X) -> u32 {
- debug x => _1; // in scope 0 at $DIR/inline_trait_method.rs:+0:9: +0:10
- let mut _0: u32; // return place in scope 0 at $DIR/inline_trait_method.rs:+0:23: +0:26
- let mut _2: &dyn X; // in scope 0 at $DIR/inline_trait_method.rs:+1:5: +1:10
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/inline_trait_method.rs:+1:5: +1:10
- _2 = &(*_1); // scope 0 at $DIR/inline_trait_method.rs:+1:5: +1:10
- _0 = <dyn X as X>::y(move _2) -> bb1; // scope 0 at $DIR/inline_trait_method.rs:+1:5: +1:10
- // mir::Constant
- // + span: $DIR/inline_trait_method.rs:10:7: 10:8
- // + literal: Const { ty: for<'a> fn(&'a dyn X) -> u32 {<dyn X as X>::y}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_2); // scope 0 at $DIR/inline_trait_method.rs:+1:9: +1:10
- return; // scope 0 at $DIR/inline_trait_method.rs:+2:2: +2:2
- }
-}
diff --git a/tests/mir-opt/inline/inline_trait_method.test.Inline.after.panic-abort.mir b/tests/mir-opt/inline/inline_trait_method.test.Inline.after.panic-abort.mir
new file mode 100644
index 000000000..2441e3f1c
--- /dev/null
+++ b/tests/mir-opt/inline/inline_trait_method.test.Inline.after.panic-abort.mir
@@ -0,0 +1,18 @@
+// MIR for `test` after Inline
+
+fn test(_1: &dyn X) -> u32 {
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: &dyn X;
+
+ bb0: {
+ StorageLive(_2);
+ _2 = &(*_1);
+ _0 = <dyn X as X>::y(move _2) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+}
diff --git a/tests/mir-opt/inline/inline_trait_method.test.Inline.after.panic-unwind.mir b/tests/mir-opt/inline/inline_trait_method.test.Inline.after.panic-unwind.mir
new file mode 100644
index 000000000..da18a5adc
--- /dev/null
+++ b/tests/mir-opt/inline/inline_trait_method.test.Inline.after.panic-unwind.mir
@@ -0,0 +1,18 @@
+// MIR for `test` after Inline
+
+fn test(_1: &dyn X) -> u32 {
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: &dyn X;
+
+ bb0: {
+ StorageLive(_2);
+ _2 = &(*_1);
+ _0 = <dyn X as X>::y(move _2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+}
diff --git a/tests/mir-opt/inline/inline_trait_method_2.rs b/tests/mir-opt/inline/inline_trait_method_2.rs
index 07a601908..62ec7ebde 100644
--- a/tests/mir-opt/inline/inline_trait_method_2.rs
+++ b/tests/mir-opt/inline/inline_trait_method_2.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// compile-flags: -Z span_free_formats -Z mir-opt-level=4
// EMIT_MIR inline_trait_method_2.test2.Inline.after.mir
diff --git a/tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.mir b/tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.mir
deleted file mode 100644
index a4bbecf3b..000000000
--- a/tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.mir
+++ /dev/null
@@ -1,28 +0,0 @@
-// MIR for `test2` after Inline
-
-fn test2(_1: &dyn X) -> bool {
- debug x => _1; // in scope 0 at $DIR/inline_trait_method_2.rs:+0:10: +0:11
- let mut _0: bool; // return place in scope 0 at $DIR/inline_trait_method_2.rs:+0:24: +0:28
- let mut _2: &dyn X; // in scope 0 at $DIR/inline_trait_method_2.rs:+1:10: +1:11
- let mut _3: &dyn X; // in scope 0 at $DIR/inline_trait_method_2.rs:+1:10: +1:11
- scope 1 (inlined test) { // at $DIR/inline_trait_method_2.rs:6:5: 6:12
- debug x => _2; // in scope 1 at $DIR/inline_trait_method_2.rs:10:9: 10:10
- }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/inline_trait_method_2.rs:+1:10: +1:11
- StorageLive(_3); // scope 0 at $DIR/inline_trait_method_2.rs:+1:10: +1:11
- _3 = &(*_1); // scope 0 at $DIR/inline_trait_method_2.rs:+1:10: +1:11
- _2 = move _3 as &dyn X (Pointer(Unsize)); // scope 0 at $DIR/inline_trait_method_2.rs:+1:10: +1:11
- StorageDead(_3); // scope 0 at $DIR/inline_trait_method_2.rs:+1:10: +1:11
- _0 = <dyn X as X>::y(_2) -> bb1; // scope 1 at $DIR/inline_trait_method_2.rs:11:5: 11:10
- // mir::Constant
- // + span: $DIR/inline_trait_method_2.rs:11:7: 11:8
- // + literal: Const { ty: for<'a> fn(&'a dyn X) -> bool {<dyn X as X>::y}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_2); // scope 0 at $DIR/inline_trait_method_2.rs:+1:11: +1:12
- return; // scope 0 at $DIR/inline_trait_method_2.rs:+2:2: +2:2
- }
-}
diff --git a/tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.panic-abort.mir b/tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.panic-abort.mir
new file mode 100644
index 000000000..503f15308
--- /dev/null
+++ b/tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.panic-abort.mir
@@ -0,0 +1,25 @@
+// MIR for `test2` after Inline
+
+fn test2(_1: &dyn X) -> bool {
+ debug x => _1;
+ let mut _0: bool;
+ let mut _2: &dyn X;
+ let mut _3: &dyn X;
+ scope 1 (inlined test) {
+ debug x => _2;
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _2 = move _3 as &dyn X (PointerCoercion(Unsize));
+ StorageDead(_3);
+ _0 = <dyn X as X>::y(_2) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+}
diff --git a/tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.panic-unwind.mir b/tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.panic-unwind.mir
new file mode 100644
index 000000000..37bb53e79
--- /dev/null
+++ b/tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.panic-unwind.mir
@@ -0,0 +1,25 @@
+// MIR for `test2` after Inline
+
+fn test2(_1: &dyn X) -> bool {
+ debug x => _1;
+ let mut _0: bool;
+ let mut _2: &dyn X;
+ let mut _3: &dyn X;
+ scope 1 (inlined test) {
+ debug x => _2;
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _2 = move _3 as &dyn X (PointerCoercion(Unsize));
+ StorageDead(_3);
+ _0 = <dyn X as X>::y(_2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+}
diff --git a/tests/mir-opt/inline/issue_106141.outer.Inline.diff b/tests/mir-opt/inline/issue_106141.outer.Inline.diff
deleted file mode 100644
index 3aebfb69e..000000000
--- a/tests/mir-opt/inline/issue_106141.outer.Inline.diff
+++ /dev/null
@@ -1,55 +0,0 @@
-- // MIR for `outer` before Inline
-+ // MIR for `outer` after Inline
-
- fn outer() -> usize {
- let mut _0: usize; // return place in scope 0 at $DIR/issue_106141.rs:+0:19: +0:24
-+ scope 1 (inlined inner) { // at $DIR/issue_106141.rs:3:5: 3:12
-+ let mut _1: bool; // in scope 1 at $DIR/issue_106141.rs:14:8: 14:21
-+ let mut _2: bool; // in scope 1 at $DIR/issue_106141.rs:14:8: 14:21
-+ let mut _3: &[bool; 1]; // in scope 1 at $DIR/issue_106141.rs:12:18: 12:25
-+ scope 2 {
-+ debug buffer => const _; // in scope 2 at $DIR/issue_106141.rs:12:9: 12:15
-+ scope 3 {
-+ debug index => _0; // in scope 3 at $DIR/issue_106141.rs:13:9: 13:14
-+ }
-+ }
-+ }
-
- bb0: {
-- _0 = inner() -> bb1; // scope 0 at $DIR/issue_106141.rs:+1:5: +1:12
-+ StorageLive(_3); // scope 0 at $DIR/issue_106141.rs:+1:5: +1:12
-+ _3 = const _; // scope 1 at $DIR/issue_106141.rs:12:18: 12:25
- // mir::Constant
-- // + span: $DIR/issue_106141.rs:3:5: 3:10
-- // + literal: Const { ty: fn() -> usize {inner}, val: Value(<ZST>) }
-+ // + span: $DIR/issue_106141.rs:12:18: 12:25
-+ // + literal: Const { ty: &[bool; 1], val: Unevaluated(inner, [], Some(promoted[0])) }
-+ _0 = index() -> bb1; // scope 2 at $DIR/issue_106141.rs:13:17: 13:24
-+ // mir::Constant
-+ // + span: $DIR/issue_106141.rs:13:17: 13:22
-+ // + literal: Const { ty: fn() -> usize {index}, val: Value(<ZST>) }
- }
-
- bb1: {
-+ StorageLive(_1); // scope 3 at $DIR/issue_106141.rs:14:8: 14:21
-+ _2 = Lt(_0, const 1_usize); // scope 3 at $DIR/issue_106141.rs:14:8: 14:21
-+ assert(move _2, "index out of bounds: the length is {} but the index is {}", const 1_usize, _0) -> bb2; // scope 3 at $DIR/issue_106141.rs:14:8: 14:21
-+ }
-+
-+ bb2: {
-+ _1 = (*_3)[_0]; // scope 3 at $DIR/issue_106141.rs:14:8: 14:21
-+ switchInt(move _1) -> [0: bb3, otherwise: bb4]; // scope 3 at $DIR/issue_106141.rs:14:8: 14:21
-+ }
-+
-+ bb3: {
-+ _0 = const 0_usize; // scope 3 at $DIR/issue_106141.rs:17:9: 17:10
-+ goto -> bb4; // scope 3 at $DIR/issue_106141.rs:14:5: 18:6
-+ }
-+
-+ bb4: {
-+ StorageDead(_1); // scope 3 at $DIR/issue_106141.rs:18:5: 18:6
-+ StorageDead(_3); // scope 0 at $DIR/issue_106141.rs:+1:5: +1:12
- return; // scope 0 at $DIR/issue_106141.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/issue_106141.outer.Inline.panic-abort.diff b/tests/mir-opt/inline/issue_106141.outer.Inline.panic-abort.diff
new file mode 100644
index 000000000..3d0c10725
--- /dev/null
+++ b/tests/mir-opt/inline/issue_106141.outer.Inline.panic-abort.diff
@@ -0,0 +1,47 @@
+- // MIR for `outer` before Inline
++ // MIR for `outer` after Inline
+
+ fn outer() -> usize {
+ let mut _0: usize;
++ scope 1 (inlined inner) {
++ let mut _1: &[bool; 1];
++ let mut _2: bool;
++ let mut _3: bool;
++ scope 2 {
++ debug buffer => const _;
++ scope 3 {
++ debug index => _0;
++ }
++ }
++ }
+
+ bb0: {
+- _0 = inner() -> [return: bb1, unwind unreachable];
++ StorageLive(_1);
++ _1 = const _;
++ _0 = index() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
++ StorageLive(_3);
++ _2 = Lt(_0, const 1_usize);
++ assert(move _2, "index out of bounds: the length is {} but the index is {}", const 1_usize, _0) -> [success: bb2, unwind unreachable];
++ }
++
++ bb2: {
++ _3 = (*_1)[_0];
++ switchInt(move _3) -> [0: bb3, otherwise: bb4];
++ }
++
++ bb3: {
++ _0 = const 0_usize;
++ goto -> bb4;
++ }
++
++ bb4: {
++ StorageDead(_3);
++ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/issue_106141.outer.Inline.panic-unwind.diff b/tests/mir-opt/inline/issue_106141.outer.Inline.panic-unwind.diff
new file mode 100644
index 000000000..16a19f4a3
--- /dev/null
+++ b/tests/mir-opt/inline/issue_106141.outer.Inline.panic-unwind.diff
@@ -0,0 +1,47 @@
+- // MIR for `outer` before Inline
++ // MIR for `outer` after Inline
+
+ fn outer() -> usize {
+ let mut _0: usize;
++ scope 1 (inlined inner) {
++ let mut _1: &[bool; 1];
++ let mut _2: bool;
++ let mut _3: bool;
++ scope 2 {
++ debug buffer => const _;
++ scope 3 {
++ debug index => _0;
++ }
++ }
++ }
+
+ bb0: {
+- _0 = inner() -> [return: bb1, unwind continue];
++ StorageLive(_1);
++ _1 = const _;
++ _0 = index() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
++ StorageLive(_3);
++ _2 = Lt(_0, const 1_usize);
++ assert(move _2, "index out of bounds: the length is {} but the index is {}", const 1_usize, _0) -> [success: bb2, unwind continue];
++ }
++
++ bb2: {
++ _3 = (*_1)[_0];
++ switchInt(move _3) -> [0: bb3, otherwise: bb4];
++ }
++
++ bb3: {
++ _0 = const 0_usize;
++ goto -> bb4;
++ }
++
++ bb4: {
++ StorageDead(_3);
++ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/issue_106141.rs b/tests/mir-opt/inline/issue_106141.rs
index b6bd806e6..eed1d8917 100644
--- a/tests/mir-opt/inline/issue_106141.rs
+++ b/tests/mir-opt/inline/issue_106141.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
pub fn outer() -> usize {
inner()
}
diff --git a/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.a.Inline.after.mir b/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.a.Inline.after.mir
index 6441a9668..7cc65efe0 100644
--- a/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.a.Inline.after.mir
+++ b/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.a.Inline.after.mir
@@ -1,26 +1,26 @@
// MIR for `a` after Inline
fn a(_1: &mut [T]) -> &mut [T] {
- debug x => _1; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+0:13: +0:14
- let mut _0: &mut [T]; // return place in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+0:29: +0:37
- let mut _2: &mut [T]; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- let mut _3: &mut [T]; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- let mut _4: &mut [T]; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- scope 1 (inlined <[T] as AsMut<[T]>>::as_mut) { // at $DIR/issue_58867_inline_as_ref_as_mut.rs:3:7: 3:15
- debug self => _4; // in scope 1 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
+ debug x => _1;
+ let mut _0: &mut [T];
+ let mut _2: &mut [T];
+ let mut _3: &mut [T];
+ let mut _4: &mut [T];
+ scope 1 (inlined <[T] as AsMut<[T]>>::as_mut) {
+ debug self => _4;
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- StorageLive(_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- StorageLive(_4); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- _4 = &mut (*_1); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- _3 = _4; // scope 1 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
- _2 = &mut (*_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- StorageDead(_4); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:14: +1:15
- _0 = &mut (*_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- StorageDead(_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+2:1: +2:2
- StorageDead(_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+2:1: +2:2
- return; // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+2:2: +2:2
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &mut (*_1);
+ _3 = _4;
+ _2 = &mut (*_3);
+ StorageDead(_4);
+ _0 = &mut (*_2);
+ StorageDead(_3);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.b.Inline.after.mir b/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.b.Inline.after.mir
index 21570a88a..6837da27a 100644
--- a/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.b.Inline.after.mir
+++ b/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.b.Inline.after.mir
@@ -1,30 +1,30 @@
// MIR for `b` after Inline
fn b(_1: &mut Box<T>) -> &mut T {
- debug x => _1; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+0:13: +0:14
- let mut _0: &mut T; // return place in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+0:32: +0:38
- let mut _2: &mut T; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- let mut _3: &mut T; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- let mut _4: &mut std::boxed::Box<T>; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- scope 1 (inlined <Box<T> as AsMut<T>>::as_mut) { // at $DIR/issue_58867_inline_as_ref_as_mut.rs:8:7: 8:15
- debug self => _4; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
- let mut _5: std::boxed::Box<T>; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
- let mut _6: *const T; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
+ debug x => _1;
+ let mut _0: &mut T;
+ let mut _2: &mut T;
+ let mut _3: &mut T;
+ let mut _4: &mut std::boxed::Box<T>;
+ scope 1 (inlined <Box<T> as AsMut<T>>::as_mut) {
+ debug self => _4;
+ let mut _5: std::boxed::Box<T>;
+ let mut _6: *const T;
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- StorageLive(_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- StorageLive(_4); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- _4 = &mut (*_1); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- _5 = deref_copy (*_4); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
- _6 = (((_5.0: std::ptr::Unique<T>).0: std::ptr::NonNull<T>).0: *const T); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
- _3 = &mut (*_6); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
- _2 = &mut (*_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- StorageDead(_4); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:14: +1:15
- _0 = &mut (*_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- StorageDead(_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+2:1: +2:2
- StorageDead(_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+2:1: +2:2
- return; // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+2:2: +2:2
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &mut (*_1);
+ _5 = deref_copy (*_4);
+ _6 = (((_5.0: std::ptr::Unique<T>).0: std::ptr::NonNull<T>).0: *const T);
+ _3 = &mut (*_6);
+ _2 = &mut (*_3);
+ StorageDead(_4);
+ _0 = &mut (*_2);
+ StorageDead(_3);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.c.Inline.after.mir b/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.c.Inline.after.mir
index af830d249..bad7f31ae 100644
--- a/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.c.Inline.after.mir
+++ b/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.c.Inline.after.mir
@@ -1,22 +1,22 @@
// MIR for `c` after Inline
fn c(_1: &[T]) -> &[T] {
- debug x => _1; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+0:13: +0:14
- let mut _0: &[T]; // return place in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+0:25: +0:29
- let _2: &[T]; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- let mut _3: &[T]; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- scope 1 (inlined <[T] as AsRef<[T]>>::as_ref) { // at $DIR/issue_58867_inline_as_ref_as_mut.rs:13:7: 13:15
- debug self => _3; // in scope 1 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
+ debug x => _1;
+ let mut _0: &[T];
+ let _2: &[T];
+ let mut _3: &[T];
+ scope 1 (inlined <[T] as AsRef<[T]>>::as_ref) {
+ debug self => _3;
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- StorageLive(_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- _3 = &(*_1); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- _2 = _3; // scope 1 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
- _0 = &(*_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- StorageDead(_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:14: +1:15
- StorageDead(_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+2:1: +2:2
- return; // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+2:2: +2:2
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _2 = _3;
+ _0 = &(*_2);
+ StorageDead(_3);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.d.Inline.after.mir b/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.d.Inline.after.mir
index 4f9342247..d09bfc33f 100644
--- a/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.d.Inline.after.mir
+++ b/tests/mir-opt/inline/issue_58867_inline_as_ref_as_mut.d.Inline.after.mir
@@ -1,26 +1,26 @@
// MIR for `d` after Inline
fn d(_1: &Box<T>) -> &T {
- debug x => _1; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+0:13: +0:14
- let mut _0: &T; // return place in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+0:28: +0:30
- let _2: &T; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- let mut _3: &std::boxed::Box<T>; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- scope 1 (inlined <Box<T> as AsRef<T>>::as_ref) { // at $DIR/issue_58867_inline_as_ref_as_mut.rs:18:7: 18:15
- debug self => _3; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
- let mut _4: std::boxed::Box<T>; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
- let mut _5: *const T; // in scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
+ debug x => _1;
+ let mut _0: &T;
+ let _2: &T;
+ let mut _3: &std::boxed::Box<T>;
+ scope 1 (inlined <Box<T> as AsRef<T>>::as_ref) {
+ debug self => _3;
+ let mut _4: std::boxed::Box<T>;
+ let mut _5: *const T;
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- StorageLive(_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- _3 = &(*_1); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- _4 = deref_copy (*_3); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
- _5 = (((_4.0: std::ptr::Unique<T>).0: std::ptr::NonNull<T>).0: *const T); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
- _2 = &(*_5); // scope 1 at $SRC_DIR/alloc/src/boxed.rs:LL:COL
- _0 = &(*_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15
- StorageDead(_3); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:14: +1:15
- StorageDead(_2); // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+2:1: +2:2
- return; // scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+2:2: +2:2
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _4 = deref_copy (*_3);
+ _5 = (((_4.0: std::ptr::Unique<T>).0: std::ptr::NonNull<T>).0: *const T);
+ _2 = &(*_5);
+ _0 = &(*_2);
+ StorageDead(_3);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/inline/issue_76997_inline_scopes_parenting.main.Inline.after.mir b/tests/mir-opt/inline/issue_76997_inline_scopes_parenting.main.Inline.after.mir
index 1da3c8bb7..ef91f5040 100644
--- a/tests/mir-opt/inline/issue_76997_inline_scopes_parenting.main.Inline.after.mir
+++ b/tests/mir-opt/inline/issue_76997_inline_scopes_parenting.main.Inline.after.mir
@@ -1,45 +1,38 @@
// MIR for `main` after Inline
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+0:11: +0:11
- let _1: [closure@$DIR/issue_76997_inline_scopes_parenting.rs:5:13: 5:16]; // in scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+1:9: +1:10
- let mut _2: &[closure@$DIR/issue_76997_inline_scopes_parenting.rs:5:13: 5:16]; // in scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:6
- let mut _3: ((),); // in scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
- let mut _4: (); // in scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:7: +2:9
- let mut _5: (); // in scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
+ let mut _0: ();
+ let _1: [closure@$DIR/issue_76997_inline_scopes_parenting.rs:5:13: 5:16];
+ let mut _2: &[closure@$DIR/issue_76997_inline_scopes_parenting.rs:5:13: 5:16];
+ let mut _3: ((),);
+ let mut _4: ();
+ let mut _5: ();
scope 1 {
- debug f => _1; // in scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+1:9: +1:10
- scope 2 (inlined main::{closure#0}) { // at $DIR/issue_76997_inline_scopes_parenting.rs:6:5: 6:10
- debug x => const (); // in scope 2 at $DIR/issue_76997_inline_scopes_parenting.rs:+1:14: +1:15
+ debug f => _1;
+ scope 2 (inlined main::{closure#0}) {
+ debug x => const ();
scope 3 {
- debug y => const (); // in scope 3 at $DIR/issue_76997_inline_scopes_parenting.rs:+1:23: +1:24
+ debug y => const ();
}
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+1:9: +1:10
- _1 = [closure@$DIR/issue_76997_inline_scopes_parenting.rs:5:13: 5:16]; // scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+1:13: +1:33
- // closure
- // + def_id: DefId(0:4 ~ issue_76997_inline_scopes_parenting[5cd2]::main::{closure#0})
- // + substs: [
- // i8,
- // extern "rust-call" fn(((),)),
- // (),
- // ]
- StorageLive(_2); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:6
- _2 = &_1; // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:6
- StorageLive(_3); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
- StorageLive(_4); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:7: +2:9
- _4 = (); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:7: +2:9
- _3 = (move _4,); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
- StorageLive(_5); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
- _5 = move (_3.0: ()); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
- StorageDead(_5); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
- StorageDead(_4); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:9: +2:10
- StorageDead(_3); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:9: +2:10
- StorageDead(_2); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:9: +2:10
- StorageDead(_1); // scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+3:1: +3:2
- return; // scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+3:2: +3:2
+ StorageLive(_1);
+ _1 = [closure@$DIR/issue_76997_inline_scopes_parenting.rs:5:13: 5:16];
+ StorageLive(_2);
+ _2 = &_1;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = ();
+ _3 = (move _4,);
+ StorageLive(_5);
+ _5 = move (_3.0: ());
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/inline/issue_78442.bar.Inline.diff b/tests/mir-opt/inline/issue_78442.bar.Inline.diff
deleted file mode 100644
index dc3fe7555..000000000
--- a/tests/mir-opt/inline/issue_78442.bar.Inline.diff
+++ /dev/null
@@ -1,68 +0,0 @@
-- // MIR for `bar` before Inline
-+ // MIR for `bar` after Inline
-
- fn bar(_1: P) -> () {
- debug _baz => _1; // in scope 0 at $DIR/issue_78442.rs:+2:5: +2:9
- let mut _0: (); // return place in scope 0 at $DIR/issue_78442.rs:+3:3: +3:3
- let _2: (); // in scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
- let mut _3: &fn() {foo}; // in scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
- let _4: fn() {foo}; // in scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
- let mut _5: (); // in scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
-+ scope 1 (inlined <fn() {foo} as Fn<()>>::call - shim(fn() {foo})) { // at $DIR/issue_78442.rs:11:5: 11:17
-+ }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
- StorageLive(_3); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
- StorageLive(_4); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
-- _4 = hide_foo() -> [return: bb1, unwind: bb4]; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
-+ _4 = hide_foo() -> [return: bb1, unwind: bb3]; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
- // mir::Constant
- // + span: $DIR/issue_78442.rs:11:5: 11:13
- // + literal: Const { ty: fn() -> impl Fn() {hide_foo}, val: Value(<ZST>) }
- }
-
- bb1: {
- _3 = &_4; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
- StorageLive(_5); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
- _5 = (); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
-- _2 = <fn() {foo} as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
-- // mir::Constant
-- // + span: $DIR/issue_78442.rs:11:5: 11:15
-- // + literal: Const { ty: for<'a> extern "rust-call" fn(&'a fn() {foo}, ()) -> <fn() {foo} as FnOnce<()>>::Output {<fn() {foo} as Fn<()>>::call}, val: Value(<ZST>) }
-+ _2 = move (*_3)() -> [return: bb5, unwind: bb3]; // scope 1 at $SRC_DIR/core/src/ops/function.rs:LL:COL
- }
-
- bb2: {
-- StorageDead(_5); // scope 0 at $DIR/issue_78442.rs:+4:16: +4:17
-- StorageDead(_3); // scope 0 at $DIR/issue_78442.rs:+4:16: +4:17
-- StorageDead(_4); // scope 0 at $DIR/issue_78442.rs:+4:17: +4:18
-- StorageDead(_2); // scope 0 at $DIR/issue_78442.rs:+4:17: +4:18
-- _0 = const (); // scope 0 at $DIR/issue_78442.rs:+3:3: +5:2
-- drop(_1) -> [return: bb3, unwind: bb5]; // scope 0 at $DIR/issue_78442.rs:+5:1: +5:2
-+ return; // scope 0 at $DIR/issue_78442.rs:+5:2: +5:2
- }
-
-- bb3: {
-- return; // scope 0 at $DIR/issue_78442.rs:+5:2: +5:2
-+ bb3 (cleanup): {
-+ drop(_1) -> [return: bb4, unwind terminate]; // scope 0 at $DIR/issue_78442.rs:+5:1: +5:2
- }
-
- bb4 (cleanup): {
-- drop(_1) -> [return: bb5, unwind terminate]; // scope 0 at $DIR/issue_78442.rs:+5:1: +5:2
-+ resume; // scope 0 at $DIR/issue_78442.rs:+0:1: +5:2
- }
-
-- bb5 (cleanup): {
-- resume; // scope 0 at $DIR/issue_78442.rs:+0:1: +5:2
-+ bb5: {
-+ StorageDead(_5); // scope 0 at $DIR/issue_78442.rs:+4:16: +4:17
-+ StorageDead(_3); // scope 0 at $DIR/issue_78442.rs:+4:16: +4:17
-+ StorageDead(_4); // scope 0 at $DIR/issue_78442.rs:+4:17: +4:18
-+ StorageDead(_2); // scope 0 at $DIR/issue_78442.rs:+4:17: +4:18
-+ _0 = const (); // scope 0 at $DIR/issue_78442.rs:+3:3: +5:2
-+ drop(_1) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue_78442.rs:+5:1: +5:2
- }
- }
-
diff --git a/tests/mir-opt/inline/issue_78442.bar.Inline.panic-abort.diff b/tests/mir-opt/inline/issue_78442.bar.Inline.panic-abort.diff
new file mode 100644
index 000000000..b86eb5f35
--- /dev/null
+++ b/tests/mir-opt/inline/issue_78442.bar.Inline.panic-abort.diff
@@ -0,0 +1,47 @@
+- // MIR for `bar` before Inline
++ // MIR for `bar` after Inline
+
+ fn bar(_1: P) -> () {
+ debug _baz => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: &fn() {foo};
+ let _4: fn() {foo};
+ let mut _5: ();
++ scope 1 (inlined <fn() {foo} as Fn<()>>::call - shim(fn() {foo})) {
++ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = hide_foo() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _3 = &_4;
+ StorageLive(_5);
+ _5 = ();
+- _2 = <fn() {foo} as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind unreachable];
++ _2 = move (*_3)() -> [return: bb3, unwind unreachable];
+ }
+
+ bb2: {
++ return;
++ }
++
++ bb3: {
+ StorageDead(_5);
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageDead(_2);
+ _0 = const ();
+- drop(_1) -> [return: bb3, unwind unreachable];
+- }
+-
+- bb3: {
+- return;
++ drop(_1) -> [return: bb2, unwind unreachable];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/issue_78442.bar.Inline.panic-unwind.diff b/tests/mir-opt/inline/issue_78442.bar.Inline.panic-unwind.diff
new file mode 100644
index 000000000..c67babba2
--- /dev/null
+++ b/tests/mir-opt/inline/issue_78442.bar.Inline.panic-unwind.diff
@@ -0,0 +1,62 @@
+- // MIR for `bar` before Inline
++ // MIR for `bar` after Inline
+
+ fn bar(_1: P) -> () {
+ debug _baz => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: &fn() {foo};
+ let _4: fn() {foo};
+ let mut _5: ();
++ scope 1 (inlined <fn() {foo} as Fn<()>>::call - shim(fn() {foo})) {
++ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+- _4 = hide_foo() -> [return: bb1, unwind: bb4];
++ _4 = hide_foo() -> [return: bb1, unwind: bb3];
+ }
+
+ bb1: {
+ _3 = &_4;
+ StorageLive(_5);
+ _5 = ();
+- _2 = <fn() {foo} as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb4];
++ _2 = move (*_3)() -> [return: bb5, unwind: bb3];
+ }
+
+ bb2: {
+- StorageDead(_5);
+- StorageDead(_3);
+- StorageDead(_4);
+- StorageDead(_2);
+- _0 = const ();
+- drop(_1) -> [return: bb3, unwind: bb5];
++ return;
+ }
+
+- bb3: {
+- return;
++ bb3 (cleanup): {
++ drop(_1) -> [return: bb4, unwind terminate];
+ }
+
+ bb4 (cleanup): {
+- drop(_1) -> [return: bb5, unwind terminate];
++ resume;
+ }
+
+- bb5 (cleanup): {
+- resume;
++ bb5: {
++ StorageDead(_5);
++ StorageDead(_3);
++ StorageDead(_4);
++ StorageDead(_2);
++ _0 = const ();
++ drop(_1) -> [return: bb2, unwind: bb4];
+ }
+ }
+
diff --git a/tests/mir-opt/inline/issue_78442.bar.RevealAll.diff b/tests/mir-opt/inline/issue_78442.bar.RevealAll.diff
deleted file mode 100644
index 8f56ef258..000000000
--- a/tests/mir-opt/inline/issue_78442.bar.RevealAll.diff
+++ /dev/null
@@ -1,57 +0,0 @@
-- // MIR for `bar` before RevealAll
-+ // MIR for `bar` after RevealAll
-
- fn bar(_1: P) -> () {
- debug _baz => _1; // in scope 0 at $DIR/issue_78442.rs:+2:5: +2:9
- let mut _0: (); // return place in scope 0 at $DIR/issue_78442.rs:+3:3: +3:3
- let _2: (); // in scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
-- let mut _3: &impl Fn(); // in scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
-- let _4: impl Fn(); // in scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
-+ let mut _3: &fn() {foo}; // in scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
-+ let _4: fn() {foo}; // in scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
- let mut _5: (); // in scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
- StorageLive(_3); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
- StorageLive(_4); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
- _4 = hide_foo() -> [return: bb1, unwind: bb4]; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
- // mir::Constant
- // + span: $DIR/issue_78442.rs:11:5: 11:13
- // + literal: Const { ty: fn() -> impl Fn() {hide_foo}, val: Value(<ZST>) }
- }
-
- bb1: {
- _3 = &_4; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
- StorageLive(_5); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
- _5 = (); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
-- _2 = <impl Fn() as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
-+ _2 = <fn() {foo} as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
- // mir::Constant
- // + span: $DIR/issue_78442.rs:11:5: 11:15
-- // + literal: Const { ty: for<'a> extern "rust-call" fn(&'a impl Fn(), ()) -> <impl Fn() as FnOnce<()>>::Output {<impl Fn() as Fn<()>>::call}, val: Value(<ZST>) }
-+ // + literal: Const { ty: for<'a> extern "rust-call" fn(&'a fn() {foo}, ()) -> <fn() {foo} as FnOnce<()>>::Output {<fn() {foo} as Fn<()>>::call}, val: Value(<ZST>) }
- }
-
- bb2: {
- StorageDead(_5); // scope 0 at $DIR/issue_78442.rs:+4:16: +4:17
- StorageDead(_3); // scope 0 at $DIR/issue_78442.rs:+4:16: +4:17
- StorageDead(_4); // scope 0 at $DIR/issue_78442.rs:+4:17: +4:18
- StorageDead(_2); // scope 0 at $DIR/issue_78442.rs:+4:17: +4:18
- _0 = const (); // scope 0 at $DIR/issue_78442.rs:+3:3: +5:2
- drop(_1) -> [return: bb3, unwind: bb5]; // scope 0 at $DIR/issue_78442.rs:+5:1: +5:2
- }
-
- bb3: {
- return; // scope 0 at $DIR/issue_78442.rs:+5:2: +5:2
- }
-
- bb4 (cleanup): {
- drop(_1) -> [return: bb5, unwind terminate]; // scope 0 at $DIR/issue_78442.rs:+5:1: +5:2
- }
-
- bb5 (cleanup): {
- resume; // scope 0 at $DIR/issue_78442.rs:+0:1: +5:2
- }
- }
-
diff --git a/tests/mir-opt/inline/issue_78442.bar.RevealAll.panic-abort.diff b/tests/mir-opt/inline/issue_78442.bar.RevealAll.panic-abort.diff
new file mode 100644
index 000000000..c94dd2556
--- /dev/null
+++ b/tests/mir-opt/inline/issue_78442.bar.RevealAll.panic-abort.diff
@@ -0,0 +1,42 @@
+- // MIR for `bar` before RevealAll
++ // MIR for `bar` after RevealAll
+
+ fn bar(_1: P) -> () {
+ debug _baz => _1;
+ let mut _0: ();
+ let _2: ();
+- let mut _3: &impl Fn();
+- let _4: impl Fn();
++ let mut _3: &fn() {foo};
++ let _4: fn() {foo};
+ let mut _5: ();
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = hide_foo() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _3 = &_4;
+ StorageLive(_5);
+ _5 = ();
+- _2 = <impl Fn() as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind unreachable];
++ _2 = <fn() {foo} as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ StorageDead(_5);
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageDead(_2);
+ _0 = const ();
+ drop(_1) -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/issue_78442.bar.RevealAll.panic-unwind.diff b/tests/mir-opt/inline/issue_78442.bar.RevealAll.panic-unwind.diff
new file mode 100644
index 000000000..7765e491d
--- /dev/null
+++ b/tests/mir-opt/inline/issue_78442.bar.RevealAll.panic-unwind.diff
@@ -0,0 +1,50 @@
+- // MIR for `bar` before RevealAll
++ // MIR for `bar` after RevealAll
+
+ fn bar(_1: P) -> () {
+ debug _baz => _1;
+ let mut _0: ();
+ let _2: ();
+- let mut _3: &impl Fn();
+- let _4: impl Fn();
++ let mut _3: &fn() {foo};
++ let _4: fn() {foo};
+ let mut _5: ();
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = hide_foo() -> [return: bb1, unwind: bb4];
+ }
+
+ bb1: {
+ _3 = &_4;
+ StorageLive(_5);
+ _5 = ();
+- _2 = <impl Fn() as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb4];
++ _2 = <fn() {foo} as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb4];
+ }
+
+ bb2: {
+ StorageDead(_5);
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageDead(_2);
+ _0 = const ();
+ drop(_1) -> [return: bb3, unwind: bb5];
+ }
+
+ bb3: {
+ return;
+ }
+
+ bb4 (cleanup): {
+ drop(_1) -> [return: bb5, unwind terminate];
+ }
+
+ bb5 (cleanup): {
+ resume;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/issue_78442.rs b/tests/mir-opt/inline/issue_78442.rs
index aa8ede2df..d956e6241 100644
--- a/tests/mir-opt/inline/issue_78442.rs
+++ b/tests/mir-opt/inline/issue_78442.rs
@@ -1,5 +1,5 @@
// compile-flags: -Z mir-opt-level=3 -Z inline-mir
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![crate_type = "lib"]
// EMIT_MIR issue_78442.bar.RevealAll.diff
diff --git a/tests/mir-opt/inline/unchecked_shifts.rs b/tests/mir-opt/inline/unchecked_shifts.rs
index 17724530d..22f84e44a 100644
--- a/tests/mir-opt/inline/unchecked_shifts.rs
+++ b/tests/mir-opt/inline/unchecked_shifts.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![crate_type = "lib"]
#![feature(unchecked_math)]
@@ -16,3 +16,15 @@ pub unsafe fn unchecked_shl_unsigned_smaller(a: u16, b: u32) -> u16 {
pub unsafe fn unchecked_shr_signed_smaller(a: i16, b: u32) -> i16 {
a.unchecked_shr(b)
}
+
+// EMIT_MIR unchecked_shifts.unchecked_shl_unsigned_bigger.Inline.diff
+// EMIT_MIR unchecked_shifts.unchecked_shl_unsigned_bigger.PreCodegen.after.mir
+pub unsafe fn unchecked_shl_unsigned_bigger(a: u64, b: u32) -> u64 {
+ a.unchecked_shl(b)
+}
+
+// EMIT_MIR unchecked_shifts.unchecked_shr_signed_bigger.Inline.diff
+// EMIT_MIR unchecked_shifts.unchecked_shr_signed_bigger.PreCodegen.after.mir
+pub unsafe fn unchecked_shr_signed_bigger(a: i64, b: u32) -> i64 {
+ a.unchecked_shr(b)
+}
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.Inline.panic-abort.diff b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.Inline.panic-abort.diff
new file mode 100644
index 000000000..1ab1d01e5
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.Inline.panic-abort.diff
@@ -0,0 +1,36 @@
+- // MIR for `unchecked_shl_unsigned_bigger` before Inline
++ // MIR for `unchecked_shl_unsigned_bigger` after Inline
+
+ fn unchecked_shl_unsigned_bigger(_1: u64, _2: u32) -> u64 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: u64;
+ let mut _3: u64;
+ let mut _4: u32;
++ scope 1 (inlined core::num::<impl u64>::unchecked_shl) {
++ debug self => _3;
++ debug rhs => _4;
++ let mut _5: u64;
++ scope 2 {
++ }
++ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _1;
+ StorageLive(_4);
+ _4 = _2;
+- _0 = core::num::<impl u64>::unchecked_shl(move _3, move _4) -> [return: bb1, unwind unreachable];
+- }
+-
+- bb1: {
++ StorageLive(_5);
++ _5 = _4 as u64 (IntToInt);
++ _0 = ShlUnchecked(_3, move _5);
++ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.Inline.panic-unwind.diff b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.Inline.panic-unwind.diff
new file mode 100644
index 000000000..d71b5c4a6
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.Inline.panic-unwind.diff
@@ -0,0 +1,36 @@
+- // MIR for `unchecked_shl_unsigned_bigger` before Inline
++ // MIR for `unchecked_shl_unsigned_bigger` after Inline
+
+ fn unchecked_shl_unsigned_bigger(_1: u64, _2: u32) -> u64 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: u64;
+ let mut _3: u64;
+ let mut _4: u32;
++ scope 1 (inlined core::num::<impl u64>::unchecked_shl) {
++ debug self => _3;
++ debug rhs => _4;
++ let mut _5: u64;
++ scope 2 {
++ }
++ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _1;
+ StorageLive(_4);
+ _4 = _2;
+- _0 = core::num::<impl u64>::unchecked_shl(move _3, move _4) -> [return: bb1, unwind continue];
+- }
+-
+- bb1: {
++ StorageLive(_5);
++ _5 = _4 as u64 (IntToInt);
++ _0 = ShlUnchecked(_3, move _5);
++ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.PreCodegen.after.panic-abort.mir b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..65b832497
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,22 @@
+// MIR for `unchecked_shl_unsigned_bigger` after PreCodegen
+
+fn unchecked_shl_unsigned_bigger(_1: u64, _2: u32) -> u64 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: u64;
+ scope 1 (inlined core::num::<impl u64>::unchecked_shl) {
+ debug self => _1;
+ debug rhs => _2;
+ let mut _3: u64;
+ scope 2 {
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _2 as u64 (IntToInt);
+ _0 = ShlUnchecked(_1, move _3);
+ StorageDead(_3);
+ return;
+ }
+}
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..65b832497
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,22 @@
+// MIR for `unchecked_shl_unsigned_bigger` after PreCodegen
+
+fn unchecked_shl_unsigned_bigger(_1: u64, _2: u32) -> u64 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: u64;
+ scope 1 (inlined core::num::<impl u64>::unchecked_shl) {
+ debug self => _1;
+ debug rhs => _2;
+ let mut _3: u64;
+ scope 2 {
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _2 as u64 (IntToInt);
+ _0 = ShlUnchecked(_1, move _3);
+ StorageDead(_3);
+ return;
+ }
+}
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.diff b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.diff
deleted file mode 100644
index d76cd0e2b..000000000
--- a/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.diff
+++ /dev/null
@@ -1,152 +0,0 @@
-- // MIR for `unchecked_shl_unsigned_smaller` before Inline
-+ // MIR for `unchecked_shl_unsigned_smaller` after Inline
-
- fn unchecked_shl_unsigned_smaller(_1: u16, _2: u32) -> u16 {
- debug a => _1; // in scope 0 at $DIR/unchecked_shifts.rs:+0:46: +0:47
- debug b => _2; // in scope 0 at $DIR/unchecked_shifts.rs:+0:54: +0:55
- let mut _0: u16; // return place in scope 0 at $DIR/unchecked_shifts.rs:+0:65: +0:68
- let mut _3: u16; // in scope 0 at $DIR/unchecked_shifts.rs:+1:5: +1:6
- let mut _4: u32; // in scope 0 at $DIR/unchecked_shifts.rs:+1:21: +1:22
-+ scope 1 (inlined core::num::<impl u16>::unchecked_shl) { // at $DIR/unchecked_shifts.rs:11:7: 11:23
-+ debug self => _3; // in scope 1 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
-+ debug rhs => _4; // in scope 1 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
-+ let mut _5: u16; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ let mut _6: (u32,); // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ let mut _7: u32; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ scope 2 {
-+ scope 3 (inlined core::num::<impl u16>::unchecked_shl::conv) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ debug x => _7; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ let mut _8: std::option::Option<u16>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ let mut _9: std::result::Result<u16, std::num::TryFromIntError>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ scope 4 {
-+ scope 5 (inlined <u32 as TryInto<u16>>::try_into) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ debug self => _7; // in scope 5 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
-+ scope 6 (inlined convert::num::<impl TryFrom<u32> for u16>::try_from) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
-+ debug u => _7; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ let mut _10: bool; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ let mut _11: u32; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ let mut _12: u16; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ }
-+ }
-+ scope 7 (inlined Result::<u16, TryFromIntError>::ok) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ debug self => _9; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ let mut _13: isize; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ let _14: u16; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ scope 8 {
-+ debug x => _14; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
-+ }
-+ }
-+ scope 9 (inlined #[track_caller] Option::<u16>::unwrap_unchecked) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ debug self => _8; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
-+ let mut _15: &std::option::Option<u16>; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
-+ let mut _16: isize; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
-+ scope 10 {
-+ debug val => _5; // in scope 10 at $SRC_DIR/core/src/option.rs:LL:COL
-+ }
-+ scope 11 {
-+ scope 13 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
-+ scope 14 {
-+ scope 15 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
-+ }
-+ }
-+ }
-+ }
-+ scope 12 (inlined Option::<u16>::is_some) { // at $SRC_DIR/core/src/option.rs:LL:COL
-+ debug self => _15; // in scope 12 at $SRC_DIR/core/src/option.rs:LL:COL
-+ }
-+ }
-+ }
-+ }
-+ }
-+ }
-
- bb0: {
- StorageLive(_3); // scope 0 at $DIR/unchecked_shifts.rs:+1:5: +1:6
- _3 = _1; // scope 0 at $DIR/unchecked_shifts.rs:+1:5: +1:6
- StorageLive(_4); // scope 0 at $DIR/unchecked_shifts.rs:+1:21: +1:22
- _4 = _2; // scope 0 at $DIR/unchecked_shifts.rs:+1:21: +1:22
-- _0 = core::num::<impl u16>::unchecked_shl(move _3, move _4) -> bb1; // scope 0 at $DIR/unchecked_shifts.rs:+1:5: +1:23
-- // mir::Constant
-- // + span: $DIR/unchecked_shifts.rs:11:7: 11:20
-- // + literal: Const { ty: unsafe fn(u16, u32) -> u16 {core::num::<impl u16>::unchecked_shl}, val: Value(<ZST>) }
-+ StorageLive(_5); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageLive(_6); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ _6 = (_4,); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageLive(_7); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ _7 = move (_6.0: u32); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageLive(_8); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageLive(_9); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageLive(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ StorageLive(_11); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ _11 = const 65535_u32; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ _10 = Gt(_7, move _11); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ StorageDead(_11); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ switchInt(move _10) -> [0: bb3, otherwise: bb2]; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- }
-
- bb1: {
-+ StorageDead(_5); // scope 2 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
- StorageDead(_4); // scope 0 at $DIR/unchecked_shifts.rs:+1:22: +1:23
- StorageDead(_3); // scope 0 at $DIR/unchecked_shifts.rs:+1:22: +1:23
- return; // scope 0 at $DIR/unchecked_shifts.rs:+2:2: +2:2
-+ }
-+
-+ bb2: {
-+ _9 = Result::<u16, TryFromIntError>::Err(const TryFromIntError(())); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: TryFromIntError, val: Value(<ZST>) }
-+ goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ }
-+
-+ bb3: {
-+ StorageLive(_12); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ _12 = _7 as u16 (IntToInt); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ _9 = Result::<u16, TryFromIntError>::Ok(move _12); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ StorageDead(_12); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ }
-+
-+ bb4: {
-+ StorageDead(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ StorageLive(_14); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ _13 = discriminant(_9); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ switchInt(move _13) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ }
-+
-+ bb5: {
-+ _8 = Option::<u16>::None; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ }
-+
-+ bb6: {
-+ unreachable; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ }
-+
-+ bb7: {
-+ _14 = move ((_9 as Ok).0: u16); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ _8 = Option::<u16>::Some(move _14); // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
-+ goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ }
-+
-+ bb8: {
-+ StorageDead(_14); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageDead(_9); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageLive(_15); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ _16 = discriminant(_8); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
-+ switchInt(move _16) -> [1: bb9, otherwise: bb6]; // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
-+ }
-+
-+ bb9: {
-+ _5 = move ((_8 as Some).0: u16); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
-+ StorageDead(_15); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageDead(_8); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageDead(_7); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageDead(_6); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ _0 = unchecked_shl::<u16>(_3, move _5) -> [return: bb1, unwind unreachable]; // scope 2 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
-+ // mir::Constant
-+ // + span: $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
-+ // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(u16, u16) -> u16 {unchecked_shl::<u16>}, val: Value(<ZST>) }
- }
- }
-
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.panic-abort.diff b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.panic-abort.diff
new file mode 100644
index 000000000..90b32247c
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.panic-abort.diff
@@ -0,0 +1,45 @@
+- // MIR for `unchecked_shl_unsigned_smaller` before Inline
++ // MIR for `unchecked_shl_unsigned_smaller` after Inline
+
+ fn unchecked_shl_unsigned_smaller(_1: u16, _2: u32) -> u16 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: u16;
+ let mut _3: u16;
+ let mut _4: u32;
++ scope 1 (inlined core::num::<impl u16>::unchecked_shl) {
++ debug self => _3;
++ debug rhs => _4;
++ let mut _5: u16;
++ let mut _6: bool;
++ let mut _7: u32;
++ scope 2 {
++ }
++ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _1;
+ StorageLive(_4);
+ _4 = _2;
+- _0 = core::num::<impl u16>::unchecked_shl(move _3, move _4) -> [return: bb1, unwind unreachable];
+- }
+-
+- bb1: {
++ StorageLive(_5);
++ StorageLive(_6);
++ StorageLive(_7);
++ _7 = const 65535_u32;
++ _6 = Le(_4, move _7);
++ StorageDead(_7);
++ assume(move _6);
++ StorageDead(_6);
++ _5 = _4 as u16 (IntToInt);
++ _0 = ShlUnchecked(_3, move _5);
++ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.panic-unwind.diff b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.panic-unwind.diff
new file mode 100644
index 000000000..cae25759c
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.panic-unwind.diff
@@ -0,0 +1,45 @@
+- // MIR for `unchecked_shl_unsigned_smaller` before Inline
++ // MIR for `unchecked_shl_unsigned_smaller` after Inline
+
+ fn unchecked_shl_unsigned_smaller(_1: u16, _2: u32) -> u16 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: u16;
+ let mut _3: u16;
+ let mut _4: u32;
++ scope 1 (inlined core::num::<impl u16>::unchecked_shl) {
++ debug self => _3;
++ debug rhs => _4;
++ let mut _5: u16;
++ let mut _6: bool;
++ let mut _7: u32;
++ scope 2 {
++ }
++ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _1;
+ StorageLive(_4);
+ _4 = _2;
+- _0 = core::num::<impl u16>::unchecked_shl(move _3, move _4) -> [return: bb1, unwind continue];
+- }
+-
+- bb1: {
++ StorageLive(_5);
++ StorageLive(_6);
++ StorageLive(_7);
++ _7 = const 65535_u32;
++ _6 = Le(_4, move _7);
++ StorageDead(_7);
++ assume(move _6);
++ StorageDead(_6);
++ _5 = _4 as u16 (IntToInt);
++ _0 = ShlUnchecked(_3, move _5);
++ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.mir b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.mir
deleted file mode 100644
index 3c175ed15..000000000
--- a/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.mir
+++ /dev/null
@@ -1,138 +0,0 @@
-// MIR for `unchecked_shl_unsigned_smaller` after PreCodegen
-
-fn unchecked_shl_unsigned_smaller(_1: u16, _2: u32) -> u16 {
- debug a => _1; // in scope 0 at $DIR/unchecked_shifts.rs:+0:46: +0:47
- debug b => _2; // in scope 0 at $DIR/unchecked_shifts.rs:+0:54: +0:55
- let mut _0: u16; // return place in scope 0 at $DIR/unchecked_shifts.rs:+0:65: +0:68
- scope 1 (inlined core::num::<impl u16>::unchecked_shl) { // at $DIR/unchecked_shifts.rs:11:7: 11:23
- debug self => _1; // in scope 1 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
- debug rhs => _2; // in scope 1 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
- let mut _3: u16; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- let mut _4: (u32,); // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- let mut _5: u32; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- scope 2 {
- scope 3 (inlined core::num::<impl u16>::unchecked_shl::conv) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
- debug x => _5; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- let mut _6: std::option::Option<u16>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- let mut _7: std::result::Result<u16, std::num::TryFromIntError>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- scope 4 {
- scope 5 (inlined <u32 as TryInto<u16>>::try_into) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
- debug self => _5; // in scope 5 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
- scope 6 (inlined convert::num::<impl TryFrom<u32> for u16>::try_from) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
- debug u => _5; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- let mut _8: bool; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- let mut _9: u32; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- let mut _10: u16; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- }
- }
- scope 7 (inlined Result::<u16, TryFromIntError>::ok) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
- debug self => _7; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- let mut _11: isize; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- let _12: u16; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- scope 8 {
- debug x => _12; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
- }
- }
- scope 9 (inlined #[track_caller] Option::<u16>::unwrap_unchecked) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
- debug self => _6; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
- let mut _13: &std::option::Option<u16>; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
- let mut _14: isize; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
- scope 10 {
- debug val => _3; // in scope 10 at $SRC_DIR/core/src/option.rs:LL:COL
- }
- scope 11 {
- scope 13 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
- scope 14 {
- scope 15 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- }
- }
- }
- }
- scope 12 (inlined Option::<u16>::is_some) { // at $SRC_DIR/core/src/option.rs:LL:COL
- debug self => _13; // in scope 12 at $SRC_DIR/core/src/option.rs:LL:COL
- }
- }
- }
- }
- }
- }
-
- bb0: {
- StorageLive(_3); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageLive(_4); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- _4 = (_2,); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageLive(_5); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- _5 = move (_4.0: u32); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageLive(_6); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageLive(_7); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageLive(_8); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- StorageLive(_9); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- _9 = const 65535_u32; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- _8 = Gt(_5, move _9); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- StorageDead(_9); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- switchInt(move _8) -> [0: bb3, otherwise: bb2]; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- }
-
- bb1: {
- StorageDead(_3); // scope 2 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
- return; // scope 0 at $DIR/unchecked_shifts.rs:+2:2: +2:2
- }
-
- bb2: {
- _7 = Result::<u16, TryFromIntError>::Err(const TryFromIntError(())); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- // mir::Constant
- // + span: no-location
- // + literal: Const { ty: TryFromIntError, val: Value(<ZST>) }
- goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- }
-
- bb3: {
- StorageLive(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- _10 = _5 as u16 (IntToInt); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- _7 = Result::<u16, TryFromIntError>::Ok(move _10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- StorageDead(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- }
-
- bb4: {
- StorageDead(_8); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- StorageLive(_12); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- _11 = discriminant(_7); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- switchInt(move _11) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- }
-
- bb5: {
- _6 = Option::<u16>::None; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- }
-
- bb6: {
- unreachable; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- }
-
- bb7: {
- _12 = move ((_7 as Ok).0: u16); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- _6 = Option::<u16>::Some(move _12); // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
- goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- }
-
- bb8: {
- StorageDead(_12); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageDead(_7); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageLive(_13); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- _14 = discriminant(_6); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
- switchInt(move _14) -> [1: bb9, otherwise: bb6]; // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
- }
-
- bb9: {
- _3 = move ((_6 as Some).0: u16); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
- StorageDead(_13); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageDead(_6); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageDead(_5); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageDead(_4); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- _0 = unchecked_shl::<u16>(_1, move _3) -> [return: bb1, unwind unreachable]; // scope 2 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(u16, u16) -> u16 {unchecked_shl::<u16>}, val: Value(<ZST>) }
- }
-}
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.panic-abort.mir b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..3f388a69d
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,31 @@
+// MIR for `unchecked_shl_unsigned_smaller` after PreCodegen
+
+fn unchecked_shl_unsigned_smaller(_1: u16, _2: u32) -> u16 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: u16;
+ scope 1 (inlined core::num::<impl u16>::unchecked_shl) {
+ debug self => _1;
+ debug rhs => _2;
+ let mut _3: u32;
+ let mut _4: bool;
+ let mut _5: u16;
+ scope 2 {
+ }
+ }
+
+ bb0: {
+ StorageLive(_5);
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = const 65535_u32;
+ _4 = Le(_2, move _3);
+ StorageDead(_3);
+ assume(move _4);
+ StorageDead(_4);
+ _5 = _2 as u16 (IntToInt);
+ _0 = ShlUnchecked(_1, move _5);
+ StorageDead(_5);
+ return;
+ }
+}
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..3f388a69d
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,31 @@
+// MIR for `unchecked_shl_unsigned_smaller` after PreCodegen
+
+fn unchecked_shl_unsigned_smaller(_1: u16, _2: u32) -> u16 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: u16;
+ scope 1 (inlined core::num::<impl u16>::unchecked_shl) {
+ debug self => _1;
+ debug rhs => _2;
+ let mut _3: u32;
+ let mut _4: bool;
+ let mut _5: u16;
+ scope 2 {
+ }
+ }
+
+ bb0: {
+ StorageLive(_5);
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = const 65535_u32;
+ _4 = Le(_2, move _3);
+ StorageDead(_3);
+ assume(move _4);
+ StorageDead(_4);
+ _5 = _2 as u16 (IntToInt);
+ _0 = ShlUnchecked(_1, move _5);
+ StorageDead(_5);
+ return;
+ }
+}
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.Inline.panic-abort.diff b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.Inline.panic-abort.diff
new file mode 100644
index 000000000..1e83fec4f
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.Inline.panic-abort.diff
@@ -0,0 +1,36 @@
+- // MIR for `unchecked_shr_signed_bigger` before Inline
++ // MIR for `unchecked_shr_signed_bigger` after Inline
+
+ fn unchecked_shr_signed_bigger(_1: i64, _2: u32) -> i64 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: i64;
+ let mut _3: i64;
+ let mut _4: u32;
++ scope 1 (inlined core::num::<impl i64>::unchecked_shr) {
++ debug self => _3;
++ debug rhs => _4;
++ let mut _5: i64;
++ scope 2 {
++ }
++ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _1;
+ StorageLive(_4);
+ _4 = _2;
+- _0 = core::num::<impl i64>::unchecked_shr(move _3, move _4) -> [return: bb1, unwind unreachable];
+- }
+-
+- bb1: {
++ StorageLive(_5);
++ _5 = _4 as i64 (IntToInt);
++ _0 = ShrUnchecked(_3, move _5);
++ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.Inline.panic-unwind.diff b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.Inline.panic-unwind.diff
new file mode 100644
index 000000000..6aafb61dc
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.Inline.panic-unwind.diff
@@ -0,0 +1,36 @@
+- // MIR for `unchecked_shr_signed_bigger` before Inline
++ // MIR for `unchecked_shr_signed_bigger` after Inline
+
+ fn unchecked_shr_signed_bigger(_1: i64, _2: u32) -> i64 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: i64;
+ let mut _3: i64;
+ let mut _4: u32;
++ scope 1 (inlined core::num::<impl i64>::unchecked_shr) {
++ debug self => _3;
++ debug rhs => _4;
++ let mut _5: i64;
++ scope 2 {
++ }
++ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _1;
+ StorageLive(_4);
+ _4 = _2;
+- _0 = core::num::<impl i64>::unchecked_shr(move _3, move _4) -> [return: bb1, unwind continue];
+- }
+-
+- bb1: {
++ StorageLive(_5);
++ _5 = _4 as i64 (IntToInt);
++ _0 = ShrUnchecked(_3, move _5);
++ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.PreCodegen.after.panic-abort.mir b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..7524ec497
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,22 @@
+// MIR for `unchecked_shr_signed_bigger` after PreCodegen
+
+fn unchecked_shr_signed_bigger(_1: i64, _2: u32) -> i64 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: i64;
+ scope 1 (inlined core::num::<impl i64>::unchecked_shr) {
+ debug self => _1;
+ debug rhs => _2;
+ let mut _3: i64;
+ scope 2 {
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _2 as i64 (IntToInt);
+ _0 = ShrUnchecked(_1, move _3);
+ StorageDead(_3);
+ return;
+ }
+}
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..7524ec497
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,22 @@
+// MIR for `unchecked_shr_signed_bigger` after PreCodegen
+
+fn unchecked_shr_signed_bigger(_1: i64, _2: u32) -> i64 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: i64;
+ scope 1 (inlined core::num::<impl i64>::unchecked_shr) {
+ debug self => _1;
+ debug rhs => _2;
+ let mut _3: i64;
+ scope 2 {
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _2 as i64 (IntToInt);
+ _0 = ShrUnchecked(_1, move _3);
+ StorageDead(_3);
+ return;
+ }
+}
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.diff b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.diff
deleted file mode 100644
index f3d3e6090..000000000
--- a/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.diff
+++ /dev/null
@@ -1,152 +0,0 @@
-- // MIR for `unchecked_shr_signed_smaller` before Inline
-+ // MIR for `unchecked_shr_signed_smaller` after Inline
-
- fn unchecked_shr_signed_smaller(_1: i16, _2: u32) -> i16 {
- debug a => _1; // in scope 0 at $DIR/unchecked_shifts.rs:+0:44: +0:45
- debug b => _2; // in scope 0 at $DIR/unchecked_shifts.rs:+0:52: +0:53
- let mut _0: i16; // return place in scope 0 at $DIR/unchecked_shifts.rs:+0:63: +0:66
- let mut _3: i16; // in scope 0 at $DIR/unchecked_shifts.rs:+1:5: +1:6
- let mut _4: u32; // in scope 0 at $DIR/unchecked_shifts.rs:+1:21: +1:22
-+ scope 1 (inlined core::num::<impl i16>::unchecked_shr) { // at $DIR/unchecked_shifts.rs:17:7: 17:23
-+ debug self => _3; // in scope 1 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
-+ debug rhs => _4; // in scope 1 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
-+ let mut _5: i16; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ let mut _6: (u32,); // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ let mut _7: u32; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ scope 2 {
-+ scope 3 (inlined core::num::<impl i16>::unchecked_shr::conv) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ debug x => _7; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ let mut _8: std::option::Option<i16>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ let mut _9: std::result::Result<i16, std::num::TryFromIntError>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ scope 4 {
-+ scope 5 (inlined <u32 as TryInto<i16>>::try_into) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ debug self => _7; // in scope 5 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
-+ scope 6 (inlined convert::num::<impl TryFrom<u32> for i16>::try_from) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
-+ debug u => _7; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ let mut _10: bool; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ let mut _11: u32; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ let mut _12: i16; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ }
-+ }
-+ scope 7 (inlined Result::<i16, TryFromIntError>::ok) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ debug self => _9; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ let mut _13: isize; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ let _14: i16; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ scope 8 {
-+ debug x => _14; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
-+ }
-+ }
-+ scope 9 (inlined #[track_caller] Option::<i16>::unwrap_unchecked) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ debug self => _8; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
-+ let mut _15: &std::option::Option<i16>; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
-+ let mut _16: isize; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
-+ scope 10 {
-+ debug val => _5; // in scope 10 at $SRC_DIR/core/src/option.rs:LL:COL
-+ }
-+ scope 11 {
-+ scope 13 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
-+ scope 14 {
-+ scope 15 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
-+ }
-+ }
-+ }
-+ }
-+ scope 12 (inlined Option::<i16>::is_some) { // at $SRC_DIR/core/src/option.rs:LL:COL
-+ debug self => _15; // in scope 12 at $SRC_DIR/core/src/option.rs:LL:COL
-+ }
-+ }
-+ }
-+ }
-+ }
-+ }
-
- bb0: {
- StorageLive(_3); // scope 0 at $DIR/unchecked_shifts.rs:+1:5: +1:6
- _3 = _1; // scope 0 at $DIR/unchecked_shifts.rs:+1:5: +1:6
- StorageLive(_4); // scope 0 at $DIR/unchecked_shifts.rs:+1:21: +1:22
- _4 = _2; // scope 0 at $DIR/unchecked_shifts.rs:+1:21: +1:22
-- _0 = core::num::<impl i16>::unchecked_shr(move _3, move _4) -> bb1; // scope 0 at $DIR/unchecked_shifts.rs:+1:5: +1:23
-- // mir::Constant
-- // + span: $DIR/unchecked_shifts.rs:17:7: 17:20
-- // + literal: Const { ty: unsafe fn(i16, u32) -> i16 {core::num::<impl i16>::unchecked_shr}, val: Value(<ZST>) }
-+ StorageLive(_5); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageLive(_6); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ _6 = (_4,); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageLive(_7); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ _7 = move (_6.0: u32); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageLive(_8); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageLive(_9); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageLive(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ StorageLive(_11); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ _11 = const 32767_u32; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ _10 = Gt(_7, move _11); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ StorageDead(_11); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ switchInt(move _10) -> [0: bb3, otherwise: bb2]; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- }
-
- bb1: {
-+ StorageDead(_5); // scope 2 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
- StorageDead(_4); // scope 0 at $DIR/unchecked_shifts.rs:+1:22: +1:23
- StorageDead(_3); // scope 0 at $DIR/unchecked_shifts.rs:+1:22: +1:23
- return; // scope 0 at $DIR/unchecked_shifts.rs:+2:2: +2:2
-+ }
-+
-+ bb2: {
-+ _9 = Result::<i16, TryFromIntError>::Err(const TryFromIntError(())); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ // mir::Constant
-+ // + span: no-location
-+ // + literal: Const { ty: TryFromIntError, val: Value(<ZST>) }
-+ goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ }
-+
-+ bb3: {
-+ StorageLive(_12); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ _12 = _7 as i16 (IntToInt); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ _9 = Result::<i16, TryFromIntError>::Ok(move _12); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ StorageDead(_12); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ }
-+
-+ bb4: {
-+ StorageDead(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
-+ StorageLive(_14); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ _13 = discriminant(_9); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ switchInt(move _13) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ }
-+
-+ bb5: {
-+ _8 = Option::<i16>::None; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ }
-+
-+ bb6: {
-+ unreachable; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ }
-+
-+ bb7: {
-+ _14 = move ((_9 as Ok).0: i16); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ _8 = Option::<i16>::Some(move _14); // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
-+ goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
-+ }
-+
-+ bb8: {
-+ StorageDead(_14); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageDead(_9); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageLive(_15); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ _16 = discriminant(_8); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
-+ switchInt(move _16) -> [1: bb9, otherwise: bb6]; // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
-+ }
-+
-+ bb9: {
-+ _5 = move ((_8 as Some).0: i16); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
-+ StorageDead(_15); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageDead(_8); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageDead(_7); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ StorageDead(_6); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
-+ _0 = unchecked_shr::<i16>(_3, move _5) -> [return: bb1, unwind unreachable]; // scope 2 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
-+ // mir::Constant
-+ // + span: $SRC_DIR/core/src/num/int_macros.rs:LL:COL
-+ // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(i16, i16) -> i16 {unchecked_shr::<i16>}, val: Value(<ZST>) }
- }
- }
-
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.panic-abort.diff b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.panic-abort.diff
new file mode 100644
index 000000000..fa7e5d16e
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.panic-abort.diff
@@ -0,0 +1,45 @@
+- // MIR for `unchecked_shr_signed_smaller` before Inline
++ // MIR for `unchecked_shr_signed_smaller` after Inline
+
+ fn unchecked_shr_signed_smaller(_1: i16, _2: u32) -> i16 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: i16;
+ let mut _3: i16;
+ let mut _4: u32;
++ scope 1 (inlined core::num::<impl i16>::unchecked_shr) {
++ debug self => _3;
++ debug rhs => _4;
++ let mut _5: i16;
++ let mut _6: bool;
++ let mut _7: u32;
++ scope 2 {
++ }
++ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _1;
+ StorageLive(_4);
+ _4 = _2;
+- _0 = core::num::<impl i16>::unchecked_shr(move _3, move _4) -> [return: bb1, unwind unreachable];
+- }
+-
+- bb1: {
++ StorageLive(_5);
++ StorageLive(_6);
++ StorageLive(_7);
++ _7 = const 32767_u32;
++ _6 = Le(_4, move _7);
++ StorageDead(_7);
++ assume(move _6);
++ StorageDead(_6);
++ _5 = _4 as i16 (IntToInt);
++ _0 = ShrUnchecked(_3, move _5);
++ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.panic-unwind.diff b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.panic-unwind.diff
new file mode 100644
index 000000000..fe5331214
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.panic-unwind.diff
@@ -0,0 +1,45 @@
+- // MIR for `unchecked_shr_signed_smaller` before Inline
++ // MIR for `unchecked_shr_signed_smaller` after Inline
+
+ fn unchecked_shr_signed_smaller(_1: i16, _2: u32) -> i16 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: i16;
+ let mut _3: i16;
+ let mut _4: u32;
++ scope 1 (inlined core::num::<impl i16>::unchecked_shr) {
++ debug self => _3;
++ debug rhs => _4;
++ let mut _5: i16;
++ let mut _6: bool;
++ let mut _7: u32;
++ scope 2 {
++ }
++ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _1;
+ StorageLive(_4);
+ _4 = _2;
+- _0 = core::num::<impl i16>::unchecked_shr(move _3, move _4) -> [return: bb1, unwind continue];
+- }
+-
+- bb1: {
++ StorageLive(_5);
++ StorageLive(_6);
++ StorageLive(_7);
++ _7 = const 32767_u32;
++ _6 = Le(_4, move _7);
++ StorageDead(_7);
++ assume(move _6);
++ StorageDead(_6);
++ _5 = _4 as i16 (IntToInt);
++ _0 = ShrUnchecked(_3, move _5);
++ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.mir b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.mir
deleted file mode 100644
index 724b3c567..000000000
--- a/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.mir
+++ /dev/null
@@ -1,138 +0,0 @@
-// MIR for `unchecked_shr_signed_smaller` after PreCodegen
-
-fn unchecked_shr_signed_smaller(_1: i16, _2: u32) -> i16 {
- debug a => _1; // in scope 0 at $DIR/unchecked_shifts.rs:+0:44: +0:45
- debug b => _2; // in scope 0 at $DIR/unchecked_shifts.rs:+0:52: +0:53
- let mut _0: i16; // return place in scope 0 at $DIR/unchecked_shifts.rs:+0:63: +0:66
- scope 1 (inlined core::num::<impl i16>::unchecked_shr) { // at $DIR/unchecked_shifts.rs:17:7: 17:23
- debug self => _1; // in scope 1 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
- debug rhs => _2; // in scope 1 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
- let mut _3: i16; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- let mut _4: (u32,); // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- let mut _5: u32; // in scope 1 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- scope 2 {
- scope 3 (inlined core::num::<impl i16>::unchecked_shr::conv) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
- debug x => _5; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- let mut _6: std::option::Option<i16>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- let mut _7: std::result::Result<i16, std::num::TryFromIntError>; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- scope 4 {
- scope 5 (inlined <u32 as TryInto<i16>>::try_into) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
- debug self => _5; // in scope 5 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
- scope 6 (inlined convert::num::<impl TryFrom<u32> for i16>::try_from) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
- debug u => _5; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- let mut _8: bool; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- let mut _9: u32; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- let mut _10: i16; // in scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- }
- }
- scope 7 (inlined Result::<i16, TryFromIntError>::ok) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
- debug self => _7; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- let mut _11: isize; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- let _12: i16; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- scope 8 {
- debug x => _12; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
- }
- }
- scope 9 (inlined #[track_caller] Option::<i16>::unwrap_unchecked) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
- debug self => _6; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
- let mut _13: &std::option::Option<i16>; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
- let mut _14: isize; // in scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
- scope 10 {
- debug val => _3; // in scope 10 at $SRC_DIR/core/src/option.rs:LL:COL
- }
- scope 11 {
- scope 13 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
- scope 14 {
- scope 15 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- }
- }
- }
- }
- scope 12 (inlined Option::<i16>::is_some) { // at $SRC_DIR/core/src/option.rs:LL:COL
- debug self => _13; // in scope 12 at $SRC_DIR/core/src/option.rs:LL:COL
- }
- }
- }
- }
- }
- }
-
- bb0: {
- StorageLive(_3); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageLive(_4); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- _4 = (_2,); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageLive(_5); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- _5 = move (_4.0: u32); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageLive(_6); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageLive(_7); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageLive(_8); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- StorageLive(_9); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- _9 = const 32767_u32; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- _8 = Gt(_5, move _9); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- StorageDead(_9); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- switchInt(move _8) -> [0: bb3, otherwise: bb2]; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- }
-
- bb1: {
- StorageDead(_3); // scope 2 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
- return; // scope 0 at $DIR/unchecked_shifts.rs:+2:2: +2:2
- }
-
- bb2: {
- _7 = Result::<i16, TryFromIntError>::Err(const TryFromIntError(())); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- // mir::Constant
- // + span: no-location
- // + literal: Const { ty: TryFromIntError, val: Value(<ZST>) }
- goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- }
-
- bb3: {
- StorageLive(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- _10 = _5 as i16 (IntToInt); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- _7 = Result::<i16, TryFromIntError>::Ok(move _10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- StorageDead(_10); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- goto -> bb4; // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- }
-
- bb4: {
- StorageDead(_8); // scope 6 at $SRC_DIR/core/src/convert/num.rs:LL:COL
- StorageLive(_12); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- _11 = discriminant(_7); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- switchInt(move _11) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- }
-
- bb5: {
- _6 = Option::<i16>::None; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- }
-
- bb6: {
- unreachable; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- }
-
- bb7: {
- _12 = move ((_7 as Ok).0: i16); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- _6 = Option::<i16>::Some(move _12); // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
- goto -> bb8; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- }
-
- bb8: {
- StorageDead(_12); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageDead(_7); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageLive(_13); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- _14 = discriminant(_6); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
- switchInt(move _14) -> [1: bb9, otherwise: bb6]; // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
- }
-
- bb9: {
- _3 = move ((_6 as Some).0: i16); // scope 9 at $SRC_DIR/core/src/option.rs:LL:COL
- StorageDead(_13); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageDead(_6); // scope 4 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageDead(_5); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- StorageDead(_4); // scope 2 at $SRC_DIR/core/src/num/mod.rs:LL:COL
- _0 = unchecked_shr::<i16>(_1, move _3) -> [return: bb1, unwind unreachable]; // scope 2 at $SRC_DIR/core/src/num/int_macros.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/num/int_macros.rs:LL:COL
- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(i16, i16) -> i16 {unchecked_shr::<i16>}, val: Value(<ZST>) }
- }
-}
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.panic-abort.mir b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..64ea25349
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,31 @@
+// MIR for `unchecked_shr_signed_smaller` after PreCodegen
+
+fn unchecked_shr_signed_smaller(_1: i16, _2: u32) -> i16 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: i16;
+ scope 1 (inlined core::num::<impl i16>::unchecked_shr) {
+ debug self => _1;
+ debug rhs => _2;
+ let mut _3: u32;
+ let mut _4: bool;
+ let mut _5: i16;
+ scope 2 {
+ }
+ }
+
+ bb0: {
+ StorageLive(_5);
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = const 32767_u32;
+ _4 = Le(_2, move _3);
+ StorageDead(_3);
+ assume(move _4);
+ StorageDead(_4);
+ _5 = _2 as i16 (IntToInt);
+ _0 = ShrUnchecked(_1, move _5);
+ StorageDead(_5);
+ return;
+ }
+}
diff --git a/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..64ea25349
--- /dev/null
+++ b/tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,31 @@
+// MIR for `unchecked_shr_signed_smaller` after PreCodegen
+
+fn unchecked_shr_signed_smaller(_1: i16, _2: u32) -> i16 {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: i16;
+ scope 1 (inlined core::num::<impl i16>::unchecked_shr) {
+ debug self => _1;
+ debug rhs => _2;
+ let mut _3: u32;
+ let mut _4: bool;
+ let mut _5: i16;
+ scope 2 {
+ }
+ }
+
+ bb0: {
+ StorageLive(_5);
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = const 32767_u32;
+ _4 = Le(_2, move _3);
+ StorageDead(_3);
+ assume(move _4);
+ StorageDead(_4);
+ _5 = _2 as i16 (IntToInt);
+ _0 = ShrUnchecked(_1, move _5);
+ StorageDead(_5);
+ return;
+ }
+}
diff --git a/tests/mir-opt/inline/unsized_argument.caller.Inline.diff b/tests/mir-opt/inline/unsized_argument.caller.Inline.diff
index 745f2bb19..6ee6a0ffe 100644
--- a/tests/mir-opt/inline/unsized_argument.caller.Inline.diff
+++ b/tests/mir-opt/inline/unsized_argument.caller.Inline.diff
@@ -2,49 +2,45 @@
+ // MIR for `caller` after Inline
fn caller(_1: Box<[i32]>) -> () {
- debug x => _1; // in scope 0 at $DIR/unsized_argument.rs:+0:11: +0:12
- let mut _0: (); // return place in scope 0 at $DIR/unsized_argument.rs:+0:26: +0:26
- let _2: (); // in scope 0 at $DIR/unsized_argument.rs:+1:5: +1:15
- let mut _3: std::boxed::Box<[i32]>; // in scope 0 at $DIR/unsized_argument.rs:+1:13: +1:14
- let mut _4: (); // in scope 0 at $DIR/unsized_argument.rs:+1:14: +1:15
- let mut _5: (); // in scope 0 at $DIR/unsized_argument.rs:+1:14: +1:15
- let mut _6: (); // in scope 0 at $DIR/unsized_argument.rs:+1:14: +1:15
- let mut _7: *const [i32]; // in scope 0 at $DIR/unsized_argument.rs:+1:13: +1:14
+ debug x => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: std::boxed::Box<[i32]>;
+ let mut _4: &mut std::boxed::Box<[i32]>;
+ let mut _5: ();
+ let mut _6: &mut std::boxed::Box<[i32]>;
+ let mut _7: ();
+ let mut _8: &mut std::boxed::Box<[i32]>;
+ let mut _9: ();
+ let mut _10: *const [i32];
bb0: {
- StorageLive(_2); // scope 0 at $DIR/unsized_argument.rs:+1:5: +1:15
- StorageLive(_3); // scope 0 at $DIR/unsized_argument.rs:+1:13: +1:14
- _3 = move _1; // scope 0 at $DIR/unsized_argument.rs:+1:13: +1:14
- _7 = (((_3.0: std::ptr::Unique<[i32]>).0: std::ptr::NonNull<[i32]>).0: *const [i32]); // scope 0 at $DIR/unsized_argument.rs:+1:5: +1:15
- _2 = callee(move (*_7)) -> [return: bb3, unwind: bb4]; // scope 0 at $DIR/unsized_argument.rs:+1:5: +1:15
- // mir::Constant
- // + span: $DIR/unsized_argument.rs:9:5: 9:11
- // + literal: Const { ty: fn([i32]) {callee}, val: Value(<ZST>) }
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = move _1;
+ _10 = (((_3.0: std::ptr::Unique<[i32]>).0: std::ptr::NonNull<[i32]>).0: *const [i32]);
+ _2 = callee(move (*_10)) -> [return: bb3, unwind: bb4];
}
- bb1: {
- StorageDead(_3); // scope 0 at $DIR/unsized_argument.rs:+1:14: +1:15
- StorageDead(_2); // scope 0 at $DIR/unsized_argument.rs:+1:15: +1:16
- _0 = const (); // scope 0 at $DIR/unsized_argument.rs:+0:26: +2:2
- return; // scope 0 at $DIR/unsized_argument.rs:+2:2: +2:2
+ bb1 (cleanup): {
+ resume;
}
- bb2 (cleanup): {
- resume; // scope 0 at $DIR/unsized_argument.rs:+0:1: +2:2
+ bb2: {
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ return;
}
bb3: {
- _4 = alloc::alloc::box_free::<[i32], std::alloc::Global>(move (_3.0: std::ptr::Unique<[i32]>), move (_3.1: std::alloc::Global)) -> bb1; // scope 0 at $DIR/unsized_argument.rs:+1:14: +1:15
- // mir::Constant
- // + span: $DIR/unsized_argument.rs:9:14: 9:15
- // + literal: Const { ty: unsafe fn(Unique<[i32]>, std::alloc::Global) {alloc::alloc::box_free::<[i32], std::alloc::Global>}, val: Value(<ZST>) }
+ _4 = &mut _3;
+ _5 = <Box<[i32]> as Drop>::drop(move _4) -> [return: bb2, unwind: bb1];
}
bb4 (cleanup): {
- _6 = alloc::alloc::box_free::<[i32], std::alloc::Global>(move (_3.0: std::ptr::Unique<[i32]>), move (_3.1: std::alloc::Global)) -> [return: bb2, unwind terminate]; // scope 0 at $DIR/unsized_argument.rs:+1:14: +1:15
- // mir::Constant
- // + span: $DIR/unsized_argument.rs:9:14: 9:15
- // + literal: Const { ty: unsafe fn(Unique<[i32]>, std::alloc::Global) {alloc::alloc::box_free::<[i32], std::alloc::Global>}, val: Value(<ZST>) }
+ _8 = &mut _3;
+ _9 = <Box<[i32]> as Drop>::drop(move _8) -> [return: bb1, unwind terminate];
}
}
diff --git a/tests/mir-opt/inline/unwrap_unchecked.rs b/tests/mir-opt/inline/unwrap_unchecked.rs
index 5856f1479..f28aef7a8 100644
--- a/tests/mir-opt/inline/unwrap_unchecked.rs
+++ b/tests/mir-opt/inline/unwrap_unchecked.rs
@@ -1,6 +1,6 @@
#![crate_type = "lib"]
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// ignore-debug: the debug assertions prevent the inlining we are testing for
// compile-flags: -Zmir-opt-level=2 -Zinline-mir
diff --git a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.diff b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.diff
deleted file mode 100644
index 8a8cd896e..000000000
--- a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.diff
+++ /dev/null
@@ -1,55 +0,0 @@
-- // MIR for `unwrap_unchecked` before Inline
-+ // MIR for `unwrap_unchecked` after Inline
-
- fn unwrap_unchecked(_1: Option<T>) -> T {
- debug slf => _1; // in scope 0 at $DIR/unwrap_unchecked.rs:+0:35: +0:38
- let mut _0: T; // return place in scope 0 at $DIR/unwrap_unchecked.rs:+0:54: +0:55
- let mut _2: std::option::Option<T>; // in scope 0 at $DIR/unwrap_unchecked.rs:+1:5: +1:8
-+ scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) { // at $DIR/unwrap_unchecked.rs:10:9: 10:27
-+ debug self => _2; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
-+ let mut _3: &std::option::Option<T>; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
-+ let mut _4: isize; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
-+ scope 2 {
-+ debug val => _0; // in scope 2 at $SRC_DIR/core/src/option.rs:LL:COL
-+ }
-+ scope 3 {
-+ scope 5 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
-+ scope 6 {
-+ scope 7 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
-+ }
-+ }
-+ }
-+ }
-+ scope 4 (inlined Option::<T>::is_some) { // at $SRC_DIR/core/src/option.rs:LL:COL
-+ debug self => _3; // in scope 4 at $SRC_DIR/core/src/option.rs:LL:COL
-+ }
-+ }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/unwrap_unchecked.rs:+1:5: +1:8
- _2 = move _1; // scope 0 at $DIR/unwrap_unchecked.rs:+1:5: +1:8
-- _0 = Option::<T>::unwrap_unchecked(move _2) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/unwrap_unchecked.rs:+1:5: +1:27
-- // mir::Constant
-- // + span: $DIR/unwrap_unchecked.rs:10:9: 10:25
-- // + literal: Const { ty: unsafe fn(Option<T>) -> T {Option::<T>::unwrap_unchecked}, val: Value(<ZST>) }
-+ StorageLive(_3); // scope 0 at $DIR/unwrap_unchecked.rs:+1:9: +1:27
-+ _4 = discriminant(_2); // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
-+ switchInt(move _4) -> [1: bb2, otherwise: bb1]; // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
- }
-
- bb1: {
-- StorageDead(_2); // scope 0 at $DIR/unwrap_unchecked.rs:+1:26: +1:27
-- return; // scope 0 at $DIR/unwrap_unchecked.rs:+2:2: +2:2
-+ unreachable; // scope 6 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- }
-
-- bb2 (cleanup): {
-- resume; // scope 0 at $DIR/unwrap_unchecked.rs:+0:1: +2:2
-+ bb2: {
-+ _0 = move ((_2 as Some).0: T); // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
-+ StorageDead(_3); // scope 0 at $DIR/unwrap_unchecked.rs:+1:9: +1:27
-+ StorageDead(_2); // scope 0 at $DIR/unwrap_unchecked.rs:+1:26: +1:27
-+ return; // scope 0 at $DIR/unwrap_unchecked.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-abort.diff b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-abort.diff
new file mode 100644
index 000000000..e3c573473
--- /dev/null
+++ b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-abort.diff
@@ -0,0 +1,48 @@
+- // MIR for `unwrap_unchecked` before Inline
++ // MIR for `unwrap_unchecked` after Inline
+
+ fn unwrap_unchecked(_1: Option<T>) -> T {
+ debug slf => _1;
+ let mut _0: T;
+ let mut _2: std::option::Option<T>;
++ scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) {
++ debug self => _2;
++ let mut _3: &std::option::Option<T>;
++ let mut _4: isize;
++ scope 2 {
++ debug val => _0;
++ }
++ scope 3 {
++ scope 5 (inlined unreachable_unchecked) {
++ scope 6 {
++ scope 7 (inlined unreachable_unchecked::runtime) {
++ }
++ }
++ }
++ }
++ scope 4 (inlined Option::<T>::is_some) {
++ debug self => _3;
++ }
++ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = move _1;
+- _0 = Option::<T>::unwrap_unchecked(move _2) -> [return: bb1, unwind unreachable];
++ StorageLive(_3);
++ _4 = discriminant(_2);
++ switchInt(move _4) -> [1: bb2, otherwise: bb1];
+ }
+
+ bb1: {
++ unreachable;
++ }
++
++ bb2: {
++ _0 = move ((_2 as Some).0: T);
++ StorageDead(_3);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-unwind.diff b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-unwind.diff
new file mode 100644
index 000000000..fc638cb3a
--- /dev/null
+++ b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-unwind.diff
@@ -0,0 +1,52 @@
+- // MIR for `unwrap_unchecked` before Inline
++ // MIR for `unwrap_unchecked` after Inline
+
+ fn unwrap_unchecked(_1: Option<T>) -> T {
+ debug slf => _1;
+ let mut _0: T;
+ let mut _2: std::option::Option<T>;
++ scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) {
++ debug self => _2;
++ let mut _3: &std::option::Option<T>;
++ let mut _4: isize;
++ scope 2 {
++ debug val => _0;
++ }
++ scope 3 {
++ scope 5 (inlined unreachable_unchecked) {
++ scope 6 {
++ scope 7 (inlined unreachable_unchecked::runtime) {
++ }
++ }
++ }
++ }
++ scope 4 (inlined Option::<T>::is_some) {
++ debug self => _3;
++ }
++ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = move _1;
+- _0 = Option::<T>::unwrap_unchecked(move _2) -> [return: bb1, unwind: bb2];
++ StorageLive(_3);
++ _4 = discriminant(_2);
++ switchInt(move _4) -> [1: bb2, otherwise: bb1];
+ }
+
+ bb1: {
+- StorageDead(_2);
+- return;
++ unreachable;
+ }
+
+- bb2 (cleanup): {
+- resume;
++ bb2: {
++ _0 = move ((_2 as Some).0: T);
++ StorageDead(_3);
++ StorageDead(_2);
++ return;
+ }
+ }
+
diff --git a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.mir b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.mir
deleted file mode 100644
index c5e2469fc..000000000
--- a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.mir
+++ /dev/null
@@ -1,41 +0,0 @@
-// MIR for `unwrap_unchecked` after PreCodegen
-
-fn unwrap_unchecked(_1: Option<T>) -> T {
- debug slf => _1; // in scope 0 at $DIR/unwrap_unchecked.rs:+0:35: +0:38
- let mut _0: T; // return place in scope 0 at $DIR/unwrap_unchecked.rs:+0:54: +0:55
- scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) { // at $DIR/unwrap_unchecked.rs:10:9: 10:27
- debug self => _1; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
- let mut _2: &std::option::Option<T>; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
- let mut _3: isize; // in scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
- scope 2 {
- debug val => _0; // in scope 2 at $SRC_DIR/core/src/option.rs:LL:COL
- }
- scope 3 {
- scope 5 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
- scope 6 {
- scope 7 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- }
- }
- }
- }
- scope 4 (inlined Option::<T>::is_some) { // at $SRC_DIR/core/src/option.rs:LL:COL
- debug self => _2; // in scope 4 at $SRC_DIR/core/src/option.rs:LL:COL
- }
- }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/unwrap_unchecked.rs:+1:9: +1:27
- _3 = discriminant(_1); // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
- switchInt(move _3) -> [1: bb2, otherwise: bb1]; // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
- }
-
- bb1: {
- unreachable; // scope 6 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- }
-
- bb2: {
- _0 = move ((_1 as Some).0: T); // scope 1 at $SRC_DIR/core/src/option.rs:LL:COL
- StorageDead(_2); // scope 0 at $DIR/unwrap_unchecked.rs:+1:9: +1:27
- return; // scope 0 at $DIR/unwrap_unchecked.rs:+2:2: +2:2
- }
-}
diff --git a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-abort.mir b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..fcc4d43ce
--- /dev/null
+++ b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,41 @@
+// MIR for `unwrap_unchecked` after PreCodegen
+
+fn unwrap_unchecked(_1: Option<T>) -> T {
+ debug slf => _1;
+ let mut _0: T;
+ scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) {
+ debug self => _1;
+ let mut _2: isize;
+ let mut _3: &std::option::Option<T>;
+ scope 2 {
+ debug val => _0;
+ }
+ scope 3 {
+ scope 5 (inlined unreachable_unchecked) {
+ scope 6 {
+ scope 7 (inlined unreachable_unchecked::runtime) {
+ }
+ }
+ }
+ }
+ scope 4 (inlined Option::<T>::is_some) {
+ debug self => _3;
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _2 = discriminant(_1);
+ switchInt(move _2) -> [1: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ _0 = move ((_1 as Some).0: T);
+ StorageDead(_3);
+ return;
+ }
+
+ bb2: {
+ unreachable;
+ }
+}
diff --git a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..fcc4d43ce
--- /dev/null
+++ b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,41 @@
+// MIR for `unwrap_unchecked` after PreCodegen
+
+fn unwrap_unchecked(_1: Option<T>) -> T {
+ debug slf => _1;
+ let mut _0: T;
+ scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) {
+ debug self => _1;
+ let mut _2: isize;
+ let mut _3: &std::option::Option<T>;
+ scope 2 {
+ debug val => _0;
+ }
+ scope 3 {
+ scope 5 (inlined unreachable_unchecked) {
+ scope 6 {
+ scope 7 (inlined unreachable_unchecked::runtime) {
+ }
+ }
+ }
+ }
+ scope 4 (inlined Option::<T>::is_some) {
+ debug self => _3;
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _2 = discriminant(_1);
+ switchInt(move _2) -> [1: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ _0 = move ((_1 as Some).0: T);
+ StorageDead(_3);
+ return;
+ }
+
+ bb2: {
+ unreachable;
+ }
+}
diff --git a/tests/mir-opt/instrument_coverage.bar.InstrumentCoverage.diff b/tests/mir-opt/instrument_coverage.bar.InstrumentCoverage.diff
index a3cee3ecf..0aece766b 100644
--- a/tests/mir-opt/instrument_coverage.bar.InstrumentCoverage.diff
+++ b/tests/mir-opt/instrument_coverage.bar.InstrumentCoverage.diff
@@ -2,12 +2,12 @@
+ // MIR for `bar` after InstrumentCoverage
fn bar() -> bool {
- let mut _0: bool; // return place in scope 0 at /the/src/instrument_coverage.rs:+0:13: +0:17
+ let mut _0: bool;
bb0: {
-+ Coverage::Counter(1) for /the/src/instrument_coverage.rs:20:1 - 22:2; // scope 0 at /the/src/instrument_coverage.rs:+2:2: +2:2
- _0 = const true; // scope 0 at /the/src/instrument_coverage.rs:+1:5: +1:9
- return; // scope 0 at /the/src/instrument_coverage.rs:+2:2: +2:2
++ Coverage::Counter(1) for /the/src/instrument_coverage.rs:20:1 - 22:2;
+ _0 = const true;
+ return;
}
}
diff --git a/tests/mir-opt/instrument_coverage.main.InstrumentCoverage.diff b/tests/mir-opt/instrument_coverage.main.InstrumentCoverage.diff
index 49006e012..7ec9011a5 100644
--- a/tests/mir-opt/instrument_coverage.main.InstrumentCoverage.diff
+++ b/tests/mir-opt/instrument_coverage.main.InstrumentCoverage.diff
@@ -2,50 +2,47 @@
+ // MIR for `main` after InstrumentCoverage
fn main() -> () {
- let mut _0: (); // return place in scope 0 at /the/src/instrument_coverage.rs:+0:11: +0:11
- let mut _1: (); // in scope 0 at /the/src/instrument_coverage.rs:+0:1: +6:2
- let mut _2: bool; // in scope 0 at /the/src/instrument_coverage.rs:+2:12: +2:17
- let mut _3: !; // in scope 0 at /the/src/instrument_coverage.rs:+2:18: +4:10
+ let mut _0: ();
+ let mut _1: ();
+ let mut _2: bool;
+ let mut _3: !;
bb0: {
-+ Coverage::Counter(1) for /the/src/instrument_coverage.rs:11:1 - 11:11; // scope 0 at /the/src/instrument_coverage.rs:+1:5: +5:6
- goto -> bb1; // scope 0 at /the/src/instrument_coverage.rs:+1:5: +5:6
++ Coverage::Counter(1) for /the/src/instrument_coverage.rs:11:1 - 11:11;
+ goto -> bb1;
}
bb1: {
-+ Coverage::Expression(4294967295) = 1 + 2 for /the/src/instrument_coverage.rs:12:5 - 13:17; // scope 0 at /the/src/instrument_coverage.rs:+1:5: +5:6
- falseUnwind -> [real: bb2, unwind: bb6]; // scope 0 at /the/src/instrument_coverage.rs:+1:5: +5:6
++ Coverage::Expression(4294967295) = 1 + 2 for /the/src/instrument_coverage.rs:12:5 - 13:17;
+ falseUnwind -> [real: bb2, unwind: bb6];
}
bb2: {
- StorageLive(_2); // scope 0 at /the/src/instrument_coverage.rs:+2:12: +2:17
- _2 = bar() -> [return: bb3, unwind: bb6]; // scope 0 at /the/src/instrument_coverage.rs:+2:12: +2:17
- // mir::Constant
- // + span: /the/src/instrument_coverage.rs:13:12: 13:15
- // + literal: Const { ty: fn() -> bool {bar}, val: Value(<ZST>) }
+ StorageLive(_2);
+ _2 = bar() -> [return: bb3, unwind: bb6];
}
bb3: {
- switchInt(move _2) -> [0: bb5, otherwise: bb4]; // scope 0 at /the/src/instrument_coverage.rs:+2:12: +2:17
+ switchInt(move _2) -> [0: bb5, otherwise: bb4];
}
bb4: {
-+ Coverage::Expression(4294967293) = 4294967294 + 0 for /the/src/instrument_coverage.rs:17:1 - 17:2; // scope 0 at /the/src/instrument_coverage.rs:+6:2: +6:2
-+ Coverage::Expression(4294967294) = 4294967295 - 2 for /the/src/instrument_coverage.rs:14:13 - 14:18; // scope 0 at /the/src/instrument_coverage.rs:+6:2: +6:2
- _0 = const (); // scope 0 at /the/src/instrument_coverage.rs:+3:13: +3:18
- StorageDead(_2); // scope 0 at /the/src/instrument_coverage.rs:+4:9: +4:10
- return; // scope 0 at /the/src/instrument_coverage.rs:+6:2: +6:2
++ Coverage::Expression(4294967293) = 4294967294 + 0 for /the/src/instrument_coverage.rs:17:1 - 17:2;
++ Coverage::Expression(4294967294) = 4294967295 - 2 for /the/src/instrument_coverage.rs:14:13 - 14:18;
+ _0 = const ();
+ StorageDead(_2);
+ return;
}
bb5: {
-+ Coverage::Counter(2) for /the/src/instrument_coverage.rs:15:10 - 15:11; // scope 0 at /the/src/instrument_coverage.rs:+1:5: +5:6
- _1 = const (); // scope 0 at /the/src/instrument_coverage.rs:+4:10: +4:10
- StorageDead(_2); // scope 0 at /the/src/instrument_coverage.rs:+4:9: +4:10
- goto -> bb1; // scope 0 at /the/src/instrument_coverage.rs:+1:5: +5:6
++ Coverage::Counter(2) for /the/src/instrument_coverage.rs:15:10 - 15:11;
+ _1 = const ();
+ StorageDead(_2);
+ goto -> bb1;
}
bb6 (cleanup): {
- resume; // scope 0 at /the/src/instrument_coverage.rs:+0:1: +6:2
+ resume;
}
}
diff --git a/tests/mir-opt/instsimplify_duplicate_switch_targets.assert_zero.InstSimplify.diff b/tests/mir-opt/instsimplify_duplicate_switch_targets.assert_zero.InstSimplify.diff
index 04ba8dd8e..e2b45c882 100644
--- a/tests/mir-opt/instsimplify_duplicate_switch_targets.assert_zero.InstSimplify.diff
+++ b/tests/mir-opt/instsimplify_duplicate_switch_targets.assert_zero.InstSimplify.diff
@@ -2,20 +2,20 @@
+ // MIR for `assert_zero` after InstSimplify
fn assert_zero(_1: u8) -> u8 {
- let mut _0: u8; // return place in scope 0 at $DIR/instsimplify_duplicate_switch_targets.rs:+0:37: +0:39
+ let mut _0: u8;
bb0: {
-- switchInt(_1) -> [0: bb2, 1: bb1, otherwise: bb1]; // scope 0 at $DIR/instsimplify_duplicate_switch_targets.rs:+3:13: +7:14
-+ switchInt(_1) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/instsimplify_duplicate_switch_targets.rs:+3:13: +7:14
+- switchInt(_1) -> [0: bb2, 1: bb1, otherwise: bb1];
++ switchInt(_1) -> [0: bb2, otherwise: bb1];
}
bb1: {
- unreachable; // scope 0 at $DIR/instsimplify_duplicate_switch_targets.rs:+10:13: +10:26
+ unreachable;
}
bb2: {
- _0 = _1; // scope 0 at $DIR/instsimplify_duplicate_switch_targets.rs:+13:13: +13:20
- return; // scope 0 at $DIR/instsimplify_duplicate_switch_targets.rs:+14:13: +14:21
+ _0 = _1;
+ return;
}
}
diff --git a/tests/mir-opt/intrinsic_asserts.generic.InstSimplify.diff b/tests/mir-opt/intrinsic_asserts.generic.InstSimplify.diff
index a59f4a43a..efa52798e 100644
--- a/tests/mir-opt/intrinsic_asserts.generic.InstSimplify.diff
+++ b/tests/mir-opt/intrinsic_asserts.generic.InstSimplify.diff
@@ -2,41 +2,32 @@
+ // MIR for `generic` after InstSimplify
fn generic() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/intrinsic_asserts.rs:+0:21: +0:21
- let _1: (); // in scope 0 at $DIR/intrinsic_asserts.rs:+1:5: +1:46
- let _2: (); // in scope 0 at $DIR/intrinsic_asserts.rs:+2:5: +2:47
- let _3: (); // in scope 0 at $DIR/intrinsic_asserts.rs:+3:5: +3:60
+ let mut _0: ();
+ let _1: ();
+ let _2: ();
+ let _3: ();
bb0: {
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+1:5: +1:46
- _1 = assert_inhabited::<T>() -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/intrinsic_asserts.rs:+1:5: +1:46
- // mir::Constant
- // + span: $DIR/intrinsic_asserts.rs:25:5: 25:44
- // + literal: Const { ty: extern "rust-intrinsic" fn() {assert_inhabited::<T>}, val: Value(<ZST>) }
+ nop;
+ _1 = assert_inhabited::<T>() -> [return: bb1, unwind unreachable];
}
bb1: {
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+1:46: +1:47
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+2:5: +2:47
- _2 = assert_zero_valid::<T>() -> [return: bb2, unwind unreachable]; // scope 0 at $DIR/intrinsic_asserts.rs:+2:5: +2:47
- // mir::Constant
- // + span: $DIR/intrinsic_asserts.rs:26:5: 26:45
- // + literal: Const { ty: extern "rust-intrinsic" fn() {assert_zero_valid::<T>}, val: Value(<ZST>) }
+ nop;
+ nop;
+ _2 = assert_zero_valid::<T>() -> [return: bb2, unwind unreachable];
}
bb2: {
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+2:47: +2:48
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+3:5: +3:60
- _3 = assert_mem_uninitialized_valid::<T>() -> [return: bb3, unwind unreachable]; // scope 0 at $DIR/intrinsic_asserts.rs:+3:5: +3:60
- // mir::Constant
- // + span: $DIR/intrinsic_asserts.rs:27:5: 27:58
- // + literal: Const { ty: extern "rust-intrinsic" fn() {assert_mem_uninitialized_valid::<T>}, val: Value(<ZST>) }
+ nop;
+ nop;
+ _3 = assert_mem_uninitialized_valid::<T>() -> [return: bb3, unwind unreachable];
}
bb3: {
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+3:60: +3:61
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+0:21: +4:2
- return; // scope 0 at $DIR/intrinsic_asserts.rs:+4:2: +4:2
+ nop;
+ nop;
+ return;
}
}
diff --git a/tests/mir-opt/intrinsic_asserts.panics.InstSimplify.diff b/tests/mir-opt/intrinsic_asserts.panics.InstSimplify.diff
index 195e8bd4e..46e053378 100644
--- a/tests/mir-opt/intrinsic_asserts.panics.InstSimplify.diff
+++ b/tests/mir-opt/intrinsic_asserts.panics.InstSimplify.diff
@@ -2,46 +2,35 @@
+ // MIR for `panics` after InstSimplify
fn panics() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/intrinsic_asserts.rs:+0:17: +0:17
- let _1: (); // in scope 0 at $DIR/intrinsic_asserts.rs:+1:5: +1:50
- let _2: (); // in scope 0 at $DIR/intrinsic_asserts.rs:+2:5: +2:49
- let _3: (); // in scope 0 at $DIR/intrinsic_asserts.rs:+3:5: +3:62
+ let mut _0: ();
+ let _1: ();
+ let _2: ();
+ let _3: ();
bb0: {
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+1:5: +1:50
-- _1 = assert_inhabited::<Never>() -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/intrinsic_asserts.rs:+1:5: +1:50
-+ _1 = assert_inhabited::<Never>() -> unwind unreachable; // scope 0 at $DIR/intrinsic_asserts.rs:+1:5: +1:50
- // mir::Constant
- // + span: $DIR/intrinsic_asserts.rs:17:5: 17:48
- // + literal: Const { ty: extern "rust-intrinsic" fn() {assert_inhabited::<Never>}, val: Value(<ZST>) }
+ nop;
+- _1 = assert_inhabited::<Never>() -> [return: bb1, unwind unreachable];
++ _1 = assert_inhabited::<Never>() -> unwind unreachable;
}
bb1: {
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+1:50: +1:51
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+2:5: +2:49
-- _2 = assert_zero_valid::<&u8>() -> [return: bb2, unwind unreachable]; // scope 0 at $DIR/intrinsic_asserts.rs:+2:5: +2:49
-+ _2 = assert_zero_valid::<&u8>() -> unwind unreachable; // scope 0 at $DIR/intrinsic_asserts.rs:+2:5: +2:49
- // mir::Constant
- // + span: $DIR/intrinsic_asserts.rs:18:5: 18:47
- // + user_ty: UserType(0)
- // + literal: Const { ty: extern "rust-intrinsic" fn() {assert_zero_valid::<&u8>}, val: Value(<ZST>) }
+ nop;
+ nop;
+- _2 = assert_zero_valid::<&u8>() -> [return: bb2, unwind unreachable];
++ _2 = assert_zero_valid::<&u8>() -> unwind unreachable;
}
bb2: {
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+2:49: +2:50
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+3:5: +3:62
-- _3 = assert_mem_uninitialized_valid::<&u8>() -> [return: bb3, unwind unreachable]; // scope 0 at $DIR/intrinsic_asserts.rs:+3:5: +3:62
-+ _3 = assert_mem_uninitialized_valid::<&u8>() -> unwind unreachable; // scope 0 at $DIR/intrinsic_asserts.rs:+3:5: +3:62
- // mir::Constant
- // + span: $DIR/intrinsic_asserts.rs:19:5: 19:60
- // + user_ty: UserType(1)
- // + literal: Const { ty: extern "rust-intrinsic" fn() {assert_mem_uninitialized_valid::<&u8>}, val: Value(<ZST>) }
+ nop;
+ nop;
+- _3 = assert_mem_uninitialized_valid::<&u8>() -> [return: bb3, unwind unreachable];
++ _3 = assert_mem_uninitialized_valid::<&u8>() -> unwind unreachable;
}
bb3: {
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+3:62: +3:63
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+0:17: +4:2
- return; // scope 0 at $DIR/intrinsic_asserts.rs:+4:2: +4:2
+ nop;
+ nop;
+ return;
}
}
diff --git a/tests/mir-opt/intrinsic_asserts.removable.InstSimplify.diff b/tests/mir-opt/intrinsic_asserts.removable.InstSimplify.diff
index a4a65074c..70c3e8830 100644
--- a/tests/mir-opt/intrinsic_asserts.removable.InstSimplify.diff
+++ b/tests/mir-opt/intrinsic_asserts.removable.InstSimplify.diff
@@ -2,44 +2,35 @@
+ // MIR for `removable` after InstSimplify
fn removable() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/intrinsic_asserts.rs:+0:20: +0:20
- let _1: (); // in scope 0 at $DIR/intrinsic_asserts.rs:+1:5: +1:47
- let _2: (); // in scope 0 at $DIR/intrinsic_asserts.rs:+2:5: +2:48
- let _3: (); // in scope 0 at $DIR/intrinsic_asserts.rs:+3:5: +3:61
+ let mut _0: ();
+ let _1: ();
+ let _2: ();
+ let _3: ();
bb0: {
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+1:5: +1:47
-- _1 = assert_inhabited::<()>() -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/intrinsic_asserts.rs:+1:5: +1:47
-- // mir::Constant
-- // + span: $DIR/intrinsic_asserts.rs:7:5: 7:45
-- // + literal: Const { ty: extern "rust-intrinsic" fn() {assert_inhabited::<()>}, val: Value(<ZST>) }
-+ goto -> bb1; // scope 0 at $DIR/intrinsic_asserts.rs:+1:5: +1:47
+ nop;
+- _1 = assert_inhabited::<()>() -> [return: bb1, unwind unreachable];
++ goto -> bb1;
}
bb1: {
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+1:47: +1:48
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+2:5: +2:48
-- _2 = assert_zero_valid::<u8>() -> [return: bb2, unwind unreachable]; // scope 0 at $DIR/intrinsic_asserts.rs:+2:5: +2:48
-- // mir::Constant
-- // + span: $DIR/intrinsic_asserts.rs:8:5: 8:46
-- // + literal: Const { ty: extern "rust-intrinsic" fn() {assert_zero_valid::<u8>}, val: Value(<ZST>) }
-+ goto -> bb2; // scope 0 at $DIR/intrinsic_asserts.rs:+2:5: +2:48
+ nop;
+ nop;
+- _2 = assert_zero_valid::<u8>() -> [return: bb2, unwind unreachable];
++ goto -> bb2;
}
bb2: {
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+2:48: +2:49
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+3:5: +3:61
-- _3 = assert_mem_uninitialized_valid::<u8>() -> [return: bb3, unwind unreachable]; // scope 0 at $DIR/intrinsic_asserts.rs:+3:5: +3:61
-- // mir::Constant
-- // + span: $DIR/intrinsic_asserts.rs:9:5: 9:59
-- // + literal: Const { ty: extern "rust-intrinsic" fn() {assert_mem_uninitialized_valid::<u8>}, val: Value(<ZST>) }
-+ goto -> bb3; // scope 0 at $DIR/intrinsic_asserts.rs:+3:5: +3:61
+ nop;
+ nop;
+- _3 = assert_mem_uninitialized_valid::<u8>() -> [return: bb3, unwind unreachable];
++ goto -> bb3;
}
bb3: {
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+3:61: +3:62
- nop; // scope 0 at $DIR/intrinsic_asserts.rs:+0:20: +4:2
- return; // scope 0 at $DIR/intrinsic_asserts.rs:+4:2: +4:2
+ nop;
+ nop;
+ return;
}
}
diff --git a/tests/mir-opt/issue_101973.inner.ConstProp.diff b/tests/mir-opt/issue_101973.inner.ConstProp.diff
deleted file mode 100644
index d048b9e65..000000000
--- a/tests/mir-opt/issue_101973.inner.ConstProp.diff
+++ /dev/null
@@ -1,85 +0,0 @@
-- // MIR for `inner` before ConstProp
-+ // MIR for `inner` after ConstProp
-
- fn inner(_1: u32) -> i64 {
- debug fields => _1; // in scope 0 at $DIR/issue_101973.rs:+0:14: +0:20
- let mut _0: i64; // return place in scope 0 at $DIR/issue_101973.rs:+0:30: +0:33
- let mut _2: i32; // in scope 0 at $DIR/issue_101973.rs:+1:5: +1:65
- let mut _3: u32; // in scope 0 at $DIR/issue_101973.rs:+1:5: +1:58
- let mut _4: u32; // in scope 0 at $DIR/issue_101973.rs:+1:5: +1:17
- let mut _5: u32; // in scope 0 at $DIR/issue_101973.rs:+1:10: +1:16
- let mut _6: u32; // in scope 0 at $DIR/issue_101973.rs:+1:31: +1:57
- let mut _7: u32; // in scope 0 at $DIR/issue_101973.rs:+1:31: +1:52
- let mut _8: u32; // in scope 0 at $DIR/issue_101973.rs:+1:32: +1:45
- let mut _9: u32; // in scope 0 at $DIR/issue_101973.rs:+1:33: +1:39
- let mut _10: u32; // in scope 0 at $DIR/issue_101973.rs:+1:32: +1:45
- let mut _11: bool; // in scope 0 at $DIR/issue_101973.rs:+1:32: +1:45
- let mut _12: u32; // in scope 0 at $DIR/issue_101973.rs:+1:31: +1:57
- let mut _13: bool; // in scope 0 at $DIR/issue_101973.rs:+1:31: +1:57
- scope 1 (inlined imm8) { // at $DIR/issue_101973.rs:15:5: 15:17
- debug x => _1; // in scope 1 at $DIR/issue_101973.rs:6:13: 6:14
- let mut _14: u32; // in scope 1 at $DIR/issue_101973.rs:8:12: 8:27
- let mut _15: u32; // in scope 1 at $DIR/issue_101973.rs:8:12: 8:20
- scope 2 {
- debug out => _4; // in scope 2 at $DIR/issue_101973.rs:7:9: 7:16
- }
- }
- scope 3 (inlined core::num::<impl u32>::rotate_right) { // at $DIR/issue_101973.rs:15:18: 15:58
- debug self => _4; // in scope 3 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
- debug n => _6; // in scope 3 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
- }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_101973.rs:+1:5: +1:65
- StorageLive(_3); // scope 0 at $DIR/issue_101973.rs:+1:5: +1:58
- StorageLive(_4); // scope 0 at $DIR/issue_101973.rs:+1:5: +1:17
- StorageLive(_14); // scope 2 at $DIR/issue_101973.rs:8:12: 8:27
- StorageLive(_15); // scope 2 at $DIR/issue_101973.rs:8:12: 8:20
- _15 = Shr(_1, const 0_i32); // scope 2 at $DIR/issue_101973.rs:8:12: 8:20
- _14 = BitAnd(move _15, const 255_u32); // scope 2 at $DIR/issue_101973.rs:8:12: 8:27
- StorageDead(_15); // scope 2 at $DIR/issue_101973.rs:8:26: 8:27
- _4 = BitOr(const 0_u32, move _14); // scope 2 at $DIR/issue_101973.rs:8:5: 8:27
- StorageDead(_14); // scope 2 at $DIR/issue_101973.rs:8:26: 8:27
- StorageLive(_6); // scope 0 at $DIR/issue_101973.rs:+1:31: +1:57
- StorageLive(_7); // scope 0 at $DIR/issue_101973.rs:+1:31: +1:52
- StorageLive(_8); // scope 0 at $DIR/issue_101973.rs:+1:32: +1:45
-- _10 = const 8_i32 as u32 (IntToInt); // scope 0 at $DIR/issue_101973.rs:+1:32: +1:45
-- _11 = Lt(move _10, const 32_u32); // scope 0 at $DIR/issue_101973.rs:+1:32: +1:45
-- assert(move _11, "attempt to shift right by `{}`, which would overflow", const 8_i32) -> bb1; // scope 0 at $DIR/issue_101973.rs:+1:32: +1:45
-+ _10 = const 8_u32; // scope 0 at $DIR/issue_101973.rs:+1:32: +1:45
-+ _11 = const true; // scope 0 at $DIR/issue_101973.rs:+1:32: +1:45
-+ assert(const true, "attempt to shift right by `{}`, which would overflow", const 8_i32) -> bb1; // scope 0 at $DIR/issue_101973.rs:+1:32: +1:45
- }
-
- bb1: {
- _8 = Shr(_1, const 8_i32); // scope 0 at $DIR/issue_101973.rs:+1:32: +1:45
- _7 = BitAnd(move _8, const 15_u32); // scope 0 at $DIR/issue_101973.rs:+1:31: +1:52
- StorageDead(_8); // scope 0 at $DIR/issue_101973.rs:+1:51: +1:52
-- _12 = const 1_i32 as u32 (IntToInt); // scope 0 at $DIR/issue_101973.rs:+1:31: +1:57
-- _13 = Lt(move _12, const 32_u32); // scope 0 at $DIR/issue_101973.rs:+1:31: +1:57
-- assert(move _13, "attempt to shift left by `{}`, which would overflow", const 1_i32) -> bb2; // scope 0 at $DIR/issue_101973.rs:+1:31: +1:57
-+ _12 = const 1_u32; // scope 0 at $DIR/issue_101973.rs:+1:31: +1:57
-+ _13 = const true; // scope 0 at $DIR/issue_101973.rs:+1:31: +1:57
-+ assert(const true, "attempt to shift left by `{}`, which would overflow", const 1_i32) -> bb2; // scope 0 at $DIR/issue_101973.rs:+1:31: +1:57
- }
-
- bb2: {
- _6 = Shl(move _7, const 1_i32); // scope 0 at $DIR/issue_101973.rs:+1:31: +1:57
- StorageDead(_7); // scope 0 at $DIR/issue_101973.rs:+1:56: +1:57
- _3 = rotate_right::<u32>(_4, _6) -> [return: bb3, unwind unreachable]; // scope 3 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
- // + literal: Const { ty: extern "rust-intrinsic" fn(u32, u32) -> u32 {rotate_right::<u32>}, val: Value(<ZST>) }
- }
-
- bb3: {
- StorageDead(_6); // scope 0 at $DIR/issue_101973.rs:+1:57: +1:58
- StorageDead(_4); // scope 0 at $DIR/issue_101973.rs:+1:57: +1:58
- _2 = move _3 as i32 (IntToInt); // scope 0 at $DIR/issue_101973.rs:+1:5: +1:65
- StorageDead(_3); // scope 0 at $DIR/issue_101973.rs:+1:64: +1:65
- _0 = move _2 as i64 (IntToInt); // scope 0 at $DIR/issue_101973.rs:+1:5: +1:72
- StorageDead(_2); // scope 0 at $DIR/issue_101973.rs:+1:71: +1:72
- return; // scope 0 at $DIR/issue_101973.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/issue_101973.inner.ConstProp.panic-abort.diff b/tests/mir-opt/issue_101973.inner.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..e018563db
--- /dev/null
+++ b/tests/mir-opt/issue_101973.inner.ConstProp.panic-abort.diff
@@ -0,0 +1,82 @@
+- // MIR for `inner` before ConstProp
++ // MIR for `inner` after ConstProp
+
+ fn inner(_1: u32) -> i64 {
+ debug fields => _1;
+ let mut _0: i64;
+ let mut _2: i32;
+ let mut _3: u32;
+ let mut _4: u32;
+ let mut _5: u32;
+ let mut _6: u32;
+ let mut _7: u32;
+ let mut _8: u32;
+ let mut _9: u32;
+ let mut _10: u32;
+ let mut _11: bool;
+ let mut _12: u32;
+ let mut _13: bool;
+ scope 1 (inlined imm8) {
+ debug x => _1;
+ let mut _14: u32;
+ let mut _15: u32;
+ scope 2 {
+ debug out => _4;
+ }
+ }
+ scope 3 (inlined core::num::<impl u32>::rotate_right) {
+ debug self => _4;
+ debug n => _6;
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_15);
+ StorageLive(_14);
+ _14 = Shr(_1, const 0_i32);
+ _15 = BitAnd(move _14, const 255_u32);
+ StorageDead(_14);
+ _4 = BitOr(const 0_u32, move _15);
+ StorageDead(_15);
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+- _10 = const 8_i32 as u32 (IntToInt);
+- _11 = Lt(move _10, const 32_u32);
+- assert(move _11, "attempt to shift right by `{}`, which would overflow", const 8_i32) -> [success: bb1, unwind unreachable];
++ _10 = const 8_u32;
++ _11 = const true;
++ assert(const true, "attempt to shift right by `{}`, which would overflow", const 8_i32) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _8 = Shr(_1, const 8_i32);
+ _7 = BitAnd(move _8, const 15_u32);
+ StorageDead(_8);
+- _12 = const 1_i32 as u32 (IntToInt);
+- _13 = Lt(move _12, const 32_u32);
+- assert(move _13, "attempt to shift left by `{}`, which would overflow", const 1_i32) -> [success: bb2, unwind unreachable];
++ _12 = const 1_u32;
++ _13 = const true;
++ assert(const true, "attempt to shift left by `{}`, which would overflow", const 1_i32) -> [success: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ _6 = Shl(move _7, const 1_i32);
+ StorageDead(_7);
+ _3 = rotate_right::<u32>(_4, _6) -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ StorageDead(_6);
+ StorageDead(_4);
+ _2 = move _3 as i32 (IntToInt);
+ StorageDead(_3);
+ _0 = move _2 as i64 (IntToInt);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/issue_101973.inner.ConstProp.panic-unwind.diff b/tests/mir-opt/issue_101973.inner.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..a6bd29e1c
--- /dev/null
+++ b/tests/mir-opt/issue_101973.inner.ConstProp.panic-unwind.diff
@@ -0,0 +1,82 @@
+- // MIR for `inner` before ConstProp
++ // MIR for `inner` after ConstProp
+
+ fn inner(_1: u32) -> i64 {
+ debug fields => _1;
+ let mut _0: i64;
+ let mut _2: i32;
+ let mut _3: u32;
+ let mut _4: u32;
+ let mut _5: u32;
+ let mut _6: u32;
+ let mut _7: u32;
+ let mut _8: u32;
+ let mut _9: u32;
+ let mut _10: u32;
+ let mut _11: bool;
+ let mut _12: u32;
+ let mut _13: bool;
+ scope 1 (inlined imm8) {
+ debug x => _1;
+ let mut _14: u32;
+ let mut _15: u32;
+ scope 2 {
+ debug out => _4;
+ }
+ }
+ scope 3 (inlined core::num::<impl u32>::rotate_right) {
+ debug self => _4;
+ debug n => _6;
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_15);
+ StorageLive(_14);
+ _14 = Shr(_1, const 0_i32);
+ _15 = BitAnd(move _14, const 255_u32);
+ StorageDead(_14);
+ _4 = BitOr(const 0_u32, move _15);
+ StorageDead(_15);
+ StorageLive(_6);
+ StorageLive(_7);
+ StorageLive(_8);
+- _10 = const 8_i32 as u32 (IntToInt);
+- _11 = Lt(move _10, const 32_u32);
+- assert(move _11, "attempt to shift right by `{}`, which would overflow", const 8_i32) -> [success: bb1, unwind continue];
++ _10 = const 8_u32;
++ _11 = const true;
++ assert(const true, "attempt to shift right by `{}`, which would overflow", const 8_i32) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+ _8 = Shr(_1, const 8_i32);
+ _7 = BitAnd(move _8, const 15_u32);
+ StorageDead(_8);
+- _12 = const 1_i32 as u32 (IntToInt);
+- _13 = Lt(move _12, const 32_u32);
+- assert(move _13, "attempt to shift left by `{}`, which would overflow", const 1_i32) -> [success: bb2, unwind continue];
++ _12 = const 1_u32;
++ _13 = const true;
++ assert(const true, "attempt to shift left by `{}`, which would overflow", const 1_i32) -> [success: bb2, unwind continue];
+ }
+
+ bb2: {
+ _6 = Shl(move _7, const 1_i32);
+ StorageDead(_7);
+ _3 = rotate_right::<u32>(_4, _6) -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ StorageDead(_6);
+ StorageDead(_4);
+ _2 = move _3 as i32 (IntToInt);
+ StorageDead(_3);
+ _0 = move _2 as i64 (IntToInt);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/issue_101973.rs b/tests/mir-opt/issue_101973.rs
index da388f149..01b342f4d 100644
--- a/tests/mir-opt/issue_101973.rs
+++ b/tests/mir-opt/issue_101973.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// compile-flags: -O -C debug-assertions=on
// This needs inlining followed by ConstProp to reproduce, so we cannot use "unit-test".
diff --git a/tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.mir b/tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.mir
deleted file mode 100644
index f50c0eb47..000000000
--- a/tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.mir
+++ /dev/null
@@ -1,25 +0,0 @@
-// MIR for `main` after AbortUnwindingCalls
-
-fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_104451_unwindable_intrinsics.rs:+0:11: +0:11
- let mut _1: !; // in scope 0 at $DIR/issue_104451_unwindable_intrinsics.rs:+2:9: +2:62
- let mut _2: (); // in scope 0 at $DIR/issue_104451_unwindable_intrinsics.rs:+2:45: +2:47
- scope 1 {
- }
-
- bb0: {
- StorageLive(_1); // scope 1 at $DIR/issue_104451_unwindable_intrinsics.rs:+2:9: +2:62
- StorageLive(_2); // scope 1 at $DIR/issue_104451_unwindable_intrinsics.rs:+2:45: +2:47
- _2 = (); // scope 1 at $DIR/issue_104451_unwindable_intrinsics.rs:+2:45: +2:47
- _1 = const_eval_select::<(), fn() -> ! {ow_ct}, fn() -> ! {ow_ct}, !>(move _2, ow_ct, ow_ct); // scope 1 at $DIR/issue_104451_unwindable_intrinsics.rs:+2:9: +2:62
- // mir::Constant
- // + span: $DIR/issue_104451_unwindable_intrinsics.rs:8:9: 8:44
- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn((), fn() -> ! {ow_ct}, fn() -> ! {ow_ct}) -> ! {const_eval_select::<(), fn() -> ! {ow_ct}, fn() -> ! {ow_ct}, !>}, val: Value(<ZST>) }
- // mir::Constant
- // + span: $DIR/issue_104451_unwindable_intrinsics.rs:8:49: 8:54
- // + literal: Const { ty: fn() -> ! {ow_ct}, val: Value(<ZST>) }
- // mir::Constant
- // + span: $DIR/issue_104451_unwindable_intrinsics.rs:8:56: 8:61
- // + literal: Const { ty: fn() -> ! {ow_ct}, val: Value(<ZST>) }
- }
-}
diff --git a/tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.panic-abort.mir b/tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.panic-abort.mir
new file mode 100644
index 000000000..b4f212409
--- /dev/null
+++ b/tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.panic-abort.mir
@@ -0,0 +1,16 @@
+// MIR for `main` after AbortUnwindingCalls
+
+fn main() -> () {
+ let mut _0: ();
+ let mut _1: !;
+ let mut _2: ();
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = ();
+ _1 = const_eval_select::<(), fn() -> ! {ow_ct}, fn() -> ! {ow_ct}, !>(move _2, ow_ct, ow_ct) -> unwind unreachable;
+ }
+}
diff --git a/tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.panic-unwind.mir b/tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.panic-unwind.mir
new file mode 100644
index 000000000..1851747f0
--- /dev/null
+++ b/tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.panic-unwind.mir
@@ -0,0 +1,16 @@
+// MIR for `main` after AbortUnwindingCalls
+
+fn main() -> () {
+ let mut _0: ();
+ let mut _1: !;
+ let mut _2: ();
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = ();
+ _1 = const_eval_select::<(), fn() -> ! {ow_ct}, fn() -> ! {ow_ct}, !>(move _2, ow_ct, ow_ct) -> unwind continue;
+ }
+}
diff --git a/tests/mir-opt/issue_104451_unwindable_intrinsics.rs b/tests/mir-opt/issue_104451_unwindable_intrinsics.rs
index 9babd4aae..54112627e 100644
--- a/tests/mir-opt/issue_104451_unwindable_intrinsics.rs
+++ b/tests/mir-opt/issue_104451_unwindable_intrinsics.rs
@@ -1,5 +1,5 @@
// Check that `UnwindAction::Unreachable` is not generated for unwindable intrinsics.
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![feature(core_intrinsics)]
// EMIT_MIR issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.mir
diff --git a/tests/mir-opt/issue_38669.main.SimplifyCfg-initial.after.mir b/tests/mir-opt/issue_38669.main.SimplifyCfg-initial.after.mir
index ccaa508c1..632b55806 100644
--- a/tests/mir-opt/issue_38669.main.SimplifyCfg-initial.after.mir
+++ b/tests/mir-opt/issue_38669.main.SimplifyCfg-initial.after.mir
@@ -1,52 +1,52 @@
// MIR for `main` after SimplifyCfg-initial
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_38669.rs:+0:11: +0:11
- let mut _1: bool; // in scope 0 at $DIR/issue_38669.rs:+1:9: +1:25
- let mut _2: (); // in scope 0 at $DIR/issue_38669.rs:+0:1: +8:2
- let _3: (); // in scope 0 at $DIR/issue_38669.rs:+3:9: +5:10
- let mut _4: bool; // in scope 0 at $DIR/issue_38669.rs:+3:12: +3:24
- let mut _5: !; // in scope 0 at $DIR/issue_38669.rs:+3:25: +5:10
+ let mut _0: ();
+ let mut _1: bool;
+ let mut _2: ();
+ let _3: ();
+ let mut _4: bool;
+ let mut _5: !;
scope 1 {
- debug should_break => _1; // in scope 1 at $DIR/issue_38669.rs:+1:9: +1:25
+ debug should_break => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/issue_38669.rs:+1:9: +1:25
- _1 = const false; // scope 0 at $DIR/issue_38669.rs:+1:28: +1:33
- FakeRead(ForLet(None), _1); // scope 0 at $DIR/issue_38669.rs:+1:9: +1:25
- goto -> bb1; // scope 1 at $DIR/issue_38669.rs:+2:5: +7:6
+ StorageLive(_1);
+ _1 = const false;
+ FakeRead(ForLet(None), _1);
+ goto -> bb1;
}
bb1: {
- falseUnwind -> [real: bb2, unwind: bb5]; // scope 1 at $DIR/issue_38669.rs:+2:5: +7:6
+ falseUnwind -> [real: bb2, unwind: bb5];
}
bb2: {
- StorageLive(_3); // scope 1 at $DIR/issue_38669.rs:+3:9: +5:10
- StorageLive(_4); // scope 1 at $DIR/issue_38669.rs:+3:12: +3:24
- _4 = _1; // scope 1 at $DIR/issue_38669.rs:+3:12: +3:24
- switchInt(move _4) -> [0: bb4, otherwise: bb3]; // scope 1 at $DIR/issue_38669.rs:+3:12: +3:24
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ switchInt(move _4) -> [0: bb4, otherwise: bb3];
}
bb3: {
- _0 = const (); // scope 1 at $DIR/issue_38669.rs:+4:13: +4:18
- StorageDead(_4); // scope 1 at $DIR/issue_38669.rs:+5:9: +5:10
- StorageDead(_3); // scope 1 at $DIR/issue_38669.rs:+5:9: +5:10
- StorageDead(_1); // scope 0 at $DIR/issue_38669.rs:+8:1: +8:2
- return; // scope 0 at $DIR/issue_38669.rs:+8:2: +8:2
+ _0 = const ();
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
}
bb4: {
- _3 = const (); // scope 1 at $DIR/issue_38669.rs:+5:10: +5:10
- StorageDead(_4); // scope 1 at $DIR/issue_38669.rs:+5:9: +5:10
- StorageDead(_3); // scope 1 at $DIR/issue_38669.rs:+5:9: +5:10
- _1 = const true; // scope 1 at $DIR/issue_38669.rs:+6:9: +6:28
- _2 = const (); // scope 1 at $DIR/issue_38669.rs:+2:10: +7:6
- goto -> bb1; // scope 1 at $DIR/issue_38669.rs:+2:5: +7:6
+ _3 = const ();
+ StorageDead(_4);
+ StorageDead(_3);
+ _1 = const true;
+ _2 = const ();
+ goto -> bb1;
}
bb5 (cleanup): {
- resume; // scope 0 at $DIR/issue_38669.rs:+0:1: +8:2
+ resume;
}
}
diff --git a/tests/mir-opt/issue_41110.main.ElaborateDrops.diff b/tests/mir-opt/issue_41110.main.ElaborateDrops.diff
deleted file mode 100644
index ac2520249..000000000
--- a/tests/mir-opt/issue_41110.main.ElaborateDrops.diff
+++ /dev/null
@@ -1,75 +0,0 @@
-- // MIR for `main` before ElaborateDrops
-+ // MIR for `main` after ElaborateDrops
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_41110.rs:+0:11: +0:11
- let _1: (); // in scope 0 at $DIR/issue_41110.rs:+1:9: +1:10
- let mut _2: S; // in scope 0 at $DIR/issue_41110.rs:+1:13: +1:14
- let mut _3: S; // in scope 0 at $DIR/issue_41110.rs:+1:21: +1:27
- let mut _4: S; // in scope 0 at $DIR/issue_41110.rs:+1:21: +1:22
-+ let mut _5: bool; // in scope 0 at $DIR/issue_41110.rs:+1:27: +1:28
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/issue_41110.rs:+1:9: +1:10
- }
-
- bb0: {
-+ _5 = const false; // scope 0 at $DIR/issue_41110.rs:+1:9: +1:10
- StorageLive(_1); // scope 0 at $DIR/issue_41110.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/issue_41110.rs:+1:13: +1:14
-+ _5 = const true; // scope 0 at $DIR/issue_41110.rs:+1:13: +1:14
- _2 = S; // scope 0 at $DIR/issue_41110.rs:+1:13: +1:14
- StorageLive(_3); // scope 0 at $DIR/issue_41110.rs:+1:21: +1:27
- StorageLive(_4); // scope 0 at $DIR/issue_41110.rs:+1:21: +1:22
- _4 = S; // scope 0 at $DIR/issue_41110.rs:+1:21: +1:22
- _3 = S::id(move _4) -> [return: bb1, unwind: bb4]; // scope 0 at $DIR/issue_41110.rs:+1:21: +1:27
- // mir::Constant
- // + span: $DIR/issue_41110.rs:8:23: 8:25
- // + literal: Const { ty: fn(S) -> S {S::id}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_4); // scope 0 at $DIR/issue_41110.rs:+1:26: +1:27
-+ _5 = const false; // scope 0 at $DIR/issue_41110.rs:+1:13: +1:28
- _1 = S::other(move _2, move _3) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/issue_41110.rs:+1:13: +1:28
- // mir::Constant
- // + span: $DIR/issue_41110.rs:8:15: 8:20
- // + literal: Const { ty: fn(S, S) {S::other}, val: Value(<ZST>) }
- }
-
- bb2: {
- StorageDead(_3); // scope 0 at $DIR/issue_41110.rs:+1:27: +1:28
-+ _5 = const false; // scope 0 at $DIR/issue_41110.rs:+1:27: +1:28
- StorageDead(_2); // scope 0 at $DIR/issue_41110.rs:+1:27: +1:28
- _0 = const (); // scope 0 at $DIR/issue_41110.rs:+0:11: +2:2
- StorageDead(_1); // scope 0 at $DIR/issue_41110.rs:+2:1: +2:2
- return; // scope 0 at $DIR/issue_41110.rs:+2:2: +2:2
- }
-
- bb3 (cleanup): {
-- drop(_3) -> [return: bb5, unwind terminate]; // scope 0 at $DIR/issue_41110.rs:+1:27: +1:28
-+ goto -> bb5; // scope 0 at $DIR/issue_41110.rs:+1:27: +1:28
- }
-
- bb4 (cleanup): {
-- drop(_4) -> [return: bb5, unwind terminate]; // scope 0 at $DIR/issue_41110.rs:+1:26: +1:27
-+ goto -> bb5; // scope 0 at $DIR/issue_41110.rs:+1:26: +1:27
- }
-
- bb5 (cleanup): {
-- drop(_2) -> [return: bb6, unwind terminate]; // scope 0 at $DIR/issue_41110.rs:+1:27: +1:28
-+ goto -> bb8; // scope 0 at $DIR/issue_41110.rs:+1:27: +1:28
- }
-
- bb6 (cleanup): {
- resume; // scope 0 at $DIR/issue_41110.rs:+0:1: +2:2
-+ }
-+
-+ bb7 (cleanup): {
-+ drop(_2) -> [return: bb6, unwind terminate]; // scope 0 at $DIR/issue_41110.rs:+1:27: +1:28
-+ }
-+
-+ bb8 (cleanup): {
-+ switchInt(_5) -> [0: bb6, otherwise: bb7]; // scope 0 at $DIR/issue_41110.rs:+1:27: +1:28
- }
- }
-
diff --git a/tests/mir-opt/issue_41110.main.ElaborateDrops.panic-abort.diff b/tests/mir-opt/issue_41110.main.ElaborateDrops.panic-abort.diff
new file mode 100644
index 000000000..11501907b
--- /dev/null
+++ b/tests/mir-opt/issue_41110.main.ElaborateDrops.panic-abort.diff
@@ -0,0 +1,69 @@
+- // MIR for `main` before ElaborateDrops
++ // MIR for `main` after ElaborateDrops
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
+ let mut _2: S;
+ let mut _3: S;
+ let mut _4: S;
++ let mut _5: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
++ _5 = const false;
+ StorageLive(_1);
+ StorageLive(_2);
++ _5 = const true;
+ _2 = S;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = S;
+ _3 = S::id(move _4) -> [return: bb1, unwind: bb4];
+ }
+
+ bb1: {
+ StorageDead(_4);
++ _5 = const false;
+ _1 = S::other(move _2, move _3) -> [return: bb2, unwind: bb3];
+ }
+
+ bb2: {
+ StorageDead(_3);
++ _5 = const false;
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+
+ bb3 (cleanup): {
+- drop(_3) -> [return: bb5, unwind terminate];
++ goto -> bb5;
+ }
+
+ bb4 (cleanup): {
+- drop(_4) -> [return: bb5, unwind terminate];
++ goto -> bb5;
+ }
+
+ bb5 (cleanup): {
+- drop(_2) -> [return: bb6, unwind terminate];
++ goto -> bb8;
+ }
+
+ bb6 (cleanup): {
+ resume;
++ }
++
++ bb7 (cleanup): {
++ drop(_2) -> [return: bb6, unwind terminate];
++ }
++
++ bb8 (cleanup): {
++ switchInt(_5) -> [0: bb6, otherwise: bb7];
+ }
+ }
+
diff --git a/tests/mir-opt/issue_41110.main.ElaborateDrops.panic-unwind.diff b/tests/mir-opt/issue_41110.main.ElaborateDrops.panic-unwind.diff
new file mode 100644
index 000000000..11501907b
--- /dev/null
+++ b/tests/mir-opt/issue_41110.main.ElaborateDrops.panic-unwind.diff
@@ -0,0 +1,69 @@
+- // MIR for `main` before ElaborateDrops
++ // MIR for `main` after ElaborateDrops
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: ();
+ let mut _2: S;
+ let mut _3: S;
+ let mut _4: S;
++ let mut _5: bool;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
++ _5 = const false;
+ StorageLive(_1);
+ StorageLive(_2);
++ _5 = const true;
+ _2 = S;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = S;
+ _3 = S::id(move _4) -> [return: bb1, unwind: bb4];
+ }
+
+ bb1: {
+ StorageDead(_4);
++ _5 = const false;
+ _1 = S::other(move _2, move _3) -> [return: bb2, unwind: bb3];
+ }
+
+ bb2: {
+ StorageDead(_3);
++ _5 = const false;
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+
+ bb3 (cleanup): {
+- drop(_3) -> [return: bb5, unwind terminate];
++ goto -> bb5;
+ }
+
+ bb4 (cleanup): {
+- drop(_4) -> [return: bb5, unwind terminate];
++ goto -> bb5;
+ }
+
+ bb5 (cleanup): {
+- drop(_2) -> [return: bb6, unwind terminate];
++ goto -> bb8;
+ }
+
+ bb6 (cleanup): {
+ resume;
++ }
++
++ bb7 (cleanup): {
++ drop(_2) -> [return: bb6, unwind terminate];
++ }
++
++ bb8 (cleanup): {
++ switchInt(_5) -> [0: bb6, otherwise: bb7];
+ }
+ }
+
diff --git a/tests/mir-opt/issue_41110.rs b/tests/mir-opt/issue_41110.rs
index e1067ce53..d8665b23d 100644
--- a/tests/mir-opt/issue_41110.rs
+++ b/tests/mir-opt/issue_41110.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// check that we don't emit multiple drop flags when they are not needed.
diff --git a/tests/mir-opt/issue_41110.test.ElaborateDrops.diff b/tests/mir-opt/issue_41110.test.ElaborateDrops.diff
deleted file mode 100644
index a4a07ad12..000000000
--- a/tests/mir-opt/issue_41110.test.ElaborateDrops.diff
+++ /dev/null
@@ -1,105 +0,0 @@
-- // MIR for `test` before ElaborateDrops
-+ // MIR for `test` after ElaborateDrops
-
- fn test() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_41110.rs:+0:15: +0:15
- let _1: S; // in scope 0 at $DIR/issue_41110.rs:+1:9: +1:10
- let _3: (); // in scope 0 at $DIR/issue_41110.rs:+3:5: +3:12
- let mut _4: S; // in scope 0 at $DIR/issue_41110.rs:+3:10: +3:11
- let mut _5: S; // in scope 0 at $DIR/issue_41110.rs:+4:9: +4:10
-+ let mut _6: bool; // in scope 0 at $DIR/issue_41110.rs:+5:1: +5:2
- scope 1 {
- debug u => _1; // in scope 1 at $DIR/issue_41110.rs:+1:9: +1:10
- let mut _2: S; // in scope 1 at $DIR/issue_41110.rs:+2:9: +2:14
- scope 2 {
- debug v => _2; // in scope 2 at $DIR/issue_41110.rs:+2:9: +2:14
- }
- }
-
- bb0: {
-+ _6 = const false; // scope 0 at $DIR/issue_41110.rs:+1:9: +1:10
- StorageLive(_1); // scope 0 at $DIR/issue_41110.rs:+1:9: +1:10
-+ _6 = const true; // scope 0 at $DIR/issue_41110.rs:+1:13: +1:14
- _1 = S; // scope 0 at $DIR/issue_41110.rs:+1:13: +1:14
- StorageLive(_2); // scope 1 at $DIR/issue_41110.rs:+2:9: +2:14
- _2 = S; // scope 1 at $DIR/issue_41110.rs:+2:17: +2:18
- StorageLive(_3); // scope 2 at $DIR/issue_41110.rs:+3:5: +3:12
- StorageLive(_4); // scope 2 at $DIR/issue_41110.rs:+3:10: +3:11
- _4 = move _2; // scope 2 at $DIR/issue_41110.rs:+3:10: +3:11
- _3 = std::mem::drop::<S>(move _4) -> [return: bb1, unwind: bb7]; // scope 2 at $DIR/issue_41110.rs:+3:5: +3:12
- // mir::Constant
- // + span: $DIR/issue_41110.rs:17:5: 17:9
- // + literal: Const { ty: fn(S) {std::mem::drop::<S>}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_4); // scope 2 at $DIR/issue_41110.rs:+3:11: +3:12
- StorageDead(_3); // scope 2 at $DIR/issue_41110.rs:+3:12: +3:13
- StorageLive(_5); // scope 2 at $DIR/issue_41110.rs:+4:9: +4:10
-+ _6 = const false; // scope 2 at $DIR/issue_41110.rs:+4:9: +4:10
- _5 = move _1; // scope 2 at $DIR/issue_41110.rs:+4:9: +4:10
-- drop(_2) -> [return: bb2, unwind: bb3]; // scope 2 at $DIR/issue_41110.rs:+4:5: +4:6
-+ goto -> bb2; // scope 2 at $DIR/issue_41110.rs:+4:5: +4:6
- }
-
- bb2: {
- _2 = move _5; // scope 2 at $DIR/issue_41110.rs:+4:5: +4:6
-- drop(_5) -> [return: bb4, unwind: bb8]; // scope 2 at $DIR/issue_41110.rs:+4:9: +4:10
-+ goto -> bb4; // scope 2 at $DIR/issue_41110.rs:+4:9: +4:10
- }
-
- bb3 (cleanup): {
- _2 = move _5; // scope 2 at $DIR/issue_41110.rs:+4:5: +4:6
- drop(_5) -> [return: bb8, unwind terminate]; // scope 2 at $DIR/issue_41110.rs:+4:9: +4:10
- }
-
- bb4: {
- StorageDead(_5); // scope 2 at $DIR/issue_41110.rs:+4:9: +4:10
- _0 = const (); // scope 0 at $DIR/issue_41110.rs:+0:15: +5:2
- drop(_2) -> [return: bb5, unwind: bb9]; // scope 1 at $DIR/issue_41110.rs:+5:1: +5:2
- }
-
- bb5: {
- StorageDead(_2); // scope 1 at $DIR/issue_41110.rs:+5:1: +5:2
-- drop(_1) -> bb6; // scope 0 at $DIR/issue_41110.rs:+5:1: +5:2
-+ goto -> bb6; // scope 0 at $DIR/issue_41110.rs:+5:1: +5:2
- }
-
- bb6: {
-+ _6 = const false; // scope 0 at $DIR/issue_41110.rs:+5:1: +5:2
- StorageDead(_1); // scope 0 at $DIR/issue_41110.rs:+5:1: +5:2
- return; // scope 0 at $DIR/issue_41110.rs:+5:2: +5:2
- }
-
- bb7 (cleanup): {
-- drop(_4) -> [return: bb8, unwind terminate]; // scope 2 at $DIR/issue_41110.rs:+3:11: +3:12
-+ goto -> bb8; // scope 2 at $DIR/issue_41110.rs:+3:11: +3:12
- }
-
- bb8 (cleanup): {
-- drop(_2) -> [return: bb9, unwind terminate]; // scope 1 at $DIR/issue_41110.rs:+5:1: +5:2
-+ goto -> bb9; // scope 1 at $DIR/issue_41110.rs:+5:1: +5:2
- }
-
- bb9 (cleanup): {
-- drop(_1) -> [return: bb10, unwind terminate]; // scope 0 at $DIR/issue_41110.rs:+5:1: +5:2
-+ goto -> bb13; // scope 0 at $DIR/issue_41110.rs:+5:1: +5:2
- }
-
- bb10 (cleanup): {
- resume; // scope 0 at $DIR/issue_41110.rs:+0:1: +5:2
-+ }
-+
-+ bb11 (cleanup): {
-+ unreachable; // scope 0 at $DIR/issue_41110.rs:+0:1: +5:2
-+ }
-+
-+ bb12 (cleanup): {
-+ drop(_1) -> [return: bb10, unwind terminate]; // scope 0 at $DIR/issue_41110.rs:+5:1: +5:2
-+ }
-+
-+ bb13 (cleanup): {
-+ switchInt(_6) -> [0: bb10, otherwise: bb12]; // scope 0 at $DIR/issue_41110.rs:+5:1: +5:2
- }
- }
-
diff --git a/tests/mir-opt/issue_41110.test.ElaborateDrops.panic-abort.diff b/tests/mir-opt/issue_41110.test.ElaborateDrops.panic-abort.diff
new file mode 100644
index 000000000..eb03a347a
--- /dev/null
+++ b/tests/mir-opt/issue_41110.test.ElaborateDrops.panic-abort.diff
@@ -0,0 +1,102 @@
+- // MIR for `test` before ElaborateDrops
++ // MIR for `test` after ElaborateDrops
+
+ fn test() -> () {
+ let mut _0: ();
+ let _1: S;
+ let _3: ();
+ let mut _4: S;
+ let mut _5: S;
++ let mut _6: bool;
+ scope 1 {
+ debug u => _1;
+ let mut _2: S;
+ scope 2 {
+ debug v => _2;
+ }
+ }
+
+ bb0: {
++ _6 = const false;
+ StorageLive(_1);
++ _6 = const true;
+ _1 = S;
+ StorageLive(_2);
+ _2 = S;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = move _2;
+ _3 = std::mem::drop::<S>(move _4) -> [return: bb1, unwind: bb7];
+ }
+
+ bb1: {
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageLive(_5);
++ _6 = const false;
+ _5 = move _1;
+- drop(_2) -> [return: bb2, unwind: bb3];
++ goto -> bb2;
+ }
+
+ bb2: {
+ _2 = move _5;
+- drop(_5) -> [return: bb4, unwind: bb8];
++ goto -> bb4;
+ }
+
+ bb3 (cleanup): {
+ _2 = move _5;
+ drop(_5) -> [return: bb8, unwind terminate];
+ }
+
+ bb4: {
+ StorageDead(_5);
+ _0 = const ();
+ drop(_2) -> [return: bb5, unwind: bb9];
+ }
+
+ bb5: {
+ StorageDead(_2);
+- drop(_1) -> [return: bb6, unwind: bb10];
++ goto -> bb6;
+ }
+
+ bb6: {
++ _6 = const false;
+ StorageDead(_1);
+ return;
+ }
+
+ bb7 (cleanup): {
+- drop(_4) -> [return: bb8, unwind terminate];
++ goto -> bb8;
+ }
+
+ bb8 (cleanup): {
+- drop(_2) -> [return: bb9, unwind terminate];
++ goto -> bb9;
+ }
+
+ bb9 (cleanup): {
+- drop(_1) -> [return: bb10, unwind terminate];
++ goto -> bb13;
+ }
+
+ bb10 (cleanup): {
+ resume;
++ }
++
++ bb11 (cleanup): {
++ unreachable;
++ }
++
++ bb12 (cleanup): {
++ drop(_1) -> [return: bb10, unwind terminate];
++ }
++
++ bb13 (cleanup): {
++ switchInt(_6) -> [0: bb10, otherwise: bb12];
+ }
+ }
+
diff --git a/tests/mir-opt/issue_41110.test.ElaborateDrops.panic-unwind.diff b/tests/mir-opt/issue_41110.test.ElaborateDrops.panic-unwind.diff
new file mode 100644
index 000000000..254658c81
--- /dev/null
+++ b/tests/mir-opt/issue_41110.test.ElaborateDrops.panic-unwind.diff
@@ -0,0 +1,102 @@
+- // MIR for `test` before ElaborateDrops
++ // MIR for `test` after ElaborateDrops
+
+ fn test() -> () {
+ let mut _0: ();
+ let _1: S;
+ let _3: ();
+ let mut _4: S;
+ let mut _5: S;
++ let mut _6: bool;
+ scope 1 {
+ debug u => _1;
+ let mut _2: S;
+ scope 2 {
+ debug v => _2;
+ }
+ }
+
+ bb0: {
++ _6 = const false;
+ StorageLive(_1);
++ _6 = const true;
+ _1 = S;
+ StorageLive(_2);
+ _2 = S;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = move _2;
+ _3 = std::mem::drop::<S>(move _4) -> [return: bb1, unwind: bb7];
+ }
+
+ bb1: {
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageLive(_5);
++ _6 = const false;
+ _5 = move _1;
+- drop(_2) -> [return: bb2, unwind: bb3];
++ goto -> bb2;
+ }
+
+ bb2: {
+ _2 = move _5;
+- drop(_5) -> [return: bb4, unwind: bb8];
++ goto -> bb4;
+ }
+
+ bb3 (cleanup): {
+ _2 = move _5;
+ drop(_5) -> [return: bb8, unwind terminate];
+ }
+
+ bb4: {
+ StorageDead(_5);
+ _0 = const ();
+ drop(_2) -> [return: bb5, unwind: bb9];
+ }
+
+ bb5: {
+ StorageDead(_2);
+- drop(_1) -> [return: bb6, unwind continue];
++ goto -> bb6;
+ }
+
+ bb6: {
++ _6 = const false;
+ StorageDead(_1);
+ return;
+ }
+
+ bb7 (cleanup): {
+- drop(_4) -> [return: bb8, unwind terminate];
++ goto -> bb8;
+ }
+
+ bb8 (cleanup): {
+- drop(_2) -> [return: bb9, unwind terminate];
++ goto -> bb9;
+ }
+
+ bb9 (cleanup): {
+- drop(_1) -> [return: bb10, unwind terminate];
++ goto -> bb13;
+ }
+
+ bb10 (cleanup): {
+ resume;
++ }
++
++ bb11 (cleanup): {
++ unreachable;
++ }
++
++ bb12 (cleanup): {
++ drop(_1) -> [return: bb10, unwind terminate];
++ }
++
++ bb13 (cleanup): {
++ switchInt(_6) -> [0: bb10, otherwise: bb12];
+ }
+ }
+
diff --git a/tests/mir-opt/issue_41697.{impl#0}-{constant#0}.SimplifyCfg-promote-consts.after.mir b/tests/mir-opt/issue_41697.{impl#0}-{constant#0}.SimplifyCfg-promote-consts.after.mir
index 8af087d84..0b48e58da 100644
--- a/tests/mir-opt/issue_41697.{impl#0}-{constant#0}.SimplifyCfg-promote-consts.after.mir
+++ b/tests/mir-opt/issue_41697.{impl#0}-{constant#0}.SimplifyCfg-promote-consts.after.mir
@@ -1,20 +1,20 @@
// MIR for `<impl at $DIR/issue_41697.rs:18:1: 18:23>::{constant#0}` after SimplifyCfg-promote-consts
<impl at $DIR/issue_41697.rs:18:1: 18:23>::{constant#0}: usize = {
- let mut _0: usize; // return place in scope 0 at $DIR/issue_41697.rs:+0:19: +0:22
- let mut _1: (usize, bool); // in scope 0 at $DIR/issue_41697.rs:+0:19: +0:22
+ let mut _0: usize;
+ let mut _1: (usize, bool);
bb0: {
- _1 = CheckedAdd(const 1_usize, const 1_usize); // scope 0 at $DIR/issue_41697.rs:+0:19: +0:22
- assert(!move (_1.1: bool), "attempt to compute `{} + {}`, which would overflow", const 1_usize, const 1_usize) -> [success: bb1, unwind: bb2]; // scope 0 at $DIR/issue_41697.rs:+0:19: +0:22
+ _1 = CheckedAdd(const 1_usize, const 1_usize);
+ assert(!move (_1.1: bool), "attempt to compute `{} + {}`, which would overflow", const 1_usize, const 1_usize) -> [success: bb1, unwind: bb2];
}
bb1: {
- _0 = move (_1.0: usize); // scope 0 at $DIR/issue_41697.rs:+0:19: +0:22
- return; // scope 0 at $DIR/issue_41697.rs:+0:19: +0:22
+ _0 = move (_1.0: usize);
+ return;
}
bb2 (cleanup): {
- resume; // scope 0 at $DIR/issue_41697.rs:+0:19: +0:22
+ resume;
}
}
diff --git a/tests/mir-opt/issue_41888.main.ElaborateDrops.diff b/tests/mir-opt/issue_41888.main.ElaborateDrops.diff
deleted file mode 100644
index 46b450a4e..000000000
--- a/tests/mir-opt/issue_41888.main.ElaborateDrops.diff
+++ /dev/null
@@ -1,151 +0,0 @@
-- // MIR for `main` before ElaborateDrops
-+ // MIR for `main` after ElaborateDrops
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_41888.rs:+0:11: +0:11
- let _1: E; // in scope 0 at $DIR/issue_41888.rs:+1:9: +1:10
- let mut _2: bool; // in scope 0 at $DIR/issue_41888.rs:+2:8: +2:14
- let mut _3: E; // in scope 0 at $DIR/issue_41888.rs:+3:13: +3:20
- let mut _4: K; // in scope 0 at $DIR/issue_41888.rs:+3:18: +3:19
- let mut _5: isize; // in scope 0 at $DIR/issue_41888.rs:+4:16: +4:24
-+ let mut _7: bool; // in scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ let mut _8: bool; // in scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ let mut _9: bool; // in scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ let mut _10: isize; // in scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ let mut _11: isize; // in scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
- scope 1 {
- debug e => _1; // in scope 1 at $DIR/issue_41888.rs:+1:9: +1:10
- scope 2 {
- debug _k => _6; // in scope 2 at $DIR/issue_41888.rs:+4:21: +4:23
- let _6: K; // in scope 2 at $DIR/issue_41888.rs:+4:21: +4:23
- }
- }
-
- bb0: {
-+ _7 = const false; // scope 0 at $DIR/issue_41888.rs:+1:9: +1:10
-+ _8 = const false; // scope 0 at $DIR/issue_41888.rs:+1:9: +1:10
-+ _9 = const false; // scope 0 at $DIR/issue_41888.rs:+1:9: +1:10
- StorageLive(_1); // scope 0 at $DIR/issue_41888.rs:+1:9: +1:10
- StorageLive(_2); // scope 1 at $DIR/issue_41888.rs:+2:8: +2:14
- _2 = cond() -> [return: bb1, unwind: bb11]; // scope 1 at $DIR/issue_41888.rs:+2:8: +2:14
- // mir::Constant
- // + span: $DIR/issue_41888.rs:8:8: 8:12
- // + literal: Const { ty: fn() -> bool {cond}, val: Value(<ZST>) }
- }
-
- bb1: {
- switchInt(move _2) -> [0: bb8, otherwise: bb2]; // scope 1 at $DIR/issue_41888.rs:+2:8: +2:14
- }
-
- bb2: {
- StorageLive(_3); // scope 1 at $DIR/issue_41888.rs:+3:13: +3:20
- StorageLive(_4); // scope 1 at $DIR/issue_41888.rs:+3:18: +3:19
- _4 = K; // scope 1 at $DIR/issue_41888.rs:+3:18: +3:19
- _3 = E::F(move _4); // scope 1 at $DIR/issue_41888.rs:+3:13: +3:20
- StorageDead(_4); // scope 1 at $DIR/issue_41888.rs:+3:19: +3:20
-- drop(_1) -> [return: bb3, unwind: bb4]; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
-+ goto -> bb3; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
- }
-
- bb3: {
-+ _7 = const true; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
-+ _8 = const true; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
-+ _9 = const true; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
- _1 = move _3; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
-- drop(_3) -> [return: bb5, unwind: bb11]; // scope 1 at $DIR/issue_41888.rs:+3:19: +3:20
-+ goto -> bb5; // scope 1 at $DIR/issue_41888.rs:+3:19: +3:20
- }
-
- bb4 (cleanup): {
- _1 = move _3; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
- drop(_3) -> [return: bb11, unwind terminate]; // scope 1 at $DIR/issue_41888.rs:+3:19: +3:20
- }
-
- bb5: {
- StorageDead(_3); // scope 1 at $DIR/issue_41888.rs:+3:19: +3:20
- _5 = discriminant(_1); // scope 2 at $DIR/issue_41888.rs:+4:16: +4:24
- switchInt(move _5) -> [0: bb6, otherwise: bb7]; // scope 2 at $DIR/issue_41888.rs:+4:16: +4:24
- }
-
- bb6: {
- StorageLive(_6); // scope 2 at $DIR/issue_41888.rs:+4:21: +4:23
-+ _9 = const false; // scope 2 at $DIR/issue_41888.rs:+4:21: +4:23
- _6 = move ((_1 as F).0: K); // scope 2 at $DIR/issue_41888.rs:+4:21: +4:23
- _0 = const (); // scope 2 at $DIR/issue_41888.rs:+4:29: +7:10
- StorageDead(_6); // scope 1 at $DIR/issue_41888.rs:+7:9: +7:10
- goto -> bb9; // scope 1 at $DIR/issue_41888.rs:+4:9: +7:10
- }
-
- bb7: {
- _0 = const (); // scope 1 at $DIR/issue_41888.rs:+7:10: +7:10
- goto -> bb9; // scope 1 at $DIR/issue_41888.rs:+4:9: +7:10
- }
-
- bb8: {
- _0 = const (); // scope 1 at $DIR/issue_41888.rs:+8:6: +8:6
- goto -> bb9; // scope 1 at $DIR/issue_41888.rs:+2:5: +8:6
- }
-
- bb9: {
- StorageDead(_2); // scope 1 at $DIR/issue_41888.rs:+8:5: +8:6
-- drop(_1) -> bb10; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ goto -> bb19; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
- }
-
- bb10: {
-+ _7 = const false; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ _8 = const false; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ _9 = const false; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
- StorageDead(_1); // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
- return; // scope 0 at $DIR/issue_41888.rs:+9:2: +9:2
- }
-
- bb11 (cleanup): {
-- drop(_1) -> [return: bb12, unwind terminate]; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ goto -> bb12; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
- }
-
- bb12 (cleanup): {
- resume; // scope 0 at $DIR/issue_41888.rs:+0:1: +9:2
-+ }
-+
-+ bb13 (cleanup): {
-+ unreachable; // scope 0 at $DIR/issue_41888.rs:+0:1: +9:2
-+ }
-+
-+ bb14: {
-+ _7 = const false; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ goto -> bb10; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ }
-+
-+ bb15 (cleanup): {
-+ goto -> bb12; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ }
-+
-+ bb16: {
-+ drop(_1) -> [return: bb14, unwind: bb12]; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ }
-+
-+ bb17 (cleanup): {
-+ drop(_1) -> [return: bb12, unwind terminate]; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ }
-+
-+ bb18: {
-+ _10 = discriminant(_1); // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ switchInt(move _10) -> [0: bb14, otherwise: bb16]; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ }
-+
-+ bb19: {
-+ switchInt(_7) -> [0: bb14, otherwise: bb18]; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ }
-+
-+ bb20 (cleanup): {
-+ _11 = discriminant(_1); // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ switchInt(move _11) -> [0: bb15, otherwise: bb17]; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
-+ }
-+
-+ bb21 (cleanup): {
-+ switchInt(_7) -> [0: bb12, otherwise: bb20]; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
- }
- }
-
diff --git a/tests/mir-opt/issue_41888.main.ElaborateDrops.panic-abort.diff b/tests/mir-opt/issue_41888.main.ElaborateDrops.panic-abort.diff
new file mode 100644
index 000000000..7c2503f9d
--- /dev/null
+++ b/tests/mir-opt/issue_41888.main.ElaborateDrops.panic-abort.diff
@@ -0,0 +1,148 @@
+- // MIR for `main` before ElaborateDrops
++ // MIR for `main` after ElaborateDrops
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: E;
+ let mut _2: bool;
+ let mut _3: E;
+ let mut _4: K;
+ let mut _5: isize;
++ let mut _7: bool;
++ let mut _8: bool;
++ let mut _9: bool;
++ let mut _10: isize;
++ let mut _11: isize;
+ scope 1 {
+ debug e => _1;
+ scope 2 {
+ debug _k => _6;
+ let _6: K;
+ }
+ }
+
+ bb0: {
++ _7 = const false;
++ _8 = const false;
++ _9 = const false;
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = cond() -> [return: bb1, unwind: bb11];
+ }
+
+ bb1: {
+ switchInt(move _2) -> [0: bb8, otherwise: bb2];
+ }
+
+ bb2: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = K;
+ _3 = E::F(move _4);
+ StorageDead(_4);
+- drop(_1) -> [return: bb3, unwind: bb4];
++ goto -> bb3;
+ }
+
+ bb3: {
++ _7 = const true;
++ _8 = const true;
++ _9 = const true;
+ _1 = move _3;
+- drop(_3) -> [return: bb5, unwind: bb11];
++ goto -> bb5;
+ }
+
+ bb4 (cleanup): {
+ _1 = move _3;
+ drop(_3) -> [return: bb11, unwind terminate];
+ }
+
+ bb5: {
+ StorageDead(_3);
+ _5 = discriminant(_1);
+ switchInt(move _5) -> [0: bb6, otherwise: bb7];
+ }
+
+ bb6: {
+ StorageLive(_6);
++ _9 = const false;
+ _6 = move ((_1 as F).0: K);
+ _0 = const ();
+ StorageDead(_6);
+ goto -> bb9;
+ }
+
+ bb7: {
+ _0 = const ();
+ goto -> bb9;
+ }
+
+ bb8: {
+ _0 = const ();
+ goto -> bb9;
+ }
+
+ bb9: {
+ StorageDead(_2);
+- drop(_1) -> [return: bb10, unwind: bb12];
++ goto -> bb19;
+ }
+
+ bb10: {
++ _7 = const false;
++ _8 = const false;
++ _9 = const false;
+ StorageDead(_1);
+ return;
+ }
+
+ bb11 (cleanup): {
+- drop(_1) -> [return: bb12, unwind terminate];
++ goto -> bb12;
+ }
+
+ bb12 (cleanup): {
+ resume;
++ }
++
++ bb13 (cleanup): {
++ unreachable;
++ }
++
++ bb14: {
++ _7 = const false;
++ goto -> bb10;
++ }
++
++ bb15 (cleanup): {
++ goto -> bb12;
++ }
++
++ bb16: {
++ drop(_1) -> [return: bb14, unwind: bb12];
++ }
++
++ bb17 (cleanup): {
++ drop(_1) -> [return: bb12, unwind terminate];
++ }
++
++ bb18: {
++ _10 = discriminant(_1);
++ switchInt(move _10) -> [0: bb14, otherwise: bb16];
++ }
++
++ bb19: {
++ switchInt(_7) -> [0: bb14, otherwise: bb18];
++ }
++
++ bb20 (cleanup): {
++ _11 = discriminant(_1);
++ switchInt(move _11) -> [0: bb15, otherwise: bb17];
++ }
++
++ bb21 (cleanup): {
++ switchInt(_7) -> [0: bb12, otherwise: bb20];
+ }
+ }
+
diff --git a/tests/mir-opt/issue_41888.main.ElaborateDrops.panic-unwind.diff b/tests/mir-opt/issue_41888.main.ElaborateDrops.panic-unwind.diff
new file mode 100644
index 000000000..4ef3650cd
--- /dev/null
+++ b/tests/mir-opt/issue_41888.main.ElaborateDrops.panic-unwind.diff
@@ -0,0 +1,148 @@
+- // MIR for `main` before ElaborateDrops
++ // MIR for `main` after ElaborateDrops
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: E;
+ let mut _2: bool;
+ let mut _3: E;
+ let mut _4: K;
+ let mut _5: isize;
++ let mut _7: bool;
++ let mut _8: bool;
++ let mut _9: bool;
++ let mut _10: isize;
++ let mut _11: isize;
+ scope 1 {
+ debug e => _1;
+ scope 2 {
+ debug _k => _6;
+ let _6: K;
+ }
+ }
+
+ bb0: {
++ _7 = const false;
++ _8 = const false;
++ _9 = const false;
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = cond() -> [return: bb1, unwind: bb11];
+ }
+
+ bb1: {
+ switchInt(move _2) -> [0: bb8, otherwise: bb2];
+ }
+
+ bb2: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = K;
+ _3 = E::F(move _4);
+ StorageDead(_4);
+- drop(_1) -> [return: bb3, unwind: bb4];
++ goto -> bb3;
+ }
+
+ bb3: {
++ _7 = const true;
++ _8 = const true;
++ _9 = const true;
+ _1 = move _3;
+- drop(_3) -> [return: bb5, unwind: bb11];
++ goto -> bb5;
+ }
+
+ bb4 (cleanup): {
+ _1 = move _3;
+ drop(_3) -> [return: bb11, unwind terminate];
+ }
+
+ bb5: {
+ StorageDead(_3);
+ _5 = discriminant(_1);
+ switchInt(move _5) -> [0: bb6, otherwise: bb7];
+ }
+
+ bb6: {
+ StorageLive(_6);
++ _9 = const false;
+ _6 = move ((_1 as F).0: K);
+ _0 = const ();
+ StorageDead(_6);
+ goto -> bb9;
+ }
+
+ bb7: {
+ _0 = const ();
+ goto -> bb9;
+ }
+
+ bb8: {
+ _0 = const ();
+ goto -> bb9;
+ }
+
+ bb9: {
+ StorageDead(_2);
+- drop(_1) -> [return: bb10, unwind continue];
++ goto -> bb19;
+ }
+
+ bb10: {
++ _7 = const false;
++ _8 = const false;
++ _9 = const false;
+ StorageDead(_1);
+ return;
+ }
+
+ bb11 (cleanup): {
+- drop(_1) -> [return: bb12, unwind terminate];
++ goto -> bb12;
+ }
+
+ bb12 (cleanup): {
+ resume;
++ }
++
++ bb13 (cleanup): {
++ unreachable;
++ }
++
++ bb14: {
++ _7 = const false;
++ goto -> bb10;
++ }
++
++ bb15 (cleanup): {
++ goto -> bb12;
++ }
++
++ bb16: {
++ drop(_1) -> [return: bb14, unwind: bb12];
++ }
++
++ bb17 (cleanup): {
++ drop(_1) -> [return: bb12, unwind terminate];
++ }
++
++ bb18: {
++ _10 = discriminant(_1);
++ switchInt(move _10) -> [0: bb14, otherwise: bb16];
++ }
++
++ bb19: {
++ switchInt(_7) -> [0: bb14, otherwise: bb18];
++ }
++
++ bb20 (cleanup): {
++ _11 = discriminant(_1);
++ switchInt(move _11) -> [0: bb15, otherwise: bb17];
++ }
++
++ bb21 (cleanup): {
++ switchInt(_7) -> [0: bb12, otherwise: bb20];
+ }
+ }
+
diff --git a/tests/mir-opt/issue_41888.rs b/tests/mir-opt/issue_41888.rs
index 0f10c0a1d..9b16caf92 100644
--- a/tests/mir-opt/issue_41888.rs
+++ b/tests/mir-opt/issue_41888.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// check that we clear the "ADT master drop flag" even when there are
// no fields to be dropped.
diff --git a/tests/mir-opt/issue_62289.rs b/tests/mir-opt/issue_62289.rs
index af1bfea3f..fece6bb7c 100644
--- a/tests/mir-opt/issue_62289.rs
+++ b/tests/mir-opt/issue_62289.rs
@@ -1,6 +1,6 @@
// check that we don't forget to drop the Box if we early return before
// initializing it
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![feature(rustc_attrs)]
diff --git a/tests/mir-opt/issue_62289.test.ElaborateDrops.before.mir b/tests/mir-opt/issue_62289.test.ElaborateDrops.before.mir
deleted file mode 100644
index 8ed910150..000000000
--- a/tests/mir-opt/issue_62289.test.ElaborateDrops.before.mir
+++ /dev/null
@@ -1,122 +0,0 @@
-// MIR for `test` before ElaborateDrops
-
-fn test() -> Option<Box<u32>> {
- let mut _0: std::option::Option<std::boxed::Box<u32>>; // return place in scope 0 at $DIR/issue_62289.rs:+0:14: +0:30
- let mut _1: std::boxed::Box<u32>; // in scope 0 at $DIR/issue_62289.rs:+3:9: +3:24
- let mut _2: usize; // in scope 0 at $DIR/issue_62289.rs:+3:9: +3:24
- let mut _3: usize; // in scope 0 at $DIR/issue_62289.rs:+3:9: +3:24
- let mut _4: *mut u8; // in scope 0 at $DIR/issue_62289.rs:+3:9: +3:24
- let mut _5: std::boxed::Box<u32>; // in scope 0 at $DIR/issue_62289.rs:+3:9: +3:24
- let mut _6: std::ops::ControlFlow<std::option::Option<std::convert::Infallible>, u32>; // in scope 0 at $DIR/issue_62289.rs:+3:18: +3:23
- let mut _7: std::option::Option<u32>; // in scope 0 at $DIR/issue_62289.rs:+3:18: +3:22
- let mut _8: isize; // in scope 0 at $DIR/issue_62289.rs:+3:22: +3:23
- let _9: std::option::Option<std::convert::Infallible>; // in scope 0 at $DIR/issue_62289.rs:+3:22: +3:23
- let mut _10: !; // in scope 0 at $DIR/issue_62289.rs:+3:22: +3:23
- let mut _11: std::option::Option<std::convert::Infallible>; // in scope 0 at $DIR/issue_62289.rs:+3:22: +3:23
- let _12: u32; // in scope 0 at $DIR/issue_62289.rs:+3:18: +3:23
- scope 1 {
- }
- scope 2 {
- debug residual => _9; // in scope 2 at $DIR/issue_62289.rs:+3:22: +3:23
- scope 3 {
- }
- }
- scope 4 {
- debug val => _12; // in scope 4 at $DIR/issue_62289.rs:+3:18: +3:23
- scope 5 {
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/issue_62289.rs:+3:9: +3:24
- _2 = SizeOf(u32); // scope 1 at $DIR/issue_62289.rs:+3:9: +3:24
- _3 = AlignOf(u32); // scope 1 at $DIR/issue_62289.rs:+3:9: +3:24
- _4 = alloc::alloc::exchange_malloc(move _2, move _3) -> bb1; // scope 1 at $DIR/issue_62289.rs:+3:9: +3:24
- // mir::Constant
- // + span: $DIR/issue_62289.rs:11:9: 11:24
- // + literal: Const { ty: unsafe fn(usize, usize) -> *mut u8 {alloc::alloc::exchange_malloc}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageLive(_5); // scope 0 at $DIR/issue_62289.rs:+3:9: +3:24
- _5 = ShallowInitBox(move _4, u32); // scope 0 at $DIR/issue_62289.rs:+3:9: +3:24
- StorageLive(_6); // scope 0 at $DIR/issue_62289.rs:+3:18: +3:23
- StorageLive(_7); // scope 0 at $DIR/issue_62289.rs:+3:18: +3:22
- _7 = Option::<u32>::None; // scope 0 at $DIR/issue_62289.rs:+3:18: +3:22
- _6 = <Option<u32> as Try>::branch(move _7) -> [return: bb2, unwind: bb12]; // scope 0 at $DIR/issue_62289.rs:+3:18: +3:23
- // mir::Constant
- // + span: $DIR/issue_62289.rs:11:18: 11:23
- // + literal: Const { ty: fn(Option<u32>) -> ControlFlow<<Option<u32> as Try>::Residual, <Option<u32> as Try>::Output> {<Option<u32> as Try>::branch}, val: Value(<ZST>) }
- }
-
- bb2: {
- StorageDead(_7); // scope 0 at $DIR/issue_62289.rs:+3:22: +3:23
- _8 = discriminant(_6); // scope 0 at $DIR/issue_62289.rs:+3:18: +3:23
- switchInt(move _8) -> [0: bb3, 1: bb5, otherwise: bb4]; // scope 0 at $DIR/issue_62289.rs:+3:18: +3:23
- }
-
- bb3: {
- StorageLive(_12); // scope 0 at $DIR/issue_62289.rs:+3:18: +3:23
- _12 = ((_6 as Continue).0: u32); // scope 0 at $DIR/issue_62289.rs:+3:18: +3:23
- (*_5) = _12; // scope 5 at $DIR/issue_62289.rs:+3:18: +3:23
- StorageDead(_12); // scope 0 at $DIR/issue_62289.rs:+3:22: +3:23
- _1 = move _5; // scope 0 at $DIR/issue_62289.rs:+3:9: +3:24
- drop(_5) -> [return: bb7, unwind: bb11]; // scope 0 at $DIR/issue_62289.rs:+3:23: +3:24
- }
-
- bb4: {
- unreachable; // scope 0 at $DIR/issue_62289.rs:+3:18: +3:23
- }
-
- bb5: {
- StorageLive(_9); // scope 0 at $DIR/issue_62289.rs:+3:22: +3:23
- _9 = ((_6 as Break).0: std::option::Option<std::convert::Infallible>); // scope 0 at $DIR/issue_62289.rs:+3:22: +3:23
- StorageLive(_11); // scope 3 at $DIR/issue_62289.rs:+3:22: +3:23
- _11 = _9; // scope 3 at $DIR/issue_62289.rs:+3:22: +3:23
- _0 = <Option<Box<u32>> as FromResidual<Option<Infallible>>>::from_residual(move _11) -> [return: bb6, unwind: bb12]; // scope 3 at $DIR/issue_62289.rs:+3:18: +3:23
- // mir::Constant
- // + span: $DIR/issue_62289.rs:11:22: 11:23
- // + literal: Const { ty: fn(Option<Infallible>) -> Option<Box<u32>> {<Option<Box<u32>> as FromResidual<Option<Infallible>>>::from_residual}, val: Value(<ZST>) }
- }
-
- bb6: {
- StorageDead(_11); // scope 3 at $DIR/issue_62289.rs:+3:22: +3:23
- StorageDead(_9); // scope 0 at $DIR/issue_62289.rs:+3:22: +3:23
- drop(_5) -> bb9; // scope 0 at $DIR/issue_62289.rs:+3:23: +3:24
- }
-
- bb7: {
- StorageDead(_5); // scope 0 at $DIR/issue_62289.rs:+3:23: +3:24
- _0 = Option::<Box<u32>>::Some(move _1); // scope 0 at $DIR/issue_62289.rs:+1:5: +4:6
- drop(_1) -> bb8; // scope 0 at $DIR/issue_62289.rs:+4:5: +4:6
- }
-
- bb8: {
- StorageDead(_1); // scope 0 at $DIR/issue_62289.rs:+4:5: +4:6
- StorageDead(_6); // scope 0 at $DIR/issue_62289.rs:+5:1: +5:2
- goto -> bb10; // scope 0 at $DIR/issue_62289.rs:+5:2: +5:2
- }
-
- bb9: {
- StorageDead(_5); // scope 0 at $DIR/issue_62289.rs:+3:23: +3:24
- StorageDead(_1); // scope 0 at $DIR/issue_62289.rs:+4:5: +4:6
- StorageDead(_6); // scope 0 at $DIR/issue_62289.rs:+5:1: +5:2
- goto -> bb10; // scope 0 at $DIR/issue_62289.rs:+5:2: +5:2
- }
-
- bb10: {
- return; // scope 0 at $DIR/issue_62289.rs:+5:2: +5:2
- }
-
- bb11 (cleanup): {
- drop(_1) -> [return: bb13, unwind terminate]; // scope 0 at $DIR/issue_62289.rs:+4:5: +4:6
- }
-
- bb12 (cleanup): {
- drop(_5) -> [return: bb13, unwind terminate]; // scope 0 at $DIR/issue_62289.rs:+3:23: +3:24
- }
-
- bb13 (cleanup): {
- resume; // scope 0 at $DIR/issue_62289.rs:+0:1: +5:2
- }
-}
diff --git a/tests/mir-opt/issue_62289.test.ElaborateDrops.before.panic-abort.mir b/tests/mir-opt/issue_62289.test.ElaborateDrops.before.panic-abort.mir
new file mode 100644
index 000000000..ae0beffae
--- /dev/null
+++ b/tests/mir-opt/issue_62289.test.ElaborateDrops.before.panic-abort.mir
@@ -0,0 +1,113 @@
+// MIR for `test` before ElaborateDrops
+
+fn test() -> Option<Box<u32>> {
+ let mut _0: std::option::Option<std::boxed::Box<u32>>;
+ let mut _1: std::boxed::Box<u32>;
+ let mut _2: usize;
+ let mut _3: usize;
+ let mut _4: *mut u8;
+ let mut _5: std::boxed::Box<u32>;
+ let mut _6: std::ops::ControlFlow<std::option::Option<std::convert::Infallible>, u32>;
+ let mut _7: std::option::Option<u32>;
+ let mut _8: isize;
+ let _9: std::option::Option<std::convert::Infallible>;
+ let mut _10: !;
+ let mut _11: std::option::Option<std::convert::Infallible>;
+ let _12: u32;
+ scope 1 {
+ }
+ scope 2 {
+ debug residual => _9;
+ scope 3 {
+ }
+ }
+ scope 4 {
+ debug val => _12;
+ scope 5 {
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _2 = SizeOf(u32);
+ _3 = AlignOf(u32);
+ _4 = alloc::alloc::exchange_malloc(move _2, move _3) -> [return: bb1, unwind: bb13];
+ }
+
+ bb1: {
+ StorageLive(_5);
+ _5 = ShallowInitBox(move _4, u32);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = Option::<u32>::None;
+ _6 = <Option<u32> as Try>::branch(move _7) -> [return: bb2, unwind: bb12];
+ }
+
+ bb2: {
+ StorageDead(_7);
+ _8 = discriminant(_6);
+ switchInt(move _8) -> [0: bb3, 1: bb5, otherwise: bb4];
+ }
+
+ bb3: {
+ StorageLive(_12);
+ _12 = ((_6 as Continue).0: u32);
+ (*_5) = _12;
+ StorageDead(_12);
+ _1 = move _5;
+ drop(_5) -> [return: bb7, unwind: bb11];
+ }
+
+ bb4: {
+ unreachable;
+ }
+
+ bb5: {
+ StorageLive(_9);
+ _9 = ((_6 as Break).0: std::option::Option<std::convert::Infallible>);
+ StorageLive(_11);
+ _11 = _9;
+ _0 = <Option<Box<u32>> as FromResidual<Option<Infallible>>>::from_residual(move _11) -> [return: bb6, unwind: bb12];
+ }
+
+ bb6: {
+ StorageDead(_11);
+ StorageDead(_9);
+ drop(_5) -> [return: bb9, unwind: bb13];
+ }
+
+ bb7: {
+ StorageDead(_5);
+ _0 = Option::<Box<u32>>::Some(move _1);
+ drop(_1) -> [return: bb8, unwind: bb13];
+ }
+
+ bb8: {
+ StorageDead(_1);
+ StorageDead(_6);
+ goto -> bb10;
+ }
+
+ bb9: {
+ StorageDead(_5);
+ StorageDead(_1);
+ StorageDead(_6);
+ goto -> bb10;
+ }
+
+ bb10: {
+ return;
+ }
+
+ bb11 (cleanup): {
+ drop(_1) -> [return: bb13, unwind terminate];
+ }
+
+ bb12 (cleanup): {
+ drop(_5) -> [return: bb13, unwind terminate];
+ }
+
+ bb13 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/issue_62289.test.ElaborateDrops.before.panic-unwind.mir b/tests/mir-opt/issue_62289.test.ElaborateDrops.before.panic-unwind.mir
new file mode 100644
index 000000000..7ecdc428e
--- /dev/null
+++ b/tests/mir-opt/issue_62289.test.ElaborateDrops.before.panic-unwind.mir
@@ -0,0 +1,113 @@
+// MIR for `test` before ElaborateDrops
+
+fn test() -> Option<Box<u32>> {
+ let mut _0: std::option::Option<std::boxed::Box<u32>>;
+ let mut _1: std::boxed::Box<u32>;
+ let mut _2: usize;
+ let mut _3: usize;
+ let mut _4: *mut u8;
+ let mut _5: std::boxed::Box<u32>;
+ let mut _6: std::ops::ControlFlow<std::option::Option<std::convert::Infallible>, u32>;
+ let mut _7: std::option::Option<u32>;
+ let mut _8: isize;
+ let _9: std::option::Option<std::convert::Infallible>;
+ let mut _10: !;
+ let mut _11: std::option::Option<std::convert::Infallible>;
+ let _12: u32;
+ scope 1 {
+ }
+ scope 2 {
+ debug residual => _9;
+ scope 3 {
+ }
+ }
+ scope 4 {
+ debug val => _12;
+ scope 5 {
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _2 = SizeOf(u32);
+ _3 = AlignOf(u32);
+ _4 = alloc::alloc::exchange_malloc(move _2, move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageLive(_5);
+ _5 = ShallowInitBox(move _4, u32);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = Option::<u32>::None;
+ _6 = <Option<u32> as Try>::branch(move _7) -> [return: bb2, unwind: bb12];
+ }
+
+ bb2: {
+ StorageDead(_7);
+ _8 = discriminant(_6);
+ switchInt(move _8) -> [0: bb3, 1: bb5, otherwise: bb4];
+ }
+
+ bb3: {
+ StorageLive(_12);
+ _12 = ((_6 as Continue).0: u32);
+ (*_5) = _12;
+ StorageDead(_12);
+ _1 = move _5;
+ drop(_5) -> [return: bb7, unwind: bb11];
+ }
+
+ bb4: {
+ unreachable;
+ }
+
+ bb5: {
+ StorageLive(_9);
+ _9 = ((_6 as Break).0: std::option::Option<std::convert::Infallible>);
+ StorageLive(_11);
+ _11 = _9;
+ _0 = <Option<Box<u32>> as FromResidual<Option<Infallible>>>::from_residual(move _11) -> [return: bb6, unwind: bb12];
+ }
+
+ bb6: {
+ StorageDead(_11);
+ StorageDead(_9);
+ drop(_5) -> [return: bb9, unwind continue];
+ }
+
+ bb7: {
+ StorageDead(_5);
+ _0 = Option::<Box<u32>>::Some(move _1);
+ drop(_1) -> [return: bb8, unwind continue];
+ }
+
+ bb8: {
+ StorageDead(_1);
+ StorageDead(_6);
+ goto -> bb10;
+ }
+
+ bb9: {
+ StorageDead(_5);
+ StorageDead(_1);
+ StorageDead(_6);
+ goto -> bb10;
+ }
+
+ bb10: {
+ return;
+ }
+
+ bb11 (cleanup): {
+ drop(_1) -> [return: bb13, unwind terminate];
+ }
+
+ bb12 (cleanup): {
+ drop(_5) -> [return: bb13, unwind terminate];
+ }
+
+ bb13 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/issue_72181.bar.built.after.mir b/tests/mir-opt/issue_72181.bar.built.after.mir
index ebee89001..c2e4e2072 100644
--- a/tests/mir-opt/issue_72181.bar.built.after.mir
+++ b/tests/mir-opt/issue_72181.bar.built.after.mir
@@ -1,17 +1,17 @@
// MIR for `bar` after built
fn bar(_1: [(Never, u32); 1]) -> u32 {
- let mut _0: u32; // return place in scope 0 at $DIR/issue_72181.rs:+0:40: +0:43
- let _2: u32; // in scope 0 at $DIR/issue_72181.rs:+0:13: +0:14
+ let mut _0: u32;
+ let _2: u32;
scope 1 {
- debug x => _2; // in scope 1 at $DIR/issue_72181.rs:+0:13: +0:14
+ debug x => _2;
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_72181.rs:+0:13: +0:14
- _2 = (_1[0 of 1].1: u32); // scope 0 at $DIR/issue_72181.rs:+0:13: +0:14
- _0 = _2; // scope 1 at $DIR/issue_72181.rs:+0:46: +0:47
- StorageDead(_2); // scope 0 at $DIR/issue_72181.rs:+0:48: +0:49
- return; // scope 0 at $DIR/issue_72181.rs:+0:49: +0:49
+ StorageLive(_2);
+ _2 = (_1[0 of 1].1: u32);
+ _0 = _2;
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/issue_72181.foo.built.after.mir b/tests/mir-opt/issue_72181.foo.built.after.mir
index 90c978520..f78942cc5 100644
--- a/tests/mir-opt/issue_72181.foo.built.after.mir
+++ b/tests/mir-opt/issue_72181.foo.built.after.mir
@@ -1,27 +1,27 @@
// MIR for `foo` after built
fn foo(_1: [(Never, u32); 1]) -> u32 {
- debug xs => _1; // in scope 0 at $DIR/issue_72181.rs:+0:8: +0:10
- let mut _0: u32; // return place in scope 0 at $DIR/issue_72181.rs:+0:34: +0:37
- let _2: usize; // in scope 0 at $DIR/issue_72181.rs:+0:43: +0:44
- let mut _3: usize; // in scope 0 at $DIR/issue_72181.rs:+0:40: +0:45
- let mut _4: bool; // in scope 0 at $DIR/issue_72181.rs:+0:40: +0:45
+ debug xs => _1;
+ let mut _0: u32;
+ let _2: usize;
+ let mut _3: usize;
+ let mut _4: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_72181.rs:+0:43: +0:44
- _2 = const 0_usize; // scope 0 at $DIR/issue_72181.rs:+0:43: +0:44
- _3 = Len(_1); // scope 0 at $DIR/issue_72181.rs:+0:40: +0:45
- _4 = Lt(_2, _3); // scope 0 at $DIR/issue_72181.rs:+0:40: +0:45
- assert(move _4, "index out of bounds: the length is {} but the index is {}", move _3, _2) -> [success: bb1, unwind: bb2]; // scope 0 at $DIR/issue_72181.rs:+0:40: +0:45
+ StorageLive(_2);
+ _2 = const 0_usize;
+ _3 = Len(_1);
+ _4 = Lt(_2, _3);
+ assert(move _4, "index out of bounds: the length is {} but the index is {}", move _3, _2) -> [success: bb1, unwind: bb2];
}
bb1: {
- _0 = (_1[_2].1: u32); // scope 0 at $DIR/issue_72181.rs:+0:40: +0:47
- StorageDead(_2); // scope 0 at $DIR/issue_72181.rs:+0:48: +0:49
- return; // scope 0 at $DIR/issue_72181.rs:+0:49: +0:49
+ _0 = (_1[_2].1: u32);
+ StorageDead(_2);
+ return;
}
bb2 (cleanup): {
- resume; // scope 0 at $DIR/issue_72181.rs:+0:1: +0:49
+ resume;
}
}
diff --git a/tests/mir-opt/issue_72181.main.built.after.mir b/tests/mir-opt/issue_72181.main.built.after.mir
index 724e55e17..4e4071536 100644
--- a/tests/mir-opt/issue_72181.main.built.after.mir
+++ b/tests/mir-opt/issue_72181.main.built.after.mir
@@ -1,18 +1,18 @@
// MIR for `main` after built
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_72181.rs:+0:11: +0:11
- let mut _1: usize; // in scope 0 at $DIR/issue_72181.rs:+1:13: +1:34
- let mut _3: Foo; // in scope 0 at $DIR/issue_72181.rs:+3:14: +3:27
- let mut _4: Foo; // in scope 0 at $DIR/issue_72181.rs:+3:29: +3:42
- let mut _5: u64; // in scope 0 at $DIR/issue_72181.rs:+4:13: +4:30
- let _6: usize; // in scope 0 at $DIR/issue_72181.rs:+4:24: +4:25
- let mut _7: usize; // in scope 0 at $DIR/issue_72181.rs:+4:22: +4:26
- let mut _8: bool; // in scope 0 at $DIR/issue_72181.rs:+4:22: +4:26
+ let mut _0: ();
+ let mut _1: usize;
+ let mut _3: Foo;
+ let mut _4: Foo;
+ let mut _5: u64;
+ let _6: usize;
+ let mut _7: usize;
+ let mut _8: bool;
scope 1 {
- let _2: [Foo; 2]; // in scope 1 at $DIR/issue_72181.rs:+3:9: +3:10
+ let _2: [Foo; 2];
scope 2 {
- debug f => _2; // in scope 2 at $DIR/issue_72181.rs:+3:9: +3:10
+ debug f => _2;
scope 3 {
}
scope 4 {
@@ -21,44 +21,41 @@ fn main() -> () {
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/issue_72181.rs:+1:13: +1:34
- _1 = std::mem::size_of::<Foo>() -> [return: bb1, unwind: bb3]; // scope 0 at $DIR/issue_72181.rs:+1:13: +1:34
- // mir::Constant
- // + span: $DIR/issue_72181.rs:24:13: 24:32
- // + literal: Const { ty: fn() -> usize {std::mem::size_of::<Foo>}, val: Value(<ZST>) }
+ StorageLive(_1);
+ _1 = std::mem::size_of::<Foo>() -> [return: bb1, unwind: bb3];
}
bb1: {
- PlaceMention(_1); // scope 0 at $DIR/issue_72181.rs:+1:13: +1:34
- StorageDead(_1); // scope 0 at $DIR/issue_72181.rs:+1:34: +1:35
- StorageLive(_2); // scope 1 at $DIR/issue_72181.rs:+3:9: +3:10
- StorageLive(_3); // scope 1 at $DIR/issue_72181.rs:+3:14: +3:27
- _3 = Foo { a: const 42_u64 }; // scope 1 at $DIR/issue_72181.rs:+3:14: +3:27
- StorageLive(_4); // scope 1 at $DIR/issue_72181.rs:+3:29: +3:42
- _4 = Foo { a: const 10_u64 }; // scope 1 at $DIR/issue_72181.rs:+3:29: +3:42
- _2 = [move _3, move _4]; // scope 1 at $DIR/issue_72181.rs:+3:13: +3:43
- StorageDead(_4); // scope 1 at $DIR/issue_72181.rs:+3:42: +3:43
- StorageDead(_3); // scope 1 at $DIR/issue_72181.rs:+3:42: +3:43
- FakeRead(ForLet(None), _2); // scope 1 at $DIR/issue_72181.rs:+3:9: +3:10
- StorageLive(_5); // scope 2 at $DIR/issue_72181.rs:+4:13: +4:30
- StorageLive(_6); // scope 4 at $DIR/issue_72181.rs:+4:24: +4:25
- _6 = const 0_usize; // scope 4 at $DIR/issue_72181.rs:+4:24: +4:25
- _7 = Len(_2); // scope 4 at $DIR/issue_72181.rs:+4:22: +4:26
- _8 = Lt(_6, _7); // scope 4 at $DIR/issue_72181.rs:+4:22: +4:26
- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb2, unwind: bb3]; // scope 4 at $DIR/issue_72181.rs:+4:22: +4:26
+ PlaceMention(_1);
+ StorageDead(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = Foo { a: const 42_u64 };
+ StorageLive(_4);
+ _4 = Foo { a: const 10_u64 };
+ _2 = [move _3, move _4];
+ StorageDead(_4);
+ StorageDead(_3);
+ FakeRead(ForLet(None), _2);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = const 0_usize;
+ _7 = Len(_2);
+ _8 = Lt(_6, _7);
+ assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb2, unwind: bb3];
}
bb2: {
- _5 = (_2[_6].0: u64); // scope 4 at $DIR/issue_72181.rs:+4:22: +4:28
- PlaceMention(_5); // scope 2 at $DIR/issue_72181.rs:+4:13: +4:30
- StorageDead(_6); // scope 2 at $DIR/issue_72181.rs:+4:30: +4:31
- StorageDead(_5); // scope 2 at $DIR/issue_72181.rs:+4:30: +4:31
- _0 = const (); // scope 0 at $DIR/issue_72181.rs:+0:11: +5:2
- StorageDead(_2); // scope 1 at $DIR/issue_72181.rs:+5:1: +5:2
- return; // scope 0 at $DIR/issue_72181.rs:+5:2: +5:2
+ _5 = (_2[_6].0: u64);
+ PlaceMention(_5);
+ StorageDead(_6);
+ StorageDead(_5);
+ _0 = const ();
+ StorageDead(_2);
+ return;
}
bb3 (cleanup): {
- resume; // scope 0 at $DIR/issue_72181.rs:+0:1: +5:2
+ resume;
}
}
diff --git a/tests/mir-opt/issue_72181_1.f.built.after.mir b/tests/mir-opt/issue_72181_1.f.built.after.mir
index 25f472251..16f34e4a4 100644
--- a/tests/mir-opt/issue_72181_1.f.built.after.mir
+++ b/tests/mir-opt/issue_72181_1.f.built.after.mir
@@ -1,15 +1,15 @@
// MIR for `f` after built
fn f(_1: Void) -> ! {
- debug v => _1; // in scope 0 at $DIR/issue_72181_1.rs:+0:6: +0:7
- let mut _0: !; // return place in scope 0 at $DIR/issue_72181_1.rs:+0:18: +0:19
+ debug v => _1;
+ let mut _0: !;
bb0: {
- FakeRead(ForMatchedPlace(None), _1); // scope 0 at $DIR/issue_72181_1.rs:+1:11: +1:12
- unreachable; // scope 0 at $DIR/issue_72181_1.rs:+1:11: +1:12
+ FakeRead(ForMatchedPlace(None), _1);
+ unreachable;
}
bb1: {
- return; // scope 0 at $DIR/issue_72181_1.rs:+2:2: +2:2
+ return;
}
}
diff --git a/tests/mir-opt/issue_72181_1.main.built.after.mir b/tests/mir-opt/issue_72181_1.main.built.after.mir
index e1d896cbc..f5ab5b526 100644
--- a/tests/mir-opt/issue_72181_1.main.built.after.mir
+++ b/tests/mir-opt/issue_72181_1.main.built.after.mir
@@ -5,53 +5,47 @@
| 1: user_ty: Canonical { value: Ty(Void), max_universe: U0, variables: [] }, span: $DIR/issue_72181_1.rs:16:12: 16:16, inferred_ty: Void
|
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_72181_1.rs:+0:11: +0:11
- let mut _1: !; // in scope 0 at $DIR/issue_72181_1.rs:+0:11: +6:2
- let _2: Void as UserTypeProjection { base: UserType(0), projs: [] }; // in scope 0 at $DIR/issue_72181_1.rs:+1:9: +1:10
- let mut _3: (); // in scope 0 at $DIR/issue_72181_1.rs:+2:41: +2:43
- let _4: !; // in scope 0 at $DIR/issue_72181_1.rs:+5:5: +5:9
- let mut _5: Void; // in scope 0 at $DIR/issue_72181_1.rs:+5:7: +5:8
+ let mut _0: ();
+ let mut _1: !;
+ let _2: Void as UserTypeProjection { base: UserType(0), projs: [] };
+ let mut _3: ();
+ let _4: !;
+ let mut _5: Void;
scope 1 {
- debug v => _2; // in scope 1 at $DIR/issue_72181_1.rs:+1:9: +1:10
+ debug v => _2;
}
scope 2 {
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_72181_1.rs:+1:9: +1:10
- StorageLive(_3); // scope 2 at $DIR/issue_72181_1.rs:+2:41: +2:43
- _3 = (); // scope 2 at $DIR/issue_72181_1.rs:+2:41: +2:43
- _2 = transmute::<(), Void>(move _3) -> bb4; // scope 2 at $DIR/issue_72181_1.rs:+2:9: +2:44
- // mir::Constant
- // + span: $DIR/issue_72181_1.rs:17:9: 17:40
- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(()) -> Void {transmute::<(), Void>}, val: Value(<ZST>) }
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = ();
+ _2 = transmute::<(), Void>(move _3) -> bb4;
}
bb1: {
- StorageDead(_3); // scope 2 at $DIR/issue_72181_1.rs:+2:43: +2:44
- FakeRead(ForLet(None), _2); // scope 0 at $DIR/issue_72181_1.rs:+1:9: +1:10
- AscribeUserType(_2, o, UserTypeProjection { base: UserType(1), projs: [] }); // scope 0 at $DIR/issue_72181_1.rs:+1:12: +1:16
- StorageLive(_4); // scope 1 at $DIR/issue_72181_1.rs:+5:5: +5:9
- StorageLive(_5); // scope 1 at $DIR/issue_72181_1.rs:+5:7: +5:8
- _5 = move _2; // scope 1 at $DIR/issue_72181_1.rs:+5:7: +5:8
- _4 = f(move _5) -> bb4; // scope 1 at $DIR/issue_72181_1.rs:+5:5: +5:9
- // mir::Constant
- // + span: $DIR/issue_72181_1.rs:20:5: 20:6
- // + literal: Const { ty: fn(Void) -> ! {f}, val: Value(<ZST>) }
+ StorageDead(_3);
+ FakeRead(ForLet(None), _2);
+ AscribeUserType(_2, o, UserTypeProjection { base: UserType(1), projs: [] });
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = move _2;
+ _4 = f(move _5) -> bb4;
}
bb2: {
- StorageDead(_5); // scope 1 at $DIR/issue_72181_1.rs:+5:8: +5:9
- StorageDead(_4); // scope 1 at $DIR/issue_72181_1.rs:+5:9: +5:10
- StorageDead(_2); // scope 0 at $DIR/issue_72181_1.rs:+6:1: +6:2
- unreachable; // scope 0 at $DIR/issue_72181_1.rs:+0:11: +6:2
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_2);
+ unreachable;
}
bb3: {
- return; // scope 0 at $DIR/issue_72181_1.rs:+6:2: +6:2
+ return;
}
bb4 (cleanup): {
- resume; // scope 0 at $DIR/issue_72181_1.rs:+0:1: +6:2
+ resume;
}
}
diff --git a/tests/mir-opt/issue_76432.rs b/tests/mir-opt/issue_76432.rs
index 76bb11aae..2a8e1283b 100644
--- a/tests/mir-opt/issue_76432.rs
+++ b/tests/mir-opt/issue_76432.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// compile-flags: -Zmir-enable-passes=-NormalizeArrayLen
// Check that we do not insert StorageDead at each target if StorageDead was never seen
diff --git a/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.diff b/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.diff
deleted file mode 100644
index 73b9ea46c..000000000
--- a/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.diff
+++ /dev/null
@@ -1,60 +0,0 @@
-- // MIR for `test` before SimplifyComparisonIntegral
-+ // MIR for `test` after SimplifyComparisonIntegral
-
- fn test(_1: T) -> () {
- debug x => _1; // in scope 0 at $DIR/issue_76432.rs:+0:38: +0:39
- let mut _0: (); // return place in scope 0 at $DIR/issue_76432.rs:+0:44: +0:44
- let _2: &[T]; // in scope 0 at $DIR/issue_76432.rs:+1:9: +1:10
- let mut _3: &[T; 3]; // in scope 0 at $DIR/issue_76432.rs:+1:19: +1:29
- let _4: &[T; 3]; // in scope 0 at $DIR/issue_76432.rs:+1:19: +1:29
- let _5: [T; 3]; // in scope 0 at $DIR/issue_76432.rs:+1:20: +1:29
- let mut _6: T; // in scope 0 at $DIR/issue_76432.rs:+1:21: +1:22
- let mut _7: T; // in scope 0 at $DIR/issue_76432.rs:+1:24: +1:25
- let mut _8: T; // in scope 0 at $DIR/issue_76432.rs:+1:27: +1:28
- let mut _9: usize; // in scope 0 at $DIR/issue_76432.rs:+3:9: +3:33
- let mut _10: usize; // in scope 0 at $DIR/issue_76432.rs:+3:9: +3:33
- let mut _11: bool; // in scope 0 at $DIR/issue_76432.rs:+3:9: +3:33
- let mut _15: !; // in scope 0 at $SRC_DIR/core/src/panic.rs:LL:COL
- scope 1 {
- debug v => _2; // in scope 1 at $DIR/issue_76432.rs:+1:9: +1:10
- let _12: &T; // in scope 1 at $DIR/issue_76432.rs:+3:10: +3:16
- let _13: &T; // in scope 1 at $DIR/issue_76432.rs:+3:18: +3:24
- let _14: &T; // in scope 1 at $DIR/issue_76432.rs:+3:26: +3:32
- scope 2 {
- debug v1 => &(*_2)[0 of 3]; // in scope 2 at $DIR/issue_76432.rs:+3:10: +3:16
- debug v2 => &(*_2)[1 of 3]; // in scope 2 at $DIR/issue_76432.rs:+3:18: +3:24
- debug v3 => &(*_2)[2 of 3]; // in scope 2 at $DIR/issue_76432.rs:+3:26: +3:32
- }
- }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_76432.rs:+1:9: +1:10
- StorageLive(_5); // scope 0 at $DIR/issue_76432.rs:+1:20: +1:29
- _5 = [_1, _1, _1]; // scope 0 at $DIR/issue_76432.rs:+1:20: +1:29
- _4 = &_5; // scope 0 at $DIR/issue_76432.rs:+1:19: +1:29
- _2 = _4 as &[T] (Pointer(Unsize)); // scope 0 at $DIR/issue_76432.rs:+1:19: +1:29
- _9 = Len((*_2)); // scope 1 at $DIR/issue_76432.rs:+3:9: +3:33
- _10 = const 3_usize; // scope 1 at $DIR/issue_76432.rs:+3:9: +3:33
-- _11 = Eq(move _9, const 3_usize); // scope 1 at $DIR/issue_76432.rs:+3:9: +3:33
-- switchInt(move _11) -> [0: bb1, otherwise: bb2]; // scope 1 at $DIR/issue_76432.rs:+3:9: +3:33
-+ nop; // scope 1 at $DIR/issue_76432.rs:+3:9: +3:33
-+ switchInt(move _9) -> [3: bb2, otherwise: bb1]; // scope 1 at $DIR/issue_76432.rs:+3:9: +3:33
- }
-
- bb1: {
- _15 = core::panicking::panic(const "internal error: entered unreachable code"); // scope 1 at $SRC_DIR/core/src/panic.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/panic.rs:LL:COL
- // + literal: Const { ty: fn(&'static str) -> ! {core::panicking::panic}, val: Value(<ZST>) }
- // mir::Constant
- // + span: $SRC_DIR/core/src/panic.rs:LL:COL
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- }
-
- bb2: {
- StorageDead(_5); // scope 0 at $DIR/issue_76432.rs:+6:1: +6:2
- StorageDead(_2); // scope 0 at $DIR/issue_76432.rs:+6:1: +6:2
- return; // scope 0 at $DIR/issue_76432.rs:+6:2: +6:2
- }
- }
-
diff --git a/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.panic-abort.diff b/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.panic-abort.diff
new file mode 100644
index 000000000..1cc44ce06
--- /dev/null
+++ b/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.panic-abort.diff
@@ -0,0 +1,54 @@
+- // MIR for `test` before SimplifyComparisonIntegral
++ // MIR for `test` after SimplifyComparisonIntegral
+
+ fn test(_1: T) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: &[T];
+ let mut _3: &[T; 3];
+ let _4: &[T; 3];
+ let _5: [T; 3];
+ let mut _6: T;
+ let mut _7: T;
+ let mut _8: T;
+ let mut _9: usize;
+ let mut _10: usize;
+ let mut _11: bool;
+ let mut _15: !;
+ scope 1 {
+ debug v => _2;
+ let _12: &T;
+ let _13: &T;
+ let _14: &T;
+ scope 2 {
+ debug v1 => &(*_2)[0 of 3];
+ debug v2 => &(*_2)[1 of 3];
+ debug v3 => &(*_2)[2 of 3];
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_5);
+ _5 = [_1, _1, _1];
+ _4 = &_5;
+ _2 = _4 as &[T] (PointerCoercion(Unsize));
+ _9 = Len((*_2));
+ _10 = const 3_usize;
+- _11 = Eq(move _9, const 3_usize);
+- switchInt(move _11) -> [0: bb1, otherwise: bb2];
++ nop;
++ switchInt(move _9) -> [3: bb2, otherwise: bb1];
+ }
+
+ bb1: {
+ _15 = core::panicking::panic(const "internal error: entered unreachable code") -> unwind unreachable;
+ }
+
+ bb2: {
+ StorageDead(_5);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.panic-unwind.diff b/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.panic-unwind.diff
new file mode 100644
index 000000000..b708f6674
--- /dev/null
+++ b/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.panic-unwind.diff
@@ -0,0 +1,54 @@
+- // MIR for `test` before SimplifyComparisonIntegral
++ // MIR for `test` after SimplifyComparisonIntegral
+
+ fn test(_1: T) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: &[T];
+ let mut _3: &[T; 3];
+ let _4: &[T; 3];
+ let _5: [T; 3];
+ let mut _6: T;
+ let mut _7: T;
+ let mut _8: T;
+ let mut _9: usize;
+ let mut _10: usize;
+ let mut _11: bool;
+ let mut _15: !;
+ scope 1 {
+ debug v => _2;
+ let _12: &T;
+ let _13: &T;
+ let _14: &T;
+ scope 2 {
+ debug v1 => &(*_2)[0 of 3];
+ debug v2 => &(*_2)[1 of 3];
+ debug v3 => &(*_2)[2 of 3];
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_5);
+ _5 = [_1, _1, _1];
+ _4 = &_5;
+ _2 = _4 as &[T] (PointerCoercion(Unsize));
+ _9 = Len((*_2));
+ _10 = const 3_usize;
+- _11 = Eq(move _9, const 3_usize);
+- switchInt(move _11) -> [0: bb1, otherwise: bb2];
++ nop;
++ switchInt(move _9) -> [3: bb2, otherwise: bb1];
+ }
+
+ bb1: {
+ _15 = core::panicking::panic(const "internal error: entered unreachable code") -> unwind continue;
+ }
+
+ bb2: {
+ StorageDead(_5);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/issue_78192.f.InstSimplify.diff b/tests/mir-opt/issue_78192.f.InstSimplify.diff
index 914d7ceb2..10e3dd203 100644
--- a/tests/mir-opt/issue_78192.f.InstSimplify.diff
+++ b/tests/mir-opt/issue_78192.f.InstSimplify.diff
@@ -2,28 +2,28 @@
+ // MIR for `f` after InstSimplify
fn f(_1: &T) -> *const T {
- debug a => _1; // in scope 0 at $DIR/issue_78192.rs:+0:13: +0:14
- let mut _0: *const T; // return place in scope 0 at $DIR/issue_78192.rs:+0:23: +0:31
- let _2: &*const T; // in scope 0 at $DIR/issue_78192.rs:+1:9: +1:10
- let _3: &*const T; // in scope 0 at $DIR/issue_78192.rs:+1:24: +1:40
- let _4: *const T; // in scope 0 at $DIR/issue_78192.rs:+1:25: +1:40
+ debug a => _1;
+ let mut _0: *const T;
+ let _2: &*const T;
+ let _3: &*const T;
+ let _4: *const T;
scope 1 {
- debug b => _2; // in scope 1 at $DIR/issue_78192.rs:+1:9: +1:10
+ debug b => _2;
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_78192.rs:+1:9: +1:10
- StorageLive(_3); // scope 0 at $DIR/issue_78192.rs:+1:24: +1:40
- StorageLive(_4); // scope 0 at $DIR/issue_78192.rs:+1:25: +1:40
- _4 = &raw const (*_1); // scope 0 at $DIR/issue_78192.rs:+1:26: +1:27
- _3 = &_4; // scope 0 at $DIR/issue_78192.rs:+1:24: +1:40
-- _2 = &(*_3); // scope 0 at $DIR/issue_78192.rs:+1:24: +1:40
-+ _2 = _3; // scope 0 at $DIR/issue_78192.rs:+1:24: +1:40
- StorageDead(_3); // scope 0 at $DIR/issue_78192.rs:+1:40: +1:41
- _0 = (*_2); // scope 1 at $DIR/issue_78192.rs:+2:5: +2:7
- StorageDead(_4); // scope 0 at $DIR/issue_78192.rs:+3:1: +3:2
- StorageDead(_2); // scope 0 at $DIR/issue_78192.rs:+3:1: +3:2
- return; // scope 0 at $DIR/issue_78192.rs:+3:2: +3:2
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &raw const (*_1);
+ _3 = &_4;
+- _2 = &(*_3);
++ _2 = _3;
+ StorageDead(_3);
+ _0 = (*_2);
+ StorageDead(_4);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/issue_91633.bar.built.after.mir b/tests/mir-opt/issue_91633.bar.built.after.mir
index 88a383015..92f52e138 100644
--- a/tests/mir-opt/issue_91633.bar.built.after.mir
+++ b/tests/mir-opt/issue_91633.bar.built.after.mir
@@ -1,40 +1,37 @@
// MIR for `bar` after built
fn bar(_1: Box<[T]>) -> () {
- debug it => _1; // in scope 0 at $DIR/issue_91633.rs:+0:12: +0:14
- let mut _0: (); // return place in scope 0 at $DIR/issue_91633.rs:+1:2: +1:2
- let mut _2: &<[T] as std::ops::Index<usize>>::Output; // in scope 0 at $DIR/issue_91633.rs:+4:14: +4:19
- let mut _3: &[T]; // in scope 0 at $DIR/issue_91633.rs:+4:14: +4:16
+ debug it => _1;
+ let mut _0: ();
+ let mut _2: &<[T] as std::ops::Index<usize>>::Output;
+ let mut _3: &[T];
scope 1 {
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_91633.rs:+4:14: +4:19
- StorageLive(_3); // scope 0 at $DIR/issue_91633.rs:+4:14: +4:16
- _3 = &(*_1); // scope 0 at $DIR/issue_91633.rs:+4:14: +4:16
- _2 = <[T] as Index<usize>>::index(move _3, const 0_usize) -> [return: bb1, unwind: bb3]; // scope 0 at $DIR/issue_91633.rs:+4:14: +4:19
- // mir::Constant
- // + span: $DIR/issue_91633.rs:15:14: 15:19
- // + literal: Const { ty: for<'a> fn(&'a [T], usize) -> &'a <[T] as Index<usize>>::Output {<[T] as Index<usize>>::index}, val: Value(<ZST>) }
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _2 = <[T] as Index<usize>>::index(move _3, const 0_usize) -> [return: bb1, unwind: bb3];
}
bb1: {
- StorageDead(_3); // scope 0 at $DIR/issue_91633.rs:+4:18: +4:19
- PlaceMention((*_2)); // scope 0 at $DIR/issue_91633.rs:+4:14: +4:19
- StorageDead(_2); // scope 0 at $DIR/issue_91633.rs:+4:19: +4:20
- _0 = const (); // scope 0 at $DIR/issue_91633.rs:+3:2: +5:3
- drop(_1) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue_91633.rs:+5:2: +5:3
+ StorageDead(_3);
+ PlaceMention((*_2));
+ StorageDead(_2);
+ _0 = const ();
+ drop(_1) -> [return: bb2, unwind: bb4];
}
bb2: {
- return; // scope 0 at $DIR/issue_91633.rs:+5:3: +5:3
+ return;
}
bb3 (cleanup): {
- drop(_1) -> [return: bb4, unwind terminate]; // scope 0 at $DIR/issue_91633.rs:+5:2: +5:3
+ drop(_1) -> [return: bb4, unwind terminate];
}
bb4 (cleanup): {
- resume; // scope 0 at $DIR/issue_91633.rs:+0:1: +5:3
+ resume;
}
}
diff --git a/tests/mir-opt/issue_91633.foo.built.after.mir b/tests/mir-opt/issue_91633.foo.built.after.mir
index 569135803..4529c58a1 100644
--- a/tests/mir-opt/issue_91633.foo.built.after.mir
+++ b/tests/mir-opt/issue_91633.foo.built.after.mir
@@ -1,57 +1,54 @@
// MIR for `foo` after built
fn foo(_1: Box<[T]>) -> T {
- debug it => _1; // in scope 0 at $DIR/issue_91633.rs:+0:19: +0:21
- let mut _0: T; // return place in scope 0 at $DIR/issue_91633.rs:+0:36: +0:37
- let _2: T; // in scope 0 at $DIR/issue_91633.rs:+2:10: +2:11
- let mut _3: &T; // in scope 0 at $DIR/issue_91633.rs:+2:14: +2:27
- let _4: usize; // in scope 0 at $DIR/issue_91633.rs:+2:17: +2:18
- let mut _5: usize; // in scope 0 at $DIR/issue_91633.rs:+2:14: +2:19
- let mut _6: bool; // in scope 0 at $DIR/issue_91633.rs:+2:14: +2:19
+ debug it => _1;
+ let mut _0: T;
+ let _2: T;
+ let mut _3: &T;
+ let _4: usize;
+ let mut _5: usize;
+ let mut _6: bool;
scope 1 {
- debug f => _2; // in scope 1 at $DIR/issue_91633.rs:+2:10: +2:11
+ debug f => _2;
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_91633.rs:+2:10: +2:11
- StorageLive(_3); // scope 0 at $DIR/issue_91633.rs:+2:14: +2:27
- StorageLive(_4); // scope 0 at $DIR/issue_91633.rs:+2:17: +2:18
- _4 = const 0_usize; // scope 0 at $DIR/issue_91633.rs:+2:17: +2:18
- _5 = Len((*_1)); // scope 0 at $DIR/issue_91633.rs:+2:14: +2:19
- _6 = Lt(_4, _5); // scope 0 at $DIR/issue_91633.rs:+2:14: +2:19
- assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind: bb5]; // scope 0 at $DIR/issue_91633.rs:+2:14: +2:19
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = const 0_usize;
+ _5 = Len((*_1));
+ _6 = Lt(_4, _5);
+ assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind: bb5];
}
bb1: {
- _3 = &(*_1)[_4]; // scope 0 at $DIR/issue_91633.rs:+2:14: +2:27
- _2 = <T as Clone>::clone(move _3) -> [return: bb2, unwind: bb5]; // scope 0 at $DIR/issue_91633.rs:+2:14: +2:27
- // mir::Constant
- // + span: $DIR/issue_91633.rs:28:20: 28:25
- // + literal: Const { ty: for<'a> fn(&'a T) -> T {<T as Clone>::clone}, val: Value(<ZST>) }
+ _3 = &(*_1)[_4];
+ _2 = <T as Clone>::clone(move _3) -> [return: bb2, unwind: bb5];
}
bb2: {
- StorageDead(_3); // scope 0 at $DIR/issue_91633.rs:+2:26: +2:27
- FakeRead(ForLet(None), _2); // scope 0 at $DIR/issue_91633.rs:+2:10: +2:11
- StorageDead(_4); // scope 0 at $DIR/issue_91633.rs:+2:27: +2:28
- _0 = move _2; // scope 1 at $DIR/issue_91633.rs:+3:6: +3:7
- drop(_2) -> [return: bb3, unwind: bb5]; // scope 0 at $DIR/issue_91633.rs:+4:2: +4:3
+ StorageDead(_3);
+ FakeRead(ForLet(None), _2);
+ StorageDead(_4);
+ _0 = move _2;
+ drop(_2) -> [return: bb3, unwind: bb5];
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/issue_91633.rs:+4:2: +4:3
- drop(_1) -> [return: bb4, unwind: bb6]; // scope 0 at $DIR/issue_91633.rs:+4:2: +4:3
+ StorageDead(_2);
+ drop(_1) -> [return: bb4, unwind: bb6];
}
bb4: {
- return; // scope 0 at $DIR/issue_91633.rs:+4:3: +4:3
+ return;
}
bb5 (cleanup): {
- drop(_1) -> [return: bb6, unwind terminate]; // scope 0 at $DIR/issue_91633.rs:+4:2: +4:3
+ drop(_1) -> [return: bb6, unwind terminate];
}
bb6 (cleanup): {
- resume; // scope 0 at $DIR/issue_91633.rs:+0:1: +4:3
+ resume;
}
}
diff --git a/tests/mir-opt/issue_91633.fun.built.after.mir b/tests/mir-opt/issue_91633.fun.built.after.mir
index 42486d3a5..7175c9e80 100644
--- a/tests/mir-opt/issue_91633.fun.built.after.mir
+++ b/tests/mir-opt/issue_91633.fun.built.after.mir
@@ -1,35 +1,35 @@
// MIR for `fun` after built
fn fun(_1: &[T]) -> &T {
- debug it => _1; // in scope 0 at $DIR/issue_91633.rs:+0:12: +0:14
- let mut _0: &T; // return place in scope 0 at $DIR/issue_91633.rs:+0:25: +0:27
- let _2: &T; // in scope 0 at $DIR/issue_91633.rs:+2:10: +2:11
- let _3: usize; // in scope 0 at $DIR/issue_91633.rs:+2:18: +2:19
- let mut _4: usize; // in scope 0 at $DIR/issue_91633.rs:+2:15: +2:20
- let mut _5: bool; // in scope 0 at $DIR/issue_91633.rs:+2:15: +2:20
+ debug it => _1;
+ let mut _0: &T;
+ let _2: &T;
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
scope 1 {
- debug f => _2; // in scope 1 at $DIR/issue_91633.rs:+2:10: +2:11
+ debug f => _2;
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_91633.rs:+2:10: +2:11
- StorageLive(_3); // scope 0 at $DIR/issue_91633.rs:+2:18: +2:19
- _3 = const 0_usize; // scope 0 at $DIR/issue_91633.rs:+2:18: +2:19
- _4 = Len((*_1)); // scope 0 at $DIR/issue_91633.rs:+2:15: +2:20
- _5 = Lt(_3, _4); // scope 0 at $DIR/issue_91633.rs:+2:15: +2:20
- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind: bb2]; // scope 0 at $DIR/issue_91633.rs:+2:15: +2:20
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = const 0_usize;
+ _4 = Len((*_1));
+ _5 = Lt(_3, _4);
+ assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind: bb2];
}
bb1: {
- _2 = &(*_1)[_3]; // scope 0 at $DIR/issue_91633.rs:+2:14: +2:20
- FakeRead(ForLet(None), _2); // scope 0 at $DIR/issue_91633.rs:+2:10: +2:11
- _0 = &(*_2); // scope 1 at $DIR/issue_91633.rs:+3:6: +3:7
- StorageDead(_3); // scope 0 at $DIR/issue_91633.rs:+4:2: +4:3
- StorageDead(_2); // scope 0 at $DIR/issue_91633.rs:+4:2: +4:3
- return; // scope 0 at $DIR/issue_91633.rs:+4:3: +4:3
+ _2 = &(*_1)[_3];
+ FakeRead(ForLet(None), _2);
+ _0 = &(*_2);
+ StorageDead(_3);
+ StorageDead(_2);
+ return;
}
bb2 (cleanup): {
- resume; // scope 0 at $DIR/issue_91633.rs:+0:1: +4:3
+ resume;
}
}
diff --git a/tests/mir-opt/issue_91633.hey.built.after.mir b/tests/mir-opt/issue_91633.hey.built.after.mir
index 19f0c133e..aa8f31f81 100644
--- a/tests/mir-opt/issue_91633.hey.built.after.mir
+++ b/tests/mir-opt/issue_91633.hey.built.after.mir
@@ -1,36 +1,33 @@
// MIR for `hey` after built
fn hey(_1: &[T]) -> () {
- debug it => _1; // in scope 0 at $DIR/issue_91633.rs:+0:12: +0:14
- let mut _0: (); // return place in scope 0 at $DIR/issue_91633.rs:+1:2: +1:2
- let mut _2: &<[T] as std::ops::Index<usize>>::Output; // in scope 0 at $DIR/issue_91633.rs:+4:14: +4:20
- let _3: &<[T] as std::ops::Index<usize>>::Output; // in scope 0 at $DIR/issue_91633.rs:+4:15: +4:20
- let mut _4: &[T]; // in scope 0 at $DIR/issue_91633.rs:+4:15: +4:17
+ debug it => _1;
+ let mut _0: ();
+ let mut _2: &<[T] as std::ops::Index<usize>>::Output;
+ let _3: &<[T] as std::ops::Index<usize>>::Output;
+ let mut _4: &[T];
scope 1 {
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_91633.rs:+4:14: +4:20
- StorageLive(_3); // scope 0 at $DIR/issue_91633.rs:+4:15: +4:20
- StorageLive(_4); // scope 0 at $DIR/issue_91633.rs:+4:15: +4:17
- _4 = &(*_1); // scope 0 at $DIR/issue_91633.rs:+4:15: +4:17
- _3 = <[T] as Index<usize>>::index(move _4, const 0_usize) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/issue_91633.rs:+4:15: +4:20
- // mir::Constant
- // + span: $DIR/issue_91633.rs:7:15: 7:20
- // + literal: Const { ty: for<'a> fn(&'a [T], usize) -> &'a <[T] as Index<usize>>::Output {<[T] as Index<usize>>::index}, val: Value(<ZST>) }
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &(*_1);
+ _3 = <[T] as Index<usize>>::index(move _4, const 0_usize) -> [return: bb1, unwind: bb2];
}
bb1: {
- StorageDead(_4); // scope 0 at $DIR/issue_91633.rs:+4:19: +4:20
- _2 = &(*_3); // scope 0 at $DIR/issue_91633.rs:+4:14: +4:20
- PlaceMention(_2); // scope 0 at $DIR/issue_91633.rs:+4:14: +4:20
- StorageDead(_2); // scope 0 at $DIR/issue_91633.rs:+4:20: +4:21
- _0 = const (); // scope 0 at $DIR/issue_91633.rs:+3:2: +5:3
- StorageDead(_3); // scope 0 at $DIR/issue_91633.rs:+5:2: +5:3
- return; // scope 0 at $DIR/issue_91633.rs:+5:3: +5:3
+ StorageDead(_4);
+ _2 = &(*_3);
+ PlaceMention(_2);
+ StorageDead(_2);
+ _0 = const ();
+ StorageDead(_3);
+ return;
}
bb2 (cleanup): {
- resume; // scope 0 at $DIR/issue_91633.rs:+0:1: +5:3
+ resume;
}
}
diff --git a/tests/mir-opt/issue_99325.main.built.after.mir b/tests/mir-opt/issue_99325.main.built.after.mir
index 0424ce3ab..0fe66d3fb 100644
--- a/tests/mir-opt/issue_99325.main.built.after.mir
+++ b/tests/mir-opt/issue_99325.main.built.after.mir
@@ -2,291 +2,268 @@
| User Type Annotations
| 0: user_ty: Canonical { value: TypeOf(DefId(0:3 ~ issue_99325[22bb]::function_with_bytes), UserSubsts { substs: [Const { ty: &'static [u8; 4], kind: Branch([Leaf(0x41), Leaf(0x41), Leaf(0x41), Leaf(0x41)]) }], user_self_ty: None }), max_universe: U0, variables: [] }, span: $DIR/issue_99325.rs:10:16: 10:46, inferred_ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}
-| 1: user_ty: Canonical { value: TypeOf(DefId(0:3 ~ issue_99325[22bb]::function_with_bytes), UserSubsts { substs: [Const { ty: &'static [u8; 4], kind: Unevaluated([], DefId(0:8 ~ issue_99325[22bb]::main::{constant#1})) }], user_self_ty: None }), max_universe: U0, variables: [] }, span: $DIR/issue_99325.rs:11:16: 11:68, inferred_ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}
+| 1: user_ty: Canonical { value: TypeOf(DefId(0:3 ~ issue_99325[22bb]::function_with_bytes), UserSubsts { substs: [Const { ty: &'static [u8; 4], kind: UnevaluatedConst { def: DefId(0:8 ~ issue_99325[22bb]::main::{constant#1}), substs: [] } }], user_self_ty: None }), max_universe: U0, variables: [] }, span: $DIR/issue_99325.rs:11:16: 11:68, inferred_ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}
|
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/issue_99325.rs:+0:15: +0:15
- let _1: (); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _2: (&&[u8], &&[u8; 4]); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _3: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _4: &[u8]; // in scope 0 at $DIR/issue_99325.rs:+1:16: +1:48
- let mut _5: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _6: &[u8; 4]; // in scope 0 at $DIR/issue_99325.rs:+1:50: +1:75
- let _7: [u8; 4]; // in scope 0 at $DIR/issue_99325.rs:+1:51: +1:75
- let _8: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _9: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _10: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _11: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _12: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _13: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _14: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _16: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _17: core::panicking::AssertKind; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _18: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _19: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _20: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _21: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _22: std::option::Option<std::fmt::Arguments<'_>>; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _23: (); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _24: (&&[u8], &&[u8; 4]); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _25: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _26: &[u8]; // in scope 0 at $DIR/issue_99325.rs:+2:16: +2:70
- let mut _27: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _28: &[u8; 4]; // in scope 0 at $DIR/issue_99325.rs:+2:72: +2:79
- let _29: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _30: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _31: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _32: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _33: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _34: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _35: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _37: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _38: core::panicking::AssertKind; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _39: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _40: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _41: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _42: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _43: std::option::Option<std::fmt::Arguments<'_>>; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ let mut _0: ();
+ let _1: ();
+ let mut _2: (&&[u8], &&[u8; 4]);
+ let mut _3: &&[u8];
+ let _4: &[u8];
+ let mut _5: &&[u8; 4];
+ let _6: &[u8; 4];
+ let _7: [u8; 4];
+ let _8: &&[u8];
+ let _9: &&[u8; 4];
+ let mut _10: bool;
+ let mut _11: bool;
+ let mut _12: &&[u8];
+ let mut _13: &&[u8; 4];
+ let mut _14: !;
+ let _16: !;
+ let mut _17: core::panicking::AssertKind;
+ let mut _18: &&[u8];
+ let _19: &&[u8];
+ let mut _20: &&[u8; 4];
+ let _21: &&[u8; 4];
+ let mut _22: std::option::Option<std::fmt::Arguments<'_>>;
+ let _23: ();
+ let mut _24: (&&[u8], &&[u8; 4]);
+ let mut _25: &&[u8];
+ let _26: &[u8];
+ let mut _27: &&[u8; 4];
+ let _28: &[u8; 4];
+ let _29: &&[u8];
+ let _30: &&[u8; 4];
+ let mut _31: bool;
+ let mut _32: bool;
+ let mut _33: &&[u8];
+ let mut _34: &&[u8; 4];
+ let mut _35: !;
+ let _37: !;
+ let mut _38: core::panicking::AssertKind;
+ let mut _39: &&[u8];
+ let _40: &&[u8];
+ let mut _41: &&[u8; 4];
+ let _42: &&[u8; 4];
+ let mut _43: std::option::Option<std::fmt::Arguments<'_>>;
scope 1 {
- debug left_val => _8; // in scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- debug right_val => _9; // in scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _15: core::panicking::AssertKind; // in scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ debug left_val => _8;
+ debug right_val => _9;
+ let _15: core::panicking::AssertKind;
scope 2 {
- debug kind => _15; // in scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ debug kind => _15;
}
}
scope 3 {
- debug left_val => _29; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- debug right_val => _30; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _36: core::panicking::AssertKind; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ debug left_val => _29;
+ debug right_val => _30;
+ let _36: core::panicking::AssertKind;
scope 4 {
- debug kind => _36; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ debug kind => _36;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_2); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_3); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_4); // scope 0 at $DIR/issue_99325.rs:+1:16: +1:48
- _4 = function_with_bytes::<&*b"AAAA">() -> [return: bb1, unwind: bb19]; // scope 0 at $DIR/issue_99325.rs:+1:16: +1:48
- // mir::Constant
- // + span: $DIR/issue_99325.rs:10:16: 10:46
- // + user_ty: UserType(0)
- // + literal: Const { ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}, val: Value(<ZST>) }
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = function_with_bytes::<&*b"AAAA">() -> [return: bb1, unwind: bb19];
}
bb1: {
- _3 = &_4; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_5); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_6); // scope 0 at $DIR/issue_99325.rs:+1:50: +1:75
- StorageLive(_7); // scope 0 at $DIR/issue_99325.rs:+1:51: +1:75
- _7 = [const 65_u8, const 65_u8, const 65_u8, const 65_u8]; // scope 0 at $DIR/issue_99325.rs:+1:51: +1:75
- _6 = &_7; // scope 0 at $DIR/issue_99325.rs:+1:50: +1:75
- _5 = &_6; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _2 = (move _3, move _5); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_5); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_3); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- FakeRead(ForMatchedPlace(None), _2); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_8); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _8 = (_2.0: &&[u8]); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_9); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _9 = (_2.1: &&[u8; 4]); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_10); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_11); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_12); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _12 = &(*_8); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_13); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _13 = &(*_9); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _11 = <&[u8] as PartialEq<&[u8; 4]>>::eq(move _12, move _13) -> [return: bb2, unwind: bb19]; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
- // + literal: Const { ty: for<'a, 'b> fn(&'a &[u8], &'b &[u8; 4]) -> bool {<&[u8] as PartialEq<&[u8; 4]>>::eq}, val: Value(<ZST>) }
+ _3 = &_4;
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = [const 65_u8, const 65_u8, const 65_u8, const 65_u8];
+ _6 = &_7;
+ _5 = &_6;
+ _2 = (move _3, move _5);
+ StorageDead(_5);
+ StorageDead(_3);
+ FakeRead(ForMatchedPlace(None), _2);
+ StorageLive(_8);
+ _8 = (_2.0: &&[u8]);
+ StorageLive(_9);
+ _9 = (_2.1: &&[u8; 4]);
+ StorageLive(_10);
+ StorageLive(_11);
+ StorageLive(_12);
+ _12 = &(*_8);
+ StorageLive(_13);
+ _13 = &(*_9);
+ _11 = <&[u8] as PartialEq<&[u8; 4]>>::eq(move _12, move _13) -> [return: bb2, unwind: bb19];
}
bb2: {
- StorageDead(_13); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_12); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _10 = Not(move _11); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_11); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- switchInt(move _10) -> [0: bb4, otherwise: bb3]; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ StorageDead(_13);
+ StorageDead(_12);
+ _10 = Not(move _11);
+ StorageDead(_11);
+ switchInt(move _10) -> [0: bb4, otherwise: bb3];
}
bb3: {
- StorageLive(_15); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _15 = core::panicking::AssertKind::Eq; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- FakeRead(ForLet(None), _15); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_16); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_17); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _17 = move _15; // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_18); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_19); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _19 = &(*_8); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _18 = &(*_19); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_20); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_21); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _21 = &(*_9); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _20 = &(*_21); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_22); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _22 = Option::<Arguments<'_>>::None; // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _16 = core::panicking::assert_failed::<&[u8], &[u8; 4]>(move _17, move _18, move _20, move _22) -> bb19; // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
- // + literal: Const { ty: for<'a, 'b, 'c> fn(core::panicking::AssertKind, &'a &[u8], &'b &[u8; 4], Option<Arguments<'c>>) -> ! {core::panicking::assert_failed::<&[u8], &[u8; 4]>}, val: Value(<ZST>) }
+ StorageLive(_15);
+ _15 = core::panicking::AssertKind::Eq;
+ FakeRead(ForLet(None), _15);
+ StorageLive(_16);
+ StorageLive(_17);
+ _17 = move _15;
+ StorageLive(_18);
+ StorageLive(_19);
+ _19 = &(*_8);
+ _18 = &(*_19);
+ StorageLive(_20);
+ StorageLive(_21);
+ _21 = &(*_9);
+ _20 = &(*_21);
+ StorageLive(_22);
+ _22 = Option::<Arguments<'_>>::None;
+ _16 = core::panicking::assert_failed::<&[u8], &[u8; 4]>(move _17, move _18, move _20, move _22) -> bb19;
}
bb4: {
- goto -> bb7; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ goto -> bb7;
}
bb5: {
- StorageDead(_22); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_20); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_18); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_17); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_21); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_19); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_16); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_15); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- unreachable; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ StorageDead(_22);
+ StorageDead(_20);
+ StorageDead(_18);
+ StorageDead(_17);
+ StorageDead(_21);
+ StorageDead(_19);
+ StorageDead(_16);
+ StorageDead(_15);
+ unreachable;
}
bb6: {
- goto -> bb8; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ goto -> bb8;
}
bb7: {
- _1 = const (); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- goto -> bb8; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ _1 = const ();
+ goto -> bb8;
}
bb8: {
- StorageDead(_10); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_9); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_8); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- goto -> bb9; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_8);
+ goto -> bb9;
}
bb9: {
- StorageDead(_7); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_6); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_4); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_2); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_1); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_23); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_24); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_25); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_26); // scope 0 at $DIR/issue_99325.rs:+2:16: +2:70
- _26 = function_with_bytes::<&*b"AAAA">() -> [return: bb10, unwind: bb19]; // scope 0 at $DIR/issue_99325.rs:+2:16: +2:70
- // mir::Constant
- // + span: $DIR/issue_99325.rs:11:16: 11:68
- // + user_ty: UserType(1)
- // + literal: Const { ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}, val: Value(<ZST>) }
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageDead(_1);
+ StorageLive(_23);
+ StorageLive(_24);
+ StorageLive(_25);
+ StorageLive(_26);
+ _26 = function_with_bytes::<&*b"AAAA">() -> [return: bb10, unwind: bb19];
}
bb10: {
- _25 = &_26; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_27); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_28); // scope 0 at $DIR/issue_99325.rs:+2:72: +2:79
- _28 = const b"AAAA"; // scope 0 at $DIR/issue_99325.rs:+2:72: +2:79
- // mir::Constant
- // + span: $DIR/issue_99325.rs:11:72: 11:79
- // + literal: Const { ty: &[u8; 4], val: Value(Scalar(alloc4)) }
- _27 = &_28; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _24 = (move _25, move _27); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_27); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_25); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- FakeRead(ForMatchedPlace(None), _24); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_29); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _29 = (_24.0: &&[u8]); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_30); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _30 = (_24.1: &&[u8; 4]); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_31); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_33); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _33 = &(*_29); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_34); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _34 = &(*_30); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _32 = <&[u8] as PartialEq<&[u8; 4]>>::eq(move _33, move _34) -> [return: bb11, unwind: bb19]; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
- // + literal: Const { ty: for<'a, 'b> fn(&'a &[u8], &'b &[u8; 4]) -> bool {<&[u8] as PartialEq<&[u8; 4]>>::eq}, val: Value(<ZST>) }
+ _25 = &_26;
+ StorageLive(_27);
+ StorageLive(_28);
+ _28 = const b"AAAA";
+ _27 = &_28;
+ _24 = (move _25, move _27);
+ StorageDead(_27);
+ StorageDead(_25);
+ FakeRead(ForMatchedPlace(None), _24);
+ StorageLive(_29);
+ _29 = (_24.0: &&[u8]);
+ StorageLive(_30);
+ _30 = (_24.1: &&[u8; 4]);
+ StorageLive(_31);
+ StorageLive(_32);
+ StorageLive(_33);
+ _33 = &(*_29);
+ StorageLive(_34);
+ _34 = &(*_30);
+ _32 = <&[u8] as PartialEq<&[u8; 4]>>::eq(move _33, move _34) -> [return: bb11, unwind: bb19];
}
bb11: {
- StorageDead(_34); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_33); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _31 = Not(move _32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- switchInt(move _31) -> [0: bb13, otherwise: bb12]; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ StorageDead(_34);
+ StorageDead(_33);
+ _31 = Not(move _32);
+ StorageDead(_32);
+ switchInt(move _31) -> [0: bb13, otherwise: bb12];
}
bb12: {
- StorageLive(_36); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _36 = core::panicking::AssertKind::Eq; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- FakeRead(ForLet(None), _36); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_37); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_38); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _38 = move _36; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_39); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_40); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _40 = &(*_29); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _39 = &(*_40); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_41); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_42); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _42 = &(*_30); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _41 = &(*_42); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_43); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _43 = Option::<Arguments<'_>>::None; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _37 = core::panicking::assert_failed::<&[u8], &[u8; 4]>(move _38, move _39, move _41, move _43) -> bb19; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
- // + literal: Const { ty: for<'a, 'b, 'c> fn(core::panicking::AssertKind, &'a &[u8], &'b &[u8; 4], Option<Arguments<'c>>) -> ! {core::panicking::assert_failed::<&[u8], &[u8; 4]>}, val: Value(<ZST>) }
+ StorageLive(_36);
+ _36 = core::panicking::AssertKind::Eq;
+ FakeRead(ForLet(None), _36);
+ StorageLive(_37);
+ StorageLive(_38);
+ _38 = move _36;
+ StorageLive(_39);
+ StorageLive(_40);
+ _40 = &(*_29);
+ _39 = &(*_40);
+ StorageLive(_41);
+ StorageLive(_42);
+ _42 = &(*_30);
+ _41 = &(*_42);
+ StorageLive(_43);
+ _43 = Option::<Arguments<'_>>::None;
+ _37 = core::panicking::assert_failed::<&[u8], &[u8; 4]>(move _38, move _39, move _41, move _43) -> bb19;
}
bb13: {
- goto -> bb16; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ goto -> bb16;
}
bb14: {
- StorageDead(_43); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_41); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_39); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_38); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_42); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_40); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_37); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_36); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- unreachable; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ StorageDead(_43);
+ StorageDead(_41);
+ StorageDead(_39);
+ StorageDead(_38);
+ StorageDead(_42);
+ StorageDead(_40);
+ StorageDead(_37);
+ StorageDead(_36);
+ unreachable;
}
bb15: {
- goto -> bb17; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ goto -> bb17;
}
bb16: {
- _23 = const (); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- goto -> bb17; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ _23 = const ();
+ goto -> bb17;
}
bb17: {
- StorageDead(_31); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_30); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_29); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- goto -> bb18; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ StorageDead(_31);
+ StorageDead(_30);
+ StorageDead(_29);
+ goto -> bb18;
}
bb18: {
- StorageDead(_28); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_26); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_24); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_23); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _0 = const (); // scope 0 at $DIR/issue_99325.rs:+0:15: +3:2
- return; // scope 0 at $DIR/issue_99325.rs:+3:2: +3:2
+ StorageDead(_28);
+ StorageDead(_26);
+ StorageDead(_24);
+ StorageDead(_23);
+ _0 = const ();
+ return;
}
bb19 (cleanup): {
- resume; // scope 0 at $DIR/issue_99325.rs:+0:1: +3:2
+ resume;
}
}
diff --git a/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.mir b/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.mir
deleted file mode 100644
index 9f955b471..000000000
--- a/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.mir
+++ /dev/null
@@ -1,84 +0,0 @@
-// MIR for `num_to_digit` after PreCodegen
-
-fn num_to_digit(_1: char) -> u32 {
- debug num => _1; // in scope 0 at $DIR/issue_59352.rs:+0:21: +0:24
- let mut _0: u32; // return place in scope 0 at $DIR/issue_59352.rs:+0:35: +0:38
- let mut _2: std::option::Option<u32>; // in scope 0 at $DIR/issue_59352.rs:+2:26: +2:41
- scope 1 (inlined char::methods::<impl char>::is_digit) { // at $DIR/issue_59352.rs:15:12: 15:23
- debug self => _1; // in scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL
- debug radix => const 8_u32; // in scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL
- let mut _3: &std::option::Option<u32>; // in scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL
- let _4: std::option::Option<u32>; // in scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL
- scope 2 (inlined Option::<u32>::is_some) { // at $SRC_DIR/core/src/char/methods.rs:LL:COL
- debug self => _3; // in scope 2 at $SRC_DIR/core/src/option.rs:LL:COL
- let mut _5: isize; // in scope 2 at $SRC_DIR/core/src/option.rs:LL:COL
- }
- }
- scope 3 (inlined #[track_caller] Option::<u32>::unwrap) { // at $DIR/issue_59352.rs:15:42: 15:50
- debug self => _2; // in scope 3 at $SRC_DIR/core/src/option.rs:LL:COL
- let mut _6: isize; // in scope 3 at $SRC_DIR/core/src/option.rs:LL:COL
- let mut _7: !; // in scope 3 at $SRC_DIR/core/src/option.rs:LL:COL
- scope 4 {
- debug val => _0; // in scope 4 at $SRC_DIR/core/src/option.rs:LL:COL
- }
- }
-
- bb0: {
- StorageLive(_3); // scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL
- StorageLive(_4); // scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL
- _4 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> bb5; // scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/char/methods.rs:LL:COL
- // + literal: Const { ty: fn(char, u32) -> Option<u32> {char::methods::<impl char>::to_digit}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageLive(_2); // scope 0 at $DIR/issue_59352.rs:+2:26: +2:41
- _2 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> bb2; // scope 0 at $DIR/issue_59352.rs:+2:26: +2:41
- // mir::Constant
- // + span: $DIR/issue_59352.rs:15:30: 15:38
- // + literal: Const { ty: fn(char, u32) -> Option<u32> {char::methods::<impl char>::to_digit}, val: Value(<ZST>) }
- }
-
- bb2: {
- _6 = discriminant(_2); // scope 3 at $SRC_DIR/core/src/option.rs:LL:COL
- switchInt(move _6) -> [0: bb6, 1: bb8, otherwise: bb7]; // scope 3 at $SRC_DIR/core/src/option.rs:LL:COL
- }
-
- bb3: {
- _0 = const 0_u32; // scope 0 at $DIR/issue_59352.rs:+2:60: +2:61
- goto -> bb4; // scope 0 at $DIR/issue_59352.rs:+2:5: +2:63
- }
-
- bb4: {
- return; // scope 0 at $DIR/issue_59352.rs:+3:2: +3:2
- }
-
- bb5: {
- _3 = &_4; // scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL
- _5 = discriminant((*_3)); // scope 2 at $SRC_DIR/core/src/option.rs:LL:COL
- StorageDead(_3); // scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL
- StorageDead(_4); // scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL
- switchInt(move _5) -> [1: bb1, otherwise: bb3]; // scope 0 at $DIR/issue_59352.rs:+2:8: +2:23
- }
-
- bb6: {
- _7 = core::panicking::panic(const "called `Option::unwrap()` on a `None` value"); // scope 3 at $SRC_DIR/core/src/option.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/option.rs:LL:COL
- // + literal: Const { ty: fn(&'static str) -> ! {core::panicking::panic}, val: Value(<ZST>) }
- // mir::Constant
- // + span: $SRC_DIR/core/src/option.rs:LL:COL
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- }
-
- bb7: {
- unreachable; // scope 3 at $SRC_DIR/core/src/option.rs:LL:COL
- }
-
- bb8: {
- _0 = move ((_2 as Some).0: u32); // scope 3 at $SRC_DIR/core/src/option.rs:LL:COL
- StorageDead(_2); // scope 0 at $DIR/issue_59352.rs:+2:49: +2:50
- goto -> bb4; // scope 0 at $DIR/issue_59352.rs:+2:5: +2:63
- }
-}
diff --git a/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-abort.mir b/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..787f9ee09
--- /dev/null
+++ b/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,72 @@
+// MIR for `num_to_digit` after PreCodegen
+
+fn num_to_digit(_1: char) -> u32 {
+ debug num => _1;
+ let mut _0: u32;
+ let mut _5: std::option::Option<u32>;
+ scope 1 (inlined char::methods::<impl char>::is_digit) {
+ debug self => _1;
+ debug radix => const 8_u32;
+ let _2: std::option::Option<u32>;
+ let mut _3: &std::option::Option<u32>;
+ scope 2 (inlined Option::<u32>::is_some) {
+ debug self => _3;
+ let mut _4: isize;
+ }
+ }
+ scope 3 (inlined #[track_caller] Option::<u32>::unwrap) {
+ debug self => _5;
+ let mut _6: isize;
+ let mut _7: !;
+ scope 4 {
+ debug val => _0;
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_2);
+ _2 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _3 = &_2;
+ _4 = discriminant((*_3));
+ StorageDead(_3);
+ StorageDead(_2);
+ switchInt(move _4) -> [1: bb2, otherwise: bb7];
+ }
+
+ bb2: {
+ StorageLive(_5);
+ _5 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ _6 = discriminant(_5);
+ switchInt(move _6) -> [0: bb4, 1: bb5, otherwise: bb6];
+ }
+
+ bb4: {
+ _7 = core::panicking::panic(const "called `Option::unwrap()` on a `None` value") -> unwind unreachable;
+ }
+
+ bb5: {
+ _0 = move ((_5 as Some).0: u32);
+ StorageDead(_5);
+ goto -> bb8;
+ }
+
+ bb6: {
+ unreachable;
+ }
+
+ bb7: {
+ _0 = const 0_u32;
+ goto -> bb8;
+ }
+
+ bb8: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..43a1a1eed
--- /dev/null
+++ b/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,72 @@
+// MIR for `num_to_digit` after PreCodegen
+
+fn num_to_digit(_1: char) -> u32 {
+ debug num => _1;
+ let mut _0: u32;
+ let mut _5: std::option::Option<u32>;
+ scope 1 (inlined char::methods::<impl char>::is_digit) {
+ debug self => _1;
+ debug radix => const 8_u32;
+ let _2: std::option::Option<u32>;
+ let mut _3: &std::option::Option<u32>;
+ scope 2 (inlined Option::<u32>::is_some) {
+ debug self => _3;
+ let mut _4: isize;
+ }
+ }
+ scope 3 (inlined #[track_caller] Option::<u32>::unwrap) {
+ debug self => _5;
+ let mut _6: isize;
+ let mut _7: !;
+ scope 4 {
+ debug val => _0;
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_2);
+ _2 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ _3 = &_2;
+ _4 = discriminant((*_3));
+ StorageDead(_3);
+ StorageDead(_2);
+ switchInt(move _4) -> [1: bb2, otherwise: bb7];
+ }
+
+ bb2: {
+ StorageLive(_5);
+ _5 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb3, unwind continue];
+ }
+
+ bb3: {
+ _6 = discriminant(_5);
+ switchInt(move _6) -> [0: bb4, 1: bb5, otherwise: bb6];
+ }
+
+ bb4: {
+ _7 = core::panicking::panic(const "called `Option::unwrap()` on a `None` value") -> unwind continue;
+ }
+
+ bb5: {
+ _0 = move ((_5 as Some).0: u32);
+ StorageDead(_5);
+ goto -> bb8;
+ }
+
+ bb6: {
+ unreachable;
+ }
+
+ bb7: {
+ _0 = const 0_u32;
+ goto -> bb8;
+ }
+
+ bb8: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/issues/issue_59352.rs b/tests/mir-opt/issues/issue_59352.rs
index 92011bd65..7cadf8f22 100644
--- a/tests/mir-opt/issues/issue_59352.rs
+++ b/tests/mir-opt/issues/issue_59352.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// This test is a mirror of codegen/issue-59352.rs.
// The LLVM inliner doesn't inline `char::method::is_digit()` and so it doesn't recognize this case
// as effectively `if x.is_some() { x.unwrap() } else { 0 }`.
diff --git a/tests/mir-opt/issues/issue_75439.foo.MatchBranchSimplification.diff b/tests/mir-opt/issues/issue_75439.foo.MatchBranchSimplification.diff
index 8e6e6fc0e..f1d18b0f7 100644
--- a/tests/mir-opt/issues/issue_75439.foo.MatchBranchSimplification.diff
+++ b/tests/mir-opt/issues/issue_75439.foo.MatchBranchSimplification.diff
@@ -2,17 +2,17 @@
+ // MIR for `foo` after MatchBranchSimplification
fn foo(_1: [u8; 16]) -> Option<[u8; 4]> {
- debug bytes => _1; // in scope 0 at $DIR/issue_75439.rs:+0:12: +0:17
- let mut _0: std::option::Option<[u8; 4]>; // return place in scope 0 at $DIR/issue_75439.rs:+0:32: +0:47
- let _2: [u32; 4]; // in scope 0 at $DIR/issue_75439.rs:+2:9: +2:15
- let mut _3: [u8; 16]; // in scope 0 at $DIR/issue_75439.rs:+2:47: +2:52
- let mut _5: [u8; 4]; // in scope 0 at $DIR/issue_75439.rs:+5:14: +5:38
- let mut _6: u32; // in scope 0 at $DIR/issue_75439.rs:+5:33: +5:35
+ debug bytes => _1;
+ let mut _0: std::option::Option<[u8; 4]>;
+ let _2: [u32; 4];
+ let mut _3: [u8; 16];
+ let mut _5: [u8; 4];
+ let mut _6: u32;
scope 1 {
- debug dwords => _2; // in scope 1 at $DIR/issue_75439.rs:+2:9: +2:15
+ debug dwords => _2;
scope 3 {
- debug ip => _4; // in scope 3 at $DIR/issue_75439.rs:+4:27: +4:29
- let _4: u32; // in scope 3 at $DIR/issue_75439.rs:+4:27: +4:29
+ debug ip => _4;
+ let _4: u32;
scope 4 {
}
}
@@ -21,54 +21,54 @@
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/issue_75439.rs:+2:9: +2:15
- StorageLive(_3); // scope 2 at $DIR/issue_75439.rs:+2:47: +2:52
- _3 = _1; // scope 2 at $DIR/issue_75439.rs:+2:47: +2:52
- _2 = move _3 as [u32; 4] (Transmute); // scope 2 at $DIR/issue_75439.rs:+2:37: +2:53
- StorageDead(_3); // scope 2 at $DIR/issue_75439.rs:+2:52: +2:53
- switchInt(_2[0 of 4]) -> [0: bb1, otherwise: bb6]; // scope 3 at $DIR/issue_75439.rs:+4:12: +4:30
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = move _3 as [u32; 4] (Transmute);
+ StorageDead(_3);
+ switchInt(_2[0 of 4]) -> [0: bb1, otherwise: bb6];
}
bb1: {
- switchInt(_2[1 of 4]) -> [0: bb2, otherwise: bb6]; // scope 3 at $DIR/issue_75439.rs:+4:12: +4:30
+ switchInt(_2[1 of 4]) -> [0: bb2, otherwise: bb6];
}
bb2: {
- switchInt(_2[2 of 4]) -> [0: bb4, 4294901760: bb5, otherwise: bb6]; // scope 3 at $DIR/issue_75439.rs:+4:12: +4:30
+ switchInt(_2[2 of 4]) -> [0: bb4, 4294901760: bb5, otherwise: bb6];
}
bb3: {
- StorageLive(_5); // scope 3 at $DIR/issue_75439.rs:+5:14: +5:38
- StorageLive(_6); // scope 4 at $DIR/issue_75439.rs:+5:33: +5:35
- _6 = _4; // scope 4 at $DIR/issue_75439.rs:+5:33: +5:35
- _5 = move _6 as [u8; 4] (Transmute); // scope 4 at $DIR/issue_75439.rs:+5:23: +5:36
- StorageDead(_6); // scope 4 at $DIR/issue_75439.rs:+5:35: +5:36
- _0 = Option::<[u8; 4]>::Some(move _5); // scope 3 at $DIR/issue_75439.rs:+5:9: +5:39
- StorageDead(_5); // scope 3 at $DIR/issue_75439.rs:+5:38: +5:39
- StorageDead(_4); // scope 1 at $DIR/issue_75439.rs:+6:5: +6:6
- goto -> bb7; // scope 1 at $DIR/issue_75439.rs:+4:5: +8:6
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = _4;
+ _5 = move _6 as [u8; 4] (Transmute);
+ StorageDead(_6);
+ _0 = Option::<[u8; 4]>::Some(move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ goto -> bb7;
}
bb4: {
- StorageLive(_4); // scope 3 at $DIR/issue_75439.rs:+4:27: +4:29
- _4 = _2[3 of 4]; // scope 3 at $DIR/issue_75439.rs:+4:27: +4:29
- goto -> bb3; // scope 3 at $DIR/issue_75439.rs:+4:12: +4:30
+ StorageLive(_4);
+ _4 = _2[3 of 4];
+ goto -> bb3;
}
bb5: {
- StorageLive(_4); // scope 3 at $DIR/issue_75439.rs:+4:27: +4:29
- _4 = _2[3 of 4]; // scope 3 at $DIR/issue_75439.rs:+4:27: +4:29
- goto -> bb3; // scope 3 at $DIR/issue_75439.rs:+4:12: +4:30
+ StorageLive(_4);
+ _4 = _2[3 of 4];
+ goto -> bb3;
}
bb6: {
- _0 = Option::<[u8; 4]>::None; // scope 1 at $DIR/issue_75439.rs:+7:9: +7:13
- goto -> bb7; // scope 1 at $DIR/issue_75439.rs:+4:5: +8:6
+ _0 = Option::<[u8; 4]>::None;
+ goto -> bb7;
}
bb7: {
- StorageDead(_2); // scope 0 at $DIR/issue_75439.rs:+9:1: +9:2
- return; // scope 0 at $DIR/issue_75439.rs:+9:2: +9:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/loop_test.main.SimplifyCfg-promote-consts.after.mir b/tests/mir-opt/loop_test.main.SimplifyCfg-promote-consts.after.mir
index 43d00b29e..74754bc16 100644
--- a/tests/mir-opt/loop_test.main.SimplifyCfg-promote-consts.after.mir
+++ b/tests/mir-opt/loop_test.main.SimplifyCfg-promote-consts.after.mir
@@ -1,52 +1,52 @@
// MIR for `main` after SimplifyCfg-promote-consts
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/loop_test.rs:+0:11: +0:11
- let _1: (); // in scope 0 at $DIR/loop_test.rs:+4:5: +6:6
- let mut _2: bool; // in scope 0 at $DIR/loop_test.rs:+4:8: +4:12
- let mut _3: !; // in scope 0 at $DIR/loop_test.rs:+4:13: +6:6
- let mut _4: !; // in scope 0 at $DIR/loop_test.rs:+7:5: +10:6
- let mut _5: (); // in scope 0 at $DIR/loop_test.rs:+0:1: +11:2
- let _6: i32; // in scope 0 at $DIR/loop_test.rs:+8:13: +8:14
+ let mut _0: ();
+ let _1: ();
+ let mut _2: bool;
+ let mut _3: !;
+ let mut _4: !;
+ let mut _5: ();
+ let _6: i32;
scope 1 {
- debug x => _6; // in scope 1 at $DIR/loop_test.rs:+8:13: +8:14
+ debug x => _6;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/loop_test.rs:+4:5: +6:6
- StorageLive(_2); // scope 0 at $DIR/loop_test.rs:+4:8: +4:12
- _2 = const true; // scope 0 at $DIR/loop_test.rs:+4:8: +4:12
- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/loop_test.rs:+4:8: +4:12
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = const true;
+ switchInt(move _2) -> [0: bb2, otherwise: bb1];
}
bb1: {
- _0 = const (); // scope 0 at $DIR/loop_test.rs:+5:9: +5:15
- StorageDead(_2); // scope 0 at $DIR/loop_test.rs:+6:5: +6:6
- StorageDead(_1); // scope 0 at $DIR/loop_test.rs:+6:5: +6:6
- return; // scope 0 at $DIR/loop_test.rs:+11:2: +11:2
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
bb2: {
- _1 = const (); // scope 0 at $DIR/loop_test.rs:+6:6: +6:6
- StorageDead(_2); // scope 0 at $DIR/loop_test.rs:+6:5: +6:6
- StorageDead(_1); // scope 0 at $DIR/loop_test.rs:+6:5: +6:6
- StorageLive(_4); // scope 0 at $DIR/loop_test.rs:+7:5: +10:6
- goto -> bb3; // scope 0 at $DIR/loop_test.rs:+7:5: +10:6
+ _1 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ StorageLive(_4);
+ goto -> bb3;
}
bb3: {
- falseUnwind -> [real: bb4, unwind: bb5]; // scope 0 at $DIR/loop_test.rs:+7:5: +10:6
+ falseUnwind -> [real: bb4, unwind: bb5];
}
bb4: {
- StorageLive(_6); // scope 0 at $DIR/loop_test.rs:+8:13: +8:14
- _6 = const 1_i32; // scope 0 at $DIR/loop_test.rs:+8:17: +8:18
- FakeRead(ForLet(None), _6); // scope 0 at $DIR/loop_test.rs:+8:13: +8:14
- StorageDead(_6); // scope 0 at $DIR/loop_test.rs:+10:5: +10:6
- goto -> bb3; // scope 0 at no-location
+ StorageLive(_6);
+ _6 = const 1_i32;
+ FakeRead(ForLet(None), _6);
+ StorageDead(_6);
+ goto -> bb3;
}
bb5 (cleanup): {
- resume; // scope 0 at $DIR/loop_test.rs:+0:1: +11:2
+ resume;
}
}
diff --git a/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.diff b/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.diff
deleted file mode 100644
index 59de067f4..000000000
--- a/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.diff
+++ /dev/null
@@ -1,64 +0,0 @@
-- // MIR for `array_bound` before NormalizeArrayLen
-+ // MIR for `array_bound` after NormalizeArrayLen
-
- fn array_bound(_1: usize, _2: &[u8; N]) -> u8 {
- debug index => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:36: +0:41
- debug slice => _2; // in scope 0 at $DIR/lower_array_len.rs:+0:50: +0:55
- let mut _0: u8; // return place in scope 0 at $DIR/lower_array_len.rs:+0:70: +0:72
- let mut _3: bool; // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
- let mut _4: usize; // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
- let mut _5: usize; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- let mut _6: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- let mut _7: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- let _8: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
- let mut _9: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
- let mut _10: bool; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
-
- bb0: {
- StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
- StorageLive(_4); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
- _4 = _1; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
- StorageLive(_5); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- StorageLive(_6); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- StorageLive(_7); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- _7 = &(*_2); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- _6 = move _7 as &[u8] (Pointer(Unsize)); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- StorageDead(_7); // scope 0 at $DIR/lower_array_len.rs:+1:20: +1:21
-- _5 = Len((*_6)); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
-+ _5 = const N; // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- goto -> bb1; // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- }
-
- bb1: {
- StorageDead(_6); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
- _3 = Lt(move _4, move _5); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
- StorageDead(_5); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
- StorageDead(_4); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
- switchInt(move _3) -> [0: bb4, otherwise: bb2]; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
- }
-
- bb2: {
- StorageLive(_8); // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
- _8 = _1; // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
- _9 = Len((*_2)); // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
- _10 = Lt(_8, _9); // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
- assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> bb3; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
- }
-
- bb3: {
- _0 = (*_2)[_8]; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
- StorageDead(_8); // scope 0 at $DIR/lower_array_len.rs:+3:5: +3:6
- goto -> bb5; // scope 0 at $DIR/lower_array_len.rs:+1:5: +5:6
- }
-
- bb4: {
- _0 = const 42_u8; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:11
- goto -> bb5; // scope 0 at $DIR/lower_array_len.rs:+1:5: +5:6
- }
-
- bb5: {
- StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+5:5: +5:6
- return; // scope 0 at $DIR/lower_array_len.rs:+6:2: +6:2
- }
- }
-
diff --git a/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-abort.diff b/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-abort.diff
new file mode 100644
index 000000000..6174d5259
--- /dev/null
+++ b/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-abort.diff
@@ -0,0 +1,64 @@
+- // MIR for `array_bound` before NormalizeArrayLen
++ // MIR for `array_bound` after NormalizeArrayLen
+
+ fn array_bound(_1: usize, _2: &[u8; N]) -> u8 {
+ debug index => _1;
+ debug slice => _2;
+ let mut _0: u8;
+ let mut _3: bool;
+ let mut _4: usize;
+ let mut _5: usize;
+ let mut _6: &[u8];
+ let mut _7: &[u8; N];
+ let _8: usize;
+ let mut _9: usize;
+ let mut _10: bool;
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &(*_2);
+ _6 = move _7 as &[u8] (PointerCoercion(Unsize));
+ StorageDead(_7);
+- _5 = Len((*_6));
++ _5 = const N;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_6);
+ _3 = Lt(move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ switchInt(move _3) -> [0: bb4, otherwise: bb2];
+ }
+
+ bb2: {
+ StorageLive(_8);
+ _8 = _1;
+ _9 = Len((*_2));
+ _10 = Lt(_8, _9);
+ assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> [success: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ _0 = (*_2)[_8];
+ StorageDead(_8);
+ goto -> bb5;
+ }
+
+ bb4: {
+ _0 = const 42_u8;
+ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-unwind.diff b/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-unwind.diff
new file mode 100644
index 000000000..60c0772d8
--- /dev/null
+++ b/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-unwind.diff
@@ -0,0 +1,64 @@
+- // MIR for `array_bound` before NormalizeArrayLen
++ // MIR for `array_bound` after NormalizeArrayLen
+
+ fn array_bound(_1: usize, _2: &[u8; N]) -> u8 {
+ debug index => _1;
+ debug slice => _2;
+ let mut _0: u8;
+ let mut _3: bool;
+ let mut _4: usize;
+ let mut _5: usize;
+ let mut _6: &[u8];
+ let mut _7: &[u8; N];
+ let _8: usize;
+ let mut _9: usize;
+ let mut _10: bool;
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &(*_2);
+ _6 = move _7 as &[u8] (PointerCoercion(Unsize));
+ StorageDead(_7);
+- _5 = Len((*_6));
++ _5 = const N;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_6);
+ _3 = Lt(move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ switchInt(move _3) -> [0: bb4, otherwise: bb2];
+ }
+
+ bb2: {
+ StorageLive(_8);
+ _8 = _1;
+ _9 = Len((*_2));
+ _10 = Lt(_8, _9);
+ assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> [success: bb3, unwind continue];
+ }
+
+ bb3: {
+ _0 = (*_2)[_8];
+ StorageDead(_8);
+ goto -> bb5;
+ }
+
+ bb4: {
+ _0 = const 42_u8;
+ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.diff b/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.diff
deleted file mode 100644
index 17574b1b6..000000000
--- a/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.diff
+++ /dev/null
@@ -1,77 +0,0 @@
-- // MIR for `array_bound_mut` before NormalizeArrayLen
-+ // MIR for `array_bound_mut` after NormalizeArrayLen
-
- fn array_bound_mut(_1: usize, _2: &mut [u8; N]) -> u8 {
- debug index => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:40: +0:45
- debug slice => _2; // in scope 0 at $DIR/lower_array_len.rs:+0:54: +0:59
- let mut _0: u8; // return place in scope 0 at $DIR/lower_array_len.rs:+0:78: +0:80
- let mut _3: bool; // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
- let mut _4: usize; // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
- let mut _5: usize; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- let mut _6: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- let mut _7: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- let _8: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
- let mut _9: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
- let mut _10: bool; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
- let _11: usize; // in scope 0 at $DIR/lower_array_len.rs:+4:15: +4:16
- let mut _12: usize; // in scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
- let mut _13: bool; // in scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
-
- bb0: {
- StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
- StorageLive(_4); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
- _4 = _1; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
- StorageLive(_5); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- StorageLive(_6); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- StorageLive(_7); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- _7 = &(*_2); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- _6 = move _7 as &[u8] (Pointer(Unsize)); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- StorageDead(_7); // scope 0 at $DIR/lower_array_len.rs:+1:20: +1:21
-- _5 = Len((*_6)); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
-+ _5 = const N; // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- goto -> bb1; // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
- }
-
- bb1: {
- StorageDead(_6); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
- _3 = Lt(move _4, move _5); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
- StorageDead(_5); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
- StorageDead(_4); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
- switchInt(move _3) -> [0: bb4, otherwise: bb2]; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
- }
-
- bb2: {
- StorageLive(_8); // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
- _8 = _1; // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
- _9 = Len((*_2)); // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
- _10 = Lt(_8, _9); // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
- assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> bb3; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
- }
-
- bb3: {
- _0 = (*_2)[_8]; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
- StorageDead(_8); // scope 0 at $DIR/lower_array_len.rs:+3:5: +3:6
- goto -> bb6; // scope 0 at $DIR/lower_array_len.rs:+1:5: +7:6
- }
-
- bb4: {
- StorageLive(_11); // scope 0 at $DIR/lower_array_len.rs:+4:15: +4:16
- _11 = const 0_usize; // scope 0 at $DIR/lower_array_len.rs:+4:15: +4:16
- _12 = Len((*_2)); // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
- _13 = Lt(_11, _12); // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
- assert(move _13, "index out of bounds: the length is {} but the index is {}", move _12, _11) -> bb5; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
- }
-
- bb5: {
- (*_2)[_11] = const 42_u8; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:22
- StorageDead(_11); // scope 0 at $DIR/lower_array_len.rs:+4:22: +4:23
- _0 = const 42_u8; // scope 0 at $DIR/lower_array_len.rs:+6:9: +6:11
- goto -> bb6; // scope 0 at $DIR/lower_array_len.rs:+1:5: +7:6
- }
-
- bb6: {
- StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+7:5: +7:6
- return; // scope 0 at $DIR/lower_array_len.rs:+8:2: +8:2
- }
- }
-
diff --git a/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-abort.diff b/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-abort.diff
new file mode 100644
index 000000000..e2de18452
--- /dev/null
+++ b/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-abort.diff
@@ -0,0 +1,77 @@
+- // MIR for `array_bound_mut` before NormalizeArrayLen
++ // MIR for `array_bound_mut` after NormalizeArrayLen
+
+ fn array_bound_mut(_1: usize, _2: &mut [u8; N]) -> u8 {
+ debug index => _1;
+ debug slice => _2;
+ let mut _0: u8;
+ let mut _3: bool;
+ let mut _4: usize;
+ let mut _5: usize;
+ let mut _6: &[u8];
+ let mut _7: &[u8; N];
+ let _8: usize;
+ let mut _9: usize;
+ let mut _10: bool;
+ let _11: usize;
+ let mut _12: usize;
+ let mut _13: bool;
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &(*_2);
+ _6 = move _7 as &[u8] (PointerCoercion(Unsize));
+ StorageDead(_7);
+- _5 = Len((*_6));
++ _5 = const N;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_6);
+ _3 = Lt(move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ switchInt(move _3) -> [0: bb4, otherwise: bb2];
+ }
+
+ bb2: {
+ StorageLive(_8);
+ _8 = _1;
+ _9 = Len((*_2));
+ _10 = Lt(_8, _9);
+ assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> [success: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ _0 = (*_2)[_8];
+ StorageDead(_8);
+ goto -> bb6;
+ }
+
+ bb4: {
+ StorageLive(_11);
+ _11 = const 0_usize;
+ _12 = Len((*_2));
+ _13 = Lt(_11, _12);
+ assert(move _13, "index out of bounds: the length is {} but the index is {}", move _12, _11) -> [success: bb5, unwind unreachable];
+ }
+
+ bb5: {
+ (*_2)[_11] = const 42_u8;
+ StorageDead(_11);
+ _0 = const 42_u8;
+ goto -> bb6;
+ }
+
+ bb6: {
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-unwind.diff b/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-unwind.diff
new file mode 100644
index 000000000..eb81e0eea
--- /dev/null
+++ b/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-unwind.diff
@@ -0,0 +1,77 @@
+- // MIR for `array_bound_mut` before NormalizeArrayLen
++ // MIR for `array_bound_mut` after NormalizeArrayLen
+
+ fn array_bound_mut(_1: usize, _2: &mut [u8; N]) -> u8 {
+ debug index => _1;
+ debug slice => _2;
+ let mut _0: u8;
+ let mut _3: bool;
+ let mut _4: usize;
+ let mut _5: usize;
+ let mut _6: &[u8];
+ let mut _7: &[u8; N];
+ let _8: usize;
+ let mut _9: usize;
+ let mut _10: bool;
+ let _11: usize;
+ let mut _12: usize;
+ let mut _13: bool;
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &(*_2);
+ _6 = move _7 as &[u8] (PointerCoercion(Unsize));
+ StorageDead(_7);
+- _5 = Len((*_6));
++ _5 = const N;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_6);
+ _3 = Lt(move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ switchInt(move _3) -> [0: bb4, otherwise: bb2];
+ }
+
+ bb2: {
+ StorageLive(_8);
+ _8 = _1;
+ _9 = Len((*_2));
+ _10 = Lt(_8, _9);
+ assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> [success: bb3, unwind continue];
+ }
+
+ bb3: {
+ _0 = (*_2)[_8];
+ StorageDead(_8);
+ goto -> bb6;
+ }
+
+ bb4: {
+ StorageLive(_11);
+ _11 = const 0_usize;
+ _12 = Len((*_2));
+ _13 = Lt(_11, _12);
+ assert(move _13, "index out of bounds: the length is {} but the index is {}", move _12, _11) -> [success: bb5, unwind continue];
+ }
+
+ bb5: {
+ (*_2)[_11] = const 42_u8;
+ StorageDead(_11);
+ _0 = const 42_u8;
+ goto -> bb6;
+ }
+
+ bb6: {
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.diff b/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.diff
deleted file mode 100644
index 66feff62f..000000000
--- a/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.diff
+++ /dev/null
@@ -1,26 +0,0 @@
-- // MIR for `array_len` before NormalizeArrayLen
-+ // MIR for `array_len` after NormalizeArrayLen
-
- fn array_len(_1: &[u8; N]) -> usize {
- debug arr => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:34: +0:37
- let mut _0: usize; // return place in scope 0 at $DIR/lower_array_len.rs:+0:52: +0:57
- let mut _2: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- let mut _3: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- _3 = &(*_1); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- _2 = move _3 as &[u8] (Pointer(Unsize)); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+1:7: +1:8
-- _0 = Len((*_2)); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
-+ _0 = const N; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- goto -> bb1; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- }
-
- bb1: {
- StorageDead(_2); // scope 0 at $DIR/lower_array_len.rs:+1:13: +1:14
- return; // scope 0 at $DIR/lower_array_len.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-abort.diff b/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-abort.diff
new file mode 100644
index 000000000..1bdc62183
--- /dev/null
+++ b/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-abort.diff
@@ -0,0 +1,26 @@
+- // MIR for `array_len` before NormalizeArrayLen
++ // MIR for `array_len` after NormalizeArrayLen
+
+ fn array_len(_1: &[u8; N]) -> usize {
+ debug arr => _1;
+ let mut _0: usize;
+ let mut _2: &[u8];
+ let mut _3: &[u8; N];
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _2 = move _3 as &[u8] (PointerCoercion(Unsize));
+ StorageDead(_3);
+- _0 = Len((*_2));
++ _0 = const N;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-unwind.diff b/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-unwind.diff
new file mode 100644
index 000000000..1bdc62183
--- /dev/null
+++ b/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-unwind.diff
@@ -0,0 +1,26 @@
+- // MIR for `array_len` before NormalizeArrayLen
++ // MIR for `array_len` after NormalizeArrayLen
+
+ fn array_len(_1: &[u8; N]) -> usize {
+ debug arr => _1;
+ let mut _0: usize;
+ let mut _2: &[u8];
+ let mut _3: &[u8; N];
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _2 = move _3 as &[u8] (PointerCoercion(Unsize));
+ StorageDead(_3);
+- _0 = Len((*_2));
++ _0 = const N;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.diff b/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.diff
deleted file mode 100644
index c0a277edc..000000000
--- a/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.diff
+++ /dev/null
@@ -1,26 +0,0 @@
-- // MIR for `array_len_by_value` before NormalizeArrayLen
-+ // MIR for `array_len_by_value` after NormalizeArrayLen
-
- fn array_len_by_value(_1: [u8; N]) -> usize {
- debug arr => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:43: +0:46
- let mut _0: usize; // return place in scope 0 at $DIR/lower_array_len.rs:+0:60: +0:65
- let mut _2: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- let mut _3: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- _3 = &_1; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- _2 = move _3 as &[u8] (Pointer(Unsize)); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+1:7: +1:8
-- _0 = Len((*_2)); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
-+ _0 = const N; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- goto -> bb1; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
- }
-
- bb1: {
- StorageDead(_2); // scope 0 at $DIR/lower_array_len.rs:+1:13: +1:14
- return; // scope 0 at $DIR/lower_array_len.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-abort.diff b/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-abort.diff
new file mode 100644
index 000000000..9862b2fad
--- /dev/null
+++ b/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-abort.diff
@@ -0,0 +1,26 @@
+- // MIR for `array_len_by_value` before NormalizeArrayLen
++ // MIR for `array_len_by_value` after NormalizeArrayLen
+
+ fn array_len_by_value(_1: [u8; N]) -> usize {
+ debug arr => _1;
+ let mut _0: usize;
+ let mut _2: &[u8];
+ let mut _3: &[u8; N];
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &_1;
+ _2 = move _3 as &[u8] (PointerCoercion(Unsize));
+ StorageDead(_3);
+- _0 = Len((*_2));
++ _0 = const N;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-unwind.diff b/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-unwind.diff
new file mode 100644
index 000000000..9862b2fad
--- /dev/null
+++ b/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-unwind.diff
@@ -0,0 +1,26 @@
+- // MIR for `array_len_by_value` before NormalizeArrayLen
++ // MIR for `array_len_by_value` after NormalizeArrayLen
+
+ fn array_len_by_value(_1: [u8; N]) -> usize {
+ debug arr => _1;
+ let mut _0: usize;
+ let mut _2: &[u8];
+ let mut _3: &[u8; N];
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = &_1;
+ _2 = move _3 as &[u8] (PointerCoercion(Unsize));
+ StorageDead(_3);
+- _0 = Len((*_2));
++ _0 = const N;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.diff b/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.diff
deleted file mode 100644
index 8b35fd57f..000000000
--- a/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.diff
+++ /dev/null
@@ -1,50 +0,0 @@
-- // MIR for `array_len_raw` before NormalizeArrayLen
-+ // MIR for `array_len_raw` after NormalizeArrayLen
-
- fn array_len_raw(_1: [u8; N]) -> usize {
- debug arr => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:38: +0:41
- let mut _0: usize; // return place in scope 0 at $DIR/lower_array_len.rs:+0:55: +0:60
- let _2: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:9: +1:12
- let mut _3: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:21: +1:25
- let _4: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:21: +1:25
- let mut _6: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+3:5: +3:27
- let _7: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+3:14: +3:19
- scope 1 {
- debug arr => _2; // in scope 1 at $DIR/lower_array_len.rs:+1:9: +1:12
- let _5: *const [u8]; // in scope 1 at $DIR/lower_array_len.rs:+2:9: +2:12
- scope 2 {
- debug arr => _5; // in scope 2 at $DIR/lower_array_len.rs:+2:9: +2:12
- scope 3 {
- }
- }
- }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/lower_array_len.rs:+1:9: +1:12
- StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:21: +1:25
- StorageLive(_4); // scope 0 at $DIR/lower_array_len.rs:+1:21: +1:25
- _4 = &_1; // scope 0 at $DIR/lower_array_len.rs:+1:21: +1:25
- _3 = &(*_4); // scope 0 at $DIR/lower_array_len.rs:+1:21: +1:25
- _2 = move _3 as &[u8] (Pointer(Unsize)); // scope 0 at $DIR/lower_array_len.rs:+1:21: +1:25
- StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+1:24: +1:25
- StorageDead(_4); // scope 0 at $DIR/lower_array_len.rs:+1:25: +1:26
- StorageLive(_5); // scope 1 at $DIR/lower_array_len.rs:+2:9: +2:12
- _5 = &raw const (*_2); // scope 1 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- StorageLive(_6); // scope 2 at $DIR/lower_array_len.rs:+3:5: +3:27
- StorageLive(_7); // scope 2 at $DIR/lower_array_len.rs:+3:14: +3:19
- _7 = &(*_5); // scope 3 at $DIR/lower_array_len.rs:+3:14: +3:19
- _6 = &(*_7); // scope 2 at $DIR/lower_array_len.rs:+3:5: +3:27
-- _0 = Len((*_6)); // scope 2 at $DIR/lower_array_len.rs:+3:5: +3:27
-+ _0 = const N; // scope 2 at $DIR/lower_array_len.rs:+3:5: +3:27
- goto -> bb1; // scope 2 at $DIR/lower_array_len.rs:+3:5: +3:27
- }
-
- bb1: {
- StorageDead(_6); // scope 2 at $DIR/lower_array_len.rs:+3:26: +3:27
- StorageDead(_5); // scope 1 at $DIR/lower_array_len.rs:+4:1: +4:2
- StorageDead(_2); // scope 0 at $DIR/lower_array_len.rs:+4:1: +4:2
- StorageDead(_7); // scope 0 at $DIR/lower_array_len.rs:+4:1: +4:2
- return; // scope 0 at $DIR/lower_array_len.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-abort.diff b/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-abort.diff
new file mode 100644
index 000000000..f9f73bf99
--- /dev/null
+++ b/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-abort.diff
@@ -0,0 +1,50 @@
+- // MIR for `array_len_raw` before NormalizeArrayLen
++ // MIR for `array_len_raw` after NormalizeArrayLen
+
+ fn array_len_raw(_1: [u8; N]) -> usize {
+ debug arr => _1;
+ let mut _0: usize;
+ let _2: &[u8];
+ let mut _3: &[u8; N];
+ let _4: &[u8; N];
+ let mut _6: &[u8];
+ let _7: &[u8];
+ scope 1 {
+ debug arr => _2;
+ let _5: *const [u8];
+ scope 2 {
+ debug arr => _5;
+ scope 3 {
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &_1;
+ _3 = &(*_4);
+ _2 = move _3 as &[u8] (PointerCoercion(Unsize));
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageLive(_5);
+ _5 = &raw const (*_2);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &(*_5);
+ _6 = &(*_7);
+- _0 = Len((*_6));
++ _0 = const N;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageDead(_2);
+ StorageDead(_7);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-unwind.diff b/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-unwind.diff
new file mode 100644
index 000000000..f9f73bf99
--- /dev/null
+++ b/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-unwind.diff
@@ -0,0 +1,50 @@
+- // MIR for `array_len_raw` before NormalizeArrayLen
++ // MIR for `array_len_raw` after NormalizeArrayLen
+
+ fn array_len_raw(_1: [u8; N]) -> usize {
+ debug arr => _1;
+ let mut _0: usize;
+ let _2: &[u8];
+ let mut _3: &[u8; N];
+ let _4: &[u8; N];
+ let mut _6: &[u8];
+ let _7: &[u8];
+ scope 1 {
+ debug arr => _2;
+ let _5: *const [u8];
+ scope 2 {
+ debug arr => _5;
+ scope 3 {
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &_1;
+ _3 = &(*_4);
+ _2 = move _3 as &[u8] (PointerCoercion(Unsize));
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageLive(_5);
+ _5 = &raw const (*_2);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &(*_5);
+ _6 = &(*_7);
+- _0 = Len((*_6));
++ _0 = const N;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageDead(_2);
+ StorageDead(_7);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.diff b/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.diff
deleted file mode 100644
index 8bdd2ede6..000000000
--- a/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.diff
+++ /dev/null
@@ -1,44 +0,0 @@
-- // MIR for `array_len_reborrow` before NormalizeArrayLen
-+ // MIR for `array_len_reborrow` after NormalizeArrayLen
-
- fn array_len_reborrow(_1: [u8; N]) -> usize {
- debug arr => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:43: +0:50
- let mut _0: usize; // return place in scope 0 at $DIR/lower_array_len.rs:+0:64: +0:69
- let _2: &mut [u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:9: +1:12
- let mut _3: &mut [u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:25: +1:33
- let mut _4: &mut [u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:25: +1:33
- let mut _6: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+3:5: +3:14
- scope 1 {
- debug arr => _2; // in scope 1 at $DIR/lower_array_len.rs:+1:9: +1:12
- let _5: &[u8]; // in scope 1 at $DIR/lower_array_len.rs:+2:9: +2:12
- scope 2 {
- debug arr => _5; // in scope 2 at $DIR/lower_array_len.rs:+2:9: +2:12
- }
- }
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/lower_array_len.rs:+1:9: +1:12
- StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:25: +1:33
- StorageLive(_4); // scope 0 at $DIR/lower_array_len.rs:+1:25: +1:33
- _4 = &mut _1; // scope 0 at $DIR/lower_array_len.rs:+1:25: +1:33
- _3 = &mut (*_4); // scope 0 at $DIR/lower_array_len.rs:+1:25: +1:33
- _2 = move _3 as &mut [u8] (Pointer(Unsize)); // scope 0 at $DIR/lower_array_len.rs:+1:25: +1:33
- StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+1:32: +1:33
- StorageDead(_4); // scope 0 at $DIR/lower_array_len.rs:+1:33: +1:34
- StorageLive(_5); // scope 1 at $DIR/lower_array_len.rs:+2:9: +2:12
- _5 = &(*_2); // scope 1 at $DIR/lower_array_len.rs:+2:15: +2:20
- StorageLive(_6); // scope 2 at $DIR/lower_array_len.rs:+3:5: +3:14
- _6 = &(*_5); // scope 2 at $DIR/lower_array_len.rs:+3:5: +3:14
-- _0 = Len((*_6)); // scope 2 at $DIR/lower_array_len.rs:+3:5: +3:14
-+ _0 = const N; // scope 2 at $DIR/lower_array_len.rs:+3:5: +3:14
- goto -> bb1; // scope 2 at $DIR/lower_array_len.rs:+3:5: +3:14
- }
-
- bb1: {
- StorageDead(_6); // scope 2 at $DIR/lower_array_len.rs:+3:13: +3:14
- StorageDead(_5); // scope 1 at $DIR/lower_array_len.rs:+4:1: +4:2
- StorageDead(_2); // scope 0 at $DIR/lower_array_len.rs:+4:1: +4:2
- return; // scope 0 at $DIR/lower_array_len.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-abort.diff b/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-abort.diff
new file mode 100644
index 000000000..ecba06a2e
--- /dev/null
+++ b/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-abort.diff
@@ -0,0 +1,44 @@
+- // MIR for `array_len_reborrow` before NormalizeArrayLen
++ // MIR for `array_len_reborrow` after NormalizeArrayLen
+
+ fn array_len_reborrow(_1: [u8; N]) -> usize {
+ debug arr => _1;
+ let mut _0: usize;
+ let _2: &mut [u8];
+ let mut _3: &mut [u8; N];
+ let mut _4: &mut [u8; N];
+ let mut _6: &[u8];
+ scope 1 {
+ debug arr => _2;
+ let _5: &[u8];
+ scope 2 {
+ debug arr => _5;
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &mut _1;
+ _3 = &mut (*_4);
+ _2 = move _3 as &mut [u8] (PointerCoercion(Unsize));
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageLive(_5);
+ _5 = &(*_2);
+ StorageLive(_6);
+ _6 = &(*_5);
+- _0 = Len((*_6));
++ _0 = const N;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-unwind.diff b/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-unwind.diff
new file mode 100644
index 000000000..ecba06a2e
--- /dev/null
+++ b/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-unwind.diff
@@ -0,0 +1,44 @@
+- // MIR for `array_len_reborrow` before NormalizeArrayLen
++ // MIR for `array_len_reborrow` after NormalizeArrayLen
+
+ fn array_len_reborrow(_1: [u8; N]) -> usize {
+ debug arr => _1;
+ let mut _0: usize;
+ let _2: &mut [u8];
+ let mut _3: &mut [u8; N];
+ let mut _4: &mut [u8; N];
+ let mut _6: &[u8];
+ scope 1 {
+ debug arr => _2;
+ let _5: &[u8];
+ scope 2 {
+ debug arr => _5;
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &mut _1;
+ _3 = &mut (*_4);
+ _2 = move _3 as &mut [u8] (PointerCoercion(Unsize));
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageLive(_5);
+ _5 = &(*_2);
+ StorageLive(_6);
+ _6 = &(*_5);
+- _0 = Len((*_6));
++ _0 = const N;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_6);
+ StorageDead(_5);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_array_len.rs b/tests/mir-opt/lower_array_len.rs
index e1bb51f2d..7d69e1759 100644
--- a/tests/mir-opt/lower_array_len.rs
+++ b/tests/mir-opt/lower_array_len.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: NormalizeArrayLen
// compile-flags: -Zmir-enable-passes=+LowerSliceLenCalls
diff --git a/tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.diff
deleted file mode 100644
index dd742d87a..000000000
--- a/tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.diff
+++ /dev/null
@@ -1,20 +0,0 @@
-- // MIR for `align_of` before LowerIntrinsics
-+ // MIR for `align_of` after LowerIntrinsics
-
- fn align_of() -> usize {
- let mut _0: usize; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:25: +0:30
-
- bb0: {
-- _0 = std::intrinsics::min_align_of::<T>() -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:42
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:21:5: 21:40
-- // + literal: Const { ty: extern "rust-intrinsic" fn() -> usize {std::intrinsics::min_align_of::<T>}, val: Value(<ZST>) }
-+ _0 = AlignOf(T); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:42
-+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:42
- }
-
- bb1: {
- return; // scope 0 at $DIR/lower_intrinsics.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..8ebd07b9c
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,17 @@
+- // MIR for `align_of` before LowerIntrinsics
++ // MIR for `align_of` after LowerIntrinsics
+
+ fn align_of() -> usize {
+ let mut _0: usize;
+
+ bb0: {
+- _0 = std::intrinsics::min_align_of::<T>() -> [return: bb1, unwind unreachable];
++ _0 = AlignOf(T);
++ goto -> bb1;
+ }
+
+ bb1: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..8ebd07b9c
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,17 @@
+- // MIR for `align_of` before LowerIntrinsics
++ // MIR for `align_of` after LowerIntrinsics
+
+ fn align_of() -> usize {
+ let mut _0: usize;
+
+ bb0: {
+- _0 = std::intrinsics::min_align_of::<T>() -> [return: bb1, unwind unreachable];
++ _0 = AlignOf(T);
++ goto -> bb1;
+ }
+
+ bb1: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.diff
deleted file mode 100644
index e95c3f9bc..000000000
--- a/tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.diff
+++ /dev/null
@@ -1,26 +0,0 @@
-- // MIR for `assume` before LowerIntrinsics
-+ // MIR for `assume` after LowerIntrinsics
-
- fn assume() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:17: +0:17
- let _1: (); // in scope 0 at $DIR/lower_intrinsics.rs:+2:9: +2:38
- scope 1 {
- }
-
- bb0: {
- StorageLive(_1); // scope 1 at $DIR/lower_intrinsics.rs:+2:9: +2:38
-- _1 = std::intrinsics::assume(const true) -> [return: bb1, unwind unreachable]; // scope 1 at $DIR/lower_intrinsics.rs:+2:9: +2:38
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:106:9: 106:32
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(bool) {std::intrinsics::assume}, val: Value(<ZST>) }
-+ assume(const true); // scope 1 at $DIR/lower_intrinsics.rs:+2:9: +2:38
-+ goto -> bb1; // scope 1 at $DIR/lower_intrinsics.rs:+2:9: +2:38
- }
-
- bb1: {
- StorageDead(_1); // scope 1 at $DIR/lower_intrinsics.rs:+2:38: +2:39
- _0 = const (); // scope 1 at $DIR/lower_intrinsics.rs:+1:5: +3:6
- return; // scope 0 at $DIR/lower_intrinsics.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..79635f23e
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,23 @@
+- // MIR for `assume` before LowerIntrinsics
++ // MIR for `assume` after LowerIntrinsics
+
+ fn assume() -> () {
+ let mut _0: ();
+ let _1: ();
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = std::intrinsics::assume(const true) -> [return: bb1, unwind unreachable];
++ assume(const true);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..79635f23e
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,23 @@
+- // MIR for `assume` before LowerIntrinsics
++ // MIR for `assume` after LowerIntrinsics
+
+ fn assume() -> () {
+ let mut _0: ();
+ let _1: ();
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = std::intrinsics::assume(const true) -> [return: bb1, unwind unreachable];
++ assume(const true);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.diff
deleted file mode 100644
index 1f03b7b0b..000000000
--- a/tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.diff
+++ /dev/null
@@ -1,119 +0,0 @@
-- // MIR for `discriminant` before LowerIntrinsics
-+ // MIR for `discriminant` after LowerIntrinsics
-
- fn discriminant(_1: T) -> () {
- debug t => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:24: +0:25
- let mut _0: (); // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:30: +0:30
- let _2: <T as std::marker::DiscriminantKind>::Discriminant; // in scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:45
- let mut _3: &T; // in scope 0 at $DIR/lower_intrinsics.rs:+1:42: +1:44
- let _4: &T; // in scope 0 at $DIR/lower_intrinsics.rs:+1:42: +1:44
- let _5: u8; // in scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:45
- let mut _6: &i32; // in scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
- let _7: &i32; // in scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
- let _8: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+2:43: +2:44
- let _9: u8; // in scope 0 at $DIR/lower_intrinsics.rs:+3:5: +3:46
- let mut _10: &(); // in scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
- let _11: &(); // in scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
- let _12: (); // in scope 0 at $DIR/lower_intrinsics.rs:+3:43: +3:45
- let _13: isize; // in scope 0 at $DIR/lower_intrinsics.rs:+4:5: +4:48
- let mut _14: &E; // in scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
- let _15: &E; // in scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
- let _16: E; // in scope 0 at $DIR/lower_intrinsics.rs:+4:43: +4:47
- let mut _17: &E; // in scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
- let mut _18: &(); // in scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
- let mut _19: &i32; // in scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:45
- StorageLive(_3); // scope 0 at $DIR/lower_intrinsics.rs:+1:42: +1:44
- StorageLive(_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:42: +1:44
- _4 = &_1; // scope 0 at $DIR/lower_intrinsics.rs:+1:42: +1:44
- _3 = &(*_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:42: +1:44
-- _2 = discriminant_value::<T>(move _3) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:45
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:82:5: 82:41
-- // + literal: Const { ty: for<'a> extern "rust-intrinsic" fn(&'a T) -> <T as DiscriminantKind>::Discriminant {discriminant_value::<T>}, val: Value(<ZST>) }
-+ _2 = discriminant((*_3)); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:45
-+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:45
- }
-
- bb1: {
- StorageDead(_3); // scope 0 at $DIR/lower_intrinsics.rs:+1:44: +1:45
- StorageDead(_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:45: +1:46
- StorageDead(_2); // scope 0 at $DIR/lower_intrinsics.rs:+1:45: +1:46
- StorageLive(_5); // scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:45
- StorageLive(_6); // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
- StorageLive(_7); // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
- _19 = const _; // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
- // mir::Constant
- // + span: $DIR/lower_intrinsics.rs:83:42: 83:44
- // + literal: Const { ty: &i32, val: Unevaluated(discriminant, [T], Some(promoted[2])) }
- _7 = &(*_19); // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
- _6 = &(*_7); // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
-- _5 = discriminant_value::<i32>(move _6) -> [return: bb2, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:45
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:83:5: 83:41
-- // + literal: Const { ty: for<'a> extern "rust-intrinsic" fn(&'a i32) -> <i32 as DiscriminantKind>::Discriminant {discriminant_value::<i32>}, val: Value(<ZST>) }
-+ _5 = discriminant((*_6)); // scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:45
-+ goto -> bb2; // scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:45
- }
-
- bb2: {
- StorageDead(_6); // scope 0 at $DIR/lower_intrinsics.rs:+2:44: +2:45
- StorageDead(_7); // scope 0 at $DIR/lower_intrinsics.rs:+2:45: +2:46
- StorageDead(_5); // scope 0 at $DIR/lower_intrinsics.rs:+2:45: +2:46
- StorageLive(_9); // scope 0 at $DIR/lower_intrinsics.rs:+3:5: +3:46
- StorageLive(_10); // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
- StorageLive(_11); // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
- _18 = const _; // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
- // mir::Constant
- // + span: $DIR/lower_intrinsics.rs:84:42: 84:45
- // + literal: Const { ty: &(), val: Unevaluated(discriminant, [T], Some(promoted[1])) }
- _11 = &(*_18); // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
- _10 = &(*_11); // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
-- _9 = discriminant_value::<()>(move _10) -> [return: bb3, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+3:5: +3:46
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:84:5: 84:41
-- // + literal: Const { ty: for<'a> extern "rust-intrinsic" fn(&'a ()) -> <() as DiscriminantKind>::Discriminant {discriminant_value::<()>}, val: Value(<ZST>) }
-+ _9 = discriminant((*_10)); // scope 0 at $DIR/lower_intrinsics.rs:+3:5: +3:46
-+ goto -> bb3; // scope 0 at $DIR/lower_intrinsics.rs:+3:5: +3:46
- }
-
- bb3: {
- StorageDead(_10); // scope 0 at $DIR/lower_intrinsics.rs:+3:45: +3:46
- StorageDead(_11); // scope 0 at $DIR/lower_intrinsics.rs:+3:46: +3:47
- StorageDead(_9); // scope 0 at $DIR/lower_intrinsics.rs:+3:46: +3:47
- StorageLive(_13); // scope 0 at $DIR/lower_intrinsics.rs:+4:5: +4:48
- StorageLive(_14); // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
- StorageLive(_15); // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
- _17 = const _; // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
- // mir::Constant
- // + span: $DIR/lower_intrinsics.rs:85:42: 85:47
- // + literal: Const { ty: &E, val: Unevaluated(discriminant, [T], Some(promoted[0])) }
- _15 = &(*_17); // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
- _14 = &(*_15); // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
-- _13 = discriminant_value::<E>(move _14) -> [return: bb4, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+4:5: +4:48
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:85:5: 85:41
-- // + literal: Const { ty: for<'a> extern "rust-intrinsic" fn(&'a E) -> <E as DiscriminantKind>::Discriminant {discriminant_value::<E>}, val: Value(<ZST>) }
-+ _13 = discriminant((*_14)); // scope 0 at $DIR/lower_intrinsics.rs:+4:5: +4:48
-+ goto -> bb4; // scope 0 at $DIR/lower_intrinsics.rs:+4:5: +4:48
- }
-
- bb4: {
- StorageDead(_14); // scope 0 at $DIR/lower_intrinsics.rs:+4:47: +4:48
- StorageDead(_15); // scope 0 at $DIR/lower_intrinsics.rs:+4:48: +4:49
- StorageDead(_13); // scope 0 at $DIR/lower_intrinsics.rs:+4:48: +4:49
- _0 = const (); // scope 0 at $DIR/lower_intrinsics.rs:+0:30: +5:2
- drop(_1) -> [return: bb5, unwind: bb6]; // scope 0 at $DIR/lower_intrinsics.rs:+5:1: +5:2
- }
-
- bb5: {
- return; // scope 0 at $DIR/lower_intrinsics.rs:+5:2: +5:2
- }
-
- bb6 (cleanup): {
- resume; // scope 0 at $DIR/lower_intrinsics.rs:+0:1: +5:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..4b5275f0f
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,94 @@
+- // MIR for `discriminant` before LowerIntrinsics
++ // MIR for `discriminant` after LowerIntrinsics
+
+ fn discriminant(_1: T) -> () {
+ debug t => _1;
+ let mut _0: ();
+ let _2: <T as std::marker::DiscriminantKind>::Discriminant;
+ let mut _3: &T;
+ let _4: &T;
+ let _5: u8;
+ let mut _6: &i32;
+ let _7: &i32;
+ let _8: i32;
+ let _9: u8;
+ let mut _10: &();
+ let _11: &();
+ let _12: ();
+ let _13: isize;
+ let mut _14: &E;
+ let _15: &E;
+ let _16: E;
+ let mut _17: &E;
+ let mut _18: &();
+ let mut _19: &i32;
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &_1;
+ _3 = &(*_4);
+- _2 = discriminant_value::<T>(move _3) -> [return: bb1, unwind unreachable];
++ _2 = discriminant((*_3));
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _19 = const _;
+ _7 = &(*_19);
+ _6 = &(*_7);
+- _5 = discriminant_value::<i32>(move _6) -> [return: bb2, unwind unreachable];
++ _5 = discriminant((*_6));
++ goto -> bb2;
+ }
+
+ bb2: {
+ StorageDead(_6);
+ StorageDead(_7);
+ StorageDead(_5);
+ StorageLive(_9);
+ StorageLive(_10);
+ StorageLive(_11);
+ _18 = const _;
+ _11 = &(*_18);
+ _10 = &(*_11);
+- _9 = discriminant_value::<()>(move _10) -> [return: bb3, unwind unreachable];
++ _9 = discriminant((*_10));
++ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_10);
+ StorageDead(_11);
+ StorageDead(_9);
+ StorageLive(_13);
+ StorageLive(_14);
+ StorageLive(_15);
+ _17 = const _;
+ _15 = &(*_17);
+ _14 = &(*_15);
+- _13 = discriminant_value::<E>(move _14) -> [return: bb4, unwind unreachable];
++ _13 = discriminant((*_14));
++ goto -> bb4;
+ }
+
+ bb4: {
+ StorageDead(_14);
+ StorageDead(_15);
+ StorageDead(_13);
+ _0 = const ();
+ drop(_1) -> [return: bb5, unwind unreachable];
+ }
+
+ bb5: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..5848288ec
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,98 @@
+- // MIR for `discriminant` before LowerIntrinsics
++ // MIR for `discriminant` after LowerIntrinsics
+
+ fn discriminant(_1: T) -> () {
+ debug t => _1;
+ let mut _0: ();
+ let _2: <T as std::marker::DiscriminantKind>::Discriminant;
+ let mut _3: &T;
+ let _4: &T;
+ let _5: u8;
+ let mut _6: &i32;
+ let _7: &i32;
+ let _8: i32;
+ let _9: u8;
+ let mut _10: &();
+ let _11: &();
+ let _12: ();
+ let _13: isize;
+ let mut _14: &E;
+ let _15: &E;
+ let _16: E;
+ let mut _17: &E;
+ let mut _18: &();
+ let mut _19: &i32;
+
+ bb0: {
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &_1;
+ _3 = &(*_4);
+- _2 = discriminant_value::<T>(move _3) -> [return: bb1, unwind unreachable];
++ _2 = discriminant((*_3));
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageDead(_2);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _19 = const _;
+ _7 = &(*_19);
+ _6 = &(*_7);
+- _5 = discriminant_value::<i32>(move _6) -> [return: bb2, unwind unreachable];
++ _5 = discriminant((*_6));
++ goto -> bb2;
+ }
+
+ bb2: {
+ StorageDead(_6);
+ StorageDead(_7);
+ StorageDead(_5);
+ StorageLive(_9);
+ StorageLive(_10);
+ StorageLive(_11);
+ _18 = const _;
+ _11 = &(*_18);
+ _10 = &(*_11);
+- _9 = discriminant_value::<()>(move _10) -> [return: bb3, unwind unreachable];
++ _9 = discriminant((*_10));
++ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_10);
+ StorageDead(_11);
+ StorageDead(_9);
+ StorageLive(_13);
+ StorageLive(_14);
+ StorageLive(_15);
+ _17 = const _;
+ _15 = &(*_17);
+ _14 = &(*_15);
+- _13 = discriminant_value::<E>(move _14) -> [return: bb4, unwind unreachable];
++ _13 = discriminant((*_14));
++ goto -> bb4;
+ }
+
+ bb4: {
+ StorageDead(_14);
+ StorageDead(_15);
+ StorageDead(_13);
+ _0 = const ();
+ drop(_1) -> [return: bb5, unwind: bb6];
+ }
+
+ bb5: {
+ return;
+ }
+
+ bb6 (cleanup): {
+ resume;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.diff
deleted file mode 100644
index a54e9a932..000000000
--- a/tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.diff
+++ /dev/null
@@ -1,72 +0,0 @@
-- // MIR for `f_copy_nonoverlapping` before LowerIntrinsics
-+ // MIR for `f_copy_nonoverlapping` after LowerIntrinsics
-
- fn f_copy_nonoverlapping() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:32: +0:32
- let _1: (); // in scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:12
- let _3: (); // in scope 0 at $DIR/lower_intrinsics.rs:+4:9: +4:95
- let mut _4: *const i32; // in scope 0 at $DIR/lower_intrinsics.rs:+4:29: +4:59
- let mut _5: *const (); // in scope 0 at $DIR/lower_intrinsics.rs:+4:29: +4:45
- let mut _6: *const (); // in scope 0 at $DIR/lower_intrinsics.rs:+4:29: +4:45
- let _7: &(); // in scope 0 at $DIR/lower_intrinsics.rs:+4:29: +4:33
- let mut _8: *mut i32; // in scope 0 at $DIR/lower_intrinsics.rs:+4:61: +4:91
- let mut _9: *mut (); // in scope 0 at $DIR/lower_intrinsics.rs:+4:61: +4:79
- let mut _10: *mut (); // in scope 0 at $DIR/lower_intrinsics.rs:+4:61: +4:79
- let mut _11: &mut (); // in scope 0 at $DIR/lower_intrinsics.rs:+4:61: +4:69
- scope 1 {
- debug src => _1; // in scope 1 at $DIR/lower_intrinsics.rs:+1:9: +1:12
- let mut _2: (); // in scope 1 at $DIR/lower_intrinsics.rs:+2:9: +2:16
- scope 2 {
- debug dst => _2; // in scope 2 at $DIR/lower_intrinsics.rs:+2:9: +2:16
- scope 3 {
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:12
- _1 = (); // scope 0 at $DIR/lower_intrinsics.rs:+1:15: +1:17
- StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:+2:9: +2:16
- _2 = (); // scope 1 at $DIR/lower_intrinsics.rs:+2:19: +2:21
- StorageLive(_3); // scope 3 at $DIR/lower_intrinsics.rs:+4:9: +4:95
- StorageLive(_4); // scope 3 at $DIR/lower_intrinsics.rs:+4:29: +4:59
- StorageLive(_5); // scope 3 at $DIR/lower_intrinsics.rs:+4:29: +4:45
- StorageLive(_6); // scope 3 at $DIR/lower_intrinsics.rs:+4:29: +4:45
- StorageLive(_7); // scope 3 at $DIR/lower_intrinsics.rs:+4:29: +4:33
- _7 = &_1; // scope 3 at $DIR/lower_intrinsics.rs:+4:29: +4:33
- _6 = &raw const (*_7); // scope 3 at $DIR/lower_intrinsics.rs:+4:29: +4:33
- _5 = _6; // scope 3 at $DIR/lower_intrinsics.rs:+4:29: +4:45
- _4 = move _5 as *const i32 (PtrToPtr); // scope 3 at $DIR/lower_intrinsics.rs:+4:29: +4:59
- StorageDead(_5); // scope 3 at $DIR/lower_intrinsics.rs:+4:58: +4:59
- StorageLive(_8); // scope 3 at $DIR/lower_intrinsics.rs:+4:61: +4:91
- StorageLive(_9); // scope 3 at $DIR/lower_intrinsics.rs:+4:61: +4:79
- StorageLive(_10); // scope 3 at $DIR/lower_intrinsics.rs:+4:61: +4:79
- StorageLive(_11); // scope 3 at $DIR/lower_intrinsics.rs:+4:61: +4:69
- _11 = &mut _2; // scope 3 at $DIR/lower_intrinsics.rs:+4:61: +4:69
- _10 = &raw mut (*_11); // scope 3 at $DIR/lower_intrinsics.rs:+4:61: +4:69
- _9 = _10; // scope 3 at $DIR/lower_intrinsics.rs:+4:61: +4:79
- _8 = move _9 as *mut i32 (PtrToPtr); // scope 3 at $DIR/lower_intrinsics.rs:+4:61: +4:91
- StorageDead(_9); // scope 3 at $DIR/lower_intrinsics.rs:+4:90: +4:91
-- _3 = copy_nonoverlapping::<i32>(move _4, move _8, const 0_usize) -> [return: bb1, unwind unreachable]; // scope 3 at $DIR/lower_intrinsics.rs:+4:9: +4:95
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:99:9: 99:28
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(*const i32, *mut i32, usize) {copy_nonoverlapping::<i32>}, val: Value(<ZST>) }
-+ copy_nonoverlapping(dst = move _8, src = move _4, count = const 0_usize); // scope 3 at $DIR/lower_intrinsics.rs:+4:9: +4:95
-+ goto -> bb1; // scope 3 at $DIR/lower_intrinsics.rs:+4:9: +4:95
- }
-
- bb1: {
- StorageDead(_8); // scope 3 at $DIR/lower_intrinsics.rs:+4:94: +4:95
- StorageDead(_4); // scope 3 at $DIR/lower_intrinsics.rs:+4:94: +4:95
- StorageDead(_11); // scope 3 at $DIR/lower_intrinsics.rs:+4:95: +4:96
- StorageDead(_10); // scope 3 at $DIR/lower_intrinsics.rs:+4:95: +4:96
- StorageDead(_7); // scope 3 at $DIR/lower_intrinsics.rs:+4:95: +4:96
- StorageDead(_6); // scope 3 at $DIR/lower_intrinsics.rs:+4:95: +4:96
- StorageDead(_3); // scope 3 at $DIR/lower_intrinsics.rs:+4:95: +4:96
- _0 = const (); // scope 3 at $DIR/lower_intrinsics.rs:+3:5: +5:6
- StorageDead(_2); // scope 1 at $DIR/lower_intrinsics.rs:+6:1: +6:2
- StorageDead(_1); // scope 0 at $DIR/lower_intrinsics.rs:+6:1: +6:2
- return; // scope 0 at $DIR/lower_intrinsics.rs:+6:2: +6:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..6de5f2c4f
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,69 @@
+- // MIR for `f_copy_nonoverlapping` before LowerIntrinsics
++ // MIR for `f_copy_nonoverlapping` after LowerIntrinsics
+
+ fn f_copy_nonoverlapping() -> () {
+ let mut _0: ();
+ let _1: ();
+ let _3: ();
+ let mut _4: *const i32;
+ let mut _5: *const ();
+ let mut _6: *const ();
+ let _7: &();
+ let mut _8: *mut i32;
+ let mut _9: *mut ();
+ let mut _10: *mut ();
+ let mut _11: &mut ();
+ scope 1 {
+ debug src => _1;
+ let mut _2: ();
+ scope 2 {
+ debug dst => _2;
+ scope 3 {
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = ();
+ StorageLive(_2);
+ _2 = ();
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &_1;
+ _6 = &raw const (*_7);
+ _5 = _6;
+ _4 = move _5 as *const i32 (PtrToPtr);
+ StorageDead(_5);
+ StorageLive(_8);
+ StorageLive(_9);
+ StorageLive(_10);
+ StorageLive(_11);
+ _11 = &mut _2;
+ _10 = &raw mut (*_11);
+ _9 = _10;
+ _8 = move _9 as *mut i32 (PtrToPtr);
+ StorageDead(_9);
+- _3 = copy_nonoverlapping::<i32>(move _4, move _8, const 0_usize) -> [return: bb1, unwind unreachable];
++ copy_nonoverlapping(dst = move _8, src = move _4, count = const 0_usize);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_8);
+ StorageDead(_4);
+ StorageDead(_11);
+ StorageDead(_10);
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..6de5f2c4f
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,69 @@
+- // MIR for `f_copy_nonoverlapping` before LowerIntrinsics
++ // MIR for `f_copy_nonoverlapping` after LowerIntrinsics
+
+ fn f_copy_nonoverlapping() -> () {
+ let mut _0: ();
+ let _1: ();
+ let _3: ();
+ let mut _4: *const i32;
+ let mut _5: *const ();
+ let mut _6: *const ();
+ let _7: &();
+ let mut _8: *mut i32;
+ let mut _9: *mut ();
+ let mut _10: *mut ();
+ let mut _11: &mut ();
+ scope 1 {
+ debug src => _1;
+ let mut _2: ();
+ scope 2 {
+ debug dst => _2;
+ scope 3 {
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = ();
+ StorageLive(_2);
+ _2 = ();
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &_1;
+ _6 = &raw const (*_7);
+ _5 = _6;
+ _4 = move _5 as *const i32 (PtrToPtr);
+ StorageDead(_5);
+ StorageLive(_8);
+ StorageLive(_9);
+ StorageLive(_10);
+ StorageLive(_11);
+ _11 = &mut _2;
+ _10 = &raw mut (*_11);
+ _9 = _10;
+ _8 = move _9 as *mut i32 (PtrToPtr);
+ StorageDead(_9);
+- _3 = copy_nonoverlapping::<i32>(move _4, move _8, const 0_usize) -> [return: bb1, unwind unreachable];
++ copy_nonoverlapping(dst = move _8, src = move _4, count = const 0_usize);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_8);
+ StorageDead(_4);
+ StorageDead(_11);
+ StorageDead(_10);
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.diff
deleted file mode 100644
index bfb000ccd..000000000
--- a/tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.diff
+++ /dev/null
@@ -1,29 +0,0 @@
-- // MIR for `forget` before LowerIntrinsics
-+ // MIR for `forget` after LowerIntrinsics
-
- fn forget(_1: T) -> () {
- debug t => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:18: +0:19
- let mut _0: (); // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:24: +0:24
- let mut _2: T; // in scope 0 at $DIR/lower_intrinsics.rs:+1:30: +1:31
-
- bb0: {
- StorageLive(_2); // scope 0 at $DIR/lower_intrinsics.rs:+1:30: +1:31
- _2 = move _1; // scope 0 at $DIR/lower_intrinsics.rs:+1:30: +1:31
-- _0 = std::intrinsics::forget::<T>(move _2) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:32
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:26:5: 26:29
-- // + literal: Const { ty: extern "rust-intrinsic" fn(T) {std::intrinsics::forget::<T>}, val: Value(<ZST>) }
-+ _0 = const (); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:32
-+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:32
- }
-
- bb1: {
- StorageDead(_2); // scope 0 at $DIR/lower_intrinsics.rs:+1:31: +1:32
- goto -> bb2; // scope 0 at $DIR/lower_intrinsics.rs:+2:1: +2:2
- }
-
- bb2: {
- return; // scope 0 at $DIR/lower_intrinsics.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..7d300e6c6
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,26 @@
+- // MIR for `forget` before LowerIntrinsics
++ // MIR for `forget` after LowerIntrinsics
+
+ fn forget(_1: T) -> () {
+ debug t => _1;
+ let mut _0: ();
+ let mut _2: T;
+
+ bb0: {
+ StorageLive(_2);
+ _2 = move _1;
+- _0 = std::intrinsics::forget::<T>(move _2) -> [return: bb1, unwind unreachable];
++ _0 = const ();
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ goto -> bb2;
+ }
+
+ bb2: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..7d300e6c6
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,26 @@
+- // MIR for `forget` before LowerIntrinsics
++ // MIR for `forget` after LowerIntrinsics
+
+ fn forget(_1: T) -> () {
+ debug t => _1;
+ let mut _0: ();
+ let mut _2: T;
+
+ bb0: {
+ StorageLive(_2);
+ _2 = move _1;
+- _0 = std::intrinsics::forget::<T>(move _2) -> [return: bb1, unwind unreachable];
++ _0 = const ();
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ goto -> bb2;
+ }
+
+ bb2: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.diff
deleted file mode 100644
index 64d82907c..000000000
--- a/tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-- // MIR for `non_const` before LowerIntrinsics
-+ // MIR for `non_const` after LowerIntrinsics
-
- fn non_const() -> usize {
- let mut _0: usize; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:26: +0:31
- let _1: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>}; // in scope 0 at $DIR/lower_intrinsics.rs:+2:9: +2:18
- let mut _2: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>}; // in scope 0 at $DIR/lower_intrinsics.rs:+3:5: +3:14
- scope 1 {
- debug size_of_t => _1; // in scope 1 at $DIR/lower_intrinsics.rs:+2:9: +2:18
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+2:9: +2:18
- _1 = std::intrinsics::size_of::<T>; // scope 0 at $DIR/lower_intrinsics.rs:+2:21: +2:51
- // mir::Constant
- // + span: $DIR/lower_intrinsics.rs:37:21: 37:51
- // + literal: Const { ty: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>}, val: Value(<ZST>) }
- StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:+3:5: +3:14
- _2 = _1; // scope 1 at $DIR/lower_intrinsics.rs:+3:5: +3:14
-- _0 = move _2() -> [return: bb1, unwind unreachable]; // scope 1 at $DIR/lower_intrinsics.rs:+3:5: +3:16
-+ _0 = SizeOf(T); // scope 1 at $DIR/lower_intrinsics.rs:+3:5: +3:16
-+ goto -> bb1; // scope 1 at $DIR/lower_intrinsics.rs:+3:5: +3:16
- }
-
- bb1: {
- StorageDead(_2); // scope 1 at $DIR/lower_intrinsics.rs:+3:15: +3:16
- StorageDead(_1); // scope 0 at $DIR/lower_intrinsics.rs:+4:1: +4:2
- return; // scope 0 at $DIR/lower_intrinsics.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..801e28ff2
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,28 @@
+- // MIR for `non_const` before LowerIntrinsics
++ // MIR for `non_const` after LowerIntrinsics
+
+ fn non_const() -> usize {
+ let mut _0: usize;
+ let _1: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>};
+ let mut _2: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>};
+ scope 1 {
+ debug size_of_t => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = std::intrinsics::size_of::<T>;
+ StorageLive(_2);
+ _2 = _1;
+- _0 = move _2() -> [return: bb1, unwind unreachable];
++ _0 = SizeOf(T);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..801e28ff2
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,28 @@
+- // MIR for `non_const` before LowerIntrinsics
++ // MIR for `non_const` after LowerIntrinsics
+
+ fn non_const() -> usize {
+ let mut _0: usize;
+ let _1: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>};
+ let mut _2: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>};
+ scope 1 {
+ debug size_of_t => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = std::intrinsics::size_of::<T>;
+ StorageLive(_2);
+ _2 = _1;
+- _0 = move _2() -> [return: bb1, unwind unreachable];
++ _0 = SizeOf(T);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.diff
deleted file mode 100644
index b022e2ba4..000000000
--- a/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.diff
+++ /dev/null
@@ -1,54 +0,0 @@
-- // MIR for `option_payload` before LowerIntrinsics
-+ // MIR for `option_payload` after LowerIntrinsics
-
- fn option_payload(_1: &Option<usize>, _2: &Option<String>) -> () {
- debug o => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:23: +0:24
- debug p => _2; // in scope 0 at $DIR/lower_intrinsics.rs:+0:42: +0:43
- let mut _0: (); // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:62: +0:62
- let mut _4: *const std::option::Option<usize>; // in scope 0 at $DIR/lower_intrinsics.rs:+2:55: +2:56
- let mut _6: *const std::option::Option<std::string::String>; // in scope 0 at $DIR/lower_intrinsics.rs:+3:55: +3:56
- scope 1 {
- let _3: *const usize; // in scope 1 at $DIR/lower_intrinsics.rs:+2:13: +2:15
- scope 2 {
- debug _x => _3; // in scope 2 at $DIR/lower_intrinsics.rs:+2:13: +2:15
- let _5: *const std::string::String; // in scope 2 at $DIR/lower_intrinsics.rs:+3:13: +3:15
- scope 3 {
- debug _y => _5; // in scope 3 at $DIR/lower_intrinsics.rs:+3:13: +3:15
- }
- }
- }
-
- bb0: {
- StorageLive(_3); // scope 1 at $DIR/lower_intrinsics.rs:+2:13: +2:15
- StorageLive(_4); // scope 1 at $DIR/lower_intrinsics.rs:+2:55: +2:56
- _4 = &raw const (*_1); // scope 1 at $DIR/lower_intrinsics.rs:+2:55: +2:56
-- _3 = option_payload_ptr::<usize>(move _4) -> [return: bb1, unwind unreachable]; // scope 1 at $DIR/lower_intrinsics.rs:+2:18: +2:57
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:137:18: 137:54
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(*const Option<usize>) -> *const usize {option_payload_ptr::<usize>}, val: Value(<ZST>) }
-+ _3 = &raw const (((*_4) as Some).0: usize); // scope 1 at $DIR/lower_intrinsics.rs:+2:18: +2:57
-+ goto -> bb1; // scope 1 at $DIR/lower_intrinsics.rs:+2:18: +2:57
- }
-
- bb1: {
- StorageDead(_4); // scope 1 at $DIR/lower_intrinsics.rs:+2:56: +2:57
- StorageLive(_5); // scope 2 at $DIR/lower_intrinsics.rs:+3:13: +3:15
- StorageLive(_6); // scope 2 at $DIR/lower_intrinsics.rs:+3:55: +3:56
- _6 = &raw const (*_2); // scope 2 at $DIR/lower_intrinsics.rs:+3:55: +3:56
-- _5 = option_payload_ptr::<String>(move _6) -> [return: bb2, unwind unreachable]; // scope 2 at $DIR/lower_intrinsics.rs:+3:18: +3:57
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:138:18: 138:54
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(*const Option<String>) -> *const String {option_payload_ptr::<String>}, val: Value(<ZST>) }
-+ _5 = &raw const (((*_6) as Some).0: std::string::String); // scope 2 at $DIR/lower_intrinsics.rs:+3:18: +3:57
-+ goto -> bb2; // scope 2 at $DIR/lower_intrinsics.rs:+3:18: +3:57
- }
-
- bb2: {
- StorageDead(_6); // scope 2 at $DIR/lower_intrinsics.rs:+3:56: +3:57
- _0 = const (); // scope 1 at $DIR/lower_intrinsics.rs:+1:5: +4:6
- StorageDead(_5); // scope 2 at $DIR/lower_intrinsics.rs:+4:5: +4:6
- StorageDead(_3); // scope 1 at $DIR/lower_intrinsics.rs:+4:5: +4:6
- return; // scope 0 at $DIR/lower_intrinsics.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..194478560
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,48 @@
+- // MIR for `option_payload` before LowerIntrinsics
++ // MIR for `option_payload` after LowerIntrinsics
+
+ fn option_payload(_1: &Option<usize>, _2: &Option<String>) -> () {
+ debug o => _1;
+ debug p => _2;
+ let mut _0: ();
+ let mut _4: *const std::option::Option<usize>;
+ let mut _6: *const std::option::Option<std::string::String>;
+ scope 1 {
+ let _3: *const usize;
+ scope 2 {
+ debug _x => _3;
+ let _5: *const std::string::String;
+ scope 3 {
+ debug _y => _5;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &raw const (*_1);
+- _3 = option_payload_ptr::<usize>(move _4) -> [return: bb1, unwind unreachable];
++ _3 = &raw const (((*_4) as Some).0: usize);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = &raw const (*_2);
+- _5 = option_payload_ptr::<String>(move _6) -> [return: bb2, unwind unreachable];
++ _5 = &raw const (((*_6) as Some).0: std::string::String);
++ goto -> bb2;
+ }
+
+ bb2: {
+ StorageDead(_6);
+ _0 = const ();
+ StorageDead(_5);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..194478560
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,48 @@
+- // MIR for `option_payload` before LowerIntrinsics
++ // MIR for `option_payload` after LowerIntrinsics
+
+ fn option_payload(_1: &Option<usize>, _2: &Option<String>) -> () {
+ debug o => _1;
+ debug p => _2;
+ let mut _0: ();
+ let mut _4: *const std::option::Option<usize>;
+ let mut _6: *const std::option::Option<std::string::String>;
+ scope 1 {
+ let _3: *const usize;
+ scope 2 {
+ debug _x => _3;
+ let _5: *const std::string::String;
+ scope 3 {
+ debug _y => _5;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &raw const (*_1);
+- _3 = option_payload_ptr::<usize>(move _4) -> [return: bb1, unwind unreachable];
++ _3 = &raw const (((*_4) as Some).0: usize);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = &raw const (*_2);
+- _5 = option_payload_ptr::<String>(move _6) -> [return: bb2, unwind unreachable];
++ _5 = &raw const (((*_6) as Some).0: std::string::String);
++ goto -> bb2;
+ }
+
+ bb2: {
+ StorageDead(_6);
+ _0 = const ();
+ StorageDead(_5);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.diff
deleted file mode 100644
index 60a1dd0ba..000000000
--- a/tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.diff
+++ /dev/null
@@ -1,30 +0,0 @@
-- // MIR for `ptr_offset` before LowerIntrinsics
-+ // MIR for `ptr_offset` after LowerIntrinsics
-
- fn ptr_offset(_1: *const i32, _2: isize) -> *const i32 {
- debug p => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:26: +0:27
- debug d => _2; // in scope 0 at $DIR/lower_intrinsics.rs:+0:41: +0:42
- let mut _0: *const i32; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:54: +0:64
- let mut _3: *const i32; // in scope 0 at $DIR/lower_intrinsics.rs:+1:30: +1:31
- let mut _4: isize; // in scope 0 at $DIR/lower_intrinsics.rs:+1:33: +1:34
-
- bb0: {
- StorageLive(_3); // scope 0 at $DIR/lower_intrinsics.rs:+1:30: +1:31
- _3 = _1; // scope 0 at $DIR/lower_intrinsics.rs:+1:30: +1:31
- StorageLive(_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:33: +1:34
- _4 = _2; // scope 0 at $DIR/lower_intrinsics.rs:+1:33: +1:34
-- _0 = offset::<*const i32, isize>(move _3, move _4) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:35
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:144:5: 144:29
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(*const i32, isize) -> *const i32 {offset::<*const i32, isize>}, val: Value(<ZST>) }
-+ _0 = Offset(move _3, move _4); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:35
-+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:35
- }
-
- bb1: {
- StorageDead(_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:34: +1:35
- StorageDead(_3); // scope 0 at $DIR/lower_intrinsics.rs:+1:34: +1:35
- return; // scope 0 at $DIR/lower_intrinsics.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..4f7ad0b60
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,27 @@
+- // MIR for `ptr_offset` before LowerIntrinsics
++ // MIR for `ptr_offset` after LowerIntrinsics
+
+ fn ptr_offset(_1: *const i32, _2: isize) -> *const i32 {
+ debug p => _1;
+ debug d => _2;
+ let mut _0: *const i32;
+ let mut _3: *const i32;
+ let mut _4: isize;
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _1;
+ StorageLive(_4);
+ _4 = _2;
+- _0 = offset::<*const i32, isize>(move _3, move _4) -> [return: bb1, unwind unreachable];
++ _0 = Offset(move _3, move _4);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_4);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..4f7ad0b60
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,27 @@
+- // MIR for `ptr_offset` before LowerIntrinsics
++ // MIR for `ptr_offset` after LowerIntrinsics
+
+ fn ptr_offset(_1: *const i32, _2: isize) -> *const i32 {
+ debug p => _1;
+ debug d => _2;
+ let mut _0: *const i32;
+ let mut _3: *const i32;
+ let mut _4: isize;
+
+ bb0: {
+ StorageLive(_3);
+ _3 = _1;
+ StorageLive(_4);
+ _4 = _2;
+- _0 = offset::<*const i32, isize>(move _3, move _4) -> [return: bb1, unwind unreachable];
++ _0 = Offset(move _3, move _4);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_4);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.diff
deleted file mode 100644
index 5805df48f..000000000
--- a/tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.diff
+++ /dev/null
@@ -1,27 +0,0 @@
-- // MIR for `read_via_copy_primitive` before LowerIntrinsics
-+ // MIR for `read_via_copy_primitive` after LowerIntrinsics
-
- fn read_via_copy_primitive(_1: &i32) -> i32 {
- debug r => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:32: +0:33
- let mut _0: i32; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:44: +0:47
- let mut _2: *const i32; // in scope 0 at $DIR/lower_intrinsics.rs:+1:46: +1:47
- scope 1 {
- }
-
- bb0: {
- StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:+1:46: +1:47
- _2 = &raw const (*_1); // scope 1 at $DIR/lower_intrinsics.rs:+1:46: +1:47
-- _0 = read_via_copy::<i32>(move _2) -> [return: bb1, unwind unreachable]; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:48
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:119:14: 119:45
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(*const i32) -> i32 {read_via_copy::<i32>}, val: Value(<ZST>) }
-+ _0 = (*_2); // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:48
-+ goto -> bb1; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:48
- }
-
- bb1: {
- StorageDead(_2); // scope 1 at $DIR/lower_intrinsics.rs:+1:47: +1:48
- return; // scope 0 at $DIR/lower_intrinsics.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..147c48a3c
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,24 @@
+- // MIR for `read_via_copy_primitive` before LowerIntrinsics
++ // MIR for `read_via_copy_primitive` after LowerIntrinsics
+
+ fn read_via_copy_primitive(_1: &i32) -> i32 {
+ debug r => _1;
+ let mut _0: i32;
+ let mut _2: *const i32;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = &raw const (*_1);
+- _0 = read_via_copy::<i32>(move _2) -> [return: bb1, unwind unreachable];
++ _0 = (*_2);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..147c48a3c
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,24 @@
+- // MIR for `read_via_copy_primitive` before LowerIntrinsics
++ // MIR for `read_via_copy_primitive` after LowerIntrinsics
+
+ fn read_via_copy_primitive(_1: &i32) -> i32 {
+ debug r => _1;
+ let mut _0: i32;
+ let mut _2: *const i32;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = &raw const (*_1);
+- _0 = read_via_copy::<i32>(move _2) -> [return: bb1, unwind unreachable];
++ _0 = (*_2);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.diff
deleted file mode 100644
index 95b2ec49d..000000000
--- a/tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.diff
+++ /dev/null
@@ -1,21 +0,0 @@
-- // MIR for `read_via_copy_uninhabited` before LowerIntrinsics
-+ // MIR for `read_via_copy_uninhabited` after LowerIntrinsics
-
- fn read_via_copy_uninhabited(_1: &Never) -> Never {
- debug r => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:34: +0:35
- let mut _0: Never; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:48: +0:53
- let mut _2: *const Never; // in scope 0 at $DIR/lower_intrinsics.rs:+1:46: +1:47
- scope 1 {
- }
-
- bb0: {
- StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:+1:46: +1:47
- _2 = &raw const (*_1); // scope 1 at $DIR/lower_intrinsics.rs:+1:46: +1:47
-- _0 = read_via_copy::<Never>(move _2) -> unwind unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:48
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:124:14: 124:45
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(*const Never) -> Never {read_via_copy::<Never>}, val: Value(<ZST>) }
-+ unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:48
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..95a4a83d6
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,18 @@
+- // MIR for `read_via_copy_uninhabited` before LowerIntrinsics
++ // MIR for `read_via_copy_uninhabited` after LowerIntrinsics
+
+ fn read_via_copy_uninhabited(_1: &Never) -> Never {
+ debug r => _1;
+ let mut _0: Never;
+ let mut _2: *const Never;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = &raw const (*_1);
+- _0 = read_via_copy::<Never>(move _2) -> unwind unreachable;
++ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..95a4a83d6
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,18 @@
+- // MIR for `read_via_copy_uninhabited` before LowerIntrinsics
++ // MIR for `read_via_copy_uninhabited` after LowerIntrinsics
+
+ fn read_via_copy_uninhabited(_1: &Never) -> Never {
+ debug r => _1;
+ let mut _0: Never;
+ let mut _2: *const Never;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = &raw const (*_1);
+- _0 = read_via_copy::<Never>(move _2) -> unwind unreachable;
++ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.rs b/tests/mir-opt/lower_intrinsics.rs
index 0ca88a42e..0758e9b77 100644
--- a/tests/mir-opt/lower_intrinsics.rs
+++ b/tests/mir-opt/lower_intrinsics.rs
@@ -1,5 +1,5 @@
// unit-test: LowerIntrinsics
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![feature(core_intrinsics, intrinsics, rustc_attrs)]
#![crate_type = "lib"]
@@ -11,6 +11,17 @@ pub fn wrapping(a: i32, b: i32) {
let _z = core::intrinsics::wrapping_mul(a, b);
}
+// EMIT_MIR lower_intrinsics.unchecked.LowerIntrinsics.diff
+pub unsafe fn unchecked(a: i32, b: i32) {
+ let _a = core::intrinsics::unchecked_add(a, b);
+ let _b = core::intrinsics::unchecked_sub(a, b);
+ let _c = core::intrinsics::unchecked_mul(a, b);
+ let _x = core::intrinsics::unchecked_div(a, b);
+ let _y = core::intrinsics::unchecked_rem(a, b);
+ let _i = core::intrinsics::unchecked_shl(a, b);
+ let _j = core::intrinsics::unchecked_shr(a, b);
+}
+
// EMIT_MIR lower_intrinsics.size_of.LowerIntrinsics.diff
pub fn size_of<T>() -> usize {
core::intrinsics::size_of::<T>()
diff --git a/tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.diff
deleted file mode 100644
index 27e8accea..000000000
--- a/tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.diff
+++ /dev/null
@@ -1,20 +0,0 @@
-- // MIR for `size_of` before LowerIntrinsics
-+ // MIR for `size_of` after LowerIntrinsics
-
- fn size_of() -> usize {
- let mut _0: usize; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:24: +0:29
-
- bb0: {
-- _0 = std::intrinsics::size_of::<T>() -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:37
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:16:5: 16:35
-- // + literal: Const { ty: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>}, val: Value(<ZST>) }
-+ _0 = SizeOf(T); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:37
-+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:37
- }
-
- bb1: {
- return; // scope 0 at $DIR/lower_intrinsics.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..a547bdf37
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,17 @@
+- // MIR for `size_of` before LowerIntrinsics
++ // MIR for `size_of` after LowerIntrinsics
+
+ fn size_of() -> usize {
+ let mut _0: usize;
+
+ bb0: {
+- _0 = std::intrinsics::size_of::<T>() -> [return: bb1, unwind unreachable];
++ _0 = SizeOf(T);
++ goto -> bb1;
+ }
+
+ bb1: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..a547bdf37
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,17 @@
+- // MIR for `size_of` before LowerIntrinsics
++ // MIR for `size_of` after LowerIntrinsics
+
+ fn size_of() -> usize {
+ let mut _0: usize;
+
+ bb0: {
+- _0 = std::intrinsics::size_of::<T>() -> [return: bb1, unwind unreachable];
++ _0 = SizeOf(T);
++ goto -> bb1;
+ }
+
+ bb1: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.diff
deleted file mode 100644
index 1b3b76851..000000000
--- a/tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.diff
+++ /dev/null
@@ -1,27 +0,0 @@
-- // MIR for `transmute_inhabited` before LowerIntrinsics
-+ // MIR for `transmute_inhabited` after LowerIntrinsics
-
- fn transmute_inhabited(_1: std::cmp::Ordering) -> i8 {
- debug c => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:28: +0:29
- let mut _0: i8; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:54: +0:56
- let mut _2: std::cmp::Ordering; // in scope 0 at $DIR/lower_intrinsics.rs:+1:34: +1:35
- scope 1 {
- }
-
- bb0: {
- StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:+1:34: +1:35
- _2 = _1; // scope 1 at $DIR/lower_intrinsics.rs:+1:34: +1:35
-- _0 = transmute::<std::cmp::Ordering, i8>(move _2) -> [return: bb1, unwind unreachable]; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:36
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:43:14: 43:33
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(std::cmp::Ordering) -> i8 {transmute::<std::cmp::Ordering, i8>}, val: Value(<ZST>) }
-+ _0 = move _2 as i8 (Transmute); // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:36
-+ goto -> bb1; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:36
- }
-
- bb1: {
- StorageDead(_2); // scope 1 at $DIR/lower_intrinsics.rs:+1:35: +1:36
- return; // scope 0 at $DIR/lower_intrinsics.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..3b4051e4a
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,24 @@
+- // MIR for `transmute_inhabited` before LowerIntrinsics
++ // MIR for `transmute_inhabited` after LowerIntrinsics
+
+ fn transmute_inhabited(_1: std::cmp::Ordering) -> i8 {
+ debug c => _1;
+ let mut _0: i8;
+ let mut _2: std::cmp::Ordering;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = _1;
+- _0 = transmute::<std::cmp::Ordering, i8>(move _2) -> [return: bb1, unwind unreachable];
++ _0 = move _2 as i8 (Transmute);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..3b4051e4a
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,24 @@
+- // MIR for `transmute_inhabited` before LowerIntrinsics
++ // MIR for `transmute_inhabited` after LowerIntrinsics
+
+ fn transmute_inhabited(_1: std::cmp::Ordering) -> i8 {
+ debug c => _1;
+ let mut _0: i8;
+ let mut _2: std::cmp::Ordering;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = _1;
+- _0 = transmute::<std::cmp::Ordering, i8>(move _2) -> [return: bb1, unwind unreachable];
++ _0 = move _2 as i8 (Transmute);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.diff
deleted file mode 100644
index c6a7d2287..000000000
--- a/tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.diff
+++ /dev/null
@@ -1,27 +0,0 @@
-- // MIR for `transmute_ref_dst` before LowerIntrinsics
-+ // MIR for `transmute_ref_dst` after LowerIntrinsics
-
- fn transmute_ref_dst(_1: &T) -> *const T {
- debug u => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:44: +0:45
- let mut _0: *const T; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:54: +0:62
- let mut _2: &T; // in scope 0 at $DIR/lower_intrinsics.rs:+1:34: +1:35
- scope 1 {
- }
-
- bb0: {
- StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:+1:34: +1:35
- _2 = _1; // scope 1 at $DIR/lower_intrinsics.rs:+1:34: +1:35
-- _0 = transmute::<&T, *const T>(move _2) -> [return: bb1, unwind unreachable]; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:36
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:53:14: 53:33
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(&T) -> *const T {transmute::<&T, *const T>}, val: Value(<ZST>) }
-+ _0 = move _2 as *const T (Transmute); // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:36
-+ goto -> bb1; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:36
- }
-
- bb1: {
- StorageDead(_2); // scope 1 at $DIR/lower_intrinsics.rs:+1:35: +1:36
- return; // scope 0 at $DIR/lower_intrinsics.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..91276a1b5
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,24 @@
+- // MIR for `transmute_ref_dst` before LowerIntrinsics
++ // MIR for `transmute_ref_dst` after LowerIntrinsics
+
+ fn transmute_ref_dst(_1: &T) -> *const T {
+ debug u => _1;
+ let mut _0: *const T;
+ let mut _2: &T;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = _1;
+- _0 = transmute::<&T, *const T>(move _2) -> [return: bb1, unwind unreachable];
++ _0 = move _2 as *const T (Transmute);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..91276a1b5
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,24 @@
+- // MIR for `transmute_ref_dst` before LowerIntrinsics
++ // MIR for `transmute_ref_dst` after LowerIntrinsics
+
+ fn transmute_ref_dst(_1: &T) -> *const T {
+ debug u => _1;
+ let mut _0: *const T;
+ let mut _2: &T;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = _1;
+- _0 = transmute::<&T, *const T>(move _2) -> [return: bb1, unwind unreachable];
++ _0 = move _2 as *const T (Transmute);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.diff
deleted file mode 100644
index aa5d9619d..000000000
--- a/tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-- // MIR for `transmute_to_box_uninhabited` before LowerIntrinsics
-+ // MIR for `transmute_to_box_uninhabited` after LowerIntrinsics
-
- fn transmute_to_box_uninhabited() -> ! {
- let mut _0: !; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:49: +0:50
- let _1: std::boxed::Box<Never>; // in scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/lower_intrinsics.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
-- _1 = transmute::<usize, Box<Never>>(const 1_usize) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:70:25: 70:44
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(usize) -> Box<Never> {transmute::<usize, Box<Never>>}, val: Value(<ZST>) }
-+ _1 = const 1_usize as std::boxed::Box<Never> (Transmute); // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
-+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
- }
-
- bb1: {
- unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+2:11: +2:13
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..49cc8b1af
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,22 @@
+- // MIR for `transmute_to_box_uninhabited` before LowerIntrinsics
++ // MIR for `transmute_to_box_uninhabited` after LowerIntrinsics
+
+ fn transmute_to_box_uninhabited() -> ! {
+ let mut _0: !;
+ let _1: std::boxed::Box<Never>;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = transmute::<usize, Box<Never>>(const 1_usize) -> [return: bb1, unwind unreachable];
++ _1 = const 1_usize as std::boxed::Box<Never> (Transmute);
++ goto -> bb1;
+ }
+
+ bb1: {
+ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..49cc8b1af
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,22 @@
+- // MIR for `transmute_to_box_uninhabited` before LowerIntrinsics
++ // MIR for `transmute_to_box_uninhabited` after LowerIntrinsics
+
+ fn transmute_to_box_uninhabited() -> ! {
+ let mut _0: !;
+ let _1: std::boxed::Box<Never>;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = transmute::<usize, Box<Never>>(const 1_usize) -> [return: bb1, unwind unreachable];
++ _1 = const 1_usize as std::boxed::Box<Never> (Transmute);
++ goto -> bb1;
+ }
+
+ bb1: {
+ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.diff
deleted file mode 100644
index 5fafd45fe..000000000
--- a/tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-- // MIR for `transmute_to_mut_uninhabited` before LowerIntrinsics
-+ // MIR for `transmute_to_mut_uninhabited` after LowerIntrinsics
-
- fn transmute_to_mut_uninhabited() -> ! {
- let mut _0: !; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:49: +0:50
- let _1: &mut Never; // in scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/lower_intrinsics.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
-- _1 = transmute::<usize, &mut Never>(const 1_usize) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:64:25: 64:44
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(usize) -> &mut Never {transmute::<usize, &mut Never>}, val: Value(<ZST>) }
-+ _1 = const 1_usize as &mut Never (Transmute); // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
-+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
- }
-
- bb1: {
- unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+2:11: +2:13
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..94c7ebe15
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,22 @@
+- // MIR for `transmute_to_mut_uninhabited` before LowerIntrinsics
++ // MIR for `transmute_to_mut_uninhabited` after LowerIntrinsics
+
+ fn transmute_to_mut_uninhabited() -> ! {
+ let mut _0: !;
+ let _1: &mut Never;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = transmute::<usize, &mut Never>(const 1_usize) -> [return: bb1, unwind unreachable];
++ _1 = const 1_usize as &mut Never (Transmute);
++ goto -> bb1;
+ }
+
+ bb1: {
+ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..94c7ebe15
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,22 @@
+- // MIR for `transmute_to_mut_uninhabited` before LowerIntrinsics
++ // MIR for `transmute_to_mut_uninhabited` after LowerIntrinsics
+
+ fn transmute_to_mut_uninhabited() -> ! {
+ let mut _0: !;
+ let _1: &mut Never;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = transmute::<usize, &mut Never>(const 1_usize) -> [return: bb1, unwind unreachable];
++ _1 = const 1_usize as &mut Never (Transmute);
++ goto -> bb1;
+ }
+
+ bb1: {
+ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.diff
deleted file mode 100644
index 08dead132..000000000
--- a/tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-- // MIR for `transmute_to_ref_uninhabited` before LowerIntrinsics
-+ // MIR for `transmute_to_ref_uninhabited` after LowerIntrinsics
-
- fn transmute_to_ref_uninhabited() -> ! {
- let mut _0: !; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:49: +0:50
- let _1: &Never; // in scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/lower_intrinsics.rs:+1:9: +1:10
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
-- _1 = transmute::<usize, &Never>(const 1_usize) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:21: +1:48
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:58:21: 58:40
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(usize) -> &Never {transmute::<usize, &Never>}, val: Value(<ZST>) }
-+ _1 = const 1_usize as &Never (Transmute); // scope 0 at $DIR/lower_intrinsics.rs:+1:21: +1:48
-+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:21: +1:48
- }
-
- bb1: {
- unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+2:11: +2:13
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..6576616e0
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,22 @@
+- // MIR for `transmute_to_ref_uninhabited` before LowerIntrinsics
++ // MIR for `transmute_to_ref_uninhabited` after LowerIntrinsics
+
+ fn transmute_to_ref_uninhabited() -> ! {
+ let mut _0: !;
+ let _1: &Never;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = transmute::<usize, &Never>(const 1_usize) -> [return: bb1, unwind unreachable];
++ _1 = const 1_usize as &Never (Transmute);
++ goto -> bb1;
+ }
+
+ bb1: {
+ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..6576616e0
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,22 @@
+- // MIR for `transmute_to_ref_uninhabited` before LowerIntrinsics
++ // MIR for `transmute_to_ref_uninhabited` after LowerIntrinsics
+
+ fn transmute_to_ref_uninhabited() -> ! {
+ let mut _0: !;
+ let _1: &Never;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _1 = transmute::<usize, &Never>(const 1_usize) -> [return: bb1, unwind unreachable];
++ _1 = const 1_usize as &Never (Transmute);
++ goto -> bb1;
+ }
+
+ bb1: {
+ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.diff
deleted file mode 100644
index f0b76127d..000000000
--- a/tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.diff
+++ /dev/null
@@ -1,22 +0,0 @@
-- // MIR for `transmute_uninhabited` before LowerIntrinsics
-+ // MIR for `transmute_uninhabited` after LowerIntrinsics
-
- fn transmute_uninhabited(_1: ()) -> Never {
- debug u => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:37: +0:38
- let mut _0: Never; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:47: +0:52
- let mut _2: (); // in scope 0 at $DIR/lower_intrinsics.rs:+1:47: +1:48
- scope 1 {
- }
-
- bb0: {
- StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:+1:47: +1:48
- _2 = _1; // scope 1 at $DIR/lower_intrinsics.rs:+1:47: +1:48
-- _0 = transmute::<(), Never>(move _2) -> unwind unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:49
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:48:14: 48:46
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(()) -> Never {transmute::<(), Never>}, val: Value(<ZST>) }
-+ _0 = move _2 as Never (Transmute); // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:49
-+ unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:49
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..792c77d57
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,19 @@
+- // MIR for `transmute_uninhabited` before LowerIntrinsics
++ // MIR for `transmute_uninhabited` after LowerIntrinsics
+
+ fn transmute_uninhabited(_1: ()) -> Never {
+ debug u => _1;
+ let mut _0: Never;
+ let mut _2: ();
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = _1;
+- _0 = transmute::<(), Never>(move _2) -> unwind unreachable;
++ _0 = move _2 as Never (Transmute);
++ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..792c77d57
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,19 @@
+- // MIR for `transmute_uninhabited` before LowerIntrinsics
++ // MIR for `transmute_uninhabited` after LowerIntrinsics
+
+ fn transmute_uninhabited(_1: ()) -> Never {
+ debug u => _1;
+ let mut _0: Never;
+ let mut _2: ();
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = _1;
+- _0 = transmute::<(), Never>(move _2) -> unwind unreachable;
++ _0 = move _2 as Never (Transmute);
++ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.unchecked.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.unchecked.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..dd92b8d6d
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.unchecked.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,154 @@
+- // MIR for `unchecked` before LowerIntrinsics
++ // MIR for `unchecked` after LowerIntrinsics
+
+ fn unchecked(_1: i32, _2: i32) -> () {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: ();
+ let _3: i32;
+ let mut _4: i32;
+ let mut _5: i32;
+ let mut _7: i32;
+ let mut _8: i32;
+ let mut _10: i32;
+ let mut _11: i32;
+ let mut _13: i32;
+ let mut _14: i32;
+ let mut _16: i32;
+ let mut _17: i32;
+ let mut _19: i32;
+ let mut _20: i32;
+ let mut _22: i32;
+ let mut _23: i32;
+ scope 1 {
+ debug _a => _3;
+ let _6: i32;
+ scope 2 {
+ debug _b => _6;
+ let _9: i32;
+ scope 3 {
+ debug _c => _9;
+ let _12: i32;
+ scope 4 {
+ debug _x => _12;
+ let _15: i32;
+ scope 5 {
+ debug _y => _15;
+ let _18: i32;
+ scope 6 {
+ debug _i => _18;
+ let _21: i32;
+ scope 7 {
+ debug _j => _21;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ _5 = _2;
+- _3 = unchecked_add::<i32>(move _4, move _5) -> [return: bb1, unwind unreachable];
++ _3 = AddUnchecked(move _4, move _5);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = _1;
+ StorageLive(_8);
+ _8 = _2;
+- _6 = unchecked_sub::<i32>(move _7, move _8) -> [return: bb2, unwind unreachable];
++ _6 = SubUnchecked(move _7, move _8);
++ goto -> bb2;
+ }
+
+ bb2: {
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = _1;
+ StorageLive(_11);
+ _11 = _2;
+- _9 = unchecked_mul::<i32>(move _10, move _11) -> [return: bb3, unwind unreachable];
++ _9 = MulUnchecked(move _10, move _11);
++ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_11);
+ StorageDead(_10);
+ StorageLive(_12);
+ StorageLive(_13);
+ _13 = _1;
+ StorageLive(_14);
+ _14 = _2;
+- _12 = unchecked_div::<i32>(move _13, move _14) -> [return: bb4, unwind unreachable];
++ _12 = Div(move _13, move _14);
++ goto -> bb4;
+ }
+
+ bb4: {
+ StorageDead(_14);
+ StorageDead(_13);
+ StorageLive(_15);
+ StorageLive(_16);
+ _16 = _1;
+ StorageLive(_17);
+ _17 = _2;
+- _15 = unchecked_rem::<i32>(move _16, move _17) -> [return: bb5, unwind unreachable];
++ _15 = Rem(move _16, move _17);
++ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_17);
+ StorageDead(_16);
+ StorageLive(_18);
+ StorageLive(_19);
+ _19 = _1;
+ StorageLive(_20);
+ _20 = _2;
+- _18 = unchecked_shl::<i32>(move _19, move _20) -> [return: bb6, unwind unreachable];
++ _18 = ShlUnchecked(move _19, move _20);
++ goto -> bb6;
+ }
+
+ bb6: {
+ StorageDead(_20);
+ StorageDead(_19);
+ StorageLive(_21);
+ StorageLive(_22);
+ _22 = _1;
+ StorageLive(_23);
+ _23 = _2;
+- _21 = unchecked_shr::<i32>(move _22, move _23) -> [return: bb7, unwind unreachable];
++ _21 = ShrUnchecked(move _22, move _23);
++ goto -> bb7;
+ }
+
+ bb7: {
+ StorageDead(_23);
+ StorageDead(_22);
+ _0 = const ();
+ StorageDead(_21);
+ StorageDead(_18);
+ StorageDead(_15);
+ StorageDead(_12);
+ StorageDead(_9);
+ StorageDead(_6);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.unchecked.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.unchecked.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..dd92b8d6d
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.unchecked.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,154 @@
+- // MIR for `unchecked` before LowerIntrinsics
++ // MIR for `unchecked` after LowerIntrinsics
+
+ fn unchecked(_1: i32, _2: i32) -> () {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: ();
+ let _3: i32;
+ let mut _4: i32;
+ let mut _5: i32;
+ let mut _7: i32;
+ let mut _8: i32;
+ let mut _10: i32;
+ let mut _11: i32;
+ let mut _13: i32;
+ let mut _14: i32;
+ let mut _16: i32;
+ let mut _17: i32;
+ let mut _19: i32;
+ let mut _20: i32;
+ let mut _22: i32;
+ let mut _23: i32;
+ scope 1 {
+ debug _a => _3;
+ let _6: i32;
+ scope 2 {
+ debug _b => _6;
+ let _9: i32;
+ scope 3 {
+ debug _c => _9;
+ let _12: i32;
+ scope 4 {
+ debug _x => _12;
+ let _15: i32;
+ scope 5 {
+ debug _y => _15;
+ let _18: i32;
+ scope 6 {
+ debug _i => _18;
+ let _21: i32;
+ scope 7 {
+ debug _j => _21;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ _5 = _2;
+- _3 = unchecked_add::<i32>(move _4, move _5) -> [return: bb1, unwind unreachable];
++ _3 = AddUnchecked(move _4, move _5);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = _1;
+ StorageLive(_8);
+ _8 = _2;
+- _6 = unchecked_sub::<i32>(move _7, move _8) -> [return: bb2, unwind unreachable];
++ _6 = SubUnchecked(move _7, move _8);
++ goto -> bb2;
+ }
+
+ bb2: {
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = _1;
+ StorageLive(_11);
+ _11 = _2;
+- _9 = unchecked_mul::<i32>(move _10, move _11) -> [return: bb3, unwind unreachable];
++ _9 = MulUnchecked(move _10, move _11);
++ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_11);
+ StorageDead(_10);
+ StorageLive(_12);
+ StorageLive(_13);
+ _13 = _1;
+ StorageLive(_14);
+ _14 = _2;
+- _12 = unchecked_div::<i32>(move _13, move _14) -> [return: bb4, unwind unreachable];
++ _12 = Div(move _13, move _14);
++ goto -> bb4;
+ }
+
+ bb4: {
+ StorageDead(_14);
+ StorageDead(_13);
+ StorageLive(_15);
+ StorageLive(_16);
+ _16 = _1;
+ StorageLive(_17);
+ _17 = _2;
+- _15 = unchecked_rem::<i32>(move _16, move _17) -> [return: bb5, unwind unreachable];
++ _15 = Rem(move _16, move _17);
++ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_17);
+ StorageDead(_16);
+ StorageLive(_18);
+ StorageLive(_19);
+ _19 = _1;
+ StorageLive(_20);
+ _20 = _2;
+- _18 = unchecked_shl::<i32>(move _19, move _20) -> [return: bb6, unwind unreachable];
++ _18 = ShlUnchecked(move _19, move _20);
++ goto -> bb6;
+ }
+
+ bb6: {
+ StorageDead(_20);
+ StorageDead(_19);
+ StorageLive(_21);
+ StorageLive(_22);
+ _22 = _1;
+ StorageLive(_23);
+ _23 = _2;
+- _21 = unchecked_shr::<i32>(move _22, move _23) -> [return: bb7, unwind unreachable];
++ _21 = ShrUnchecked(move _22, move _23);
++ goto -> bb7;
+ }
+
+ bb7: {
+ StorageDead(_23);
+ StorageDead(_22);
+ _0 = const ();
+ StorageDead(_21);
+ StorageDead(_18);
+ StorageDead(_15);
+ StorageDead(_12);
+ StorageDead(_9);
+ StorageDead(_6);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.diff
deleted file mode 100644
index 28e45909c..000000000
--- a/tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.diff
+++ /dev/null
@@ -1,21 +0,0 @@
-- // MIR for `unreachable` before LowerIntrinsics
-+ // MIR for `unreachable` after LowerIntrinsics
-
- fn unreachable() -> ! {
- let mut _0: !; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:25: +0:26
- let _1: (); // in scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:45
- let mut _2: !; // in scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:45
- scope 1 {
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:47
- StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45
-- _2 = std::intrinsics::unreachable() -> unwind unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:31:14: 31:43
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn() -> ! {std::intrinsics::unreachable}, val: Value(<ZST>) }
-+ unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..f5646e7f1
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,18 @@
+- // MIR for `unreachable` before LowerIntrinsics
++ // MIR for `unreachable` after LowerIntrinsics
+
+ fn unreachable() -> ! {
+ let mut _0: !;
+ let _1: ();
+ let mut _2: !;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = std::intrinsics::unreachable() -> unwind unreachable;
++ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..f5646e7f1
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,18 @@
+- // MIR for `unreachable` before LowerIntrinsics
++ // MIR for `unreachable` after LowerIntrinsics
+
+ fn unreachable() -> ! {
+ let mut _0: !;
+ let _1: ();
+ let mut _2: !;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = std::intrinsics::unreachable() -> unwind unreachable;
++ unreachable;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.diff
deleted file mode 100644
index 9cf4fbb88..000000000
--- a/tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.diff
+++ /dev/null
@@ -1,83 +0,0 @@
-- // MIR for `with_overflow` before LowerIntrinsics
-+ // MIR for `with_overflow` after LowerIntrinsics
-
- fn with_overflow(_1: i32, _2: i32) -> () {
- debug a => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:22: +0:23
- debug b => _2; // in scope 0 at $DIR/lower_intrinsics.rs:+0:30: +0:31
- let mut _0: (); // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:38: +0:38
- let _3: (i32, bool); // in scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:11
- let mut _4: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+1:50: +1:51
- let mut _5: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+1:53: +1:54
- let mut _7: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+2:50: +2:51
- let mut _8: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+2:53: +2:54
- let mut _10: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+3:50: +3:51
- let mut _11: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+3:53: +3:54
- scope 1 {
- debug _x => _3; // in scope 1 at $DIR/lower_intrinsics.rs:+1:9: +1:11
- let _6: (i32, bool); // in scope 1 at $DIR/lower_intrinsics.rs:+2:9: +2:11
- scope 2 {
- debug _y => _6; // in scope 2 at $DIR/lower_intrinsics.rs:+2:9: +2:11
- let _9: (i32, bool); // in scope 2 at $DIR/lower_intrinsics.rs:+3:9: +3:11
- scope 3 {
- debug _z => _9; // in scope 3 at $DIR/lower_intrinsics.rs:+3:9: +3:11
- }
- }
- }
-
- bb0: {
- StorageLive(_3); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:11
- StorageLive(_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:50: +1:51
- _4 = _1; // scope 0 at $DIR/lower_intrinsics.rs:+1:50: +1:51
- StorageLive(_5); // scope 0 at $DIR/lower_intrinsics.rs:+1:53: +1:54
- _5 = _2; // scope 0 at $DIR/lower_intrinsics.rs:+1:53: +1:54
-- _3 = add_with_overflow::<i32>(move _4, move _5) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:55
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:112:14: 112:49
-- // + literal: Const { ty: extern "rust-intrinsic" fn(i32, i32) -> (i32, bool) {add_with_overflow::<i32>}, val: Value(<ZST>) }
-+ _3 = CheckedAdd(move _4, move _5); // scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:55
-+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:55
- }
-
- bb1: {
- StorageDead(_5); // scope 0 at $DIR/lower_intrinsics.rs:+1:54: +1:55
- StorageDead(_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:54: +1:55
- StorageLive(_6); // scope 1 at $DIR/lower_intrinsics.rs:+2:9: +2:11
- StorageLive(_7); // scope 1 at $DIR/lower_intrinsics.rs:+2:50: +2:51
- _7 = _1; // scope 1 at $DIR/lower_intrinsics.rs:+2:50: +2:51
- StorageLive(_8); // scope 1 at $DIR/lower_intrinsics.rs:+2:53: +2:54
- _8 = _2; // scope 1 at $DIR/lower_intrinsics.rs:+2:53: +2:54
-- _6 = sub_with_overflow::<i32>(move _7, move _8) -> [return: bb2, unwind unreachable]; // scope 1 at $DIR/lower_intrinsics.rs:+2:14: +2:55
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:113:14: 113:49
-- // + literal: Const { ty: extern "rust-intrinsic" fn(i32, i32) -> (i32, bool) {sub_with_overflow::<i32>}, val: Value(<ZST>) }
-+ _6 = CheckedSub(move _7, move _8); // scope 1 at $DIR/lower_intrinsics.rs:+2:14: +2:55
-+ goto -> bb2; // scope 1 at $DIR/lower_intrinsics.rs:+2:14: +2:55
- }
-
- bb2: {
- StorageDead(_8); // scope 1 at $DIR/lower_intrinsics.rs:+2:54: +2:55
- StorageDead(_7); // scope 1 at $DIR/lower_intrinsics.rs:+2:54: +2:55
- StorageLive(_9); // scope 2 at $DIR/lower_intrinsics.rs:+3:9: +3:11
- StorageLive(_10); // scope 2 at $DIR/lower_intrinsics.rs:+3:50: +3:51
- _10 = _1; // scope 2 at $DIR/lower_intrinsics.rs:+3:50: +3:51
- StorageLive(_11); // scope 2 at $DIR/lower_intrinsics.rs:+3:53: +3:54
- _11 = _2; // scope 2 at $DIR/lower_intrinsics.rs:+3:53: +3:54
-- _9 = mul_with_overflow::<i32>(move _10, move _11) -> [return: bb3, unwind unreachable]; // scope 2 at $DIR/lower_intrinsics.rs:+3:14: +3:55
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:114:14: 114:49
-- // + literal: Const { ty: extern "rust-intrinsic" fn(i32, i32) -> (i32, bool) {mul_with_overflow::<i32>}, val: Value(<ZST>) }
-+ _9 = CheckedMul(move _10, move _11); // scope 2 at $DIR/lower_intrinsics.rs:+3:14: +3:55
-+ goto -> bb3; // scope 2 at $DIR/lower_intrinsics.rs:+3:14: +3:55
- }
-
- bb3: {
- StorageDead(_11); // scope 2 at $DIR/lower_intrinsics.rs:+3:54: +3:55
- StorageDead(_10); // scope 2 at $DIR/lower_intrinsics.rs:+3:54: +3:55
- _0 = const (); // scope 0 at $DIR/lower_intrinsics.rs:+0:38: +4:2
- StorageDead(_9); // scope 2 at $DIR/lower_intrinsics.rs:+4:1: +4:2
- StorageDead(_6); // scope 1 at $DIR/lower_intrinsics.rs:+4:1: +4:2
- StorageDead(_3); // scope 0 at $DIR/lower_intrinsics.rs:+4:1: +4:2
- return; // scope 0 at $DIR/lower_intrinsics.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..da84449aa
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,74 @@
+- // MIR for `with_overflow` before LowerIntrinsics
++ // MIR for `with_overflow` after LowerIntrinsics
+
+ fn with_overflow(_1: i32, _2: i32) -> () {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: ();
+ let _3: (i32, bool);
+ let mut _4: i32;
+ let mut _5: i32;
+ let mut _7: i32;
+ let mut _8: i32;
+ let mut _10: i32;
+ let mut _11: i32;
+ scope 1 {
+ debug _x => _3;
+ let _6: (i32, bool);
+ scope 2 {
+ debug _y => _6;
+ let _9: (i32, bool);
+ scope 3 {
+ debug _z => _9;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ _5 = _2;
+- _3 = add_with_overflow::<i32>(move _4, move _5) -> [return: bb1, unwind unreachable];
++ _3 = CheckedAdd(move _4, move _5);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = _1;
+ StorageLive(_8);
+ _8 = _2;
+- _6 = sub_with_overflow::<i32>(move _7, move _8) -> [return: bb2, unwind unreachable];
++ _6 = CheckedSub(move _7, move _8);
++ goto -> bb2;
+ }
+
+ bb2: {
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = _1;
+ StorageLive(_11);
+ _11 = _2;
+- _9 = mul_with_overflow::<i32>(move _10, move _11) -> [return: bb3, unwind unreachable];
++ _9 = CheckedMul(move _10, move _11);
++ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_11);
+ StorageDead(_10);
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_6);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..da84449aa
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,74 @@
+- // MIR for `with_overflow` before LowerIntrinsics
++ // MIR for `with_overflow` after LowerIntrinsics
+
+ fn with_overflow(_1: i32, _2: i32) -> () {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: ();
+ let _3: (i32, bool);
+ let mut _4: i32;
+ let mut _5: i32;
+ let mut _7: i32;
+ let mut _8: i32;
+ let mut _10: i32;
+ let mut _11: i32;
+ scope 1 {
+ debug _x => _3;
+ let _6: (i32, bool);
+ scope 2 {
+ debug _y => _6;
+ let _9: (i32, bool);
+ scope 3 {
+ debug _z => _9;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ _5 = _2;
+- _3 = add_with_overflow::<i32>(move _4, move _5) -> [return: bb1, unwind unreachable];
++ _3 = CheckedAdd(move _4, move _5);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = _1;
+ StorageLive(_8);
+ _8 = _2;
+- _6 = sub_with_overflow::<i32>(move _7, move _8) -> [return: bb2, unwind unreachable];
++ _6 = CheckedSub(move _7, move _8);
++ goto -> bb2;
+ }
+
+ bb2: {
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = _1;
+ StorageLive(_11);
+ _11 = _2;
+- _9 = mul_with_overflow::<i32>(move _10, move _11) -> [return: bb3, unwind unreachable];
++ _9 = CheckedMul(move _10, move _11);
++ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_11);
+ StorageDead(_10);
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_6);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.diff
deleted file mode 100644
index 217f27efe..000000000
--- a/tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.diff
+++ /dev/null
@@ -1,83 +0,0 @@
-- // MIR for `wrapping` before LowerIntrinsics
-+ // MIR for `wrapping` after LowerIntrinsics
-
- fn wrapping(_1: i32, _2: i32) -> () {
- debug a => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:17: +0:18
- debug b => _2; // in scope 0 at $DIR/lower_intrinsics.rs:+0:25: +0:26
- let mut _0: (); // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:33: +0:33
- let _3: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:11
- let mut _4: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+1:45: +1:46
- let mut _5: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+1:48: +1:49
- let mut _7: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+2:45: +2:46
- let mut _8: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+2:48: +2:49
- let mut _10: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+3:45: +3:46
- let mut _11: i32; // in scope 0 at $DIR/lower_intrinsics.rs:+3:48: +3:49
- scope 1 {
- debug _x => _3; // in scope 1 at $DIR/lower_intrinsics.rs:+1:9: +1:11
- let _6: i32; // in scope 1 at $DIR/lower_intrinsics.rs:+2:9: +2:11
- scope 2 {
- debug _y => _6; // in scope 2 at $DIR/lower_intrinsics.rs:+2:9: +2:11
- let _9: i32; // in scope 2 at $DIR/lower_intrinsics.rs:+3:9: +3:11
- scope 3 {
- debug _z => _9; // in scope 3 at $DIR/lower_intrinsics.rs:+3:9: +3:11
- }
- }
- }
-
- bb0: {
- StorageLive(_3); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:11
- StorageLive(_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:45: +1:46
- _4 = _1; // scope 0 at $DIR/lower_intrinsics.rs:+1:45: +1:46
- StorageLive(_5); // scope 0 at $DIR/lower_intrinsics.rs:+1:48: +1:49
- _5 = _2; // scope 0 at $DIR/lower_intrinsics.rs:+1:48: +1:49
-- _3 = std::intrinsics::wrapping_add::<i32>(move _4, move _5) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:50
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:9:14: 9:44
-- // + literal: Const { ty: extern "rust-intrinsic" fn(i32, i32) -> i32 {std::intrinsics::wrapping_add::<i32>}, val: Value(<ZST>) }
-+ _3 = Add(move _4, move _5); // scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:50
-+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:50
- }
-
- bb1: {
- StorageDead(_5); // scope 0 at $DIR/lower_intrinsics.rs:+1:49: +1:50
- StorageDead(_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:49: +1:50
- StorageLive(_6); // scope 1 at $DIR/lower_intrinsics.rs:+2:9: +2:11
- StorageLive(_7); // scope 1 at $DIR/lower_intrinsics.rs:+2:45: +2:46
- _7 = _1; // scope 1 at $DIR/lower_intrinsics.rs:+2:45: +2:46
- StorageLive(_8); // scope 1 at $DIR/lower_intrinsics.rs:+2:48: +2:49
- _8 = _2; // scope 1 at $DIR/lower_intrinsics.rs:+2:48: +2:49
-- _6 = std::intrinsics::wrapping_sub::<i32>(move _7, move _8) -> [return: bb2, unwind unreachable]; // scope 1 at $DIR/lower_intrinsics.rs:+2:14: +2:50
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:10:14: 10:44
-- // + literal: Const { ty: extern "rust-intrinsic" fn(i32, i32) -> i32 {std::intrinsics::wrapping_sub::<i32>}, val: Value(<ZST>) }
-+ _6 = Sub(move _7, move _8); // scope 1 at $DIR/lower_intrinsics.rs:+2:14: +2:50
-+ goto -> bb2; // scope 1 at $DIR/lower_intrinsics.rs:+2:14: +2:50
- }
-
- bb2: {
- StorageDead(_8); // scope 1 at $DIR/lower_intrinsics.rs:+2:49: +2:50
- StorageDead(_7); // scope 1 at $DIR/lower_intrinsics.rs:+2:49: +2:50
- StorageLive(_9); // scope 2 at $DIR/lower_intrinsics.rs:+3:9: +3:11
- StorageLive(_10); // scope 2 at $DIR/lower_intrinsics.rs:+3:45: +3:46
- _10 = _1; // scope 2 at $DIR/lower_intrinsics.rs:+3:45: +3:46
- StorageLive(_11); // scope 2 at $DIR/lower_intrinsics.rs:+3:48: +3:49
- _11 = _2; // scope 2 at $DIR/lower_intrinsics.rs:+3:48: +3:49
-- _9 = wrapping_mul::<i32>(move _10, move _11) -> [return: bb3, unwind unreachable]; // scope 2 at $DIR/lower_intrinsics.rs:+3:14: +3:50
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:11:14: 11:44
-- // + literal: Const { ty: extern "rust-intrinsic" fn(i32, i32) -> i32 {wrapping_mul::<i32>}, val: Value(<ZST>) }
-+ _9 = Mul(move _10, move _11); // scope 2 at $DIR/lower_intrinsics.rs:+3:14: +3:50
-+ goto -> bb3; // scope 2 at $DIR/lower_intrinsics.rs:+3:14: +3:50
- }
-
- bb3: {
- StorageDead(_11); // scope 2 at $DIR/lower_intrinsics.rs:+3:49: +3:50
- StorageDead(_10); // scope 2 at $DIR/lower_intrinsics.rs:+3:49: +3:50
- _0 = const (); // scope 0 at $DIR/lower_intrinsics.rs:+0:33: +4:2
- StorageDead(_9); // scope 2 at $DIR/lower_intrinsics.rs:+4:1: +4:2
- StorageDead(_6); // scope 1 at $DIR/lower_intrinsics.rs:+4:1: +4:2
- StorageDead(_3); // scope 0 at $DIR/lower_intrinsics.rs:+4:1: +4:2
- return; // scope 0 at $DIR/lower_intrinsics.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..2acb193e0
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,74 @@
+- // MIR for `wrapping` before LowerIntrinsics
++ // MIR for `wrapping` after LowerIntrinsics
+
+ fn wrapping(_1: i32, _2: i32) -> () {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: ();
+ let _3: i32;
+ let mut _4: i32;
+ let mut _5: i32;
+ let mut _7: i32;
+ let mut _8: i32;
+ let mut _10: i32;
+ let mut _11: i32;
+ scope 1 {
+ debug _x => _3;
+ let _6: i32;
+ scope 2 {
+ debug _y => _6;
+ let _9: i32;
+ scope 3 {
+ debug _z => _9;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ _5 = _2;
+- _3 = std::intrinsics::wrapping_add::<i32>(move _4, move _5) -> [return: bb1, unwind unreachable];
++ _3 = Add(move _4, move _5);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = _1;
+ StorageLive(_8);
+ _8 = _2;
+- _6 = std::intrinsics::wrapping_sub::<i32>(move _7, move _8) -> [return: bb2, unwind unreachable];
++ _6 = Sub(move _7, move _8);
++ goto -> bb2;
+ }
+
+ bb2: {
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = _1;
+ StorageLive(_11);
+ _11 = _2;
+- _9 = wrapping_mul::<i32>(move _10, move _11) -> [return: bb3, unwind unreachable];
++ _9 = Mul(move _10, move _11);
++ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_11);
+ StorageDead(_10);
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_6);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..2acb193e0
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,74 @@
+- // MIR for `wrapping` before LowerIntrinsics
++ // MIR for `wrapping` after LowerIntrinsics
+
+ fn wrapping(_1: i32, _2: i32) -> () {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: ();
+ let _3: i32;
+ let mut _4: i32;
+ let mut _5: i32;
+ let mut _7: i32;
+ let mut _8: i32;
+ let mut _10: i32;
+ let mut _11: i32;
+ scope 1 {
+ debug _x => _3;
+ let _6: i32;
+ scope 2 {
+ debug _y => _6;
+ let _9: i32;
+ scope 3 {
+ debug _z => _9;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ _5 = _2;
+- _3 = std::intrinsics::wrapping_add::<i32>(move _4, move _5) -> [return: bb1, unwind unreachable];
++ _3 = Add(move _4, move _5);
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = _1;
+ StorageLive(_8);
+ _8 = _2;
+- _6 = std::intrinsics::wrapping_sub::<i32>(move _7, move _8) -> [return: bb2, unwind unreachable];
++ _6 = Sub(move _7, move _8);
++ goto -> bb2;
+ }
+
+ bb2: {
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = _1;
+ StorageLive(_11);
+ _11 = _2;
+- _9 = wrapping_mul::<i32>(move _10, move _11) -> [return: bb3, unwind unreachable];
++ _9 = Mul(move _10, move _11);
++ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_11);
+ StorageDead(_10);
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_6);
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.diff b/tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.diff
deleted file mode 100644
index 38d99f661..000000000
--- a/tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.diff
+++ /dev/null
@@ -1,36 +0,0 @@
-- // MIR for `write_via_move_string` before LowerIntrinsics
-+ // MIR for `write_via_move_string` after LowerIntrinsics
-
- fn write_via_move_string(_1: &mut String, _2: String) -> () {
- debug r => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:30: +0:31
- debug v => _2; // in scope 0 at $DIR/lower_intrinsics.rs:+0:46: +0:47
- let mut _0: (); // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:57: +0:57
- let mut _3: *mut std::string::String; // in scope 0 at $DIR/lower_intrinsics.rs:+1:47: +1:48
- let mut _4: std::string::String; // in scope 0 at $DIR/lower_intrinsics.rs:+1:50: +1:51
- scope 1 {
- }
-
- bb0: {
- StorageLive(_3); // scope 1 at $DIR/lower_intrinsics.rs:+1:47: +1:48
- _3 = &raw mut (*_1); // scope 1 at $DIR/lower_intrinsics.rs:+1:47: +1:48
- StorageLive(_4); // scope 1 at $DIR/lower_intrinsics.rs:+1:50: +1:51
- _4 = move _2; // scope 1 at $DIR/lower_intrinsics.rs:+1:50: +1:51
-- _0 = write_via_move::<String>(move _3, move _4) -> [return: bb1, unwind unreachable]; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:52
-- // mir::Constant
-- // + span: $DIR/lower_intrinsics.rs:129:14: 129:46
-- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(*mut String, String) {write_via_move::<String>}, val: Value(<ZST>) }
-+ (*_3) = move _4; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:52
-+ goto -> bb1; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:52
- }
-
- bb1: {
- StorageDead(_4); // scope 1 at $DIR/lower_intrinsics.rs:+1:51: +1:52
- StorageDead(_3); // scope 1 at $DIR/lower_intrinsics.rs:+1:51: +1:52
- goto -> bb2; // scope 0 at $DIR/lower_intrinsics.rs:+2:1: +2:2
- }
-
- bb2: {
- return; // scope 0 at $DIR/lower_intrinsics.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.panic-abort.diff
new file mode 100644
index 000000000..ddc8cf9a3
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.panic-abort.diff
@@ -0,0 +1,33 @@
+- // MIR for `write_via_move_string` before LowerIntrinsics
++ // MIR for `write_via_move_string` after LowerIntrinsics
+
+ fn write_via_move_string(_1: &mut String, _2: String) -> () {
+ debug r => _1;
+ debug v => _2;
+ let mut _0: ();
+ let mut _3: *mut std::string::String;
+ let mut _4: std::string::String;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = &raw mut (*_1);
+ StorageLive(_4);
+ _4 = move _2;
+- _0 = write_via_move::<String>(move _3, move _4) -> [return: bb1, unwind unreachable];
++ (*_3) = move _4;
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_4);
+ StorageDead(_3);
+ goto -> bb2;
+ }
+
+ bb2: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.panic-unwind.diff
new file mode 100644
index 000000000..ddc8cf9a3
--- /dev/null
+++ b/tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.panic-unwind.diff
@@ -0,0 +1,33 @@
+- // MIR for `write_via_move_string` before LowerIntrinsics
++ // MIR for `write_via_move_string` after LowerIntrinsics
+
+ fn write_via_move_string(_1: &mut String, _2: String) -> () {
+ debug r => _1;
+ debug v => _2;
+ let mut _0: ();
+ let mut _3: *mut std::string::String;
+ let mut _4: std::string::String;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = &raw mut (*_1);
+ StorageLive(_4);
+ _4 = move _2;
+- _0 = write_via_move::<String>(move _3, move _4) -> [return: bb1, unwind unreachable];
++ (*_3) = move _4;
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_4);
+ StorageDead(_3);
+ goto -> bb2;
+ }
+
+ bb2: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.diff b/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.diff
deleted file mode 100644
index 67918e62b..000000000
--- a/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.diff
+++ /dev/null
@@ -1,63 +0,0 @@
-- // MIR for `bound` before LowerSliceLenCalls
-+ // MIR for `bound` after LowerSliceLenCalls
-
- fn bound(_1: usize, _2: &[u8]) -> u8 {
- debug index => _1; // in scope 0 at $DIR/lower_slice_len.rs:+0:14: +0:19
- debug slice => _2; // in scope 0 at $DIR/lower_slice_len.rs:+0:28: +0:33
- let mut _0: u8; // return place in scope 0 at $DIR/lower_slice_len.rs:+0:45: +0:47
- let mut _3: bool; // in scope 0 at $DIR/lower_slice_len.rs:+1:8: +1:27
- let mut _4: usize; // in scope 0 at $DIR/lower_slice_len.rs:+1:8: +1:13
- let mut _5: usize; // in scope 0 at $DIR/lower_slice_len.rs:+1:16: +1:27
- let mut _6: &[u8]; // in scope 0 at $DIR/lower_slice_len.rs:+1:16: +1:27
- let _7: usize; // in scope 0 at $DIR/lower_slice_len.rs:+2:15: +2:20
- let mut _8: usize; // in scope 0 at $DIR/lower_slice_len.rs:+2:9: +2:21
- let mut _9: bool; // in scope 0 at $DIR/lower_slice_len.rs:+2:9: +2:21
-
- bb0: {
- StorageLive(_3); // scope 0 at $DIR/lower_slice_len.rs:+1:8: +1:27
- StorageLive(_4); // scope 0 at $DIR/lower_slice_len.rs:+1:8: +1:13
- _4 = _1; // scope 0 at $DIR/lower_slice_len.rs:+1:8: +1:13
- StorageLive(_5); // scope 0 at $DIR/lower_slice_len.rs:+1:16: +1:27
- StorageLive(_6); // scope 0 at $DIR/lower_slice_len.rs:+1:16: +1:27
- _6 = &(*_2); // scope 0 at $DIR/lower_slice_len.rs:+1:16: +1:27
-- _5 = core::slice::<impl [u8]>::len(move _6) -> bb1; // scope 0 at $DIR/lower_slice_len.rs:+1:16: +1:27
-- // mir::Constant
-- // + span: $DIR/lower_slice_len.rs:6:22: 6:25
-- // + literal: Const { ty: for<'a> fn(&'a [u8]) -> usize {core::slice::<impl [u8]>::len}, val: Value(<ZST>) }
-+ _5 = Len((*_6)); // scope 0 at $DIR/lower_slice_len.rs:+1:16: +1:27
-+ goto -> bb1; // scope 0 at $DIR/lower_slice_len.rs:+1:16: +1:27
- }
-
- bb1: {
- StorageDead(_6); // scope 0 at $DIR/lower_slice_len.rs:+1:26: +1:27
- _3 = Lt(move _4, move _5); // scope 0 at $DIR/lower_slice_len.rs:+1:8: +1:27
- StorageDead(_5); // scope 0 at $DIR/lower_slice_len.rs:+1:26: +1:27
- StorageDead(_4); // scope 0 at $DIR/lower_slice_len.rs:+1:26: +1:27
- switchInt(move _3) -> [0: bb4, otherwise: bb2]; // scope 0 at $DIR/lower_slice_len.rs:+1:8: +1:27
- }
-
- bb2: {
- StorageLive(_7); // scope 0 at $DIR/lower_slice_len.rs:+2:15: +2:20
- _7 = _1; // scope 0 at $DIR/lower_slice_len.rs:+2:15: +2:20
- _8 = Len((*_2)); // scope 0 at $DIR/lower_slice_len.rs:+2:9: +2:21
- _9 = Lt(_7, _8); // scope 0 at $DIR/lower_slice_len.rs:+2:9: +2:21
- assert(move _9, "index out of bounds: the length is {} but the index is {}", move _8, _7) -> bb3; // scope 0 at $DIR/lower_slice_len.rs:+2:9: +2:21
- }
-
- bb3: {
- _0 = (*_2)[_7]; // scope 0 at $DIR/lower_slice_len.rs:+2:9: +2:21
- StorageDead(_7); // scope 0 at $DIR/lower_slice_len.rs:+3:5: +3:6
- goto -> bb5; // scope 0 at $DIR/lower_slice_len.rs:+1:5: +5:6
- }
-
- bb4: {
- _0 = const 42_u8; // scope 0 at $DIR/lower_slice_len.rs:+4:9: +4:11
- goto -> bb5; // scope 0 at $DIR/lower_slice_len.rs:+1:5: +5:6
- }
-
- bb5: {
- StorageDead(_3); // scope 0 at $DIR/lower_slice_len.rs:+5:5: +5:6
- return; // scope 0 at $DIR/lower_slice_len.rs:+6:2: +6:2
- }
- }
-
diff --git a/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-abort.diff b/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-abort.diff
new file mode 100644
index 000000000..70b33fb70
--- /dev/null
+++ b/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-abort.diff
@@ -0,0 +1,60 @@
+- // MIR for `bound` before LowerSliceLenCalls
++ // MIR for `bound` after LowerSliceLenCalls
+
+ fn bound(_1: usize, _2: &[u8]) -> u8 {
+ debug index => _1;
+ debug slice => _2;
+ let mut _0: u8;
+ let mut _3: bool;
+ let mut _4: usize;
+ let mut _5: usize;
+ let mut _6: &[u8];
+ let _7: usize;
+ let mut _8: usize;
+ let mut _9: bool;
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = &(*_2);
+- _5 = core::slice::<impl [u8]>::len(move _6) -> [return: bb1, unwind unreachable];
++ _5 = Len((*_6));
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_6);
+ _3 = Lt(move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ switchInt(move _3) -> [0: bb4, otherwise: bb2];
+ }
+
+ bb2: {
+ StorageLive(_7);
+ _7 = _1;
+ _8 = Len((*_2));
+ _9 = Lt(_7, _8);
+ assert(move _9, "index out of bounds: the length is {} but the index is {}", move _8, _7) -> [success: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ _0 = (*_2)[_7];
+ StorageDead(_7);
+ goto -> bb5;
+ }
+
+ bb4: {
+ _0 = const 42_u8;
+ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-unwind.diff b/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-unwind.diff
new file mode 100644
index 000000000..310b3b26a
--- /dev/null
+++ b/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-unwind.diff
@@ -0,0 +1,60 @@
+- // MIR for `bound` before LowerSliceLenCalls
++ // MIR for `bound` after LowerSliceLenCalls
+
+ fn bound(_1: usize, _2: &[u8]) -> u8 {
+ debug index => _1;
+ debug slice => _2;
+ let mut _0: u8;
+ let mut _3: bool;
+ let mut _4: usize;
+ let mut _5: usize;
+ let mut _6: &[u8];
+ let _7: usize;
+ let mut _8: usize;
+ let mut _9: bool;
+
+ bb0: {
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = &(*_2);
+- _5 = core::slice::<impl [u8]>::len(move _6) -> [return: bb1, unwind continue];
++ _5 = Len((*_6));
++ goto -> bb1;
+ }
+
+ bb1: {
+ StorageDead(_6);
+ _3 = Lt(move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ switchInt(move _3) -> [0: bb4, otherwise: bb2];
+ }
+
+ bb2: {
+ StorageLive(_7);
+ _7 = _1;
+ _8 = Len((*_2));
+ _9 = Lt(_7, _8);
+ assert(move _9, "index out of bounds: the length is {} but the index is {}", move _8, _7) -> [success: bb3, unwind continue];
+ }
+
+ bb3: {
+ _0 = (*_2)[_7];
+ StorageDead(_7);
+ goto -> bb5;
+ }
+
+ bb4: {
+ _0 = const 42_u8;
+ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_3);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/lower_slice_len.rs b/tests/mir-opt/lower_slice_len.rs
index 9c39c29fc..b0c512aec 100644
--- a/tests/mir-opt/lower_slice_len.rs
+++ b/tests/mir-opt/lower_slice_len.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: LowerSliceLenCalls
// EMIT_MIR lower_slice_len.bound.LowerSliceLenCalls.diff
diff --git a/tests/mir-opt/match_arm_scopes.complicated_match.SimplifyCfg-initial.after-ElaborateDrops.after.diff b/tests/mir-opt/match_arm_scopes.complicated_match.SimplifyCfg-initial.after-ElaborateDrops.after.diff
deleted file mode 100644
index 3081e78f2..000000000
--- a/tests/mir-opt/match_arm_scopes.complicated_match.SimplifyCfg-initial.after-ElaborateDrops.after.diff
+++ /dev/null
@@ -1,272 +0,0 @@
-- // MIR for `complicated_match` after SimplifyCfg-initial
-+ // MIR for `complicated_match` after ElaborateDrops
-
- fn complicated_match(_1: bool, _2: (bool, bool, String)) -> i32 {
- debug cond => _1; // in scope 0 at $DIR/match_arm_scopes.rs:+0:22: +0:26
- debug items => _2; // in scope 0 at $DIR/match_arm_scopes.rs:+0:34: +0:39
- let mut _0: i32; // return place in scope 0 at $DIR/match_arm_scopes.rs:+0:66: +0:69
- let mut _3: &bool; // in scope 0 at $DIR/match_arm_scopes.rs:+1:11: +1:16
- let mut _4: &bool; // in scope 0 at $DIR/match_arm_scopes.rs:+1:11: +1:16
- let _5: bool; // in scope 0 at $DIR/match_arm_scopes.rs:+2:17: +2:18
- let _6: &bool; // in scope 0 at $DIR/match_arm_scopes.rs:+2:17: +2:18
- let _7: std::string::String; // in scope 0 at $DIR/match_arm_scopes.rs:+2:20: +2:21
- let _8: &std::string::String; // in scope 0 at $DIR/match_arm_scopes.rs:+2:20: +2:21
- let mut _9: bool; // in scope 0 at $DIR/match_arm_scopes.rs:+2:42: +2:73
- let mut _10: bool; // in scope 0 at $DIR/match_arm_scopes.rs:+2:45: +2:49
- let mut _11: !; // in scope 0 at $DIR/match_arm_scopes.rs:+2:52: +2:60
- let mut _12: bool; // in scope 0 at $DIR/match_arm_scopes.rs:+2:42: +2:73
- let mut _13: bool; // in scope 0 at $DIR/match_arm_scopes.rs:+2:45: +2:49
- let mut _14: !; // in scope 0 at $DIR/match_arm_scopes.rs:+2:52: +2:60
- let _15: bool; // in scope 0 at $DIR/match_arm_scopes.rs:+3:16: +3:17
- let _16: std::string::String; // in scope 0 at $DIR/match_arm_scopes.rs:+3:19: +3:20
- scope 1 {
- debug a => _5; // in scope 1 at $DIR/match_arm_scopes.rs:+2:17: +2:18
- debug a => _6; // in scope 1 at $DIR/match_arm_scopes.rs:+2:17: +2:18
- debug s => _7; // in scope 1 at $DIR/match_arm_scopes.rs:+2:20: +2:21
- debug s => _8; // in scope 1 at $DIR/match_arm_scopes.rs:+2:20: +2:21
- }
- scope 2 {
- debug b => _15; // in scope 2 at $DIR/match_arm_scopes.rs:+3:16: +3:17
- debug t => _16; // in scope 2 at $DIR/match_arm_scopes.rs:+3:19: +3:20
- }
-
- bb0: {
-- FakeRead(ForMatchedPlace(None), _2); // scope 0 at $DIR/match_arm_scopes.rs:+1:11: +1:16
-- switchInt((_2.0: bool)) -> [0: bb1, otherwise: bb2]; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +1:16
-+ switchInt((_2.0: bool)) -> [0: bb5, otherwise: bb1]; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +1:16
- }
-
- bb1: {
-- falseEdge -> [real: bb8, imaginary: bb3]; // scope 0 at $DIR/match_arm_scopes.rs:+2:9: +2:22
-+ switchInt((_2.1: bool)) -> [0: bb10, otherwise: bb2]; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +1:16
- }
-
- bb2: {
-- switchInt((_2.1: bool)) -> [0: bb3, otherwise: bb4]; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +1:16
-+ switchInt((_2.0: bool)) -> [0: bb3, otherwise: bb17]; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +1:16
- }
-
- bb3: {
-- falseEdge -> [real: bb13, imaginary: bb5]; // scope 0 at $DIR/match_arm_scopes.rs:+2:25: +2:38
-- }
--
-- bb4: {
-- switchInt((_2.0: bool)) -> [0: bb6, otherwise: bb5]; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +1:16
-- }
--
-- bb5: {
-- falseEdge -> [real: bb20, imaginary: bb6]; // scope 0 at $DIR/match_arm_scopes.rs:+3:9: +3:21
-- }
--
-- bb6: {
- StorageLive(_15); // scope 0 at $DIR/match_arm_scopes.rs:+3:32: +3:33
- _15 = (_2.1: bool); // scope 0 at $DIR/match_arm_scopes.rs:+3:32: +3:33
- StorageLive(_16); // scope 0 at $DIR/match_arm_scopes.rs:+3:35: +3:36
- _16 = move (_2.2: std::string::String); // scope 0 at $DIR/match_arm_scopes.rs:+3:35: +3:36
-- goto -> bb19; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +4:6
-+ goto -> bb16; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +4:6
- }
-
-- bb7: {
-+ bb4: {
- _0 = const 1_i32; // scope 1 at $DIR/match_arm_scopes.rs:+2:77: +2:78
-- drop(_7) -> [return: bb18, unwind: bb25]; // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
-+ drop(_7) -> [return: bb15, unwind: bb22]; // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
- }
-
-- bb8: {
-+ bb5: {
- StorageLive(_6); // scope 0 at $DIR/match_arm_scopes.rs:+2:17: +2:18
- _6 = &(_2.1: bool); // scope 0 at $DIR/match_arm_scopes.rs:+2:17: +2:18
- StorageLive(_8); // scope 0 at $DIR/match_arm_scopes.rs:+2:20: +2:21
- _8 = &(_2.2: std::string::String); // scope 0 at $DIR/match_arm_scopes.rs:+2:20: +2:21
-- _3 = &shallow (_2.0: bool); // scope 0 at $DIR/match_arm_scopes.rs:+1:11: +1:16
-- _4 = &shallow (_2.1: bool); // scope 0 at $DIR/match_arm_scopes.rs:+1:11: +1:16
- StorageLive(_9); // scope 0 at $DIR/match_arm_scopes.rs:+2:42: +2:73
- StorageLive(_10); // scope 0 at $DIR/match_arm_scopes.rs:+2:45: +2:49
- _10 = _1; // scope 0 at $DIR/match_arm_scopes.rs:+2:45: +2:49
-- switchInt(move _10) -> [0: bb10, otherwise: bb9]; // scope 0 at $DIR/match_arm_scopes.rs:+2:45: +2:49
-+ switchInt(move _10) -> [0: bb7, otherwise: bb6]; // scope 0 at $DIR/match_arm_scopes.rs:+2:45: +2:49
- }
-
-- bb9: {
-+ bb6: {
- _0 = const 3_i32; // scope 0 at $DIR/match_arm_scopes.rs:+2:59: +2:60
- StorageDead(_10); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
- StorageDead(_9); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
-- goto -> bb23; // scope 0 at no-location
-+ goto -> bb20; // scope 0 at no-location
- }
-
-- bb10: {
-+ bb7: {
- _9 = (*_6); // scope 0 at $DIR/match_arm_scopes.rs:+2:70: +2:71
-- switchInt(move _9) -> [0: bb12, otherwise: bb11]; // scope 0 at $DIR/match_arm_scopes.rs:+2:42: +2:73
-+ switchInt(move _9) -> [0: bb9, otherwise: bb8]; // scope 0 at $DIR/match_arm_scopes.rs:+2:42: +2:73
- }
-
-- bb11: {
-+ bb8: {
- StorageDead(_10); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
- StorageDead(_9); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
-- FakeRead(ForMatchGuard, _3); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
-- FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
-- FakeRead(ForGuardBinding, _6); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
-- FakeRead(ForGuardBinding, _8); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
- StorageLive(_5); // scope 0 at $DIR/match_arm_scopes.rs:+2:17: +2:18
- _5 = (_2.1: bool); // scope 0 at $DIR/match_arm_scopes.rs:+2:17: +2:18
- StorageLive(_7); // scope 0 at $DIR/match_arm_scopes.rs:+2:20: +2:21
- _7 = move (_2.2: std::string::String); // scope 0 at $DIR/match_arm_scopes.rs:+2:20: +2:21
-- goto -> bb7; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +4:6
-+ goto -> bb4; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +4:6
- }
-
-- bb12: {
-+ bb9: {
- StorageDead(_10); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
- StorageDead(_9); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
- StorageDead(_8); // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
- StorageDead(_6); // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
-- falseEdge -> [real: bb2, imaginary: bb3]; // scope 0 at $DIR/match_arm_scopes.rs:+2:42: +2:73
-+ goto -> bb1; // scope 0 at $DIR/match_arm_scopes.rs:+2:42: +2:73
- }
-
-- bb13: {
-+ bb10: {
- StorageLive(_6); // scope 0 at $DIR/match_arm_scopes.rs:+2:26: +2:27
- _6 = &(_2.0: bool); // scope 0 at $DIR/match_arm_scopes.rs:+2:26: +2:27
- StorageLive(_8); // scope 0 at $DIR/match_arm_scopes.rs:+2:36: +2:37
- _8 = &(_2.2: std::string::String); // scope 0 at $DIR/match_arm_scopes.rs:+2:36: +2:37
-- _3 = &shallow (_2.0: bool); // scope 0 at $DIR/match_arm_scopes.rs:+1:11: +1:16
-- _4 = &shallow (_2.1: bool); // scope 0 at $DIR/match_arm_scopes.rs:+1:11: +1:16
- StorageLive(_12); // scope 0 at $DIR/match_arm_scopes.rs:+2:42: +2:73
- StorageLive(_13); // scope 0 at $DIR/match_arm_scopes.rs:+2:45: +2:49
- _13 = _1; // scope 0 at $DIR/match_arm_scopes.rs:+2:45: +2:49
-- switchInt(move _13) -> [0: bb15, otherwise: bb14]; // scope 0 at $DIR/match_arm_scopes.rs:+2:45: +2:49
-+ switchInt(move _13) -> [0: bb12, otherwise: bb11]; // scope 0 at $DIR/match_arm_scopes.rs:+2:45: +2:49
- }
-
-- bb14: {
-+ bb11: {
- _0 = const 3_i32; // scope 0 at $DIR/match_arm_scopes.rs:+2:59: +2:60
- StorageDead(_13); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
- StorageDead(_12); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
-- goto -> bb23; // scope 0 at no-location
-+ goto -> bb20; // scope 0 at no-location
- }
-
-- bb15: {
-+ bb12: {
- _12 = (*_6); // scope 0 at $DIR/match_arm_scopes.rs:+2:70: +2:71
-- switchInt(move _12) -> [0: bb17, otherwise: bb16]; // scope 0 at $DIR/match_arm_scopes.rs:+2:42: +2:73
-+ switchInt(move _12) -> [0: bb14, otherwise: bb13]; // scope 0 at $DIR/match_arm_scopes.rs:+2:42: +2:73
- }
-
-- bb16: {
-+ bb13: {
- StorageDead(_13); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
- StorageDead(_12); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
-- FakeRead(ForMatchGuard, _3); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
-- FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
-- FakeRead(ForGuardBinding, _6); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
-- FakeRead(ForGuardBinding, _8); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
- StorageLive(_5); // scope 0 at $DIR/match_arm_scopes.rs:+2:26: +2:27
- _5 = (_2.0: bool); // scope 0 at $DIR/match_arm_scopes.rs:+2:26: +2:27
- StorageLive(_7); // scope 0 at $DIR/match_arm_scopes.rs:+2:36: +2:37
- _7 = move (_2.2: std::string::String); // scope 0 at $DIR/match_arm_scopes.rs:+2:36: +2:37
-- goto -> bb7; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +4:6
-+ goto -> bb4; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +4:6
- }
-
-- bb17: {
-+ bb14: {
- StorageDead(_13); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
- StorageDead(_12); // scope 0 at $DIR/match_arm_scopes.rs:+2:72: +2:73
- StorageDead(_8); // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
- StorageDead(_6); // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
-- falseEdge -> [real: bb4, imaginary: bb5]; // scope 0 at $DIR/match_arm_scopes.rs:+2:42: +2:73
-+ goto -> bb2; // scope 0 at $DIR/match_arm_scopes.rs:+2:42: +2:73
- }
-
-- bb18: {
-+ bb15: {
- StorageDead(_7); // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
- StorageDead(_5); // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
- StorageDead(_8); // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
- StorageDead(_6); // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
-- goto -> bb22; // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
-+ goto -> bb19; // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
- }
-
-- bb19: {
-+ bb16: {
- _0 = const 2_i32; // scope 2 at $DIR/match_arm_scopes.rs:+3:41: +3:42
-- drop(_16) -> [return: bb21, unwind: bb25]; // scope 0 at $DIR/match_arm_scopes.rs:+3:41: +3:42
-+ drop(_16) -> [return: bb18, unwind: bb22]; // scope 0 at $DIR/match_arm_scopes.rs:+3:41: +3:42
- }
-
-- bb20: {
-+ bb17: {
- StorageLive(_15); // scope 0 at $DIR/match_arm_scopes.rs:+3:16: +3:17
- _15 = (_2.1: bool); // scope 0 at $DIR/match_arm_scopes.rs:+3:16: +3:17
- StorageLive(_16); // scope 0 at $DIR/match_arm_scopes.rs:+3:19: +3:20
- _16 = move (_2.2: std::string::String); // scope 0 at $DIR/match_arm_scopes.rs:+3:19: +3:20
-- goto -> bb19; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +4:6
-+ goto -> bb16; // scope 0 at $DIR/match_arm_scopes.rs:+1:5: +4:6
- }
-
-- bb21: {
-+ bb18: {
- StorageDead(_16); // scope 0 at $DIR/match_arm_scopes.rs:+3:41: +3:42
- StorageDead(_15); // scope 0 at $DIR/match_arm_scopes.rs:+3:41: +3:42
-- goto -> bb22; // scope 0 at $DIR/match_arm_scopes.rs:+3:41: +3:42
-+ goto -> bb19; // scope 0 at $DIR/match_arm_scopes.rs:+3:41: +3:42
- }
-
-- bb22: {
-- drop(_2) -> [return: bb24, unwind: bb26]; // scope 0 at $DIR/match_arm_scopes.rs:+5:1: +5:2
-+ bb19: {
-+ goto -> bb26; // scope 0 at $DIR/match_arm_scopes.rs:+5:1: +5:2
- }
-
-- bb23: {
-+ bb20: {
- StorageDead(_8); // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
- StorageDead(_6); // scope 0 at $DIR/match_arm_scopes.rs:+2:77: +2:78
-- drop(_2) -> [return: bb24, unwind: bb26]; // scope 0 at $DIR/match_arm_scopes.rs:+5:1: +5:2
-+ drop(_2) -> [return: bb21, unwind: bb23]; // scope 0 at $DIR/match_arm_scopes.rs:+5:1: +5:2
- }
-
-- bb24: {
-+ bb21: {
- return; // scope 0 at $DIR/match_arm_scopes.rs:+5:2: +5:2
- }
-
-- bb25 (cleanup): {
-- drop(_2) -> [return: bb26, unwind terminate]; // scope 0 at $DIR/match_arm_scopes.rs:+5:1: +5:2
-+ bb22 (cleanup): {
-+ goto -> bb27; // scope 0 at $DIR/match_arm_scopes.rs:+5:1: +5:2
- }
-
-- bb26 (cleanup): {
-+ bb23 (cleanup): {
- resume; // scope 0 at $DIR/match_arm_scopes.rs:+0:1: +5:2
-+ }
-+
-+ bb24: {
-+ goto -> bb21; // scope 0 at $DIR/match_arm_scopes.rs:+5:1: +5:2
-+ }
-+
-+ bb25 (cleanup): {
-+ goto -> bb23; // scope 0 at $DIR/match_arm_scopes.rs:+5:1: +5:2
-+ }
-+
-+ bb26: {
-+ goto -> bb24; // scope 0 at $DIR/match_arm_scopes.rs:+5:1: +5:2
-+ }
-+
-+ bb27 (cleanup): {
-+ goto -> bb23; // scope 0 at $DIR/match_arm_scopes.rs:+5:1: +5:2
- }
- }
-
diff --git a/tests/mir-opt/match_arm_scopes.complicated_match.panic-abort.SimplifyCfg-initial.after-ElaborateDrops.after.diff b/tests/mir-opt/match_arm_scopes.complicated_match.panic-abort.SimplifyCfg-initial.after-ElaborateDrops.after.diff
new file mode 100644
index 000000000..be09ed641
--- /dev/null
+++ b/tests/mir-opt/match_arm_scopes.complicated_match.panic-abort.SimplifyCfg-initial.after-ElaborateDrops.after.diff
@@ -0,0 +1,272 @@
+- // MIR for `complicated_match` after SimplifyCfg-initial
++ // MIR for `complicated_match` after ElaborateDrops
+
+ fn complicated_match(_1: bool, _2: (bool, bool, String)) -> i32 {
+ debug cond => _1;
+ debug items => _2;
+ let mut _0: i32;
+ let mut _3: &bool;
+ let mut _4: &bool;
+ let _5: bool;
+ let _6: &bool;
+ let _7: std::string::String;
+ let _8: &std::string::String;
+ let mut _9: bool;
+ let mut _10: bool;
+ let mut _11: !;
+ let mut _12: bool;
+ let mut _13: bool;
+ let mut _14: !;
+ let _15: bool;
+ let _16: std::string::String;
+ scope 1 {
+ debug a => _5;
+ debug a => _6;
+ debug s => _7;
+ debug s => _8;
+ }
+ scope 2 {
+ debug b => _15;
+ debug t => _16;
+ }
+
+ bb0: {
+- FakeRead(ForMatchedPlace(None), _2);
+- switchInt((_2.0: bool)) -> [0: bb1, otherwise: bb2];
++ switchInt((_2.0: bool)) -> [0: bb5, otherwise: bb1];
+ }
+
+ bb1: {
+- falseEdge -> [real: bb8, imaginary: bb3];
++ switchInt((_2.1: bool)) -> [0: bb10, otherwise: bb2];
+ }
+
+ bb2: {
+- switchInt((_2.1: bool)) -> [0: bb3, otherwise: bb4];
++ switchInt((_2.0: bool)) -> [0: bb3, otherwise: bb17];
+ }
+
+ bb3: {
+- falseEdge -> [real: bb13, imaginary: bb5];
+- }
+-
+- bb4: {
+- switchInt((_2.0: bool)) -> [0: bb6, otherwise: bb5];
+- }
+-
+- bb5: {
+- falseEdge -> [real: bb20, imaginary: bb6];
+- }
+-
+- bb6: {
+ StorageLive(_15);
+ _15 = (_2.1: bool);
+ StorageLive(_16);
+ _16 = move (_2.2: std::string::String);
+- goto -> bb19;
++ goto -> bb16;
+ }
+
+- bb7: {
++ bb4: {
+ _0 = const 1_i32;
+- drop(_7) -> [return: bb18, unwind: bb25];
++ drop(_7) -> [return: bb15, unwind: bb22];
+ }
+
+- bb8: {
++ bb5: {
+ StorageLive(_6);
+ _6 = &(_2.1: bool);
+ StorageLive(_8);
+ _8 = &(_2.2: std::string::String);
+- _3 = &shallow (_2.0: bool);
+- _4 = &shallow (_2.1: bool);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = _1;
+- switchInt(move _10) -> [0: bb10, otherwise: bb9];
++ switchInt(move _10) -> [0: bb7, otherwise: bb6];
+ }
+
+- bb9: {
++ bb6: {
+ _0 = const 3_i32;
+ StorageDead(_10);
+ StorageDead(_9);
+- goto -> bb23;
++ goto -> bb20;
+ }
+
+- bb10: {
++ bb7: {
+ _9 = (*_6);
+- switchInt(move _9) -> [0: bb12, otherwise: bb11];
++ switchInt(move _9) -> [0: bb9, otherwise: bb8];
+ }
+
+- bb11: {
++ bb8: {
+ StorageDead(_10);
+ StorageDead(_9);
+- FakeRead(ForMatchGuard, _3);
+- FakeRead(ForMatchGuard, _4);
+- FakeRead(ForGuardBinding, _6);
+- FakeRead(ForGuardBinding, _8);
+ StorageLive(_5);
+ _5 = (_2.1: bool);
+ StorageLive(_7);
+ _7 = move (_2.2: std::string::String);
+- goto -> bb7;
++ goto -> bb4;
+ }
+
+- bb12: {
++ bb9: {
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_6);
+- falseEdge -> [real: bb2, imaginary: bb3];
++ goto -> bb1;
+ }
+
+- bb13: {
++ bb10: {
+ StorageLive(_6);
+ _6 = &(_2.0: bool);
+ StorageLive(_8);
+ _8 = &(_2.2: std::string::String);
+- _3 = &shallow (_2.0: bool);
+- _4 = &shallow (_2.1: bool);
+ StorageLive(_12);
+ StorageLive(_13);
+ _13 = _1;
+- switchInt(move _13) -> [0: bb15, otherwise: bb14];
++ switchInt(move _13) -> [0: bb12, otherwise: bb11];
+ }
+
+- bb14: {
++ bb11: {
+ _0 = const 3_i32;
+ StorageDead(_13);
+ StorageDead(_12);
+- goto -> bb23;
++ goto -> bb20;
+ }
+
+- bb15: {
++ bb12: {
+ _12 = (*_6);
+- switchInt(move _12) -> [0: bb17, otherwise: bb16];
++ switchInt(move _12) -> [0: bb14, otherwise: bb13];
+ }
+
+- bb16: {
++ bb13: {
+ StorageDead(_13);
+ StorageDead(_12);
+- FakeRead(ForMatchGuard, _3);
+- FakeRead(ForMatchGuard, _4);
+- FakeRead(ForGuardBinding, _6);
+- FakeRead(ForGuardBinding, _8);
+ StorageLive(_5);
+ _5 = (_2.0: bool);
+ StorageLive(_7);
+ _7 = move (_2.2: std::string::String);
+- goto -> bb7;
++ goto -> bb4;
+ }
+
+- bb17: {
++ bb14: {
+ StorageDead(_13);
+ StorageDead(_12);
+ StorageDead(_8);
+ StorageDead(_6);
+- falseEdge -> [real: bb4, imaginary: bb5];
++ goto -> bb2;
+ }
+
+- bb18: {
++ bb15: {
+ StorageDead(_7);
+ StorageDead(_5);
+ StorageDead(_8);
+ StorageDead(_6);
+- goto -> bb22;
++ goto -> bb19;
+ }
+
+- bb19: {
++ bb16: {
+ _0 = const 2_i32;
+- drop(_16) -> [return: bb21, unwind: bb25];
++ drop(_16) -> [return: bb18, unwind: bb22];
+ }
+
+- bb20: {
++ bb17: {
+ StorageLive(_15);
+ _15 = (_2.1: bool);
+ StorageLive(_16);
+ _16 = move (_2.2: std::string::String);
+- goto -> bb19;
++ goto -> bb16;
+ }
+
+- bb21: {
++ bb18: {
+ StorageDead(_16);
+ StorageDead(_15);
+- goto -> bb22;
++ goto -> bb19;
+ }
+
+- bb22: {
+- drop(_2) -> [return: bb24, unwind: bb26];
++ bb19: {
++ goto -> bb26;
+ }
+
+- bb23: {
++ bb20: {
+ StorageDead(_8);
+ StorageDead(_6);
+- drop(_2) -> [return: bb24, unwind: bb26];
++ drop(_2) -> [return: bb21, unwind: bb23];
+ }
+
+- bb24: {
++ bb21: {
+ return;
+ }
+
+- bb25 (cleanup): {
+- drop(_2) -> [return: bb26, unwind terminate];
++ bb22 (cleanup): {
++ goto -> bb27;
+ }
+
+- bb26 (cleanup): {
++ bb23 (cleanup): {
+ resume;
++ }
++
++ bb24: {
++ goto -> bb21;
++ }
++
++ bb25 (cleanup): {
++ goto -> bb23;
++ }
++
++ bb26: {
++ goto -> bb24;
++ }
++
++ bb27 (cleanup): {
++ goto -> bb23;
+ }
+ }
+
diff --git a/tests/mir-opt/match_arm_scopes.complicated_match.panic-unwind.SimplifyCfg-initial.after-ElaborateDrops.after.diff b/tests/mir-opt/match_arm_scopes.complicated_match.panic-unwind.SimplifyCfg-initial.after-ElaborateDrops.after.diff
new file mode 100644
index 000000000..be09ed641
--- /dev/null
+++ b/tests/mir-opt/match_arm_scopes.complicated_match.panic-unwind.SimplifyCfg-initial.after-ElaborateDrops.after.diff
@@ -0,0 +1,272 @@
+- // MIR for `complicated_match` after SimplifyCfg-initial
++ // MIR for `complicated_match` after ElaborateDrops
+
+ fn complicated_match(_1: bool, _2: (bool, bool, String)) -> i32 {
+ debug cond => _1;
+ debug items => _2;
+ let mut _0: i32;
+ let mut _3: &bool;
+ let mut _4: &bool;
+ let _5: bool;
+ let _6: &bool;
+ let _7: std::string::String;
+ let _8: &std::string::String;
+ let mut _9: bool;
+ let mut _10: bool;
+ let mut _11: !;
+ let mut _12: bool;
+ let mut _13: bool;
+ let mut _14: !;
+ let _15: bool;
+ let _16: std::string::String;
+ scope 1 {
+ debug a => _5;
+ debug a => _6;
+ debug s => _7;
+ debug s => _8;
+ }
+ scope 2 {
+ debug b => _15;
+ debug t => _16;
+ }
+
+ bb0: {
+- FakeRead(ForMatchedPlace(None), _2);
+- switchInt((_2.0: bool)) -> [0: bb1, otherwise: bb2];
++ switchInt((_2.0: bool)) -> [0: bb5, otherwise: bb1];
+ }
+
+ bb1: {
+- falseEdge -> [real: bb8, imaginary: bb3];
++ switchInt((_2.1: bool)) -> [0: bb10, otherwise: bb2];
+ }
+
+ bb2: {
+- switchInt((_2.1: bool)) -> [0: bb3, otherwise: bb4];
++ switchInt((_2.0: bool)) -> [0: bb3, otherwise: bb17];
+ }
+
+ bb3: {
+- falseEdge -> [real: bb13, imaginary: bb5];
+- }
+-
+- bb4: {
+- switchInt((_2.0: bool)) -> [0: bb6, otherwise: bb5];
+- }
+-
+- bb5: {
+- falseEdge -> [real: bb20, imaginary: bb6];
+- }
+-
+- bb6: {
+ StorageLive(_15);
+ _15 = (_2.1: bool);
+ StorageLive(_16);
+ _16 = move (_2.2: std::string::String);
+- goto -> bb19;
++ goto -> bb16;
+ }
+
+- bb7: {
++ bb4: {
+ _0 = const 1_i32;
+- drop(_7) -> [return: bb18, unwind: bb25];
++ drop(_7) -> [return: bb15, unwind: bb22];
+ }
+
+- bb8: {
++ bb5: {
+ StorageLive(_6);
+ _6 = &(_2.1: bool);
+ StorageLive(_8);
+ _8 = &(_2.2: std::string::String);
+- _3 = &shallow (_2.0: bool);
+- _4 = &shallow (_2.1: bool);
+ StorageLive(_9);
+ StorageLive(_10);
+ _10 = _1;
+- switchInt(move _10) -> [0: bb10, otherwise: bb9];
++ switchInt(move _10) -> [0: bb7, otherwise: bb6];
+ }
+
+- bb9: {
++ bb6: {
+ _0 = const 3_i32;
+ StorageDead(_10);
+ StorageDead(_9);
+- goto -> bb23;
++ goto -> bb20;
+ }
+
+- bb10: {
++ bb7: {
+ _9 = (*_6);
+- switchInt(move _9) -> [0: bb12, otherwise: bb11];
++ switchInt(move _9) -> [0: bb9, otherwise: bb8];
+ }
+
+- bb11: {
++ bb8: {
+ StorageDead(_10);
+ StorageDead(_9);
+- FakeRead(ForMatchGuard, _3);
+- FakeRead(ForMatchGuard, _4);
+- FakeRead(ForGuardBinding, _6);
+- FakeRead(ForGuardBinding, _8);
+ StorageLive(_5);
+ _5 = (_2.1: bool);
+ StorageLive(_7);
+ _7 = move (_2.2: std::string::String);
+- goto -> bb7;
++ goto -> bb4;
+ }
+
+- bb12: {
++ bb9: {
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_6);
+- falseEdge -> [real: bb2, imaginary: bb3];
++ goto -> bb1;
+ }
+
+- bb13: {
++ bb10: {
+ StorageLive(_6);
+ _6 = &(_2.0: bool);
+ StorageLive(_8);
+ _8 = &(_2.2: std::string::String);
+- _3 = &shallow (_2.0: bool);
+- _4 = &shallow (_2.1: bool);
+ StorageLive(_12);
+ StorageLive(_13);
+ _13 = _1;
+- switchInt(move _13) -> [0: bb15, otherwise: bb14];
++ switchInt(move _13) -> [0: bb12, otherwise: bb11];
+ }
+
+- bb14: {
++ bb11: {
+ _0 = const 3_i32;
+ StorageDead(_13);
+ StorageDead(_12);
+- goto -> bb23;
++ goto -> bb20;
+ }
+
+- bb15: {
++ bb12: {
+ _12 = (*_6);
+- switchInt(move _12) -> [0: bb17, otherwise: bb16];
++ switchInt(move _12) -> [0: bb14, otherwise: bb13];
+ }
+
+- bb16: {
++ bb13: {
+ StorageDead(_13);
+ StorageDead(_12);
+- FakeRead(ForMatchGuard, _3);
+- FakeRead(ForMatchGuard, _4);
+- FakeRead(ForGuardBinding, _6);
+- FakeRead(ForGuardBinding, _8);
+ StorageLive(_5);
+ _5 = (_2.0: bool);
+ StorageLive(_7);
+ _7 = move (_2.2: std::string::String);
+- goto -> bb7;
++ goto -> bb4;
+ }
+
+- bb17: {
++ bb14: {
+ StorageDead(_13);
+ StorageDead(_12);
+ StorageDead(_8);
+ StorageDead(_6);
+- falseEdge -> [real: bb4, imaginary: bb5];
++ goto -> bb2;
+ }
+
+- bb18: {
++ bb15: {
+ StorageDead(_7);
+ StorageDead(_5);
+ StorageDead(_8);
+ StorageDead(_6);
+- goto -> bb22;
++ goto -> bb19;
+ }
+
+- bb19: {
++ bb16: {
+ _0 = const 2_i32;
+- drop(_16) -> [return: bb21, unwind: bb25];
++ drop(_16) -> [return: bb18, unwind: bb22];
+ }
+
+- bb20: {
++ bb17: {
+ StorageLive(_15);
+ _15 = (_2.1: bool);
+ StorageLive(_16);
+ _16 = move (_2.2: std::string::String);
+- goto -> bb19;
++ goto -> bb16;
+ }
+
+- bb21: {
++ bb18: {
+ StorageDead(_16);
+ StorageDead(_15);
+- goto -> bb22;
++ goto -> bb19;
+ }
+
+- bb22: {
+- drop(_2) -> [return: bb24, unwind: bb26];
++ bb19: {
++ goto -> bb26;
+ }
+
+- bb23: {
++ bb20: {
+ StorageDead(_8);
+ StorageDead(_6);
+- drop(_2) -> [return: bb24, unwind: bb26];
++ drop(_2) -> [return: bb21, unwind: bb23];
+ }
+
+- bb24: {
++ bb21: {
+ return;
+ }
+
+- bb25 (cleanup): {
+- drop(_2) -> [return: bb26, unwind terminate];
++ bb22 (cleanup): {
++ goto -> bb27;
+ }
+
+- bb26 (cleanup): {
++ bb23 (cleanup): {
+ resume;
++ }
++
++ bb24: {
++ goto -> bb21;
++ }
++
++ bb25 (cleanup): {
++ goto -> bb23;
++ }
++
++ bb26: {
++ goto -> bb24;
++ }
++
++ bb27 (cleanup): {
++ goto -> bb23;
+ }
+ }
+
diff --git a/tests/mir-opt/match_arm_scopes.rs b/tests/mir-opt/match_arm_scopes.rs
index 7b7de7788..e0249de86 100644
--- a/tests/mir-opt/match_arm_scopes.rs
+++ b/tests/mir-opt/match_arm_scopes.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Test that StorageDead and Drops are generated properly for bindings in
// matches:
// * The MIR should only contain a single drop of `s` and `t`: at the end
diff --git a/tests/mir-opt/match_test.main.SimplifyCfg-initial.after.mir b/tests/mir-opt/match_test.main.SimplifyCfg-initial.after.mir
index d51dbf425..7f8eb82c7 100644
--- a/tests/mir-opt/match_test.main.SimplifyCfg-initial.after.mir
+++ b/tests/mir-opt/match_test.main.SimplifyCfg-initial.after.mir
@@ -1,106 +1,106 @@
// MIR for `main` after SimplifyCfg-initial
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/match_test.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/match_test.rs:+1:9: +1:10
- let _3: i32; // in scope 0 at $DIR/match_test.rs:+6:5: +11:6
- let mut _4: bool; // in scope 0 at $DIR/match_test.rs:+8:9: +8:16
- let mut _5: bool; // in scope 0 at $DIR/match_test.rs:+8:9: +8:16
- let mut _6: bool; // in scope 0 at $DIR/match_test.rs:+7:9: +7:14
- let mut _7: bool; // in scope 0 at $DIR/match_test.rs:+7:9: +7:14
- let mut _8: &i32; // in scope 0 at $DIR/match_test.rs:+6:11: +6:12
- let mut _9: bool; // in scope 0 at $DIR/match_test.rs:+7:18: +7:19
+ let mut _0: ();
+ let _1: i32;
+ let _3: i32;
+ let mut _4: bool;
+ let mut _5: bool;
+ let mut _6: bool;
+ let mut _7: bool;
+ let mut _8: &i32;
+ let mut _9: bool;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/match_test.rs:+1:9: +1:10
- let _2: bool; // in scope 1 at $DIR/match_test.rs:+2:9: +2:10
+ debug x => _1;
+ let _2: bool;
scope 2 {
- debug b => _2; // in scope 2 at $DIR/match_test.rs:+2:9: +2:10
+ debug b => _2;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/match_test.rs:+1:9: +1:10
- _1 = const 3_i32; // scope 0 at $DIR/match_test.rs:+1:13: +1:14
- FakeRead(ForLet(None), _1); // scope 0 at $DIR/match_test.rs:+1:9: +1:10
- StorageLive(_2); // scope 1 at $DIR/match_test.rs:+2:9: +2:10
- _2 = const true; // scope 1 at $DIR/match_test.rs:+2:13: +2:17
- FakeRead(ForLet(None), _2); // scope 1 at $DIR/match_test.rs:+2:9: +2:10
- StorageLive(_3); // scope 2 at $DIR/match_test.rs:+6:5: +11:6
- FakeRead(ForMatchedPlace(None), _1); // scope 2 at $DIR/match_test.rs:+6:11: +6:12
- _6 = Le(const 0_i32, _1); // scope 2 at $DIR/match_test.rs:+7:9: +7:14
- switchInt(move _6) -> [0: bb4, otherwise: bb1]; // scope 2 at $DIR/match_test.rs:+7:9: +7:14
+ StorageLive(_1);
+ _1 = const 3_i32;
+ FakeRead(ForLet(None), _1);
+ StorageLive(_2);
+ _2 = const true;
+ FakeRead(ForLet(None), _2);
+ StorageLive(_3);
+ FakeRead(ForMatchedPlace(None), _1);
+ _6 = Le(const 0_i32, _1);
+ switchInt(move _6) -> [0: bb4, otherwise: bb1];
}
bb1: {
- _7 = Lt(_1, const 10_i32); // scope 2 at $DIR/match_test.rs:+7:9: +7:14
- switchInt(move _7) -> [0: bb4, otherwise: bb2]; // scope 2 at $DIR/match_test.rs:+7:9: +7:14
+ _7 = Lt(_1, const 10_i32);
+ switchInt(move _7) -> [0: bb4, otherwise: bb2];
}
bb2: {
- falseEdge -> [real: bb9, imaginary: bb6]; // scope 2 at $DIR/match_test.rs:+7:9: +7:14
+ falseEdge -> [real: bb9, imaginary: bb6];
}
bb3: {
- _3 = const 3_i32; // scope 2 at $DIR/match_test.rs:+10:14: +10:15
- goto -> bb14; // scope 2 at $DIR/match_test.rs:+10:14: +10:15
+ _3 = const 3_i32;
+ goto -> bb14;
}
bb4: {
- _4 = Le(const 10_i32, _1); // scope 2 at $DIR/match_test.rs:+8:9: +8:16
- switchInt(move _4) -> [0: bb7, otherwise: bb5]; // scope 2 at $DIR/match_test.rs:+8:9: +8:16
+ _4 = Le(const 10_i32, _1);
+ switchInt(move _4) -> [0: bb7, otherwise: bb5];
}
bb5: {
- _5 = Le(_1, const 20_i32); // scope 2 at $DIR/match_test.rs:+8:9: +8:16
- switchInt(move _5) -> [0: bb7, otherwise: bb6]; // scope 2 at $DIR/match_test.rs:+8:9: +8:16
+ _5 = Le(_1, const 20_i32);
+ switchInt(move _5) -> [0: bb7, otherwise: bb6];
}
bb6: {
- falseEdge -> [real: bb12, imaginary: bb8]; // scope 2 at $DIR/match_test.rs:+8:9: +8:16
+ falseEdge -> [real: bb12, imaginary: bb8];
}
bb7: {
- switchInt(_1) -> [4294967295: bb8, otherwise: bb3]; // scope 2 at $DIR/match_test.rs:+6:5: +6:12
+ switchInt(_1) -> [4294967295: bb8, otherwise: bb3];
}
bb8: {
- falseEdge -> [real: bb13, imaginary: bb3]; // scope 2 at $DIR/match_test.rs:+9:9: +9:11
+ falseEdge -> [real: bb13, imaginary: bb3];
}
bb9: {
- _8 = &shallow _1; // scope 2 at $DIR/match_test.rs:+6:11: +6:12
- StorageLive(_9); // scope 2 at $DIR/match_test.rs:+7:18: +7:19
- _9 = _2; // scope 2 at $DIR/match_test.rs:+7:18: +7:19
- switchInt(move _9) -> [0: bb11, otherwise: bb10]; // scope 2 at $DIR/match_test.rs:+7:18: +7:19
+ _8 = &shallow _1;
+ StorageLive(_9);
+ _9 = _2;
+ switchInt(move _9) -> [0: bb11, otherwise: bb10];
}
bb10: {
- StorageDead(_9); // scope 2 at $DIR/match_test.rs:+7:18: +7:19
- FakeRead(ForMatchGuard, _8); // scope 2 at $DIR/match_test.rs:+7:18: +7:19
- _3 = const 0_i32; // scope 2 at $DIR/match_test.rs:+7:23: +7:24
- goto -> bb14; // scope 2 at $DIR/match_test.rs:+7:23: +7:24
+ StorageDead(_9);
+ FakeRead(ForMatchGuard, _8);
+ _3 = const 0_i32;
+ goto -> bb14;
}
bb11: {
- StorageDead(_9); // scope 2 at $DIR/match_test.rs:+7:18: +7:19
- falseEdge -> [real: bb3, imaginary: bb6]; // scope 2 at $DIR/match_test.rs:+7:18: +7:19
+ StorageDead(_9);
+ falseEdge -> [real: bb3, imaginary: bb6];
}
bb12: {
- _3 = const 1_i32; // scope 2 at $DIR/match_test.rs:+8:20: +8:21
- goto -> bb14; // scope 2 at $DIR/match_test.rs:+8:20: +8:21
+ _3 = const 1_i32;
+ goto -> bb14;
}
bb13: {
- _3 = const 2_i32; // scope 2 at $DIR/match_test.rs:+9:15: +9:16
- goto -> bb14; // scope 2 at $DIR/match_test.rs:+9:15: +9:16
+ _3 = const 2_i32;
+ goto -> bb14;
}
bb14: {
- StorageDead(_3); // scope 2 at $DIR/match_test.rs:+11:6: +11:7
- _0 = const (); // scope 0 at $DIR/match_test.rs:+0:11: +12:2
- StorageDead(_2); // scope 1 at $DIR/match_test.rs:+12:1: +12:2
- StorageDead(_1); // scope 0 at $DIR/match_test.rs:+12:1: +12:2
- return; // scope 0 at $DIR/match_test.rs:+12:2: +12:2
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/matches_reduce_branches.bar.MatchBranchSimplification.diff b/tests/mir-opt/matches_reduce_branches.bar.MatchBranchSimplification.diff
index 92f8d4e14..65da13eec 100644
--- a/tests/mir-opt/matches_reduce_branches.bar.MatchBranchSimplification.diff
+++ b/tests/mir-opt/matches_reduce_branches.bar.MatchBranchSimplification.diff
@@ -2,83 +2,83 @@
+ // MIR for `bar` after MatchBranchSimplification
fn bar(_1: i32) -> (bool, bool, bool, bool) {
- debug i => _1; // in scope 0 at $DIR/matches_reduce_branches.rs:+0:8: +0:9
- let mut _0: (bool, bool, bool, bool); // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:19: +0:43
- let _2: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:10
- let _6: (); // in scope 0 at $DIR/matches_reduce_branches.rs:+6:5: +21:6
- let mut _7: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+23:6: +23:7
- let mut _8: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+23:9: +23:10
- let mut _9: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+23:12: +23:13
- let mut _10: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+23:15: +23:16
-+ let mut _11: i32; // in scope 0 at $DIR/matches_reduce_branches.rs:+6:5: +6:12
+ debug i => _1;
+ let mut _0: (bool, bool, bool, bool);
+ let _2: bool;
+ let _6: ();
+ let mut _7: bool;
+ let mut _8: bool;
+ let mut _9: bool;
+ let mut _10: bool;
++ let mut _11: i32;
scope 1 {
- debug a => _2; // in scope 1 at $DIR/matches_reduce_branches.rs:+1:9: +1:10
- let _3: bool; // in scope 1 at $DIR/matches_reduce_branches.rs:+2:9: +2:10
+ debug a => _2;
+ let _3: bool;
scope 2 {
- debug b => _3; // in scope 2 at $DIR/matches_reduce_branches.rs:+2:9: +2:10
- let _4: bool; // in scope 2 at $DIR/matches_reduce_branches.rs:+3:9: +3:10
+ debug b => _3;
+ let _4: bool;
scope 3 {
- debug c => _4; // in scope 3 at $DIR/matches_reduce_branches.rs:+3:9: +3:10
- let _5: bool; // in scope 3 at $DIR/matches_reduce_branches.rs:+4:9: +4:10
+ debug c => _4;
+ let _5: bool;
scope 4 {
- debug d => _5; // in scope 4 at $DIR/matches_reduce_branches.rs:+4:9: +4:10
+ debug d => _5;
}
}
}
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:10
- StorageLive(_3); // scope 1 at $DIR/matches_reduce_branches.rs:+2:9: +2:10
- StorageLive(_4); // scope 2 at $DIR/matches_reduce_branches.rs:+3:9: +3:10
- StorageLive(_5); // scope 3 at $DIR/matches_reduce_branches.rs:+4:9: +4:10
- StorageLive(_6); // scope 4 at $DIR/matches_reduce_branches.rs:+6:5: +21:6
-- switchInt(_1) -> [7: bb2, otherwise: bb1]; // scope 4 at $DIR/matches_reduce_branches.rs:+6:5: +6:12
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+- switchInt(_1) -> [7: bb2, otherwise: bb1];
- }
-
- bb1: {
-- _2 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+15:13: +15:21
-- _3 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+16:13: +16:22
-- _4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+17:13: +17:22
-- _5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+18:13: +18:21
-- _6 = (); // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
-- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
+- _2 = const true;
+- _3 = const false;
++ StorageLive(_11);
++ _11 = _1;
++ _2 = Ne(_11, const 7_i32);
++ _3 = Eq(_11, const 7_i32);
+ _4 = const false;
+ _5 = const true;
+ _6 = ();
+- goto -> bb3;
- }
-
- bb2: {
-- _2 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+8:13: +8:22
-- _3 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+9:13: +9:21
-+ StorageLive(_11); // scope 4 at $DIR/matches_reduce_branches.rs:+6:5: +6:12
-+ _11 = _1; // scope 4 at $DIR/matches_reduce_branches.rs:+6:5: +6:12
-+ _2 = Ne(_11, const 7_i32); // scope 4 at $DIR/matches_reduce_branches.rs:+8:13: +8:22
-+ _3 = Eq(_11, const 7_i32); // scope 4 at $DIR/matches_reduce_branches.rs:+9:13: +9:21
- _4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+10:13: +10:22
- _5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+11:13: +11:21
- _6 = (); // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
-- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
+- _2 = const false;
+- _3 = const true;
+- _4 = const false;
+- _5 = const true;
+- _6 = ();
+- goto -> bb3;
- }
-
- bb3: {
-+ StorageDead(_11); // scope 4 at $DIR/matches_reduce_branches.rs:+6:5: +6:12
- StorageDead(_6); // scope 4 at $DIR/matches_reduce_branches.rs:+21:6: +21:7
- StorageLive(_7); // scope 4 at $DIR/matches_reduce_branches.rs:+23:6: +23:7
- _7 = _2; // scope 4 at $DIR/matches_reduce_branches.rs:+23:6: +23:7
- StorageLive(_8); // scope 4 at $DIR/matches_reduce_branches.rs:+23:9: +23:10
- _8 = _3; // scope 4 at $DIR/matches_reduce_branches.rs:+23:9: +23:10
- StorageLive(_9); // scope 4 at $DIR/matches_reduce_branches.rs:+23:12: +23:13
- _9 = _4; // scope 4 at $DIR/matches_reduce_branches.rs:+23:12: +23:13
- StorageLive(_10); // scope 4 at $DIR/matches_reduce_branches.rs:+23:15: +23:16
- _10 = _5; // scope 4 at $DIR/matches_reduce_branches.rs:+23:15: +23:16
- _0 = (move _7, move _8, move _9, move _10); // scope 4 at $DIR/matches_reduce_branches.rs:+23:5: +23:17
- StorageDead(_10); // scope 4 at $DIR/matches_reduce_branches.rs:+23:16: +23:17
- StorageDead(_9); // scope 4 at $DIR/matches_reduce_branches.rs:+23:16: +23:17
- StorageDead(_8); // scope 4 at $DIR/matches_reduce_branches.rs:+23:16: +23:17
- StorageDead(_7); // scope 4 at $DIR/matches_reduce_branches.rs:+23:16: +23:17
- StorageDead(_5); // scope 3 at $DIR/matches_reduce_branches.rs:+24:1: +24:2
- StorageDead(_4); // scope 2 at $DIR/matches_reduce_branches.rs:+24:1: +24:2
- StorageDead(_3); // scope 1 at $DIR/matches_reduce_branches.rs:+24:1: +24:2
- StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+24:1: +24:2
- return; // scope 0 at $DIR/matches_reduce_branches.rs:+24:2: +24:2
++ StorageDead(_11);
+ StorageDead(_6);
+ StorageLive(_7);
+ _7 = _2;
+ StorageLive(_8);
+ _8 = _3;
+ StorageLive(_9);
+ _9 = _4;
+ StorageLive(_10);
+ _10 = _5;
+ _0 = (move _7, move _8, move _9, move _10);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/matches_reduce_branches.foo.MatchBranchSimplification.diff b/tests/mir-opt/matches_reduce_branches.foo.MatchBranchSimplification.diff
index 0580f7334..052e2e126 100644
--- a/tests/mir-opt/matches_reduce_branches.foo.MatchBranchSimplification.diff
+++ b/tests/mir-opt/matches_reduce_branches.foo.MatchBranchSimplification.diff
@@ -2,54 +2,52 @@
+ // MIR for `foo` after MatchBranchSimplification
fn foo(_1: Option<()>) -> () {
- debug bar => _1; // in scope 0 at $DIR/matches_reduce_branches.rs:+0:8: +0:11
- let mut _0: (); // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:25
- let mut _2: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _3: isize; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:22: +1:26
-+ let mut _4: isize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ debug bar => _1;
+ let mut _0: ();
+ let mut _2: bool;
+ let mut _3: isize;
++ let mut _4: isize;
bb0: {
- StorageLive(_2); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _3 = discriminant(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:17: +1:20
-- switchInt(move _3) -> [0: bb2, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-+ StorageLive(_4); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-+ _4 = move _3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-+ _2 = Eq(_4, const 0_isize); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-+ StorageDead(_4); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-+ switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+ StorageLive(_2);
+ _3 = discriminant(_1);
+- switchInt(move _3) -> [0: bb2, otherwise: bb1];
++ StorageLive(_4);
++ _4 = move _3;
++ _2 = Eq(_4, const 0_isize);
++ StorageDead(_4);
++ switchInt(move _2) -> [0: bb2, otherwise: bb1];
}
bb1: {
-- _2 = const false; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+- _2 = const false;
++ _0 = ();
+ goto -> bb3;
+ }
+
+ bb2: {
+- _2 = const true;
++ _0 = const ();
+ goto -> bb3;
+ }
+
+ bb3: {
+- switchInt(move _2) -> [0: bb5, otherwise: bb4];
- }
-
-- bb2: {
-- _2 = const true; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
-- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+- bb4: {
+- _0 = ();
+- goto -> bb6;
- }
-
-- bb3: {
-- switchInt(move _2) -> [0: bb5, otherwise: bb4]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
+- bb5: {
+- _0 = const ();
+- goto -> bb6;
- }
-
-- bb4: {
- _0 = (); // scope 0 at $DIR/matches_reduce_branches.rs:+2:9: +2:11
-- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
-+ goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
- }
-
-- bb5: {
-+ bb2: {
- _0 = const (); // scope 0 at $DIR/matches_reduce_branches.rs:+3:6: +3:6
-- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
-+ goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
- }
-
- bb6: {
-+ bb3: {
- StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+3:5: +3:6
- return; // scope 0 at $DIR/matches_reduce_branches.rs:+4:2: +4:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/matches_reduce_branches.match_nested_if.MatchBranchSimplification.diff b/tests/mir-opt/matches_reduce_branches.match_nested_if.MatchBranchSimplification.diff
index 20e8ef2f7..b5edbfee0 100644
--- a/tests/mir-opt/matches_reduce_branches.match_nested_if.MatchBranchSimplification.diff
+++ b/tests/mir-opt/matches_reduce_branches.match_nested_if.MatchBranchSimplification.diff
@@ -2,112 +2,112 @@
+ // MIR for `match_nested_if` after MatchBranchSimplification
fn match_nested_if() -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:29
- let _1: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
- let mut _2: (); // in scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
- let mut _3: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
- let mut _4: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
- let mut _5: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
- let mut _6: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
-+ let mut _7: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
-+ let mut _8: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
-+ let mut _9: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
-+ let mut _10: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
+ let mut _0: bool;
+ let _1: bool;
+ let mut _2: ();
+ let mut _3: bool;
+ let mut _4: bool;
+ let mut _5: bool;
+ let mut _6: bool;
++ let mut _7: bool;
++ let mut _8: bool;
++ let mut _9: bool;
++ let mut _10: bool;
scope 1 {
- debug val => _1; // in scope 1 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
+ debug val => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
- StorageLive(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
- _2 = (); // scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
- StorageLive(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
- StorageLive(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
- StorageLive(_5); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
- StorageLive(_6); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
- _6 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
-- switchInt(move _6) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = ();
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = const true;
+- switchInt(move _6) -> [0: bb2, otherwise: bb1];
- }
-
- bb1: {
-- _5 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:31: +2:35
-- goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
+- _5 = const true;
+- goto -> bb3;
- }
-
- bb2: {
-- _5 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+2:45: +2:50
-- goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
+- _5 = const false;
+- goto -> bb3;
- }
-
- bb3: {
-+ StorageLive(_7); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
-+ _7 = move _6; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
-+ _5 = Ne(_7, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+2:45: +2:50
-+ StorageDead(_7); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
- StorageDead(_6); // scope 0 at $DIR/matches_reduce_branches.rs:+2:51: +2:52
-- switchInt(move _5) -> [0: bb5, otherwise: bb4]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
++ StorageLive(_7);
++ _7 = move _6;
++ _5 = Ne(_7, const false);
++ StorageDead(_7);
+ StorageDead(_6);
+- switchInt(move _5) -> [0: bb5, otherwise: bb4];
- }
-
- bb4: {
-- _4 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:55: +2:59
-- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
+- _4 = const true;
+- goto -> bb6;
- }
-
- bb5: {
-- _4 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+2:69: +2:74
-- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
+- _4 = const false;
+- goto -> bb6;
- }
-
- bb6: {
-+ StorageLive(_8); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
-+ _8 = move _5; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
-+ _4 = Ne(_8, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+2:69: +2:74
-+ StorageDead(_8); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
- StorageDead(_5); // scope 0 at $DIR/matches_reduce_branches.rs:+2:75: +2:76
-- switchInt(move _4) -> [0: bb8, otherwise: bb7]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
++ StorageLive(_8);
++ _8 = move _5;
++ _4 = Ne(_8, const false);
++ StorageDead(_8);
+ StorageDead(_5);
+- switchInt(move _4) -> [0: bb8, otherwise: bb7];
- }
-
- bb7: {
-- _3 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+3:13: +3:17
-- goto -> bb9; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
+- _3 = const true;
+- goto -> bb9;
- }
-
- bb8: {
-- _3 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+5:13: +5:18
-- goto -> bb9; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
+- _3 = const false;
+- goto -> bb9;
- }
-
- bb9: {
-- switchInt(move _3) -> [0: bb11, otherwise: bb10]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
+- switchInt(move _3) -> [0: bb11, otherwise: bb10];
- }
-
- bb10: {
-+ StorageLive(_9); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
-+ _9 = move _4; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
-+ _3 = Ne(_9, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+5:13: +5:18
-+ StorageDead(_9); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
-+ StorageLive(_10); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
-+ _10 = move _3; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
- StorageDead(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
- StorageDead(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
-- _1 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+8:13: +8:17
-- goto -> bb12; // scope 0 at $DIR/matches_reduce_branches.rs:+8:13: +8:17
++ StorageLive(_9);
++ _9 = move _4;
++ _3 = Ne(_9, const false);
++ StorageDead(_9);
++ StorageLive(_10);
++ _10 = move _3;
+ StorageDead(_4);
+ StorageDead(_3);
+- _1 = const true;
+- goto -> bb12;
- }
-
- bb11: {
-- StorageDead(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
-- StorageDead(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
-- _1 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
-- goto -> bb12; // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
+- StorageDead(_4);
+- StorageDead(_3);
+- _1 = const false;
+- goto -> bb12;
- }
-
- bb12: {
-+ _1 = Ne(_10, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
-+ StorageDead(_10); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
- StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+11:6: +11:7
- _0 = _1; // scope 1 at $DIR/matches_reduce_branches.rs:+12:5: +12:8
- StorageDead(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+13:1: +13:2
- return; // scope 0 at $DIR/matches_reduce_branches.rs:+13:2: +13:2
++ _1 = Ne(_10, const false);
++ StorageDead(_10);
+ StorageDead(_2);
+ _0 = _1;
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/matches_u8.exhaustive_match.MatchBranchSimplification.diff b/tests/mir-opt/matches_u8.exhaustive_match.MatchBranchSimplification.diff
index 3766d99a4..fec585563 100644
--- a/tests/mir-opt/matches_u8.exhaustive_match.MatchBranchSimplification.diff
+++ b/tests/mir-opt/matches_u8.exhaustive_match.MatchBranchSimplification.diff
@@ -2,31 +2,31 @@
+ // MIR for `exhaustive_match` after MatchBranchSimplification
fn exhaustive_match(_1: E) -> u8 {
- debug e => _1; // in scope 0 at $DIR/matches_u8.rs:+0:25: +0:26
- let mut _0: u8; // return place in scope 0 at $DIR/matches_u8.rs:+0:34: +0:36
- let mut _2: isize; // in scope 0 at $DIR/matches_u8.rs:+2:9: +2:13
+ debug e => _1;
+ let mut _0: u8;
+ let mut _2: isize;
bb0: {
- _2 = discriminant(_1); // scope 0 at $DIR/matches_u8.rs:+1:11: +1:12
- switchInt(move _2) -> [0: bb3, 1: bb1, otherwise: bb2]; // scope 0 at $DIR/matches_u8.rs:+1:5: +1:12
+ _2 = discriminant(_1);
+ switchInt(move _2) -> [0: bb3, 1: bb1, otherwise: bb2];
}
bb1: {
- _0 = const 1_u8; // scope 0 at $DIR/matches_u8.rs:+3:17: +3:18
- goto -> bb4; // scope 0 at $DIR/matches_u8.rs:+3:17: +3:18
+ _0 = const 1_u8;
+ goto -> bb4;
}
bb2: {
- unreachable; // scope 0 at $DIR/matches_u8.rs:+1:11: +1:12
+ unreachable;
}
bb3: {
- _0 = const 0_u8; // scope 0 at $DIR/matches_u8.rs:+2:17: +2:18
- goto -> bb4; // scope 0 at $DIR/matches_u8.rs:+2:17: +2:18
+ _0 = const 0_u8;
+ goto -> bb4;
}
bb4: {
- return; // scope 0 at $DIR/matches_u8.rs:+5:2: +5:2
+ return;
}
}
diff --git a/tests/mir-opt/matches_u8.exhaustive_match_i8.MatchBranchSimplification.diff b/tests/mir-opt/matches_u8.exhaustive_match_i8.MatchBranchSimplification.diff
index b5146cd53..94d3ce6c9 100644
--- a/tests/mir-opt/matches_u8.exhaustive_match_i8.MatchBranchSimplification.diff
+++ b/tests/mir-opt/matches_u8.exhaustive_match_i8.MatchBranchSimplification.diff
@@ -2,31 +2,31 @@
+ // MIR for `exhaustive_match_i8` after MatchBranchSimplification
fn exhaustive_match_i8(_1: E) -> i8 {
- debug e => _1; // in scope 0 at $DIR/matches_u8.rs:+0:28: +0:29
- let mut _0: i8; // return place in scope 0 at $DIR/matches_u8.rs:+0:37: +0:39
- let mut _2: isize; // in scope 0 at $DIR/matches_u8.rs:+2:9: +2:13
+ debug e => _1;
+ let mut _0: i8;
+ let mut _2: isize;
bb0: {
- _2 = discriminant(_1); // scope 0 at $DIR/matches_u8.rs:+1:11: +1:12
- switchInt(move _2) -> [0: bb3, 1: bb1, otherwise: bb2]; // scope 0 at $DIR/matches_u8.rs:+1:5: +1:12
+ _2 = discriminant(_1);
+ switchInt(move _2) -> [0: bb3, 1: bb1, otherwise: bb2];
}
bb1: {
- _0 = const 1_i8; // scope 0 at $DIR/matches_u8.rs:+3:17: +3:18
- goto -> bb4; // scope 0 at $DIR/matches_u8.rs:+3:17: +3:18
+ _0 = const 1_i8;
+ goto -> bb4;
}
bb2: {
- unreachable; // scope 0 at $DIR/matches_u8.rs:+1:11: +1:12
+ unreachable;
}
bb3: {
- _0 = const 0_i8; // scope 0 at $DIR/matches_u8.rs:+2:17: +2:18
- goto -> bb4; // scope 0 at $DIR/matches_u8.rs:+2:17: +2:18
+ _0 = const 0_i8;
+ goto -> bb4;
}
bb4: {
- return; // scope 0 at $DIR/matches_u8.rs:+5:2: +5:2
+ return;
}
}
diff --git a/tests/mir-opt/multiple_return_terminators.test.MultipleReturnTerminators.diff b/tests/mir-opt/multiple_return_terminators.test.MultipleReturnTerminators.diff
index 48a11c950..e28809f38 100644
--- a/tests/mir-opt/multiple_return_terminators.test.MultipleReturnTerminators.diff
+++ b/tests/mir-opt/multiple_return_terminators.test.MultipleReturnTerminators.diff
@@ -2,11 +2,11 @@
+ // MIR for `test` after MultipleReturnTerminators
fn test(_1: bool) -> () {
- debug x => _1; // in scope 0 at $DIR/multiple_return_terminators.rs:+0:9: +0:10
- let mut _0: (); // return place in scope 0 at $DIR/multiple_return_terminators.rs:+0:18: +0:18
+ debug x => _1;
+ let mut _0: ();
bb0: {
- return; // scope 0 at $DIR/multiple_return_terminators.rs:+6:2: +6:2
+ return;
}
}
diff --git a/tests/mir-opt/nll/named_lifetimes_basic.use_x.nll.0.mir b/tests/mir-opt/nll/named_lifetimes_basic.use_x.nll.0.mir
index be5baf6ee..1d6b83073 100644
--- a/tests/mir-opt/nll/named_lifetimes_basic.use_x.nll.0.mir
+++ b/tests/mir-opt/nll/named_lifetimes_basic.use_x.nll.0.mir
@@ -34,14 +34,14 @@
| '?8: '?3 due to BoringNoLocation at All($DIR/named_lifetimes_basic.rs:12:66: 12:67) ($DIR/named_lifetimes_basic.rs:12:66: 12:67 (#0)
|
fn use_x(_1: &'?5 mut i32, _2: &'?6 u32, _3: &'?7 u32, _4: &'?8 u32) -> bool {
- debug w => _1; // in scope 0 at $DIR/named_lifetimes_basic.rs:+0:26: +0:27
- debug x => _2; // in scope 0 at $DIR/named_lifetimes_basic.rs:+0:42: +0:43
- debug y => _3; // in scope 0 at $DIR/named_lifetimes_basic.rs:+0:54: +0:55
- debug z => _4; // in scope 0 at $DIR/named_lifetimes_basic.rs:+0:66: +0:67
- let mut _0: bool; // return place in scope 0 at $DIR/named_lifetimes_basic.rs:+0:81: +0:85
+ debug w => _1;
+ debug x => _2;
+ debug y => _3;
+ debug z => _4;
+ let mut _0: bool;
bb0: {
- _0 = const ConstValue(Scalar(0x01): bool); // bb0[0]: scope 0 at $DIR/named_lifetimes_basic.rs:+0:88: +0:92
- return; // bb0[1]: scope 0 at $DIR/named_lifetimes_basic.rs:+0:94: +0:94
+ _0 = const ConstValue(Scalar(0x01): bool);
+ return;
}
}
diff --git a/tests/mir-opt/nll/region_subtyping_basic.main.nll.0.32bit.mir b/tests/mir-opt/nll/region_subtyping_basic.main.nll.0.32bit.mir
index c425f3cd5..56b0f8165 100644
--- a/tests/mir-opt/nll/region_subtyping_basic.main.nll.0.32bit.mir
+++ b/tests/mir-opt/nll/region_subtyping_basic.main.nll.0.32bit.mir
@@ -21,91 +21,85 @@
| '?3: '?4 due to Assignment at Single(bb1[3]) ($DIR/region_subtyping_basic.rs:19:13: 19:14 (#0)
|
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/region_subtyping_basic.rs:+0:11: +0:11
- let mut _1: [usize; Const { ty: usize, kind: Leaf(0x00000003) }]; // in scope 0 at $DIR/region_subtyping_basic.rs:+1:9: +1:14
- let _3: usize; // in scope 0 at $DIR/region_subtyping_basic.rs:+2:16: +2:17
- let mut _4: usize; // in scope 0 at $DIR/region_subtyping_basic.rs:+2:14: +2:18
- let mut _5: bool; // in scope 0 at $DIR/region_subtyping_basic.rs:+2:14: +2:18
- let mut _7: bool; // in scope 0 at $DIR/region_subtyping_basic.rs:+4:8: +4:12
- let _8: bool; // in scope 0 at $DIR/region_subtyping_basic.rs:+5:9: +5:18
- let mut _9: usize; // in scope 0 at $DIR/region_subtyping_basic.rs:+5:15: +5:17
- let _10: bool; // in scope 0 at $DIR/region_subtyping_basic.rs:+7:9: +7:18
+ let mut _0: ();
+ let mut _1: [usize; Const { ty: usize, kind: Leaf(0x00000003) }];
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
+ let mut _7: bool;
+ let _8: bool;
+ let mut _9: usize;
+ let _10: bool;
scope 1 {
- debug v => _1; // in scope 1 at $DIR/region_subtyping_basic.rs:+1:9: +1:14
- let _2: &'?3 usize; // in scope 1 at $DIR/region_subtyping_basic.rs:+2:9: +2:10
+ debug v => _1;
+ let _2: &'?3 usize;
scope 2 {
- debug p => _2; // in scope 2 at $DIR/region_subtyping_basic.rs:+2:9: +2:10
- let _6: &'?4 usize; // in scope 2 at $DIR/region_subtyping_basic.rs:+3:9: +3:10
+ debug p => _2;
+ let _6: &'?4 usize;
scope 3 {
- debug q => _6; // in scope 3 at $DIR/region_subtyping_basic.rs:+3:9: +3:10
+ debug q => _6;
}
}
}
bb0: {
- StorageLive(_1); // bb0[0]: scope 0 at $DIR/region_subtyping_basic.rs:+1:9: +1:14
- _1 = [const ConstValue(Scalar(0x00000001): usize), const ConstValue(Scalar(0x00000002): usize), const ConstValue(Scalar(0x00000003): usize)]; // bb0[1]: scope 0 at $DIR/region_subtyping_basic.rs:+1:17: +1:26
- FakeRead(ForLet(None), _1); // bb0[2]: scope 0 at $DIR/region_subtyping_basic.rs:+1:9: +1:14
- StorageLive(_2); // bb0[3]: scope 1 at $DIR/region_subtyping_basic.rs:+2:9: +2:10
- StorageLive(_3); // bb0[4]: scope 1 at $DIR/region_subtyping_basic.rs:+2:16: +2:17
- _3 = const ConstValue(Scalar(0x00000000): usize); // bb0[5]: scope 1 at $DIR/region_subtyping_basic.rs:+2:16: +2:17
- _4 = Len(_1); // bb0[6]: scope 1 at $DIR/region_subtyping_basic.rs:+2:14: +2:18
- _5 = Lt(_3, _4); // bb0[7]: scope 1 at $DIR/region_subtyping_basic.rs:+2:14: +2:18
- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind: bb7]; // bb0[8]: scope 1 at $DIR/region_subtyping_basic.rs:+2:14: +2:18
+ StorageLive(_1);
+ _1 = [const ConstValue(Scalar(0x00000001): usize), const ConstValue(Scalar(0x00000002): usize), const ConstValue(Scalar(0x00000003): usize)];
+ FakeRead(ForLet(None), _1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = const ConstValue(Scalar(0x00000000): usize);
+ _4 = Len(_1);
+ _5 = Lt(_3, _4);
+ assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind: bb7];
}
bb1: {
- _2 = &'?2 _1[_3]; // bb1[0]: scope 1 at $DIR/region_subtyping_basic.rs:+2:13: +2:18
- FakeRead(ForLet(None), _2); // bb1[1]: scope 1 at $DIR/region_subtyping_basic.rs:+2:9: +2:10
- StorageLive(_6); // bb1[2]: scope 2 at $DIR/region_subtyping_basic.rs:+3:9: +3:10
- _6 = _2; // bb1[3]: scope 2 at $DIR/region_subtyping_basic.rs:+3:13: +3:14
- FakeRead(ForLet(None), _6); // bb1[4]: scope 2 at $DIR/region_subtyping_basic.rs:+3:9: +3:10
- StorageLive(_7); // bb1[5]: scope 3 at $DIR/region_subtyping_basic.rs:+4:8: +4:12
- _7 = const ConstValue(Scalar(0x01): bool); // bb1[6]: scope 3 at $DIR/region_subtyping_basic.rs:+4:8: +4:12
- switchInt(move _7) -> [0: bb4, otherwise: bb2]; // bb1[7]: scope 3 at $DIR/region_subtyping_basic.rs:+4:8: +4:12
+ _2 = &'?2 _1[_3];
+ FakeRead(ForLet(None), _2);
+ StorageLive(_6);
+ _6 = _2;
+ FakeRead(ForLet(None), _6);
+ StorageLive(_7);
+ _7 = const ConstValue(Scalar(0x01): bool);
+ switchInt(move _7) -> [0: bb4, otherwise: bb2];
}
bb2: {
- StorageLive(_8); // bb2[0]: scope 3 at $DIR/region_subtyping_basic.rs:+5:9: +5:18
- StorageLive(_9); // bb2[1]: scope 3 at $DIR/region_subtyping_basic.rs:+5:15: +5:17
- _9 = (*_6); // bb2[2]: scope 3 at $DIR/region_subtyping_basic.rs:+5:15: +5:17
- _8 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(move _9) -> [return: bb3, unwind: bb7]; // bb2[3]: scope 3 at $DIR/region_subtyping_basic.rs:+5:9: +5:18
- // mir::Constant
- // + span: $DIR/region_subtyping_basic.rs:21:9: 21:14
- // + literal: Const { ty: fn(usize) -> bool {use_x}, val: Value(<ZST>) }
+ StorageLive(_8);
+ StorageLive(_9);
+ _9 = (*_6);
+ _8 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(move _9) -> [return: bb3, unwind: bb7];
}
bb3: {
- StorageDead(_9); // bb3[0]: scope 3 at $DIR/region_subtyping_basic.rs:+5:17: +5:18
- StorageDead(_8); // bb3[1]: scope 3 at $DIR/region_subtyping_basic.rs:+5:18: +5:19
- _0 = const ConstValue(ZeroSized: ()); // bb3[2]: scope 3 at $DIR/region_subtyping_basic.rs:+4:13: +6:6
- goto -> bb6; // bb3[3]: scope 3 at $DIR/region_subtyping_basic.rs:+4:5: +8:6
+ StorageDead(_9);
+ StorageDead(_8);
+ _0 = const ConstValue(ZeroSized: ());
+ goto -> bb6;
}
bb4: {
- StorageLive(_10); // bb4[0]: scope 3 at $DIR/region_subtyping_basic.rs:+7:9: +7:18
- _10 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(const ConstValue(Scalar(0x00000016): usize)) -> [return: bb5, unwind: bb7]; // bb4[1]: scope 3 at $DIR/region_subtyping_basic.rs:+7:9: +7:18
- // mir::Constant
- // + span: $DIR/region_subtyping_basic.rs:23:9: 23:14
- // + literal: Const { ty: fn(usize) -> bool {use_x}, val: Value(<ZST>) }
+ StorageLive(_10);
+ _10 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(const ConstValue(Scalar(0x00000016): usize)) -> [return: bb5, unwind: bb7];
}
bb5: {
- StorageDead(_10); // bb5[0]: scope 3 at $DIR/region_subtyping_basic.rs:+7:18: +7:19
- _0 = const ConstValue(ZeroSized: ()); // bb5[1]: scope 3 at $DIR/region_subtyping_basic.rs:+6:12: +8:6
- goto -> bb6; // bb5[2]: scope 3 at $DIR/region_subtyping_basic.rs:+4:5: +8:6
+ StorageDead(_10);
+ _0 = const ConstValue(ZeroSized: ());
+ goto -> bb6;
}
bb6: {
- StorageDead(_7); // bb6[0]: scope 3 at $DIR/region_subtyping_basic.rs:+8:5: +8:6
- StorageDead(_6); // bb6[1]: scope 2 at $DIR/region_subtyping_basic.rs:+9:1: +9:2
- StorageDead(_3); // bb6[2]: scope 1 at $DIR/region_subtyping_basic.rs:+9:1: +9:2
- StorageDead(_2); // bb6[3]: scope 1 at $DIR/region_subtyping_basic.rs:+9:1: +9:2
- StorageDead(_1); // bb6[4]: scope 0 at $DIR/region_subtyping_basic.rs:+9:1: +9:2
- return; // bb6[5]: scope 0 at $DIR/region_subtyping_basic.rs:+9:2: +9:2
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
bb7 (cleanup): {
- resume; // bb7[0]: scope 0 at $DIR/region_subtyping_basic.rs:+0:1: +9:2
+ resume;
}
}
diff --git a/tests/mir-opt/nll/region_subtyping_basic.main.nll.0.64bit.mir b/tests/mir-opt/nll/region_subtyping_basic.main.nll.0.64bit.mir
index 22ad24f8d..83b851eed 100644
--- a/tests/mir-opt/nll/region_subtyping_basic.main.nll.0.64bit.mir
+++ b/tests/mir-opt/nll/region_subtyping_basic.main.nll.0.64bit.mir
@@ -21,91 +21,85 @@
| '?3: '?4 due to Assignment at Single(bb1[3]) ($DIR/region_subtyping_basic.rs:19:13: 19:14 (#0)
|
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/region_subtyping_basic.rs:+0:11: +0:11
- let mut _1: [usize; Const { ty: usize, kind: Leaf(0x0000000000000003) }]; // in scope 0 at $DIR/region_subtyping_basic.rs:+1:9: +1:14
- let _3: usize; // in scope 0 at $DIR/region_subtyping_basic.rs:+2:16: +2:17
- let mut _4: usize; // in scope 0 at $DIR/region_subtyping_basic.rs:+2:14: +2:18
- let mut _5: bool; // in scope 0 at $DIR/region_subtyping_basic.rs:+2:14: +2:18
- let mut _7: bool; // in scope 0 at $DIR/region_subtyping_basic.rs:+4:8: +4:12
- let _8: bool; // in scope 0 at $DIR/region_subtyping_basic.rs:+5:9: +5:18
- let mut _9: usize; // in scope 0 at $DIR/region_subtyping_basic.rs:+5:15: +5:17
- let _10: bool; // in scope 0 at $DIR/region_subtyping_basic.rs:+7:9: +7:18
+ let mut _0: ();
+ let mut _1: [usize; Const { ty: usize, kind: Leaf(0x0000000000000003) }];
+ let _3: usize;
+ let mut _4: usize;
+ let mut _5: bool;
+ let mut _7: bool;
+ let _8: bool;
+ let mut _9: usize;
+ let _10: bool;
scope 1 {
- debug v => _1; // in scope 1 at $DIR/region_subtyping_basic.rs:+1:9: +1:14
- let _2: &'?3 usize; // in scope 1 at $DIR/region_subtyping_basic.rs:+2:9: +2:10
+ debug v => _1;
+ let _2: &'?3 usize;
scope 2 {
- debug p => _2; // in scope 2 at $DIR/region_subtyping_basic.rs:+2:9: +2:10
- let _6: &'?4 usize; // in scope 2 at $DIR/region_subtyping_basic.rs:+3:9: +3:10
+ debug p => _2;
+ let _6: &'?4 usize;
scope 3 {
- debug q => _6; // in scope 3 at $DIR/region_subtyping_basic.rs:+3:9: +3:10
+ debug q => _6;
}
}
}
bb0: {
- StorageLive(_1); // bb0[0]: scope 0 at $DIR/region_subtyping_basic.rs:+1:9: +1:14
- _1 = [const ConstValue(Scalar(0x0000000000000001): usize), const ConstValue(Scalar(0x0000000000000002): usize), const ConstValue(Scalar(0x0000000000000003): usize)]; // bb0[1]: scope 0 at $DIR/region_subtyping_basic.rs:+1:17: +1:26
- FakeRead(ForLet(None), _1); // bb0[2]: scope 0 at $DIR/region_subtyping_basic.rs:+1:9: +1:14
- StorageLive(_2); // bb0[3]: scope 1 at $DIR/region_subtyping_basic.rs:+2:9: +2:10
- StorageLive(_3); // bb0[4]: scope 1 at $DIR/region_subtyping_basic.rs:+2:16: +2:17
- _3 = const ConstValue(Scalar(0x0000000000000000): usize); // bb0[5]: scope 1 at $DIR/region_subtyping_basic.rs:+2:16: +2:17
- _4 = Len(_1); // bb0[6]: scope 1 at $DIR/region_subtyping_basic.rs:+2:14: +2:18
- _5 = Lt(_3, _4); // bb0[7]: scope 1 at $DIR/region_subtyping_basic.rs:+2:14: +2:18
- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind: bb7]; // bb0[8]: scope 1 at $DIR/region_subtyping_basic.rs:+2:14: +2:18
+ StorageLive(_1);
+ _1 = [const ConstValue(Scalar(0x0000000000000001): usize), const ConstValue(Scalar(0x0000000000000002): usize), const ConstValue(Scalar(0x0000000000000003): usize)];
+ FakeRead(ForLet(None), _1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = const ConstValue(Scalar(0x0000000000000000): usize);
+ _4 = Len(_1);
+ _5 = Lt(_3, _4);
+ assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind: bb7];
}
bb1: {
- _2 = &'?2 _1[_3]; // bb1[0]: scope 1 at $DIR/region_subtyping_basic.rs:+2:13: +2:18
- FakeRead(ForLet(None), _2); // bb1[1]: scope 1 at $DIR/region_subtyping_basic.rs:+2:9: +2:10
- StorageLive(_6); // bb1[2]: scope 2 at $DIR/region_subtyping_basic.rs:+3:9: +3:10
- _6 = _2; // bb1[3]: scope 2 at $DIR/region_subtyping_basic.rs:+3:13: +3:14
- FakeRead(ForLet(None), _6); // bb1[4]: scope 2 at $DIR/region_subtyping_basic.rs:+3:9: +3:10
- StorageLive(_7); // bb1[5]: scope 3 at $DIR/region_subtyping_basic.rs:+4:8: +4:12
- _7 = const ConstValue(Scalar(0x01): bool); // bb1[6]: scope 3 at $DIR/region_subtyping_basic.rs:+4:8: +4:12
- switchInt(move _7) -> [0: bb4, otherwise: bb2]; // bb1[7]: scope 3 at $DIR/region_subtyping_basic.rs:+4:8: +4:12
+ _2 = &'?2 _1[_3];
+ FakeRead(ForLet(None), _2);
+ StorageLive(_6);
+ _6 = _2;
+ FakeRead(ForLet(None), _6);
+ StorageLive(_7);
+ _7 = const ConstValue(Scalar(0x01): bool);
+ switchInt(move _7) -> [0: bb4, otherwise: bb2];
}
bb2: {
- StorageLive(_8); // bb2[0]: scope 3 at $DIR/region_subtyping_basic.rs:+5:9: +5:18
- StorageLive(_9); // bb2[1]: scope 3 at $DIR/region_subtyping_basic.rs:+5:15: +5:17
- _9 = (*_6); // bb2[2]: scope 3 at $DIR/region_subtyping_basic.rs:+5:15: +5:17
- _8 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(move _9) -> [return: bb3, unwind: bb7]; // bb2[3]: scope 3 at $DIR/region_subtyping_basic.rs:+5:9: +5:18
- // mir::Constant
- // + span: $DIR/region_subtyping_basic.rs:21:9: 21:14
- // + literal: Const { ty: fn(usize) -> bool {use_x}, val: Value(<ZST>) }
+ StorageLive(_8);
+ StorageLive(_9);
+ _9 = (*_6);
+ _8 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(move _9) -> [return: bb3, unwind: bb7];
}
bb3: {
- StorageDead(_9); // bb3[0]: scope 3 at $DIR/region_subtyping_basic.rs:+5:17: +5:18
- StorageDead(_8); // bb3[1]: scope 3 at $DIR/region_subtyping_basic.rs:+5:18: +5:19
- _0 = const ConstValue(ZeroSized: ()); // bb3[2]: scope 3 at $DIR/region_subtyping_basic.rs:+4:13: +6:6
- goto -> bb6; // bb3[3]: scope 3 at $DIR/region_subtyping_basic.rs:+4:5: +8:6
+ StorageDead(_9);
+ StorageDead(_8);
+ _0 = const ConstValue(ZeroSized: ());
+ goto -> bb6;
}
bb4: {
- StorageLive(_10); // bb4[0]: scope 3 at $DIR/region_subtyping_basic.rs:+7:9: +7:18
- _10 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(const ConstValue(Scalar(0x0000000000000016): usize)) -> [return: bb5, unwind: bb7]; // bb4[1]: scope 3 at $DIR/region_subtyping_basic.rs:+7:9: +7:18
- // mir::Constant
- // + span: $DIR/region_subtyping_basic.rs:23:9: 23:14
- // + literal: Const { ty: fn(usize) -> bool {use_x}, val: Value(<ZST>) }
+ StorageLive(_10);
+ _10 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(const ConstValue(Scalar(0x0000000000000016): usize)) -> [return: bb5, unwind: bb7];
}
bb5: {
- StorageDead(_10); // bb5[0]: scope 3 at $DIR/region_subtyping_basic.rs:+7:18: +7:19
- _0 = const ConstValue(ZeroSized: ()); // bb5[1]: scope 3 at $DIR/region_subtyping_basic.rs:+6:12: +8:6
- goto -> bb6; // bb5[2]: scope 3 at $DIR/region_subtyping_basic.rs:+4:5: +8:6
+ StorageDead(_10);
+ _0 = const ConstValue(ZeroSized: ());
+ goto -> bb6;
}
bb6: {
- StorageDead(_7); // bb6[0]: scope 3 at $DIR/region_subtyping_basic.rs:+8:5: +8:6
- StorageDead(_6); // bb6[1]: scope 2 at $DIR/region_subtyping_basic.rs:+9:1: +9:2
- StorageDead(_3); // bb6[2]: scope 1 at $DIR/region_subtyping_basic.rs:+9:1: +9:2
- StorageDead(_2); // bb6[3]: scope 1 at $DIR/region_subtyping_basic.rs:+9:1: +9:2
- StorageDead(_1); // bb6[4]: scope 0 at $DIR/region_subtyping_basic.rs:+9:1: +9:2
- return; // bb6[5]: scope 0 at $DIR/region_subtyping_basic.rs:+9:2: +9:2
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
bb7 (cleanup): {
- resume; // bb7[0]: scope 0 at $DIR/region_subtyping_basic.rs:+0:1: +9:2
+ resume;
}
}
diff --git a/tests/mir-opt/no_drop_for_inactive_variant.rs b/tests/mir-opt/no_drop_for_inactive_variant.rs
index 34e2b1a13..adbd1f353 100644
--- a/tests/mir-opt/no_drop_for_inactive_variant.rs
+++ b/tests/mir-opt/no_drop_for_inactive_variant.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Ensure that there are no drop terminators in `unwrap<T>` (except the one along the cleanup
// path).
diff --git a/tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.mir b/tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.mir
deleted file mode 100644
index 69327b7af..000000000
--- a/tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.mir
+++ /dev/null
@@ -1,49 +0,0 @@
-// MIR for `unwrap` after SimplifyCfg-elaborate-drops
-
-fn unwrap(_1: Option<T>) -> T {
- debug opt => _1; // in scope 0 at $DIR/no_drop_for_inactive_variant.rs:+0:14: +0:17
- let mut _0: T; // return place in scope 0 at $DIR/no_drop_for_inactive_variant.rs:+0:33: +0:34
- let mut _2: isize; // in scope 0 at $DIR/no_drop_for_inactive_variant.rs:+2:9: +2:16
- let _3: T; // in scope 0 at $DIR/no_drop_for_inactive_variant.rs:+2:14: +2:15
- let mut _4: !; // in scope 0 at $SRC_DIR/std/src/panic.rs:LL:COL
- let mut _5: isize; // in scope 0 at $DIR/no_drop_for_inactive_variant.rs:+5:1: +5:2
- let mut _6: isize; // in scope 0 at $DIR/no_drop_for_inactive_variant.rs:+5:1: +5:2
- let mut _7: isize; // in scope 0 at $DIR/no_drop_for_inactive_variant.rs:+5:1: +5:2
- scope 1 {
- debug x => _3; // in scope 1 at $DIR/no_drop_for_inactive_variant.rs:+2:14: +2:15
- }
-
- bb0: {
- _2 = discriminant(_1); // scope 0 at $DIR/no_drop_for_inactive_variant.rs:+1:11: +1:14
- switchInt(move _2) -> [0: bb1, 1: bb3, otherwise: bb2]; // scope 0 at $DIR/no_drop_for_inactive_variant.rs:+1:5: +1:14
- }
-
- bb1: {
- StorageLive(_4); // scope 0 at $SRC_DIR/std/src/panic.rs:LL:COL
- _4 = begin_panic::<&str>(const "explicit panic") -> bb4; // scope 0 at $SRC_DIR/std/src/panic.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/std/src/panic.rs:LL:COL
- // + literal: Const { ty: fn(&str) -> ! {begin_panic::<&str>}, val: Value(<ZST>) }
- // mir::Constant
- // + span: $SRC_DIR/std/src/panic.rs:LL:COL
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- }
-
- bb2: {
- unreachable; // scope 0 at $DIR/no_drop_for_inactive_variant.rs:+1:11: +1:14
- }
-
- bb3: {
- StorageLive(_3); // scope 0 at $DIR/no_drop_for_inactive_variant.rs:+2:14: +2:15
- _3 = move ((_1 as Some).0: T); // scope 0 at $DIR/no_drop_for_inactive_variant.rs:+2:14: +2:15
- _0 = move _3; // scope 1 at $DIR/no_drop_for_inactive_variant.rs:+2:20: +2:21
- StorageDead(_3); // scope 0 at $DIR/no_drop_for_inactive_variant.rs:+2:20: +2:21
- _5 = discriminant(_1); // scope 0 at $DIR/no_drop_for_inactive_variant.rs:+5:1: +5:2
- return; // scope 0 at $DIR/no_drop_for_inactive_variant.rs:+5:2: +5:2
- }
-
- bb4 (cleanup): {
- _7 = discriminant(_1); // scope 0 at $DIR/no_drop_for_inactive_variant.rs:+5:1: +5:2
- resume; // scope 0 at $DIR/no_drop_for_inactive_variant.rs:+0:1: +5:2
- }
-}
diff --git a/tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.panic-abort.mir b/tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.panic-abort.mir
new file mode 100644
index 000000000..086955236
--- /dev/null
+++ b/tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.panic-abort.mir
@@ -0,0 +1,38 @@
+// MIR for `unwrap` after SimplifyCfg-elaborate-drops
+
+fn unwrap(_1: Option<T>) -> T {
+ debug opt => _1;
+ let mut _0: T;
+ let mut _2: isize;
+ let _3: T;
+ let mut _4: !;
+ let mut _5: isize;
+ let mut _6: isize;
+ let mut _7: isize;
+ scope 1 {
+ debug x => _3;
+ }
+
+ bb0: {
+ _2 = discriminant(_1);
+ switchInt(move _2) -> [0: bb1, 1: bb3, otherwise: bb2];
+ }
+
+ bb1: {
+ StorageLive(_4);
+ _4 = begin_panic::<&str>(const "explicit panic") -> unwind unreachable;
+ }
+
+ bb2: {
+ unreachable;
+ }
+
+ bb3: {
+ StorageLive(_3);
+ _3 = move ((_1 as Some).0: T);
+ _0 = move _3;
+ StorageDead(_3);
+ _5 = discriminant(_1);
+ return;
+ }
+}
diff --git a/tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.panic-unwind.mir b/tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
new file mode 100644
index 000000000..6276d8548
--- /dev/null
+++ b/tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
@@ -0,0 +1,43 @@
+// MIR for `unwrap` after SimplifyCfg-elaborate-drops
+
+fn unwrap(_1: Option<T>) -> T {
+ debug opt => _1;
+ let mut _0: T;
+ let mut _2: isize;
+ let _3: T;
+ let mut _4: !;
+ let mut _5: isize;
+ let mut _6: isize;
+ let mut _7: isize;
+ scope 1 {
+ debug x => _3;
+ }
+
+ bb0: {
+ _2 = discriminant(_1);
+ switchInt(move _2) -> [0: bb1, 1: bb3, otherwise: bb2];
+ }
+
+ bb1: {
+ StorageLive(_4);
+ _4 = begin_panic::<&str>(const "explicit panic") -> bb4;
+ }
+
+ bb2: {
+ unreachable;
+ }
+
+ bb3: {
+ StorageLive(_3);
+ _3 = move ((_1 as Some).0: T);
+ _0 = move _3;
+ StorageDead(_3);
+ _5 = discriminant(_1);
+ return;
+ }
+
+ bb4 (cleanup): {
+ _7 = discriminant(_1);
+ resume;
+ }
+}
diff --git a/tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.mir b/tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.mir
deleted file mode 100644
index 950f8758e..000000000
--- a/tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.mir
+++ /dev/null
@@ -1,49 +0,0 @@
-// MIR for `main` before ElaborateDrops
-
-fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/no_spurious_drop_after_call.rs:+0:11: +0:11
- let _1: (); // in scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:5: +1:35
- let mut _2: std::string::String; // in scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:20: +1:34
- let mut _3: &str; // in scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:20: +1:34
- let _4: &str; // in scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:20: +1:22
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:5: +1:35
- StorageLive(_2); // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:20: +1:34
- StorageLive(_3); // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:20: +1:34
- StorageLive(_4); // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:20: +1:22
- _4 = const ""; // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:20: +1:22
- // mir::Constant
- // + span: $DIR/no_spurious_drop_after_call.rs:9:20: 9:22
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _3 = &(*_4); // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:20: +1:34
- _2 = <str as ToString>::to_string(move _3) -> bb1; // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:20: +1:34
- // mir::Constant
- // + span: $DIR/no_spurious_drop_after_call.rs:9:23: 9:32
- // + literal: Const { ty: for<'a> fn(&'a str) -> String {<str as ToString>::to_string}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_3); // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:33: +1:34
- _1 = std::mem::drop::<String>(move _2) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:5: +1:35
- // mir::Constant
- // + span: $DIR/no_spurious_drop_after_call.rs:9:5: 9:19
- // + literal: Const { ty: fn(String) {std::mem::drop::<String>}, val: Value(<ZST>) }
- }
-
- bb2: {
- StorageDead(_2); // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:34: +1:35
- StorageDead(_4); // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:35: +1:36
- StorageDead(_1); // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:35: +1:36
- _0 = const (); // scope 0 at $DIR/no_spurious_drop_after_call.rs:+0:11: +2:2
- return; // scope 0 at $DIR/no_spurious_drop_after_call.rs:+2:2: +2:2
- }
-
- bb3 (cleanup): {
- drop(_2) -> [return: bb4, unwind terminate]; // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:34: +1:35
- }
-
- bb4 (cleanup): {
- resume; // scope 0 at $DIR/no_spurious_drop_after_call.rs:+0:1: +2:2
- }
-}
diff --git a/tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.panic-abort.mir b/tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.panic-abort.mir
new file mode 100644
index 000000000..e22fc7d54
--- /dev/null
+++ b/tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.panic-abort.mir
@@ -0,0 +1,40 @@
+// MIR for `main` before ElaborateDrops
+
+fn main() -> () {
+ let mut _0: ();
+ let _1: ();
+ let mut _2: std::string::String;
+ let mut _3: &str;
+ let _4: &str;
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = const "";
+ _3 = &(*_4);
+ _2 = <str as ToString>::to_string(move _3) -> [return: bb1, unwind: bb4];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ _1 = std::mem::drop::<String>(move _2) -> [return: bb2, unwind: bb3];
+ }
+
+ bb2: {
+ StorageDead(_2);
+ StorageDead(_4);
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+
+ bb3 (cleanup): {
+ drop(_2) -> [return: bb4, unwind terminate];
+ }
+
+ bb4 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.panic-unwind.mir b/tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.panic-unwind.mir
new file mode 100644
index 000000000..6fb107929
--- /dev/null
+++ b/tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.panic-unwind.mir
@@ -0,0 +1,40 @@
+// MIR for `main` before ElaborateDrops
+
+fn main() -> () {
+ let mut _0: ();
+ let _1: ();
+ let mut _2: std::string::String;
+ let mut _3: &str;
+ let _4: &str;
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = const "";
+ _3 = &(*_4);
+ _2 = <str as ToString>::to_string(move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ _1 = std::mem::drop::<String>(move _2) -> [return: bb2, unwind: bb3];
+ }
+
+ bb2: {
+ StorageDead(_2);
+ StorageDead(_4);
+ StorageDead(_1);
+ _0 = const ();
+ return;
+ }
+
+ bb3 (cleanup): {
+ drop(_2) -> [return: bb4, unwind terminate];
+ }
+
+ bb4 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/no_spurious_drop_after_call.rs b/tests/mir-opt/no_spurious_drop_after_call.rs
index bb5bb9aa4..71f050502 100644
--- a/tests/mir-opt/no_spurious_drop_after_call.rs
+++ b/tests/mir-opt/no_spurious_drop_after_call.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Test that after the call to `std::mem::drop` we do not generate a
// MIR drop of the argument. (We used to have a `DROP(_2)` in the code
diff --git a/tests/mir-opt/not_equal_false.opt.InstSimplify.diff b/tests/mir-opt/not_equal_false.opt.InstSimplify.diff
index 8e7776a0b..71353be24 100644
--- a/tests/mir-opt/not_equal_false.opt.InstSimplify.diff
+++ b/tests/mir-opt/not_equal_false.opt.InstSimplify.diff
@@ -2,34 +2,34 @@
+ // MIR for `opt` after InstSimplify
fn opt(_1: bool) -> u32 {
- debug x => _1; // in scope 0 at $DIR/not_equal_false.rs:+0:8: +0:9
- let mut _0: u32; // return place in scope 0 at $DIR/not_equal_false.rs:+0:20: +0:23
- let mut _2: bool; // in scope 0 at $DIR/not_equal_false.rs:+1:8: +1:18
- let mut _3: bool; // in scope 0 at $DIR/not_equal_false.rs:+1:8: +1:9
+ debug x => _1;
+ let mut _0: u32;
+ let mut _2: bool;
+ let mut _3: bool;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/not_equal_false.rs:+1:8: +1:18
- StorageLive(_3); // scope 0 at $DIR/not_equal_false.rs:+1:8: +1:9
- _3 = _1; // scope 0 at $DIR/not_equal_false.rs:+1:8: +1:9
-- _2 = Ne(move _3, const false); // scope 0 at $DIR/not_equal_false.rs:+1:8: +1:18
-+ _2 = move _3; // scope 0 at $DIR/not_equal_false.rs:+1:8: +1:18
- StorageDead(_3); // scope 0 at $DIR/not_equal_false.rs:+1:17: +1:18
- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/not_equal_false.rs:+1:8: +1:18
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+- _2 = Ne(move _3, const false);
++ _2 = move _3;
+ StorageDead(_3);
+ switchInt(move _2) -> [0: bb2, otherwise: bb1];
}
bb1: {
- _0 = const 0_u32; // scope 0 at $DIR/not_equal_false.rs:+1:21: +1:22
- goto -> bb3; // scope 0 at $DIR/not_equal_false.rs:+1:5: +1:35
+ _0 = const 0_u32;
+ goto -> bb3;
}
bb2: {
- _0 = const 1_u32; // scope 0 at $DIR/not_equal_false.rs:+1:32: +1:33
- goto -> bb3; // scope 0 at $DIR/not_equal_false.rs:+1:5: +1:35
+ _0 = const 1_u32;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/not_equal_false.rs:+1:34: +1:35
- return; // scope 0 at $DIR/not_equal_false.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/nrvo_miscompile_111005.wrong.RenameReturnPlace.diff b/tests/mir-opt/nrvo_miscompile_111005.wrong.RenameReturnPlace.diff
index a0acb6e7e..260b472da 100644
--- a/tests/mir-opt/nrvo_miscompile_111005.wrong.RenameReturnPlace.diff
+++ b/tests/mir-opt/nrvo_miscompile_111005.wrong.RenameReturnPlace.diff
@@ -2,17 +2,16 @@
+ // MIR for `wrong` after RenameReturnPlace
fn wrong(_1: char) -> char {
-- let mut _0: char; // return place in scope 0 at $DIR/nrvo_miscompile_111005.rs:+0:28: +0:32
-+ let mut _0: char; // return place in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _2: char; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: char;
+ let mut _2: char;
bb0: {
-- _2 = _1; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-- _0 = _2; // scope 0 at $DIR/nrvo_miscompile_111005.rs:+3:9: +3:19
-- _2 = const 'b'; // scope 0 at $DIR/nrvo_miscompile_111005.rs:+4:9: +4:19
-+ _0 = _1; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-+ _0 = const 'b'; // scope 0 at $DIR/nrvo_miscompile_111005.rs:+4:9: +4:19
- return; // scope 0 at $DIR/nrvo_miscompile_111005.rs:+5:9: +5:17
+- _2 = _1;
+- _0 = _2;
+- _2 = const 'b';
++ _0 = _1;
++ _0 = const 'b';
+ return;
}
}
diff --git a/tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.diff b/tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.diff
deleted file mode 100644
index 61a16065b..000000000
--- a/tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.diff
+++ /dev/null
@@ -1,43 +0,0 @@
-- // MIR for `nrvo` before RenameReturnPlace
-+ // MIR for `nrvo` after RenameReturnPlace
-
- fn nrvo(_1: for<'a> fn(&'a mut [u8; 1024])) -> [u8; 1024] {
- debug init => _1; // in scope 0 at $DIR/nrvo_simple.rs:+0:9: +0:13
-- let mut _0: [u8; 1024]; // return place in scope 0 at $DIR/nrvo_simple.rs:+0:39: +0:49
-+ let mut _0: [u8; 1024]; // return place in scope 0 at $DIR/nrvo_simple.rs:+1:9: +1:16
- let mut _2: [u8; 1024]; // in scope 0 at $DIR/nrvo_simple.rs:+1:9: +1:16
- let _3: (); // in scope 0 at $DIR/nrvo_simple.rs:+2:5: +2:19
- let mut _4: for<'a> fn(&'a mut [u8; 1024]); // in scope 0 at $DIR/nrvo_simple.rs:+2:5: +2:9
- let mut _5: &mut [u8; 1024]; // in scope 0 at $DIR/nrvo_simple.rs:+2:10: +2:18
- let mut _6: &mut [u8; 1024]; // in scope 0 at $DIR/nrvo_simple.rs:+2:10: +2:18
- scope 1 {
-- debug buf => _2; // in scope 1 at $DIR/nrvo_simple.rs:+1:9: +1:16
-+ debug buf => _0; // in scope 1 at $DIR/nrvo_simple.rs:+1:9: +1:16
- }
-
- bb0: {
-- StorageLive(_2); // scope 0 at $DIR/nrvo_simple.rs:+1:9: +1:16
-- _2 = [const 0_u8; 1024]; // scope 0 at $DIR/nrvo_simple.rs:+1:19: +1:28
-+ _0 = [const 0_u8; 1024]; // scope 0 at $DIR/nrvo_simple.rs:+1:19: +1:28
- StorageLive(_3); // scope 1 at $DIR/nrvo_simple.rs:+2:5: +2:19
- StorageLive(_4); // scope 1 at $DIR/nrvo_simple.rs:+2:5: +2:9
- _4 = _1; // scope 1 at $DIR/nrvo_simple.rs:+2:5: +2:9
- StorageLive(_5); // scope 1 at $DIR/nrvo_simple.rs:+2:10: +2:18
- StorageLive(_6); // scope 1 at $DIR/nrvo_simple.rs:+2:10: +2:18
-- _6 = &mut _2; // scope 1 at $DIR/nrvo_simple.rs:+2:10: +2:18
-+ _6 = &mut _0; // scope 1 at $DIR/nrvo_simple.rs:+2:10: +2:18
- _5 = &mut (*_6); // scope 1 at $DIR/nrvo_simple.rs:+2:10: +2:18
- _3 = move _4(move _5) -> bb1; // scope 1 at $DIR/nrvo_simple.rs:+2:5: +2:19
- }
-
- bb1: {
- StorageDead(_5); // scope 1 at $DIR/nrvo_simple.rs:+2:18: +2:19
- StorageDead(_4); // scope 1 at $DIR/nrvo_simple.rs:+2:18: +2:19
- StorageDead(_6); // scope 1 at $DIR/nrvo_simple.rs:+2:19: +2:20
- StorageDead(_3); // scope 1 at $DIR/nrvo_simple.rs:+2:19: +2:20
-- _0 = _2; // scope 1 at $DIR/nrvo_simple.rs:+3:5: +3:8
-- StorageDead(_2); // scope 0 at $DIR/nrvo_simple.rs:+4:1: +4:2
- return; // scope 0 at $DIR/nrvo_simple.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.panic-abort.diff b/tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.panic-abort.diff
new file mode 100644
index 000000000..f7bc5559a
--- /dev/null
+++ b/tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.panic-abort.diff
@@ -0,0 +1,42 @@
+- // MIR for `nrvo` before RenameReturnPlace
++ // MIR for `nrvo` after RenameReturnPlace
+
+ fn nrvo(_1: for<'a> fn(&'a mut [u8; 1024])) -> [u8; 1024] {
+ debug init => _1;
+ let mut _0: [u8; 1024];
+ let mut _2: [u8; 1024];
+ let _3: ();
+ let mut _4: for<'a> fn(&'a mut [u8; 1024]);
+ let mut _5: &mut [u8; 1024];
+ let mut _6: &mut [u8; 1024];
+ scope 1 {
+- debug buf => _2;
++ debug buf => _0;
+ }
+
+ bb0: {
+- StorageLive(_2);
+- _2 = [const 0_u8; 1024];
++ _0 = [const 0_u8; 1024];
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ StorageLive(_6);
+- _6 = &mut _2;
++ _6 = &mut _0;
+ _5 = &mut (*_6);
+ _3 = move _4(move _5) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_6);
+ StorageDead(_3);
+- _0 = _2;
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.panic-unwind.diff b/tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.panic-unwind.diff
new file mode 100644
index 000000000..3df8e567f
--- /dev/null
+++ b/tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.panic-unwind.diff
@@ -0,0 +1,42 @@
+- // MIR for `nrvo` before RenameReturnPlace
++ // MIR for `nrvo` after RenameReturnPlace
+
+ fn nrvo(_1: for<'a> fn(&'a mut [u8; 1024])) -> [u8; 1024] {
+ debug init => _1;
+ let mut _0: [u8; 1024];
+ let mut _2: [u8; 1024];
+ let _3: ();
+ let mut _4: for<'a> fn(&'a mut [u8; 1024]);
+ let mut _5: &mut [u8; 1024];
+ let mut _6: &mut [u8; 1024];
+ scope 1 {
+- debug buf => _2;
++ debug buf => _0;
+ }
+
+ bb0: {
+- StorageLive(_2);
+- _2 = [const 0_u8; 1024];
++ _0 = [const 0_u8; 1024];
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = _1;
+ StorageLive(_5);
+ StorageLive(_6);
+- _6 = &mut _2;
++ _6 = &mut _0;
+ _5 = &mut (*_6);
+ _3 = move _4(move _5) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_6);
+ StorageDead(_3);
+- _0 = _2;
+- StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/nrvo_simple.rs b/tests/mir-opt/nrvo_simple.rs
index 525dfe426..9e822ed51 100644
--- a/tests/mir-opt/nrvo_simple.rs
+++ b/tests/mir-opt/nrvo_simple.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: RenameReturnPlace
// EMIT_MIR nrvo_simple.nrvo.RenameReturnPlace.diff
diff --git a/tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.mir b/tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.mir
deleted file mode 100644
index 81b96e3b6..000000000
--- a/tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.mir
+++ /dev/null
@@ -1,55 +0,0 @@
-// MIR for `main` after SimplifyCfg-elaborate-drops
-
-fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/packed_struct_drop_aligned.rs:+0:11: +0:11
- let mut _1: Packed; // in scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:9: +1:14
- let mut _2: Aligned; // in scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:24: +1:42
- let mut _3: Droppy; // in scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:32: +1:41
- let mut _4: Aligned; // in scope 0 at $DIR/packed_struct_drop_aligned.rs:+2:11: +2:29
- let mut _5: Droppy; // in scope 0 at $DIR/packed_struct_drop_aligned.rs:+2:19: +2:28
- let mut _6: Aligned; // in scope 0 at $DIR/packed_struct_drop_aligned.rs:+2:5: +2:8
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/packed_struct_drop_aligned.rs:+1:9: +1:14
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:9: +1:14
- StorageLive(_2); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:24: +1:42
- StorageLive(_3); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:32: +1:41
- _3 = Droppy(const 0_usize); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:32: +1:41
- _2 = Aligned(move _3); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:24: +1:42
- StorageDead(_3); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:41: +1:42
- _1 = Packed(move _2); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:17: +1:43
- StorageDead(_2); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:42: +1:43
- StorageLive(_4); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:11: +2:29
- StorageLive(_5); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:19: +2:28
- _5 = Droppy(const 0_usize); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:19: +2:28
- _4 = Aligned(move _5); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:11: +2:29
- StorageDead(_5); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:28: +2:29
- StorageLive(_6); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:5: +2:8
- _6 = move (_1.0: Aligned); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:5: +2:8
- drop(_6) -> [return: bb4, unwind: bb1]; // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:5: +2:8
- }
-
- bb1 (cleanup): {
- (_1.0: Aligned) = move _4; // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:5: +2:8
- drop(_1) -> [return: bb3, unwind terminate]; // scope 0 at $DIR/packed_struct_drop_aligned.rs:+3:1: +3:2
- }
-
- bb2: {
- StorageDead(_1); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+3:1: +3:2
- return; // scope 0 at $DIR/packed_struct_drop_aligned.rs:+3:2: +3:2
- }
-
- bb3 (cleanup): {
- resume; // scope 0 at $DIR/packed_struct_drop_aligned.rs:+0:1: +3:2
- }
-
- bb4: {
- StorageDead(_6); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:5: +2:8
- (_1.0: Aligned) = move _4; // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:5: +2:8
- StorageDead(_4); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:28: +2:29
- _0 = const (); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+0:11: +3:2
- drop(_1) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/packed_struct_drop_aligned.rs:+3:1: +3:2
- }
-}
diff --git a/tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir b/tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir
new file mode 100644
index 000000000..089adff0c
--- /dev/null
+++ b/tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir
@@ -0,0 +1,46 @@
+// MIR for `main` after SimplifyCfg-elaborate-drops
+
+fn main() -> () {
+ let mut _0: ();
+ let mut _1: Packed;
+ let mut _2: Aligned;
+ let mut _3: Droppy;
+ let mut _4: Aligned;
+ let mut _5: Droppy;
+ let mut _6: Aligned;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = Droppy(const 0_usize);
+ _2 = Aligned(move _3);
+ StorageDead(_3);
+ _1 = Packed(move _2);
+ StorageDead(_2);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = Droppy(const 0_usize);
+ _4 = Aligned(move _5);
+ StorageDead(_5);
+ StorageLive(_6);
+ _6 = move (_1.0: Aligned);
+ drop(_6) -> [return: bb2, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_1);
+ return;
+ }
+
+ bb2: {
+ StorageDead(_6);
+ (_1.0: Aligned) = move _4;
+ StorageDead(_4);
+ _0 = const ();
+ drop(_1) -> [return: bb1, unwind unreachable];
+ }
+}
diff --git a/tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir b/tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
new file mode 100644
index 000000000..bc0479002
--- /dev/null
+++ b/tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
@@ -0,0 +1,55 @@
+// MIR for `main` after SimplifyCfg-elaborate-drops
+
+fn main() -> () {
+ let mut _0: ();
+ let mut _1: Packed;
+ let mut _2: Aligned;
+ let mut _3: Droppy;
+ let mut _4: Aligned;
+ let mut _5: Droppy;
+ let mut _6: Aligned;
+ scope 1 {
+ debug x => _1;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = Droppy(const 0_usize);
+ _2 = Aligned(move _3);
+ StorageDead(_3);
+ _1 = Packed(move _2);
+ StorageDead(_2);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = Droppy(const 0_usize);
+ _4 = Aligned(move _5);
+ StorageDead(_5);
+ StorageLive(_6);
+ _6 = move (_1.0: Aligned);
+ drop(_6) -> [return: bb4, unwind: bb1];
+ }
+
+ bb1 (cleanup): {
+ (_1.0: Aligned) = move _4;
+ drop(_1) -> [return: bb3, unwind terminate];
+ }
+
+ bb2: {
+ StorageDead(_1);
+ return;
+ }
+
+ bb3 (cleanup): {
+ resume;
+ }
+
+ bb4: {
+ StorageDead(_6);
+ (_1.0: Aligned) = move _4;
+ StorageDead(_4);
+ _0 = const ();
+ drop(_1) -> [return: bb2, unwind: bb3];
+ }
+}
diff --git a/tests/mir-opt/packed_struct_drop_aligned.rs b/tests/mir-opt/packed_struct_drop_aligned.rs
index cb6524260..f88a68353 100644
--- a/tests/mir-opt/packed_struct_drop_aligned.rs
+++ b/tests/mir-opt/packed_struct_drop_aligned.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// EMIT_MIR packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.mir
diff --git a/tests/mir-opt/pre-codegen/chained_comparison.bitand.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/chained_comparison.bitand.PreCodegen.after.mir
new file mode 100644
index 000000000..99ca659c6
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/chained_comparison.bitand.PreCodegen.after.mir
@@ -0,0 +1,84 @@
+// MIR for `bitand` after PreCodegen
+
+fn bitand(_1: &Blueprint, _2: &Blueprint) -> bool {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: bool;
+ let mut _3: u32;
+ let mut _4: u32;
+ let mut _5: bool;
+ let mut _6: u32;
+ let mut _7: u32;
+ let mut _8: bool;
+ let mut _9: bool;
+ let mut _10: u32;
+ let mut _11: u32;
+ let mut _12: bool;
+ let mut _13: bool;
+ let mut _14: u32;
+ let mut _15: u32;
+ let mut _16: bool;
+ let mut _17: bool;
+ let mut _18: u32;
+ let mut _19: u32;
+ let mut _20: bool;
+
+ bb0: {
+ StorageLive(_17);
+ StorageLive(_13);
+ StorageLive(_9);
+ StorageLive(_5);
+ StorageLive(_3);
+ _3 = ((*_1).0: u32);
+ StorageLive(_4);
+ _4 = ((*_2).0: u32);
+ _5 = Eq(move _3, move _4);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageLive(_8);
+ StorageLive(_6);
+ _6 = ((*_1).1: u32);
+ StorageLive(_7);
+ _7 = ((*_2).1: u32);
+ _8 = Eq(move _6, move _7);
+ StorageDead(_7);
+ StorageDead(_6);
+ _9 = BitAnd(move _5, move _8);
+ StorageDead(_8);
+ StorageDead(_5);
+ StorageLive(_12);
+ StorageLive(_10);
+ _10 = ((*_1).2: u32);
+ StorageLive(_11);
+ _11 = ((*_2).2: u32);
+ _12 = Eq(move _10, move _11);
+ StorageDead(_11);
+ StorageDead(_10);
+ _13 = BitAnd(move _9, move _12);
+ StorageDead(_12);
+ StorageDead(_9);
+ StorageLive(_16);
+ StorageLive(_14);
+ _14 = ((*_1).3: u32);
+ StorageLive(_15);
+ _15 = ((*_2).3: u32);
+ _16 = Eq(move _14, move _15);
+ StorageDead(_15);
+ StorageDead(_14);
+ _17 = BitAnd(move _13, move _16);
+ StorageDead(_16);
+ StorageDead(_13);
+ StorageLive(_20);
+ StorageLive(_18);
+ _18 = ((*_1).4: u32);
+ StorageLive(_19);
+ _19 = ((*_2).4: u32);
+ _20 = Eq(move _18, move _19);
+ StorageDead(_19);
+ StorageDead(_18);
+ _0 = BitAnd(move _17, move _20);
+ StorageDead(_20);
+ StorageDead(_17);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/chained_comparison.naive.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/chained_comparison.naive.PreCodegen.after.mir
new file mode 100644
index 000000000..c7fd397fc
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/chained_comparison.naive.PreCodegen.after.mir
@@ -0,0 +1,136 @@
+// MIR for `naive` after PreCodegen
+
+fn naive(_1: &Blueprint, _2: &Blueprint) -> bool {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: bool;
+ let mut _3: u32;
+ let mut _4: u32;
+ let mut _5: bool;
+ let mut _6: bool;
+ let mut _7: u32;
+ let mut _8: u32;
+ let mut _9: bool;
+ let mut _10: bool;
+ let mut _11: u32;
+ let mut _12: u32;
+ let mut _13: bool;
+ let mut _14: bool;
+ let mut _15: u32;
+ let mut _16: u32;
+ let mut _17: bool;
+ let mut _18: u32;
+ let mut _19: u32;
+ let mut _20: bool;
+
+ bb0: {
+ StorageLive(_14);
+ StorageLive(_10);
+ StorageLive(_6);
+ StorageLive(_5);
+ StorageLive(_3);
+ _3 = ((*_1).0: u32);
+ StorageLive(_4);
+ _4 = ((*_2).0: u32);
+ _5 = Eq(move _3, move _4);
+ StorageDead(_4);
+ StorageDead(_3);
+ switchInt(move _5) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ _6 = const false;
+ goto -> bb3;
+ }
+
+ bb2: {
+ StorageLive(_9);
+ StorageLive(_7);
+ _7 = ((*_1).1: u32);
+ StorageLive(_8);
+ _8 = ((*_2).1: u32);
+ _9 = Eq(move _7, move _8);
+ StorageDead(_8);
+ StorageDead(_7);
+ _6 = move _9;
+ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_9);
+ StorageDead(_5);
+ switchInt(move _6) -> [0: bb4, otherwise: bb5];
+ }
+
+ bb4: {
+ _10 = const false;
+ goto -> bb6;
+ }
+
+ bb5: {
+ StorageLive(_13);
+ StorageLive(_11);
+ _11 = ((*_1).2: u32);
+ StorageLive(_12);
+ _12 = ((*_2).2: u32);
+ _13 = Eq(move _11, move _12);
+ StorageDead(_12);
+ StorageDead(_11);
+ _10 = move _13;
+ goto -> bb6;
+ }
+
+ bb6: {
+ StorageDead(_13);
+ StorageDead(_6);
+ switchInt(move _10) -> [0: bb7, otherwise: bb8];
+ }
+
+ bb7: {
+ _14 = const false;
+ goto -> bb9;
+ }
+
+ bb8: {
+ StorageLive(_17);
+ StorageLive(_15);
+ _15 = ((*_1).3: u32);
+ StorageLive(_16);
+ _16 = ((*_2).3: u32);
+ _17 = Eq(move _15, move _16);
+ StorageDead(_16);
+ StorageDead(_15);
+ _14 = move _17;
+ goto -> bb9;
+ }
+
+ bb9: {
+ StorageDead(_17);
+ StorageDead(_10);
+ switchInt(move _14) -> [0: bb10, otherwise: bb11];
+ }
+
+ bb10: {
+ _0 = const false;
+ goto -> bb12;
+ }
+
+ bb11: {
+ StorageLive(_20);
+ StorageLive(_18);
+ _18 = ((*_1).4: u32);
+ StorageLive(_19);
+ _19 = ((*_2).4: u32);
+ _20 = Eq(move _18, move _19);
+ StorageDead(_19);
+ StorageDead(_18);
+ _0 = move _20;
+ goto -> bb12;
+ }
+
+ bb12: {
+ StorageDead(_20);
+ StorageDead(_14);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/chained_comparison.returning.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/chained_comparison.returning.PreCodegen.after.mir
new file mode 100644
index 000000000..1e619bc97
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/chained_comparison.returning.PreCodegen.after.mir
@@ -0,0 +1,126 @@
+// MIR for `returning` after PreCodegen
+
+fn returning(_1: &Blueprint, _2: &Blueprint) -> bool {
+ debug a => _1;
+ debug b => _2;
+ let mut _0: bool;
+ let mut _3: u32;
+ let mut _4: u32;
+ let mut _5: bool;
+ let mut _6: u32;
+ let mut _7: u32;
+ let mut _8: bool;
+ let mut _9: u32;
+ let mut _10: u32;
+ let mut _11: bool;
+ let mut _12: u32;
+ let mut _13: u32;
+ let mut _14: bool;
+ let mut _15: u32;
+ let mut _16: u32;
+ let mut _17: bool;
+
+ bb0: {
+ StorageLive(_5);
+ StorageLive(_3);
+ _3 = ((*_1).0: u32);
+ StorageLive(_4);
+ _4 = ((*_2).0: u32);
+ _5 = Ne(move _3, move _4);
+ StorageDead(_4);
+ StorageDead(_3);
+ switchInt(move _5) -> [0: bb1, otherwise: bb10];
+ }
+
+ bb1: {
+ StorageDead(_5);
+ StorageLive(_8);
+ StorageLive(_6);
+ _6 = ((*_1).1: u32);
+ StorageLive(_7);
+ _7 = ((*_2).1: u32);
+ _8 = Ne(move _6, move _7);
+ StorageDead(_7);
+ StorageDead(_6);
+ switchInt(move _8) -> [0: bb2, otherwise: bb9];
+ }
+
+ bb2: {
+ StorageDead(_8);
+ StorageLive(_11);
+ StorageLive(_9);
+ _9 = ((*_1).2: u32);
+ StorageLive(_10);
+ _10 = ((*_2).2: u32);
+ _11 = Ne(move _9, move _10);
+ StorageDead(_10);
+ StorageDead(_9);
+ switchInt(move _11) -> [0: bb3, otherwise: bb8];
+ }
+
+ bb3: {
+ StorageDead(_11);
+ StorageLive(_14);
+ StorageLive(_12);
+ _12 = ((*_1).3: u32);
+ StorageLive(_13);
+ _13 = ((*_2).3: u32);
+ _14 = Ne(move _12, move _13);
+ StorageDead(_13);
+ StorageDead(_12);
+ switchInt(move _14) -> [0: bb4, otherwise: bb7];
+ }
+
+ bb4: {
+ StorageDead(_14);
+ StorageLive(_17);
+ StorageLive(_15);
+ _15 = ((*_1).4: u32);
+ StorageLive(_16);
+ _16 = ((*_2).4: u32);
+ _17 = Ne(move _15, move _16);
+ StorageDead(_16);
+ StorageDead(_15);
+ switchInt(move _17) -> [0: bb5, otherwise: bb6];
+ }
+
+ bb5: {
+ StorageDead(_17);
+ _0 = const true;
+ goto -> bb11;
+ }
+
+ bb6: {
+ _0 = const false;
+ StorageDead(_17);
+ goto -> bb11;
+ }
+
+ bb7: {
+ _0 = const false;
+ StorageDead(_14);
+ goto -> bb11;
+ }
+
+ bb8: {
+ _0 = const false;
+ StorageDead(_11);
+ goto -> bb11;
+ }
+
+ bb9: {
+ _0 = const false;
+ StorageDead(_8);
+ goto -> bb11;
+ }
+
+ bb10: {
+ _0 = const false;
+ StorageDead(_5);
+ goto -> bb11;
+ }
+
+ bb11: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/chained_comparison.rs b/tests/mir-opt/pre-codegen/chained_comparison.rs
new file mode 100644
index 000000000..f7879140f
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/chained_comparison.rs
@@ -0,0 +1,51 @@
+// compile-flags: -O -Zmir-opt-level=2 -Cdebuginfo=2
+// ignore-debug
+
+#![crate_type = "lib"]
+
+pub struct Blueprint {
+ pub fuel_tank_size: u32,
+ pub payload: u32,
+ pub wheel_diameter: u32,
+ pub wheel_width: u32,
+ pub storage: u32,
+}
+
+pub fn naive(a: &Blueprint, b: &Blueprint) -> bool {
+ (a.fuel_tank_size == b.fuel_tank_size)
+ && (a.payload == b.payload)
+ && (a.wheel_diameter == b.wheel_diameter)
+ && (a.wheel_width == b.wheel_width)
+ && (a.storage == b.storage)
+}
+
+pub fn bitand(a: &Blueprint, b: &Blueprint) -> bool {
+ (a.fuel_tank_size == b.fuel_tank_size)
+ & (a.payload == b.payload)
+ & (a.wheel_diameter == b.wheel_diameter)
+ & (a.wheel_width == b.wheel_width)
+ & (a.storage == b.storage)
+}
+
+pub fn returning(a: &Blueprint, b: &Blueprint) -> bool {
+ if a.fuel_tank_size != b.fuel_tank_size {
+ return false;
+ }
+ if a.payload != b.payload {
+ return false;
+ }
+ if a.wheel_diameter != b.wheel_diameter {
+ return false;
+ }
+ if a.wheel_width != b.wheel_width {
+ return false;
+ }
+ if a.storage != b.storage {
+ return false;
+ }
+ true
+}
+
+// EMIT_MIR chained_comparison.naive.PreCodegen.after.mir
+// EMIT_MIR chained_comparison.bitand.PreCodegen.after.mir
+// EMIT_MIR chained_comparison.returning.PreCodegen.after.mir
diff --git a/tests/mir-opt/pre-codegen/checked_ops.checked_shl.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/checked_ops.checked_shl.PreCodegen.after.mir
new file mode 100644
index 000000000..70461b445
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/checked_ops.checked_shl.PreCodegen.after.mir
@@ -0,0 +1,84 @@
+// MIR for `checked_shl` after PreCodegen
+
+fn checked_shl(_1: u32, _2: u32) -> Option<u32> {
+ debug x => _1;
+ debug rhs => _2;
+ let mut _0: std::option::Option<u32>;
+ scope 1 (inlined core::num::<impl u32>::checked_shl) {
+ debug self => _1;
+ debug rhs => _2;
+ let mut _7: (u32, bool);
+ let _8: u32;
+ let _9: bool;
+ let mut _10: bool;
+ scope 2 {
+ debug a => _8;
+ debug b => _9;
+ }
+ scope 3 (inlined core::num::<impl u32>::overflowing_shl) {
+ debug self => _1;
+ debug rhs => _2;
+ let mut _5: u32;
+ let mut _6: bool;
+ scope 4 (inlined core::num::<impl u32>::wrapping_shl) {
+ debug self => _1;
+ debug rhs => _2;
+ let mut _3: u32;
+ let mut _4: u32;
+ scope 5 {
+ scope 6 (inlined core::num::<impl u32>::unchecked_shl) {
+ debug self => _1;
+ debug rhs => _4;
+ scope 7 {
+ }
+ }
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_8);
+ StorageLive(_9);
+ StorageLive(_7);
+ StorageLive(_5);
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = const 31_u32;
+ _4 = BitAnd(_2, move _3);
+ StorageDead(_3);
+ _5 = ShlUnchecked(_1, _4);
+ StorageDead(_4);
+ StorageLive(_6);
+ _6 = Ge(_2, const _);
+ _7 = (move _5, move _6);
+ StorageDead(_6);
+ StorageDead(_5);
+ _8 = (_7.0: u32);
+ _9 = (_7.1: bool);
+ StorageDead(_7);
+ StorageLive(_10);
+ _10 = unlikely(_9) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ switchInt(move _10) -> [0: bb2, otherwise: bb3];
+ }
+
+ bb2: {
+ _0 = Option::<u32>::Some(_8);
+ goto -> bb4;
+ }
+
+ bb3: {
+ _0 = Option::<u32>::None;
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_8);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/checked_ops.rs b/tests/mir-opt/pre-codegen/checked_ops.rs
new file mode 100644
index 000000000..dee43b0c6
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/checked_ops.rs
@@ -0,0 +1,17 @@
+// compile-flags: -O -Zmir-opt-level=2 -Cdebuginfo=2
+// needs-unwind
+// ignore-debug
+// only-x86_64
+
+#![crate_type = "lib"]
+#![feature(step_trait)]
+
+// EMIT_MIR checked_ops.step_forward.PreCodegen.after.mir
+pub fn step_forward(x: u32, n: usize) -> u32 {
+ std::iter::Step::forward(x, n)
+}
+
+// EMIT_MIR checked_ops.checked_shl.PreCodegen.after.mir
+pub fn checked_shl(x: u32, rhs: u32) -> Option<u32> {
+ x.checked_shl(rhs)
+}
diff --git a/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.mir
new file mode 100644
index 000000000..98c267e8e
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.mir
@@ -0,0 +1,61 @@
+// MIR for `step_forward` after PreCodegen
+
+fn step_forward(_1: u32, _2: usize) -> u32 {
+ debug x => _1;
+ debug n => _2;
+ let mut _0: u32;
+ scope 1 (inlined <u32 as Step>::forward) {
+ debug start => _1;
+ debug n => _2;
+ let _3: std::option::Option<u32>;
+ let mut _4: &std::option::Option<u32>;
+ let mut _7: bool;
+ let mut _8: u32;
+ scope 2 {
+ }
+ scope 3 (inlined Option::<u32>::is_none) {
+ debug self => _4;
+ let mut _6: bool;
+ scope 4 (inlined Option::<u32>::is_some) {
+ debug self => _4;
+ let mut _5: isize;
+ }
+ }
+ scope 5 (inlined core::num::<impl u32>::wrapping_add) {
+ debug self => _1;
+ debug rhs => _8;
+ }
+ }
+
+ bb0: {
+ StorageLive(_7);
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = <u32 as Step>::forward_checked(_1, _2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ _4 = &_3;
+ StorageLive(_6);
+ _5 = discriminant((*_4));
+ _6 = Eq(_5, const 1_isize);
+ _7 = Not(move _6);
+ StorageDead(_6);
+ StorageDead(_3);
+ StorageDead(_4);
+ switchInt(move _7) -> [0: bb3, otherwise: bb2];
+ }
+
+ bb2: {
+ assert(!const true, "attempt to compute `{} + {}`, which would overflow", const _, const 1_u32) -> [success: bb3, unwind continue];
+ }
+
+ bb3: {
+ StorageDead(_7);
+ StorageLive(_8);
+ _8 = _2 as u32 (IntToInt);
+ _0 = Add(_1, _8);
+ StorageDead(_8);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/duplicate_switch_targets.ub_if_b.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/duplicate_switch_targets.ub_if_b.PreCodegen.after.mir
index 0e885cf94..65d71199a 100644
--- a/tests/mir-opt/pre-codegen/duplicate_switch_targets.ub_if_b.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/duplicate_switch_targets.ub_if_b.PreCodegen.after.mir
@@ -1,27 +1,27 @@
// MIR for `ub_if_b` after PreCodegen
fn ub_if_b(_1: Thing) -> Thing {
- debug t => _1; // in scope 0 at $DIR/duplicate_switch_targets.rs:+0:23: +0:24
- let mut _0: Thing; // return place in scope 0 at $DIR/duplicate_switch_targets.rs:+0:36: +0:41
- let mut _2: isize; // in scope 0 at $DIR/duplicate_switch_targets.rs:+2:9: +2:17
- scope 1 (inlined unreachable_unchecked) { // at $DIR/duplicate_switch_targets.rs:15:21: 15:55
+ debug t => _1;
+ let mut _0: Thing;
+ let mut _2: isize;
+ scope 1 (inlined unreachable_unchecked) {
scope 2 {
- scope 3 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
+ scope 3 (inlined unreachable_unchecked::runtime) {
}
}
}
bb0: {
- _2 = discriminant(_1); // scope 0 at $DIR/duplicate_switch_targets.rs:+1:11: +1:12
- switchInt(move _2) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/duplicate_switch_targets.rs:+1:5: +1:12
+ _2 = discriminant(_1);
+ switchInt(move _2) -> [0: bb1, otherwise: bb2];
}
bb1: {
- unreachable; // scope 2 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
+ _0 = move _1;
+ return;
}
bb2: {
- _0 = move _1; // scope 0 at $DIR/duplicate_switch_targets.rs:+2:21: +2:22
- return; // scope 0 at $DIR/duplicate_switch_targets.rs:+5:2: +5:2
+ unreachable;
}
}
diff --git a/tests/mir-opt/pre-codegen/intrinsics.f_u64.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/intrinsics.f_u64.PreCodegen.after.mir
index 76e1fea2f..66acbbbb2 100644
--- a/tests/mir-opt/pre-codegen/intrinsics.f_u64.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/intrinsics.f_u64.PreCodegen.after.mir
@@ -1,26 +1,23 @@
// MIR for `f_u64` after PreCodegen
fn f_u64() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/intrinsics.rs:+0:16: +0:16
- let mut _1: u64; // in scope 0 at $DIR/intrinsics.rs:+1:5: +1:21
- scope 1 (inlined f_dispatch::<u64>) { // at $DIR/intrinsics.rs:19:5: 19:21
- debug t => const 0_u64; // in scope 1 at $DIR/intrinsics.rs:23:22: 23:23
- let _2: (); // in scope 1 at $DIR/intrinsics.rs:27:9: 27:21
- scope 2 (inlined std::mem::size_of::<u64>) { // at $DIR/intrinsics.rs:24:8: 24:32
+ let mut _0: ();
+ let mut _1: u64;
+ scope 1 (inlined f_dispatch::<u64>) {
+ debug t => const 0_u64;
+ let _2: ();
+ scope 2 (inlined std::mem::size_of::<u64>) {
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/intrinsics.rs:+1:5: +1:21
- _1 = const 0_u64; // scope 0 at $DIR/intrinsics.rs:+1:5: +1:21
- _2 = f_non_zst::<u64>(move _1) -> [return: bb1, unwind unreachable]; // scope 1 at $DIR/intrinsics.rs:27:9: 27:21
- // mir::Constant
- // + span: $DIR/intrinsics.rs:27:9: 27:18
- // + literal: Const { ty: fn(u64) {f_non_zst::<u64>}, val: Value(<ZST>) }
+ StorageLive(_1);
+ _1 = const 0_u64;
+ _2 = f_non_zst::<u64>(move _1) -> [return: bb1, unwind unreachable];
}
bb1: {
- StorageDead(_1); // scope 0 at $DIR/intrinsics.rs:+1:5: +1:21
- return; // scope 0 at $DIR/intrinsics.rs:+2:2: +2:2
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/pre-codegen/intrinsics.f_unit.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/intrinsics.f_unit.PreCodegen.after.mir
index 3d416de34..578cb2d70 100644
--- a/tests/mir-opt/pre-codegen/intrinsics.f_unit.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/intrinsics.f_unit.PreCodegen.after.mir
@@ -1,22 +1,19 @@
// MIR for `f_unit` after PreCodegen
fn f_unit() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/intrinsics.rs:+0:17: +0:17
- scope 1 (inlined f_dispatch::<()>) { // at $DIR/intrinsics.rs:13:5: 13:19
- debug t => const (); // in scope 1 at $DIR/intrinsics.rs:23:22: 23:23
- let _1: (); // in scope 1 at $DIR/intrinsics.rs:25:9: 25:17
- scope 2 (inlined std::mem::size_of::<()>) { // at $DIR/intrinsics.rs:24:8: 24:32
+ let mut _0: ();
+ scope 1 (inlined f_dispatch::<()>) {
+ debug t => const ();
+ let _1: ();
+ scope 2 (inlined std::mem::size_of::<()>) {
}
}
bb0: {
- _1 = f_zst::<()>(const ()) -> [return: bb1, unwind unreachable]; // scope 1 at $DIR/intrinsics.rs:25:9: 25:17
- // mir::Constant
- // + span: $DIR/intrinsics.rs:25:9: 25:14
- // + literal: Const { ty: fn(()) {f_zst::<()>}, val: Value(<ZST>) }
+ _1 = f_zst::<()>(const ()) -> [return: bb1, unwind unreachable];
}
bb1: {
- return; // scope 0 at $DIR/intrinsics.rs:+2:2: +2:2
+ return;
}
}
diff --git a/tests/mir-opt/pre-codegen/loops.filter_mapped.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/loops.filter_mapped.PreCodegen.after.mir
new file mode 100644
index 000000000..3b49cb711
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/loops.filter_mapped.PreCodegen.after.mir
@@ -0,0 +1,93 @@
+// MIR for `filter_mapped` after PreCodegen
+
+fn filter_mapped(_1: impl Iterator<Item = T>, _2: impl Fn(T) -> Option<U>) -> () {
+ debug iter => _1;
+ debug f => _2;
+ let mut _0: ();
+ let mut _3: std::iter::FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>>;
+ let mut _4: std::iter::FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>>;
+ let mut _5: std::iter::FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>>;
+ let mut _6: &mut std::iter::FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>>;
+ let mut _9: std::option::Option<U>;
+ let mut _10: isize;
+ let _12: ();
+ scope 1 {
+ debug iter => _5;
+ let _11: U;
+ scope 2 {
+ debug x => _11;
+ }
+ scope 4 (inlined <FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>> as Iterator>::next) {
+ debug self => _6;
+ let mut _7: &mut impl Iterator<Item = T>;
+ let mut _8: &mut impl Fn(T) -> Option<U>;
+ }
+ }
+ scope 3 (inlined <FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>> as IntoIterator>::into_iter) {
+ debug self => _3;
+ }
+
+ bb0: {
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = <impl Iterator<Item = T> as Iterator>::filter_map::<U, impl Fn(T) -> Option<U>>(move _1, move _2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ _4 = move _3;
+ StorageDead(_3);
+ StorageLive(_5);
+ _5 = move _4;
+ goto -> bb2;
+ }
+
+ bb2: {
+ StorageLive(_9);
+ _6 = &mut _5;
+ StorageLive(_7);
+ _7 = &mut ((*_6).0: impl Iterator<Item = T>);
+ StorageLive(_8);
+ _8 = &mut ((*_6).1: impl Fn(T) -> Option<U>);
+ _9 = <impl Iterator<Item = T> as Iterator>::find_map::<U, &mut impl Fn(T) -> Option<U>>(move _7, move _8) -> [return: bb3, unwind: bb9];
+ }
+
+ bb3: {
+ StorageDead(_8);
+ StorageDead(_7);
+ _10 = discriminant(_9);
+ switchInt(move _10) -> [0: bb4, 1: bb6, otherwise: bb8];
+ }
+
+ bb4: {
+ StorageDead(_9);
+ drop(_5) -> [return: bb5, unwind continue];
+ }
+
+ bb5: {
+ StorageDead(_5);
+ StorageDead(_4);
+ return;
+ }
+
+ bb6: {
+ _11 = move ((_9 as Some).0: U);
+ _12 = opaque::<U>(move _11) -> [return: bb7, unwind: bb9];
+ }
+
+ bb7: {
+ StorageDead(_9);
+ goto -> bb2;
+ }
+
+ bb8: {
+ unreachable;
+ }
+
+ bb9 (cleanup): {
+ drop(_5) -> [return: bb10, unwind terminate];
+ }
+
+ bb10 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/loops.int_range.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/loops.int_range.PreCodegen.after.mir
new file mode 100644
index 000000000..40bb3a37c
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/loops.int_range.PreCodegen.after.mir
@@ -0,0 +1,118 @@
+// MIR for `int_range` after PreCodegen
+
+fn int_range(_1: usize, _2: usize) -> () {
+ debug start => _1;
+ debug end => _2;
+ let mut _0: ();
+ let mut _3: std::ops::Range<usize>;
+ let mut _4: std::ops::Range<usize>;
+ let mut _5: &mut std::ops::Range<usize>;
+ let mut _11: std::option::Option<usize>;
+ let mut _14: isize;
+ let _16: ();
+ scope 1 {
+ debug iter => _4;
+ let _15: usize;
+ scope 2 {
+ debug i => _15;
+ }
+ scope 4 (inlined iter::range::<impl Iterator for std::ops::Range<usize>>::next) {
+ debug self => _5;
+ scope 5 (inlined <std::ops::Range<usize> as iter::range::RangeIteratorImpl>::spec_next) {
+ debug self => _5;
+ let mut _6: &usize;
+ let mut _7: &usize;
+ let mut _10: bool;
+ let _12: usize;
+ let mut _13: usize;
+ scope 6 {
+ debug old => _12;
+ scope 7 {
+ }
+ }
+ scope 8 (inlined cmp::impls::<impl PartialOrd for usize>::lt) {
+ debug self => _6;
+ debug other => _7;
+ let mut _8: usize;
+ let mut _9: usize;
+ }
+ }
+ }
+ }
+ scope 3 (inlined <std::ops::Range<usize> as IntoIterator>::into_iter) {
+ debug self => _3;
+ }
+
+ bb0: {
+ _3 = std::ops::Range::<usize> { start: _1, end: _2 };
+ StorageLive(_4);
+ _4 = move _3;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageLive(_11);
+ _5 = &mut _4;
+ StorageLive(_12);
+ StorageLive(_10);
+ StorageLive(_6);
+ _6 = &((*_5).0: usize);
+ StorageLive(_7);
+ _7 = &((*_5).1: usize);
+ StorageLive(_8);
+ _8 = (*_6);
+ StorageLive(_9);
+ _9 = (*_7);
+ _10 = Lt(move _8, move _9);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageDead(_6);
+ switchInt(move _10) -> [0: bb2, otherwise: bb3];
+ }
+
+ bb2: {
+ _11 = Option::<usize>::None;
+ goto -> bb5;
+ }
+
+ bb3: {
+ _12 = ((*_5).0: usize);
+ StorageLive(_13);
+ _13 = <usize as Step>::forward_unchecked(_12, const 1_usize) -> [return: bb4, unwind continue];
+ }
+
+ bb4: {
+ ((*_5).0: usize) = move _13;
+ StorageDead(_13);
+ _11 = Option::<usize>::Some(_12);
+ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_10);
+ StorageDead(_12);
+ _14 = discriminant(_11);
+ switchInt(move _14) -> [0: bb6, 1: bb7, otherwise: bb9];
+ }
+
+ bb6: {
+ StorageDead(_11);
+ StorageDead(_4);
+ return;
+ }
+
+ bb7: {
+ _15 = ((_11 as Some).0: usize);
+ _16 = opaque::<usize>(_15) -> [return: bb8, unwind continue];
+ }
+
+ bb8: {
+ StorageDead(_11);
+ goto -> bb1;
+ }
+
+ bb9: {
+ unreachable;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/loops.mapped.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/loops.mapped.PreCodegen.after.mir
new file mode 100644
index 000000000..e4e1d052e
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/loops.mapped.PreCodegen.after.mir
@@ -0,0 +1,82 @@
+// MIR for `mapped` after PreCodegen
+
+fn mapped(_1: impl Iterator<Item = T>, _2: impl Fn(T) -> U) -> () {
+ debug iter => _1;
+ debug f => _2;
+ let mut _0: ();
+ let mut _3: std::iter::Map<impl Iterator<Item = T>, impl Fn(T) -> U>;
+ let mut _4: std::iter::Map<impl Iterator<Item = T>, impl Fn(T) -> U>;
+ let mut _5: std::iter::Map<impl Iterator<Item = T>, impl Fn(T) -> U>;
+ let mut _6: &mut std::iter::Map<impl Iterator<Item = T>, impl Fn(T) -> U>;
+ let mut _7: std::option::Option<U>;
+ let mut _8: isize;
+ let _10: ();
+ scope 1 {
+ debug iter => _5;
+ let _9: U;
+ scope 2 {
+ debug x => _9;
+ }
+ }
+ scope 3 (inlined <Map<impl Iterator<Item = T>, impl Fn(T) -> U> as IntoIterator>::into_iter) {
+ debug self => _3;
+ }
+
+ bb0: {
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = <impl Iterator<Item = T> as Iterator>::map::<U, impl Fn(T) -> U>(move _1, move _2) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ _4 = move _3;
+ StorageDead(_3);
+ StorageLive(_5);
+ _5 = move _4;
+ goto -> bb2;
+ }
+
+ bb2: {
+ StorageLive(_7);
+ _6 = &mut _5;
+ _7 = <Map<impl Iterator<Item = T>, impl Fn(T) -> U> as Iterator>::next(_6) -> [return: bb3, unwind: bb9];
+ }
+
+ bb3: {
+ _8 = discriminant(_7);
+ switchInt(move _8) -> [0: bb4, 1: bb6, otherwise: bb8];
+ }
+
+ bb4: {
+ StorageDead(_7);
+ drop(_5) -> [return: bb5, unwind continue];
+ }
+
+ bb5: {
+ StorageDead(_5);
+ StorageDead(_4);
+ return;
+ }
+
+ bb6: {
+ _9 = move ((_7 as Some).0: U);
+ _10 = opaque::<U>(move _9) -> [return: bb7, unwind: bb9];
+ }
+
+ bb7: {
+ StorageDead(_7);
+ goto -> bb2;
+ }
+
+ bb8: {
+ unreachable;
+ }
+
+ bb9 (cleanup): {
+ drop(_5) -> [return: bb10, unwind terminate];
+ }
+
+ bb10 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/loops.rs b/tests/mir-opt/pre-codegen/loops.rs
new file mode 100644
index 000000000..67f549a51
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/loops.rs
@@ -0,0 +1,37 @@
+// compile-flags: -O -Zmir-opt-level=2 -g
+// needs-unwind
+// ignore-debug
+
+#![crate_type = "lib"]
+
+pub fn int_range(start: usize, end: usize) {
+ for i in start..end {
+ opaque(i)
+ }
+}
+
+pub fn mapped<T, U>(iter: impl Iterator<Item = T>, f: impl Fn(T) -> U) {
+ for x in iter.map(f) {
+ opaque(x)
+ }
+}
+
+pub fn filter_mapped<T, U>(iter: impl Iterator<Item = T>, f: impl Fn(T) -> Option<U>) {
+ for x in iter.filter_map(f) {
+ opaque(x)
+ }
+}
+
+pub fn vec_move(mut v: Vec<impl Sized>) {
+ for x in v {
+ opaque(x)
+ }
+}
+
+#[inline(never)]
+fn opaque(_: impl Sized) {}
+
+// EMIT_MIR loops.int_range.PreCodegen.after.mir
+// EMIT_MIR loops.mapped.PreCodegen.after.mir
+// EMIT_MIR loops.filter_mapped.PreCodegen.after.mir
+// EMIT_MIR loops.vec_move.PreCodegen.after.mir
diff --git a/tests/mir-opt/pre-codegen/loops.vec_move.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/loops.vec_move.PreCodegen.after.mir
new file mode 100644
index 000000000..1b5f2a088
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/loops.vec_move.PreCodegen.after.mir
@@ -0,0 +1,74 @@
+// MIR for `vec_move` after PreCodegen
+
+fn vec_move(_1: Vec<impl Sized>) -> () {
+ debug v => _1;
+ let mut _0: ();
+ let mut _2: std::vec::IntoIter<impl Sized>;
+ let mut _3: std::vec::IntoIter<impl Sized>;
+ let mut _4: &mut std::vec::IntoIter<impl Sized>;
+ let mut _5: std::option::Option<impl Sized>;
+ let mut _6: isize;
+ let _8: ();
+ scope 1 {
+ debug iter => _3;
+ let _7: impl Sized;
+ scope 2 {
+ debug x => _7;
+ }
+ }
+
+ bb0: {
+ StorageLive(_2);
+ _2 = <Vec<impl Sized> as IntoIterator>::into_iter(move _1) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageLive(_3);
+ _3 = move _2;
+ goto -> bb2;
+ }
+
+ bb2: {
+ StorageLive(_5);
+ _4 = &mut _3;
+ _5 = <std::vec::IntoIter<impl Sized> as Iterator>::next(_4) -> [return: bb3, unwind: bb9];
+ }
+
+ bb3: {
+ _6 = discriminant(_5);
+ switchInt(move _6) -> [0: bb4, 1: bb6, otherwise: bb8];
+ }
+
+ bb4: {
+ StorageDead(_5);
+ drop(_3) -> [return: bb5, unwind continue];
+ }
+
+ bb5: {
+ StorageDead(_3);
+ StorageDead(_2);
+ return;
+ }
+
+ bb6: {
+ _7 = move ((_5 as Some).0: impl Sized);
+ _8 = opaque::<impl Sized>(move _7) -> [return: bb7, unwind: bb9];
+ }
+
+ bb7: {
+ StorageDead(_5);
+ goto -> bb2;
+ }
+
+ bb8: {
+ unreachable;
+ }
+
+ bb9 (cleanup): {
+ drop(_3) -> [return: bb10, unwind terminate];
+ }
+
+ bb10 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/mem_replace.manual_replace.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/mem_replace.manual_replace.PreCodegen.after.mir
index 1d2387102..3ca24e152 100644
--- a/tests/mir-opt/pre-codegen/mem_replace.manual_replace.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/mem_replace.manual_replace.PreCodegen.after.mir
@@ -1,16 +1,16 @@
// MIR for `manual_replace` after PreCodegen
fn manual_replace(_1: &mut u32, _2: u32) -> u32 {
- debug r => _1; // in scope 0 at $DIR/mem_replace.rs:+0:23: +0:24
- debug v => _2; // in scope 0 at $DIR/mem_replace.rs:+0:36: +0:37
- let mut _0: u32; // return place in scope 0 at $DIR/mem_replace.rs:+0:47: +0:50
+ debug r => _1;
+ debug v => _2;
+ let mut _0: u32;
scope 1 {
- debug temp => _0; // in scope 1 at $DIR/mem_replace.rs:+1:9: +1:13
+ debug temp => _0;
}
bb0: {
- _0 = (*_1); // scope 0 at $DIR/mem_replace.rs:+1:16: +1:18
- (*_1) = _2; // scope 1 at $DIR/mem_replace.rs:+2:5: +2:11
- return; // scope 0 at $DIR/mem_replace.rs:+4:2: +4:2
+ _0 = (*_1);
+ (*_1) = _2;
+ return;
}
}
diff --git a/tests/mir-opt/pre-codegen/mem_replace.mem_replace.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/mem_replace.mem_replace.PreCodegen.after.mir
index 50e0538c1..f8f4f5b99 100644
--- a/tests/mir-opt/pre-codegen/mem_replace.mem_replace.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/mem_replace.mem_replace.PreCodegen.after.mir
@@ -1,34 +1,34 @@
// MIR for `mem_replace` after PreCodegen
fn mem_replace(_1: &mut u32, _2: u32) -> u32 {
- debug r => _1; // in scope 0 at $DIR/mem_replace.rs:+0:20: +0:21
- debug v => _2; // in scope 0 at $DIR/mem_replace.rs:+0:33: +0:34
- let mut _0: u32; // return place in scope 0 at $DIR/mem_replace.rs:+0:44: +0:47
- scope 1 (inlined std::mem::replace::<u32>) { // at $DIR/mem_replace.rs:16:5: 16:28
- debug dest => _1; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- debug src => _2; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- let mut _3: *const u32; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- let mut _4: *mut u32; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
+ debug r => _1;
+ debug v => _2;
+ let mut _0: u32;
+ scope 1 (inlined std::mem::replace::<u32>) {
+ debug dest => _1;
+ debug src => _2;
+ let mut _3: *const u32;
+ let mut _4: *mut u32;
scope 2 {
scope 3 {
- debug result => _0; // in scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- scope 7 (inlined std::ptr::write::<u32>) { // at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- debug dst => _4; // in scope 7 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- debug src => _2; // in scope 7 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- let mut _6: *mut u32; // in scope 7 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
+ debug result => _0;
+ scope 7 (inlined std::ptr::write::<u32>) {
+ debug dst => _4;
+ debug src => _2;
+ let mut _6: *mut u32;
scope 8 {
- scope 9 (inlined std::ptr::write::runtime::<u32>) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- debug dst => _6; // in scope 9 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
+ scope 9 (inlined std::ptr::write::runtime::<u32>) {
+ debug dst => _6;
}
}
}
}
- scope 4 (inlined std::ptr::read::<u32>) { // at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- debug src => _3; // in scope 4 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- let mut _5: *const u32; // in scope 4 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
+ scope 4 (inlined std::ptr::read::<u32>) {
+ debug src => _3;
+ let mut _5: *const u32;
scope 5 {
- scope 6 (inlined std::ptr::read::runtime::<u32>) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- debug src => _5; // in scope 6 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
+ scope 6 (inlined std::ptr::read::runtime::<u32>) {
+ debug src => _5;
}
}
}
@@ -36,18 +36,18 @@ fn mem_replace(_1: &mut u32, _2: u32) -> u32 {
}
bb0: {
- StorageLive(_3); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- _3 = &raw const (*_1); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- StorageLive(_5); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- _0 = (*_3); // scope 5 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- StorageDead(_5); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- StorageDead(_3); // scope 2 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- StorageLive(_4); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- _4 = &raw mut (*_1); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- StorageLive(_6); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- (*_4) = _2; // scope 8 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- StorageDead(_6); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- StorageDead(_4); // scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- return; // scope 0 at $DIR/mem_replace.rs:+2:2: +2:2
+ StorageLive(_3);
+ _3 = &raw const (*_1);
+ StorageLive(_5);
+ _0 = (*_3);
+ StorageDead(_5);
+ StorageDead(_3);
+ StorageLive(_4);
+ _4 = &raw mut (*_1);
+ StorageLive(_6);
+ (*_4) = _2;
+ StorageDead(_6);
+ StorageDead(_4);
+ return;
}
}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.diff b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.diff
deleted file mode 100644
index 691aa01a5..000000000
--- a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.diff
+++ /dev/null
@@ -1,59 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- let mut _2: (i32, bool); // in scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- let mut _4: [i32; 6]; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:31
- let _5: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
- let mut _6: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- let mut _7: bool; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- let mut _9: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- let _3: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- scope 2 {
- debug y => _3; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- let _8: u32; // in scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
- scope 3 {
- debug z => _9; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
-- _2 = CheckedAdd(const 2_i32, const 2_i32); // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
-- assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> bb1; // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
-+ _2 = const (4_i32, false); // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
-+ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> bb1; // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- }
-
- bb1: {
-- _1 = move (_2.0: i32); // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
-+ _1 = const 4_i32; // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- StorageLive(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- StorageLive(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:31
- _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32]; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:31
- StorageLive(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
- _5 = const 3_usize; // scope 1 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
- _6 = const 6_usize; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
-- _7 = Lt(_5, _6); // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
-- assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> bb2; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
-+ _7 = const true; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
-+ assert(const true, "index out of bounds: the length is {} but the index is {}", const 6_usize, const 3_usize) -> bb2; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- }
-
- bb2: {
-- _3 = _4[_5]; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
-+ _3 = const 3_i32; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- StorageDead(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
- StorageDead(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
- _9 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
- StorageDead(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
- StorageDead(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
- return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.panic-abort.diff b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.panic-abort.diff
new file mode 100644
index 000000000..2c607b4c0
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.panic-abort.diff
@@ -0,0 +1,59 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: (i32, bool);
+ let mut _4: [i32; 6];
+ let _5: usize;
+ let mut _6: usize;
+ let mut _7: bool;
+ let mut _9: u32;
+ scope 1 {
+ debug x => _1;
+ let _3: i32;
+ scope 2 {
+ debug y => _3;
+ let _8: u32;
+ scope 3 {
+ debug z => _9;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _2 = CheckedAdd(const 2_i32, const 2_i32);
+- assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind unreachable];
++ _2 = const (4_i32, false);
++ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = move (_2.0: i32);
++ _1 = const 4_i32;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32];
+ StorageLive(_5);
+ _5 = const 3_usize;
+ _6 = const 6_usize;
+- _7 = Lt(_5, _6);
+- assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> [success: bb2, unwind unreachable];
++ _7 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", const 6_usize, const 3_usize) -> [success: bb2, unwind unreachable];
+ }
+
+ bb2: {
+- _3 = _4[_5];
++ _3 = const 3_i32;
+ StorageDead(_5);
+ StorageDead(_4);
+ _9 = const 42_u32;
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.panic-unwind.diff b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.panic-unwind.diff
new file mode 100644
index 000000000..b6929f3f9
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.panic-unwind.diff
@@ -0,0 +1,59 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: (i32, bool);
+ let mut _4: [i32; 6];
+ let _5: usize;
+ let mut _6: usize;
+ let mut _7: bool;
+ let mut _9: u32;
+ scope 1 {
+ debug x => _1;
+ let _3: i32;
+ scope 2 {
+ debug y => _3;
+ let _8: u32;
+ scope 3 {
+ debug z => _9;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _2 = CheckedAdd(const 2_i32, const 2_i32);
+- assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind continue];
++ _2 = const (4_i32, false);
++ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _1 = move (_2.0: i32);
++ _1 = const 4_i32;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32];
+ StorageLive(_5);
+ _5 = const 3_usize;
+ _6 = const 6_usize;
+- _7 = Lt(_5, _6);
+- assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> [success: bb2, unwind continue];
++ _7 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", const 6_usize, const 3_usize) -> [success: bb2, unwind continue];
+ }
+
+ bb2: {
+- _3 = _4[_5];
++ _3 = const 3_i32;
+ StorageDead(_5);
+ StorageDead(_4);
+ _9 = const 42_u32;
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.diff b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.diff
deleted file mode 100644
index 691aa01a5..000000000
--- a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.diff
+++ /dev/null
@@ -1,59 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- let mut _2: (i32, bool); // in scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- let mut _4: [i32; 6]; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:31
- let _5: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
- let mut _6: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- let mut _7: bool; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- let mut _9: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- let _3: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- scope 2 {
- debug y => _3; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- let _8: u32; // in scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
- scope 3 {
- debug z => _9; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
-- _2 = CheckedAdd(const 2_i32, const 2_i32); // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
-- assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> bb1; // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
-+ _2 = const (4_i32, false); // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
-+ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> bb1; // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- }
-
- bb1: {
-- _1 = move (_2.0: i32); // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
-+ _1 = const 4_i32; // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- StorageLive(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- StorageLive(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:31
- _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32]; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:31
- StorageLive(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
- _5 = const 3_usize; // scope 1 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
- _6 = const 6_usize; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
-- _7 = Lt(_5, _6); // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
-- assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> bb2; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
-+ _7 = const true; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
-+ assert(const true, "index out of bounds: the length is {} but the index is {}", const 6_usize, const 3_usize) -> bb2; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- }
-
- bb2: {
-- _3 = _4[_5]; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
-+ _3 = const 3_i32; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- StorageDead(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
- StorageDead(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
- _9 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
- StorageDead(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
- StorageDead(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
- return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.panic-abort.diff b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.panic-abort.diff
new file mode 100644
index 000000000..2c607b4c0
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.panic-abort.diff
@@ -0,0 +1,59 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: (i32, bool);
+ let mut _4: [i32; 6];
+ let _5: usize;
+ let mut _6: usize;
+ let mut _7: bool;
+ let mut _9: u32;
+ scope 1 {
+ debug x => _1;
+ let _3: i32;
+ scope 2 {
+ debug y => _3;
+ let _8: u32;
+ scope 3 {
+ debug z => _9;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _2 = CheckedAdd(const 2_i32, const 2_i32);
+- assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind unreachable];
++ _2 = const (4_i32, false);
++ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- _1 = move (_2.0: i32);
++ _1 = const 4_i32;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32];
+ StorageLive(_5);
+ _5 = const 3_usize;
+ _6 = const 6_usize;
+- _7 = Lt(_5, _6);
+- assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> [success: bb2, unwind unreachable];
++ _7 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", const 6_usize, const 3_usize) -> [success: bb2, unwind unreachable];
+ }
+
+ bb2: {
+- _3 = _4[_5];
++ _3 = const 3_i32;
+ StorageDead(_5);
+ StorageDead(_4);
+ _9 = const 42_u32;
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.panic-unwind.diff b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.panic-unwind.diff
new file mode 100644
index 000000000..b6929f3f9
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.panic-unwind.diff
@@ -0,0 +1,59 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: (i32, bool);
+ let mut _4: [i32; 6];
+ let _5: usize;
+ let mut _6: usize;
+ let mut _7: bool;
+ let mut _9: u32;
+ scope 1 {
+ debug x => _1;
+ let _3: i32;
+ scope 2 {
+ debug y => _3;
+ let _8: u32;
+ scope 3 {
+ debug z => _9;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+- _2 = CheckedAdd(const 2_i32, const 2_i32);
+- assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind continue];
++ _2 = const (4_i32, false);
++ assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+- _1 = move (_2.0: i32);
++ _1 = const 4_i32;
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32];
+ StorageLive(_5);
+ _5 = const 3_usize;
+ _6 = const 6_usize;
+- _7 = Lt(_5, _6);
+- assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> [success: bb2, unwind continue];
++ _7 = const true;
++ assert(const true, "index out of bounds: the length is {} but the index is {}", const 6_usize, const 3_usize) -> [success: bb2, unwind continue];
+ }
+
+ bb2: {
+- _3 = _4[_5];
++ _3 = const 3_i32;
+ StorageDead(_5);
+ StorageDead(_4);
+ _9 = const 42_u32;
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.mir b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.mir
deleted file mode 100644
index 7886bf19e..000000000
--- a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.mir
+++ /dev/null
@@ -1,18 +0,0 @@
-// MIR for `main` after PreCodegen
-
-fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +0:11
- scope 1 {
- debug x => const 4_i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- scope 2 {
- debug y => const 3_i32; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- scope 3 {
- debug z => const 42_u32; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
- }
- }
- }
-
- bb0: {
- return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
- }
-}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.panic-abort.mir b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.panic-abort.mir
new file mode 100644
index 000000000..681dadff3
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.panic-abort.mir
@@ -0,0 +1,18 @@
+// MIR for `main` after PreCodegen
+
+fn main() -> () {
+ let mut _0: ();
+ scope 1 {
+ debug x => const 4_i32;
+ scope 2 {
+ debug y => const 3_i32;
+ scope 3 {
+ debug z => const 42_u32;
+ }
+ }
+ }
+
+ bb0: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.panic-unwind.mir b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.panic-unwind.mir
new file mode 100644
index 000000000..681dadff3
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.panic-unwind.mir
@@ -0,0 +1,18 @@
+// MIR for `main` after PreCodegen
+
+fn main() -> () {
+ let mut _0: ();
+ scope 1 {
+ debug x => const 4_i32;
+ scope 2 {
+ debug y => const 3_i32;
+ scope 3 {
+ debug z => const 42_u32;
+ }
+ }
+ }
+
+ bb0: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.mir b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.mir
deleted file mode 100644
index 7886bf19e..000000000
--- a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.mir
+++ /dev/null
@@ -1,18 +0,0 @@
-// MIR for `main` after PreCodegen
-
-fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +0:11
- scope 1 {
- debug x => const 4_i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- scope 2 {
- debug y => const 3_i32; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- scope 3 {
- debug z => const 42_u32; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
- }
- }
- }
-
- bb0: {
- return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
- }
-}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.panic-abort.mir b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.panic-abort.mir
new file mode 100644
index 000000000..681dadff3
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.panic-abort.mir
@@ -0,0 +1,18 @@
+// MIR for `main` after PreCodegen
+
+fn main() -> () {
+ let mut _0: ();
+ scope 1 {
+ debug x => const 4_i32;
+ scope 2 {
+ debug y => const 3_i32;
+ scope 3 {
+ debug z => const 42_u32;
+ }
+ }
+ }
+
+ bb0: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.panic-unwind.mir b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.panic-unwind.mir
new file mode 100644
index 000000000..681dadff3
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.panic-unwind.mir
@@ -0,0 +1,18 @@
+// MIR for `main` after PreCodegen
+
+fn main() -> () {
+ let mut _0: ();
+ scope 1 {
+ debug x => const 4_i32;
+ scope 2 {
+ debug y => const 3_i32;
+ scope 3 {
+ debug z => const 42_u32;
+ }
+ }
+ }
+
+ bb0: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.diff b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.diff
deleted file mode 100644
index 98cd020da..000000000
--- a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.diff
+++ /dev/null
@@ -1,71 +0,0 @@
-- // MIR for `main` before ScalarReplacementOfAggregates
-+ // MIR for `main` after ScalarReplacementOfAggregates
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- let mut _2: (i32, bool); // in scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- let mut _4: [i32; 6]; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:31
- let _5: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
- let mut _6: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- let mut _7: bool; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- let mut _9: Point; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ let mut _10: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ let mut _11: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- let _3: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- scope 2 {
- debug y => _3; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- let _8: u32; // in scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
- scope 3 {
- debug z => _8; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- _2 = CheckedAdd(const 2_i32, const 2_i32); // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> bb1; // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- }
-
- bb1: {
- _1 = move (_2.0: i32); // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- StorageLive(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- StorageLive(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:31
- _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32]; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:31
- StorageLive(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
- _5 = const 3_usize; // scope 1 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
- _6 = Len(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- _7 = Lt(_5, _6); // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> bb2; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- }
-
- bb2: {
- _3 = _4[_5]; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- StorageDead(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
- StorageDead(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
- StorageLive(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
-- StorageLive(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-- _9 = Point { x: const 12_u32, y: const 42_u32 }; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-- _8 = (_9.1: u32); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
-- StorageDead(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
-+ StorageLive(_10); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ StorageLive(_11); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ nop; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ _10 = const 12_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ _11 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ nop; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ _8 = _11; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
-+ StorageDead(_10); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
-+ StorageDead(_11); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
-+ nop; // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
- nop; // scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +4:2
- StorageDead(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
- StorageDead(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
- StorageDead(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
- return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.panic-abort.diff b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.panic-abort.diff
new file mode 100644
index 000000000..6e681b4f9
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.panic-abort.diff
@@ -0,0 +1,71 @@
+- // MIR for `main` before ScalarReplacementOfAggregates
++ // MIR for `main` after ScalarReplacementOfAggregates
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: (i32, bool);
+ let mut _4: [i32; 6];
+ let _5: usize;
+ let mut _6: usize;
+ let mut _7: bool;
+ let mut _9: Point;
++ let mut _10: u32;
++ let mut _11: u32;
+ scope 1 {
+ debug x => _1;
+ let _3: i32;
+ scope 2 {
+ debug y => _3;
+ let _8: u32;
+ scope 3 {
+ debug z => _8;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _2 = CheckedAdd(const 2_i32, const 2_i32);
+ assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _1 = move (_2.0: i32);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32];
+ StorageLive(_5);
+ _5 = const 3_usize;
+ _6 = Len(_4);
+ _7 = Lt(_5, _6);
+ assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> [success: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ _3 = _4[_5];
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_8);
+- StorageLive(_9);
+- _9 = Point { x: const 12_u32, y: const 42_u32 };
+- _8 = (_9.1: u32);
+- StorageDead(_9);
++ StorageLive(_10);
++ StorageLive(_11);
++ nop;
++ _10 = const 12_u32;
++ _11 = const 42_u32;
++ nop;
++ _8 = _11;
++ StorageDead(_10);
++ StorageDead(_11);
++ nop;
+ nop;
+ StorageDead(_8);
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.panic-unwind.diff b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.panic-unwind.diff
new file mode 100644
index 000000000..e987969d3
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.panic-unwind.diff
@@ -0,0 +1,71 @@
+- // MIR for `main` before ScalarReplacementOfAggregates
++ // MIR for `main` after ScalarReplacementOfAggregates
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: (i32, bool);
+ let mut _4: [i32; 6];
+ let _5: usize;
+ let mut _6: usize;
+ let mut _7: bool;
+ let mut _9: Point;
++ let mut _10: u32;
++ let mut _11: u32;
+ scope 1 {
+ debug x => _1;
+ let _3: i32;
+ scope 2 {
+ debug y => _3;
+ let _8: u32;
+ scope 3 {
+ debug z => _8;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _2 = CheckedAdd(const 2_i32, const 2_i32);
+ assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+ _1 = move (_2.0: i32);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32];
+ StorageLive(_5);
+ _5 = const 3_usize;
+ _6 = Len(_4);
+ _7 = Lt(_5, _6);
+ assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> [success: bb2, unwind continue];
+ }
+
+ bb2: {
+ _3 = _4[_5];
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_8);
+- StorageLive(_9);
+- _9 = Point { x: const 12_u32, y: const 42_u32 };
+- _8 = (_9.1: u32);
+- StorageDead(_9);
++ StorageLive(_10);
++ StorageLive(_11);
++ nop;
++ _10 = const 12_u32;
++ _11 = const 42_u32;
++ nop;
++ _8 = _11;
++ StorageDead(_10);
++ StorageDead(_11);
++ nop;
+ nop;
+ StorageDead(_8);
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.diff b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.diff
deleted file mode 100644
index 98cd020da..000000000
--- a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.diff
+++ /dev/null
@@ -1,71 +0,0 @@
-- // MIR for `main` before ScalarReplacementOfAggregates
-+ // MIR for `main` after ScalarReplacementOfAggregates
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- let mut _2: (i32, bool); // in scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- let mut _4: [i32; 6]; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:31
- let _5: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
- let mut _6: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- let mut _7: bool; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- let mut _9: Point; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ let mut _10: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ let mut _11: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- let _3: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- scope 2 {
- debug y => _3; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- let _8: u32; // in scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
- scope 3 {
- debug z => _8; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- _2 = CheckedAdd(const 2_i32, const 2_i32); // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> bb1; // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- }
-
- bb1: {
- _1 = move (_2.0: i32); // scope 0 at $DIR/optimizes_into_variable.rs:+1:13: +1:18
- StorageLive(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- StorageLive(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:31
- _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32]; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:31
- StorageLive(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
- _5 = const 3_usize; // scope 1 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
- _6 = Len(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- _7 = Lt(_5, _6); // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> bb2; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- }
-
- bb2: {
- _3 = _4[_5]; // scope 1 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
- StorageDead(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
- StorageDead(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
- StorageLive(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
-- StorageLive(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-- _9 = Point { x: const 12_u32, y: const 42_u32 }; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-- _8 = (_9.1: u32); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
-- StorageDead(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
-+ StorageLive(_10); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ StorageLive(_11); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ nop; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ _10 = const 12_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ _11 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ nop; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
-+ _8 = _11; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
-+ StorageDead(_10); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
-+ StorageDead(_11); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
-+ nop; // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
- nop; // scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +4:2
- StorageDead(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
- StorageDead(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
- StorageDead(_1); // scope 0 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
- return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.panic-abort.diff b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.panic-abort.diff
new file mode 100644
index 000000000..6e681b4f9
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.panic-abort.diff
@@ -0,0 +1,71 @@
+- // MIR for `main` before ScalarReplacementOfAggregates
++ // MIR for `main` after ScalarReplacementOfAggregates
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: (i32, bool);
+ let mut _4: [i32; 6];
+ let _5: usize;
+ let mut _6: usize;
+ let mut _7: bool;
+ let mut _9: Point;
++ let mut _10: u32;
++ let mut _11: u32;
+ scope 1 {
+ debug x => _1;
+ let _3: i32;
+ scope 2 {
+ debug y => _3;
+ let _8: u32;
+ scope 3 {
+ debug z => _8;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _2 = CheckedAdd(const 2_i32, const 2_i32);
+ assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _1 = move (_2.0: i32);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32];
+ StorageLive(_5);
+ _5 = const 3_usize;
+ _6 = Len(_4);
+ _7 = Lt(_5, _6);
+ assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> [success: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ _3 = _4[_5];
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_8);
+- StorageLive(_9);
+- _9 = Point { x: const 12_u32, y: const 42_u32 };
+- _8 = (_9.1: u32);
+- StorageDead(_9);
++ StorageLive(_10);
++ StorageLive(_11);
++ nop;
++ _10 = const 12_u32;
++ _11 = const 42_u32;
++ nop;
++ _8 = _11;
++ StorageDead(_10);
++ StorageDead(_11);
++ nop;
+ nop;
+ StorageDead(_8);
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.panic-unwind.diff b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.panic-unwind.diff
new file mode 100644
index 000000000..e987969d3
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.panic-unwind.diff
@@ -0,0 +1,71 @@
+- // MIR for `main` before ScalarReplacementOfAggregates
++ // MIR for `main` after ScalarReplacementOfAggregates
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: i32;
+ let mut _2: (i32, bool);
+ let mut _4: [i32; 6];
+ let _5: usize;
+ let mut _6: usize;
+ let mut _7: bool;
+ let mut _9: Point;
++ let mut _10: u32;
++ let mut _11: u32;
+ scope 1 {
+ debug x => _1;
+ let _3: i32;
+ scope 2 {
+ debug y => _3;
+ let _8: u32;
+ scope 3 {
+ debug z => _8;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _2 = CheckedAdd(const 2_i32, const 2_i32);
+ assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+ _1 = move (_2.0: i32);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32];
+ StorageLive(_5);
+ _5 = const 3_usize;
+ _6 = Len(_4);
+ _7 = Lt(_5, _6);
+ assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> [success: bb2, unwind continue];
+ }
+
+ bb2: {
+ _3 = _4[_5];
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_8);
+- StorageLive(_9);
+- _9 = Point { x: const 12_u32, y: const 42_u32 };
+- _8 = (_9.1: u32);
+- StorageDead(_9);
++ StorageLive(_10);
++ StorageLive(_11);
++ nop;
++ _10 = const 12_u32;
++ _11 = const 42_u32;
++ nop;
++ _8 = _11;
++ StorageDead(_10);
++ StorageDead(_11);
++ nop;
+ nop;
+ StorageDead(_8);
+ StorageDead(_3);
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.mir b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.mir
deleted file mode 100644
index 5bea94c7f..000000000
--- a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.mir
+++ /dev/null
@@ -1,18 +0,0 @@
-// MIR for `main` after SimplifyLocals-final
-
-fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +0:11
- scope 1 {
- debug x => const 4_i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- scope 2 {
- debug y => const 3_i32; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- scope 3 {
- debug z => const 42_u32; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
- }
- }
- }
-
- bb0: {
- return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
- }
-}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.panic-abort.mir b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.panic-abort.mir
new file mode 100644
index 000000000..425b95db3
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.panic-abort.mir
@@ -0,0 +1,18 @@
+// MIR for `main` after SimplifyLocals-final
+
+fn main() -> () {
+ let mut _0: ();
+ scope 1 {
+ debug x => const 4_i32;
+ scope 2 {
+ debug y => const 3_i32;
+ scope 3 {
+ debug z => const 42_u32;
+ }
+ }
+ }
+
+ bb0: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.panic-unwind.mir b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.panic-unwind.mir
new file mode 100644
index 000000000..425b95db3
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.panic-unwind.mir
@@ -0,0 +1,18 @@
+// MIR for `main` after SimplifyLocals-final
+
+fn main() -> () {
+ let mut _0: ();
+ scope 1 {
+ debug x => const 4_i32;
+ scope 2 {
+ debug y => const 3_i32;
+ scope 3 {
+ debug z => const 42_u32;
+ }
+ }
+ }
+
+ bb0: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.mir b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.mir
deleted file mode 100644
index 5bea94c7f..000000000
--- a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.mir
+++ /dev/null
@@ -1,18 +0,0 @@
-// MIR for `main` after SimplifyLocals-final
-
-fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +0:11
- scope 1 {
- debug x => const 4_i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
- scope 2 {
- debug y => const 3_i32; // in scope 2 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
- scope 3 {
- debug z => const 42_u32; // in scope 3 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
- }
- }
- }
-
- bb0: {
- return; // scope 0 at $DIR/optimizes_into_variable.rs:+4:2: +4:2
- }
-}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.panic-abort.mir b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.panic-abort.mir
new file mode 100644
index 000000000..425b95db3
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.panic-abort.mir
@@ -0,0 +1,18 @@
+// MIR for `main` after SimplifyLocals-final
+
+fn main() -> () {
+ let mut _0: ();
+ scope 1 {
+ debug x => const 4_i32;
+ scope 2 {
+ debug y => const 3_i32;
+ scope 3 {
+ debug z => const 42_u32;
+ }
+ }
+ }
+
+ bb0: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.panic-unwind.mir b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.panic-unwind.mir
new file mode 100644
index 000000000..425b95db3
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.panic-unwind.mir
@@ -0,0 +1,18 @@
+// MIR for `main` after SimplifyLocals-final
+
+fn main() -> () {
+ let mut _0: ();
+ scope 1 {
+ debug x => const 4_i32;
+ scope 2 {
+ debug y => const 3_i32;
+ scope 3 {
+ debug z => const 42_u32;
+ }
+ }
+ }
+
+ bb0: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/optimizes_into_variable.rs b/tests/mir-opt/pre-codegen/optimizes_into_variable.rs
index bb32cd3af..704f8f887 100644
--- a/tests/mir-opt/pre-codegen/optimizes_into_variable.rs
+++ b/tests/mir-opt/pre-codegen/optimizes_into_variable.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// compile-flags: -C overflow-checks=on
struct Point {
diff --git a/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.mir
deleted file mode 100644
index 343a4a5a6..000000000
--- a/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.mir
+++ /dev/null
@@ -1,91 +0,0 @@
-// MIR for `forward_loop` after PreCodegen
-
-fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
- debug start => _1; // in scope 0 at $DIR/range_iter.rs:+0:21: +0:26
- debug end => _2; // in scope 0 at $DIR/range_iter.rs:+0:33: +0:36
- debug f => _3; // in scope 0 at $DIR/range_iter.rs:+0:43: +0:44
- let mut _0: (); // return place in scope 0 at $DIR/range_iter.rs:+0:60: +0:60
- let mut _4: std::ops::Range<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24
- let mut _5: std::ops::Range<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24
- let _6: (); // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24
- let mut _7: std::option::Option<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24
- let mut _8: &mut std::ops::Range<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24
- let mut _9: isize; // in scope 0 at $DIR/range_iter.rs:+1:5: +3:6
- let mut _11: &impl Fn(u32); // in scope 0 at $DIR/range_iter.rs:+2:9: +2:10
- let mut _12: (u32,); // in scope 0 at $DIR/range_iter.rs:+2:9: +2:13
- scope 1 {
- debug iter => _5; // in scope 1 at $DIR/range_iter.rs:+1:14: +1:24
- let _10: u32; // in scope 1 at $DIR/range_iter.rs:+1:9: +1:10
- scope 2 {
- debug x => _10; // in scope 2 at $DIR/range_iter.rs:+1:9: +1:10
- }
- scope 4 (inlined iter::range::<impl Iterator for std::ops::Range<u32>>::next) { // at $DIR/range_iter.rs:21:14: 21:24
- debug self => _8; // in scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
- }
- }
- scope 3 (inlined <std::ops::Range<u32> as IntoIterator>::into_iter) { // at $DIR/range_iter.rs:21:14: 21:24
- debug self => _4; // in scope 3 at $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
- }
-
- bb0: {
- _4 = std::ops::Range::<u32> { start: _1, end: _2 }; // scope 0 at $DIR/range_iter.rs:+1:14: +1:24
- StorageLive(_5); // scope 0 at $DIR/range_iter.rs:+1:14: +1:24
- _5 = move _4; // scope 0 at $DIR/range_iter.rs:+1:14: +1:24
- goto -> bb1; // scope 1 at $DIR/range_iter.rs:+1:5: +3:6
- }
-
- bb1: {
- StorageLive(_7); // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
- _8 = &mut _5; // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
- _7 = <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next(_8) -> [return: bb9, unwind: bb7]; // scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/iter/range.rs:LL:COL
- // + literal: Const { ty: for<'a> fn(&'a mut std::ops::Range<u32>) -> Option<<std::ops::Range<u32> as iter::range::RangeIteratorImpl>::Item> {<std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next}, val: Value(<ZST>) }
- }
-
- bb2: {
- _10 = ((_7 as Some).0: u32); // scope 1 at $DIR/range_iter.rs:+1:9: +1:10
- StorageLive(_11); // scope 2 at $DIR/range_iter.rs:+2:9: +2:10
- _11 = &_3; // scope 2 at $DIR/range_iter.rs:+2:9: +2:10
- StorageLive(_12); // scope 2 at $DIR/range_iter.rs:+2:9: +2:13
- _12 = (_10,); // scope 2 at $DIR/range_iter.rs:+2:9: +2:13
- _6 = <impl Fn(u32) as Fn<(u32,)>>::call(move _11, move _12) -> [return: bb5, unwind: bb7]; // scope 2 at $DIR/range_iter.rs:+2:9: +2:13
- // mir::Constant
- // + span: $DIR/range_iter.rs:22:9: 22:10
- // + literal: Const { ty: for<'a> extern "rust-call" fn(&'a impl Fn(u32), (u32,)) -> <impl Fn(u32) as FnOnce<(u32,)>>::Output {<impl Fn(u32) as Fn<(u32,)>>::call}, val: Value(<ZST>) }
- }
-
- bb3: {
- unreachable; // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
- }
-
- bb4: {
- StorageDead(_7); // scope 1 at $DIR/range_iter.rs:+3:5: +3:6
- StorageDead(_5); // scope 0 at $DIR/range_iter.rs:+3:5: +3:6
- drop(_3) -> bb6; // scope 0 at $DIR/range_iter.rs:+4:1: +4:2
- }
-
- bb5: {
- StorageDead(_12); // scope 2 at $DIR/range_iter.rs:+2:12: +2:13
- StorageDead(_11); // scope 2 at $DIR/range_iter.rs:+2:12: +2:13
- StorageDead(_7); // scope 1 at $DIR/range_iter.rs:+3:5: +3:6
- goto -> bb1; // scope 1 at $DIR/range_iter.rs:+1:5: +3:6
- }
-
- bb6: {
- return; // scope 0 at $DIR/range_iter.rs:+4:2: +4:2
- }
-
- bb7 (cleanup): {
- drop(_3) -> [return: bb8, unwind terminate]; // scope 0 at $DIR/range_iter.rs:+4:1: +4:2
- }
-
- bb8 (cleanup): {
- resume; // scope 0 at $DIR/range_iter.rs:+0:1: +4:2
- }
-
- bb9: {
- _9 = discriminant(_7); // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
- switchInt(move _9) -> [0: bb4, 1: bb2, otherwise: bb3]; // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
- }
-}
diff --git a/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..2344a3c0f
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,131 @@
+// MIR for `forward_loop` after PreCodegen
+
+fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
+ debug start => _1;
+ debug end => _2;
+ debug f => _3;
+ let mut _0: ();
+ let mut _4: std::ops::Range<u32>;
+ let mut _5: std::ops::Range<u32>;
+ let mut _6: &mut std::ops::Range<u32>;
+ let mut _12: std::option::Option<u32>;
+ let mut _15: isize;
+ let mut _17: &impl Fn(u32);
+ let mut _18: (u32,);
+ let _19: ();
+ scope 1 {
+ debug iter => _5;
+ let _16: u32;
+ scope 2 {
+ debug x => _16;
+ }
+ scope 4 (inlined iter::range::<impl Iterator for std::ops::Range<u32>>::next) {
+ debug self => _6;
+ scope 5 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
+ debug self => _6;
+ let mut _7: &u32;
+ let mut _8: &u32;
+ let mut _11: bool;
+ let _13: u32;
+ let mut _14: u32;
+ scope 6 {
+ debug old => _13;
+ scope 7 {
+ }
+ }
+ scope 8 (inlined cmp::impls::<impl PartialOrd for u32>::lt) {
+ debug self => _7;
+ debug other => _8;
+ let mut _9: u32;
+ let mut _10: u32;
+ }
+ }
+ }
+ }
+ scope 3 (inlined <std::ops::Range<u32> as IntoIterator>::into_iter) {
+ debug self => _4;
+ }
+
+ bb0: {
+ _4 = std::ops::Range::<u32> { start: _1, end: _2 };
+ StorageLive(_5);
+ _5 = move _4;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageLive(_12);
+ _6 = &mut _5;
+ StorageLive(_13);
+ StorageLive(_11);
+ StorageLive(_7);
+ _7 = &((*_6).0: u32);
+ StorageLive(_8);
+ _8 = &((*_6).1: u32);
+ StorageLive(_9);
+ _9 = (*_7);
+ StorageLive(_10);
+ _10 = (*_8);
+ _11 = Lt(move _9, move _10);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_7);
+ switchInt(move _11) -> [0: bb2, otherwise: bb3];
+ }
+
+ bb2: {
+ _12 = Option::<u32>::None;
+ goto -> bb5;
+ }
+
+ bb3: {
+ _13 = ((*_6).0: u32);
+ StorageLive(_14);
+ _14 = <u32 as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind unreachable];
+ }
+
+ bb4: {
+ ((*_6).0: u32) = move _14;
+ StorageDead(_14);
+ _12 = Option::<u32>::Some(_13);
+ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_11);
+ StorageDead(_13);
+ _15 = discriminant(_12);
+ switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb10];
+ }
+
+ bb6: {
+ StorageDead(_12);
+ StorageDead(_5);
+ drop(_3) -> [return: bb7, unwind unreachable];
+ }
+
+ bb7: {
+ return;
+ }
+
+ bb8: {
+ _16 = ((_12 as Some).0: u32);
+ StorageLive(_17);
+ _17 = &_3;
+ StorageLive(_18);
+ _18 = (_16,);
+ _19 = <impl Fn(u32) as Fn<(u32,)>>::call(move _17, move _18) -> [return: bb9, unwind unreachable];
+ }
+
+ bb9: {
+ StorageDead(_18);
+ StorageDead(_17);
+ StorageDead(_12);
+ goto -> bb1;
+ }
+
+ bb10: {
+ unreachable;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..fbe16dc3c
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,139 @@
+// MIR for `forward_loop` after PreCodegen
+
+fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
+ debug start => _1;
+ debug end => _2;
+ debug f => _3;
+ let mut _0: ();
+ let mut _4: std::ops::Range<u32>;
+ let mut _5: std::ops::Range<u32>;
+ let mut _6: &mut std::ops::Range<u32>;
+ let mut _12: std::option::Option<u32>;
+ let mut _15: isize;
+ let mut _17: &impl Fn(u32);
+ let mut _18: (u32,);
+ let _19: ();
+ scope 1 {
+ debug iter => _5;
+ let _16: u32;
+ scope 2 {
+ debug x => _16;
+ }
+ scope 4 (inlined iter::range::<impl Iterator for std::ops::Range<u32>>::next) {
+ debug self => _6;
+ scope 5 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
+ debug self => _6;
+ let mut _7: &u32;
+ let mut _8: &u32;
+ let mut _11: bool;
+ let _13: u32;
+ let mut _14: u32;
+ scope 6 {
+ debug old => _13;
+ scope 7 {
+ }
+ }
+ scope 8 (inlined cmp::impls::<impl PartialOrd for u32>::lt) {
+ debug self => _7;
+ debug other => _8;
+ let mut _9: u32;
+ let mut _10: u32;
+ }
+ }
+ }
+ }
+ scope 3 (inlined <std::ops::Range<u32> as IntoIterator>::into_iter) {
+ debug self => _4;
+ }
+
+ bb0: {
+ _4 = std::ops::Range::<u32> { start: _1, end: _2 };
+ StorageLive(_5);
+ _5 = move _4;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageLive(_12);
+ _6 = &mut _5;
+ StorageLive(_13);
+ StorageLive(_11);
+ StorageLive(_7);
+ _7 = &((*_6).0: u32);
+ StorageLive(_8);
+ _8 = &((*_6).1: u32);
+ StorageLive(_9);
+ _9 = (*_7);
+ StorageLive(_10);
+ _10 = (*_8);
+ _11 = Lt(move _9, move _10);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_7);
+ switchInt(move _11) -> [0: bb2, otherwise: bb3];
+ }
+
+ bb2: {
+ _12 = Option::<u32>::None;
+ goto -> bb5;
+ }
+
+ bb3: {
+ _13 = ((*_6).0: u32);
+ StorageLive(_14);
+ _14 = <u32 as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind: bb11];
+ }
+
+ bb4: {
+ ((*_6).0: u32) = move _14;
+ StorageDead(_14);
+ _12 = Option::<u32>::Some(_13);
+ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_11);
+ StorageDead(_13);
+ _15 = discriminant(_12);
+ switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb10];
+ }
+
+ bb6: {
+ StorageDead(_12);
+ StorageDead(_5);
+ drop(_3) -> [return: bb7, unwind continue];
+ }
+
+ bb7: {
+ return;
+ }
+
+ bb8: {
+ _16 = ((_12 as Some).0: u32);
+ StorageLive(_17);
+ _17 = &_3;
+ StorageLive(_18);
+ _18 = (_16,);
+ _19 = <impl Fn(u32) as Fn<(u32,)>>::call(move _17, move _18) -> [return: bb9, unwind: bb11];
+ }
+
+ bb9: {
+ StorageDead(_18);
+ StorageDead(_17);
+ StorageDead(_12);
+ goto -> bb1;
+ }
+
+ bb10: {
+ unreachable;
+ }
+
+ bb11 (cleanup): {
+ drop(_3) -> [return: bb12, unwind terminate];
+ }
+
+ bb12 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.mir
deleted file mode 100644
index f45eabba2..000000000
--- a/tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.mir
+++ /dev/null
@@ -1,95 +0,0 @@
-// MIR for `inclusive_loop` after PreCodegen
-
-fn inclusive_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
- debug start => _1; // in scope 0 at $DIR/range_iter.rs:+0:23: +0:28
- debug end => _2; // in scope 0 at $DIR/range_iter.rs:+0:35: +0:38
- debug f => _3; // in scope 0 at $DIR/range_iter.rs:+0:45: +0:46
- let mut _0: (); // return place in scope 0 at $DIR/range_iter.rs:+0:62: +0:62
- let mut _4: std::ops::RangeInclusive<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:25
- let mut _5: std::ops::RangeInclusive<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:25
- let _6: (); // in scope 0 at $DIR/range_iter.rs:+1:14: +1:25
- let mut _7: std::option::Option<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:25
- let mut _8: &mut std::ops::RangeInclusive<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:25
- let mut _9: isize; // in scope 0 at $DIR/range_iter.rs:+1:5: +3:6
- let mut _11: &impl Fn(u32); // in scope 0 at $DIR/range_iter.rs:+2:9: +2:10
- let mut _12: (u32,); // in scope 0 at $DIR/range_iter.rs:+2:9: +2:13
- scope 1 {
- debug iter => _5; // in scope 1 at $DIR/range_iter.rs:+1:14: +1:25
- let _10: u32; // in scope 1 at $DIR/range_iter.rs:+1:9: +1:10
- scope 2 {
- debug x => _10; // in scope 2 at $DIR/range_iter.rs:+1:9: +1:10
- }
- scope 5 (inlined iter::range::<impl Iterator for RangeInclusive<u32>>::next) { // at $DIR/range_iter.rs:28:14: 28:25
- debug self => _8; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
- }
- }
- scope 3 (inlined RangeInclusive::<u32>::new) { // at $DIR/range_iter.rs:28:14: 28:25
- debug start => _1; // in scope 3 at $SRC_DIR/core/src/ops/range.rs:LL:COL
- debug end => _2; // in scope 3 at $SRC_DIR/core/src/ops/range.rs:LL:COL
- }
- scope 4 (inlined <RangeInclusive<u32> as IntoIterator>::into_iter) { // at $DIR/range_iter.rs:28:14: 28:25
- debug self => _4; // in scope 4 at $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
- }
-
- bb0: {
- _4 = RangeInclusive::<u32> { start: _1, end: _2, exhausted: const false }; // scope 3 at $SRC_DIR/core/src/ops/range.rs:LL:COL
- StorageLive(_5); // scope 0 at $DIR/range_iter.rs:+1:14: +1:25
- _5 = move _4; // scope 0 at $DIR/range_iter.rs:+1:14: +1:25
- goto -> bb1; // scope 1 at $DIR/range_iter.rs:+1:5: +3:6
- }
-
- bb1: {
- StorageLive(_7); // scope 1 at $DIR/range_iter.rs:+1:14: +1:25
- _8 = &mut _5; // scope 1 at $DIR/range_iter.rs:+1:14: +1:25
- _7 = <RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(_8) -> [return: bb9, unwind: bb7]; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/iter/range.rs:LL:COL
- // + literal: Const { ty: for<'a> fn(&'a mut RangeInclusive<u32>) -> Option<<RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::Item> {<RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next}, val: Value(<ZST>) }
- }
-
- bb2: {
- _10 = ((_7 as Some).0: u32); // scope 1 at $DIR/range_iter.rs:+1:9: +1:10
- StorageLive(_11); // scope 2 at $DIR/range_iter.rs:+2:9: +2:10
- _11 = &_3; // scope 2 at $DIR/range_iter.rs:+2:9: +2:10
- StorageLive(_12); // scope 2 at $DIR/range_iter.rs:+2:9: +2:13
- _12 = (_10,); // scope 2 at $DIR/range_iter.rs:+2:9: +2:13
- _6 = <impl Fn(u32) as Fn<(u32,)>>::call(move _11, move _12) -> [return: bb5, unwind: bb7]; // scope 2 at $DIR/range_iter.rs:+2:9: +2:13
- // mir::Constant
- // + span: $DIR/range_iter.rs:29:9: 29:10
- // + literal: Const { ty: for<'a> extern "rust-call" fn(&'a impl Fn(u32), (u32,)) -> <impl Fn(u32) as FnOnce<(u32,)>>::Output {<impl Fn(u32) as Fn<(u32,)>>::call}, val: Value(<ZST>) }
- }
-
- bb3: {
- unreachable; // scope 1 at $DIR/range_iter.rs:+1:14: +1:25
- }
-
- bb4: {
- StorageDead(_7); // scope 1 at $DIR/range_iter.rs:+3:5: +3:6
- StorageDead(_5); // scope 0 at $DIR/range_iter.rs:+3:5: +3:6
- drop(_3) -> bb6; // scope 0 at $DIR/range_iter.rs:+4:1: +4:2
- }
-
- bb5: {
- StorageDead(_12); // scope 2 at $DIR/range_iter.rs:+2:12: +2:13
- StorageDead(_11); // scope 2 at $DIR/range_iter.rs:+2:12: +2:13
- StorageDead(_7); // scope 1 at $DIR/range_iter.rs:+3:5: +3:6
- goto -> bb1; // scope 1 at $DIR/range_iter.rs:+1:5: +3:6
- }
-
- bb6: {
- return; // scope 0 at $DIR/range_iter.rs:+4:2: +4:2
- }
-
- bb7 (cleanup): {
- drop(_3) -> [return: bb8, unwind terminate]; // scope 0 at $DIR/range_iter.rs:+4:1: +4:2
- }
-
- bb8 (cleanup): {
- resume; // scope 0 at $DIR/range_iter.rs:+0:1: +4:2
- }
-
- bb9: {
- _9 = discriminant(_7); // scope 1 at $DIR/range_iter.rs:+1:14: +1:25
- switchInt(move _9) -> [0: bb4, 1: bb2, otherwise: bb3]; // scope 1 at $DIR/range_iter.rs:+1:14: +1:25
- }
-}
diff --git a/tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..9737c9a87
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,81 @@
+// MIR for `inclusive_loop` after PreCodegen
+
+fn inclusive_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
+ debug start => _1;
+ debug end => _2;
+ debug f => _3;
+ let mut _0: ();
+ let mut _4: std::ops::RangeInclusive<u32>;
+ let mut _5: std::ops::RangeInclusive<u32>;
+ let mut _6: &mut std::ops::RangeInclusive<u32>;
+ let mut _7: std::option::Option<u32>;
+ let mut _8: isize;
+ let mut _10: &impl Fn(u32);
+ let mut _11: (u32,);
+ let _12: ();
+ scope 1 {
+ debug iter => _5;
+ let _9: u32;
+ scope 2 {
+ debug x => _9;
+ }
+ scope 5 (inlined iter::range::<impl Iterator for RangeInclusive<u32>>::next) {
+ debug self => _6;
+ }
+ }
+ scope 3 (inlined RangeInclusive::<u32>::new) {
+ debug start => _1;
+ debug end => _2;
+ }
+ scope 4 (inlined <RangeInclusive<u32> as IntoIterator>::into_iter) {
+ debug self => _4;
+ }
+
+ bb0: {
+ _4 = RangeInclusive::<u32> { start: _1, end: _2, exhausted: const false };
+ StorageLive(_5);
+ _5 = move _4;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageLive(_7);
+ _6 = &mut _5;
+ _7 = <RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(_6) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ _8 = discriminant(_7);
+ switchInt(move _8) -> [0: bb3, 1: bb5, otherwise: bb7];
+ }
+
+ bb3: {
+ StorageDead(_7);
+ StorageDead(_5);
+ drop(_3) -> [return: bb4, unwind unreachable];
+ }
+
+ bb4: {
+ return;
+ }
+
+ bb5: {
+ _9 = ((_7 as Some).0: u32);
+ StorageLive(_10);
+ _10 = &_3;
+ StorageLive(_11);
+ _11 = (_9,);
+ _12 = <impl Fn(u32) as Fn<(u32,)>>::call(move _10, move _11) -> [return: bb6, unwind unreachable];
+ }
+
+ bb6: {
+ StorageDead(_11);
+ StorageDead(_10);
+ StorageDead(_7);
+ goto -> bb1;
+ }
+
+ bb7: {
+ unreachable;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..04d6da1d9
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,89 @@
+// MIR for `inclusive_loop` after PreCodegen
+
+fn inclusive_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
+ debug start => _1;
+ debug end => _2;
+ debug f => _3;
+ let mut _0: ();
+ let mut _4: std::ops::RangeInclusive<u32>;
+ let mut _5: std::ops::RangeInclusive<u32>;
+ let mut _6: &mut std::ops::RangeInclusive<u32>;
+ let mut _7: std::option::Option<u32>;
+ let mut _8: isize;
+ let mut _10: &impl Fn(u32);
+ let mut _11: (u32,);
+ let _12: ();
+ scope 1 {
+ debug iter => _5;
+ let _9: u32;
+ scope 2 {
+ debug x => _9;
+ }
+ scope 5 (inlined iter::range::<impl Iterator for RangeInclusive<u32>>::next) {
+ debug self => _6;
+ }
+ }
+ scope 3 (inlined RangeInclusive::<u32>::new) {
+ debug start => _1;
+ debug end => _2;
+ }
+ scope 4 (inlined <RangeInclusive<u32> as IntoIterator>::into_iter) {
+ debug self => _4;
+ }
+
+ bb0: {
+ _4 = RangeInclusive::<u32> { start: _1, end: _2, exhausted: const false };
+ StorageLive(_5);
+ _5 = move _4;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageLive(_7);
+ _6 = &mut _5;
+ _7 = <RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(_6) -> [return: bb2, unwind: bb8];
+ }
+
+ bb2: {
+ _8 = discriminant(_7);
+ switchInt(move _8) -> [0: bb3, 1: bb5, otherwise: bb7];
+ }
+
+ bb3: {
+ StorageDead(_7);
+ StorageDead(_5);
+ drop(_3) -> [return: bb4, unwind continue];
+ }
+
+ bb4: {
+ return;
+ }
+
+ bb5: {
+ _9 = ((_7 as Some).0: u32);
+ StorageLive(_10);
+ _10 = &_3;
+ StorageLive(_11);
+ _11 = (_9,);
+ _12 = <impl Fn(u32) as Fn<(u32,)>>::call(move _10, move _11) -> [return: bb6, unwind: bb8];
+ }
+
+ bb6: {
+ StorageDead(_11);
+ StorageDead(_10);
+ StorageDead(_7);
+ goto -> bb1;
+ }
+
+ bb7: {
+ unreachable;
+ }
+
+ bb8 (cleanup): {
+ drop(_3) -> [return: bb9, unwind terminate];
+ }
+
+ bb9 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.mir
deleted file mode 100644
index d013b1b94..000000000
--- a/tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.mir
+++ /dev/null
@@ -1,20 +0,0 @@
-// MIR for `range_inclusive_iter_next` after PreCodegen
-
-fn range_inclusive_iter_next(_1: &mut RangeInclusive<u32>) -> Option<u32> {
- debug it => _1; // in scope 0 at $DIR/range_iter.rs:+0:34: +0:36
- let mut _0: std::option::Option<u32>; // return place in scope 0 at $DIR/range_iter.rs:+0:67: +0:78
- scope 1 (inlined iter::range::<impl Iterator for RangeInclusive<u32>>::next) { // at $DIR/range_iter.rs:16:8: 16:14
- debug self => _1; // in scope 1 at $SRC_DIR/core/src/iter/range.rs:LL:COL
- }
-
- bb0: {
- _0 = <RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(_1) -> bb1; // scope 1 at $SRC_DIR/core/src/iter/range.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/iter/range.rs:LL:COL
- // + literal: Const { ty: for<'a> fn(&'a mut RangeInclusive<u32>) -> Option<<RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::Item> {<RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next}, val: Value(<ZST>) }
- }
-
- bb1: {
- return; // scope 0 at $DIR/range_iter.rs:+2:2: +2:2
- }
-}
diff --git a/tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..0a71b6b2c
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,17 @@
+// MIR for `range_inclusive_iter_next` after PreCodegen
+
+fn range_inclusive_iter_next(_1: &mut RangeInclusive<u32>) -> Option<u32> {
+ debug it => _1;
+ let mut _0: std::option::Option<u32>;
+ scope 1 (inlined iter::range::<impl Iterator for RangeInclusive<u32>>::next) {
+ debug self => _1;
+ }
+
+ bb0: {
+ _0 = <RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(_1) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..fd565fe75
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,17 @@
+// MIR for `range_inclusive_iter_next` after PreCodegen
+
+fn range_inclusive_iter_next(_1: &mut RangeInclusive<u32>) -> Option<u32> {
+ debug it => _1;
+ let mut _0: std::option::Option<u32>;
+ scope 1 (inlined iter::range::<impl Iterator for RangeInclusive<u32>>::next) {
+ debug self => _1;
+ }
+
+ bb0: {
+ _0 = <RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(_1) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.mir
deleted file mode 100644
index cae46e2b0..000000000
--- a/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.mir
+++ /dev/null
@@ -1,20 +0,0 @@
-// MIR for `range_iter_next` after PreCodegen
-
-fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
- debug it => _1; // in scope 0 at $DIR/range_iter.rs:+0:24: +0:26
- let mut _0: std::option::Option<u32>; // return place in scope 0 at $DIR/range_iter.rs:+0:48: +0:59
- scope 1 (inlined iter::range::<impl Iterator for std::ops::Range<u32>>::next) { // at $DIR/range_iter.rs:11:8: 11:14
- debug self => _1; // in scope 1 at $SRC_DIR/core/src/iter/range.rs:LL:COL
- }
-
- bb0: {
- _0 = <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next(_1) -> bb1; // scope 1 at $SRC_DIR/core/src/iter/range.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/iter/range.rs:LL:COL
- // + literal: Const { ty: for<'a> fn(&'a mut std::ops::Range<u32>) -> Option<<std::ops::Range<u32> as iter::range::RangeIteratorImpl>::Item> {<std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next}, val: Value(<ZST>) }
- }
-
- bb1: {
- return; // scope 0 at $DIR/range_iter.rs:+2:2: +2:2
- }
-}
diff --git a/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..1dfd00bf3
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,71 @@
+// MIR for `range_iter_next` after PreCodegen
+
+fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
+ debug it => _1;
+ let mut _0: std::option::Option<u32>;
+ scope 1 (inlined iter::range::<impl Iterator for std::ops::Range<u32>>::next) {
+ debug self => _1;
+ scope 2 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
+ debug self => _1;
+ let mut _2: &u32;
+ let mut _3: &u32;
+ let mut _6: bool;
+ let _7: u32;
+ let mut _8: u32;
+ scope 3 {
+ debug old => _7;
+ scope 4 {
+ }
+ }
+ scope 5 (inlined cmp::impls::<impl PartialOrd for u32>::lt) {
+ debug self => _2;
+ debug other => _3;
+ let mut _4: u32;
+ let mut _5: u32;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_7);
+ StorageLive(_6);
+ StorageLive(_2);
+ _2 = &((*_1).0: u32);
+ StorageLive(_3);
+ _3 = &((*_1).1: u32);
+ StorageLive(_4);
+ _4 = (*_2);
+ StorageLive(_5);
+ _5 = (*_3);
+ _6 = Lt(move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_2);
+ switchInt(move _6) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ _0 = Option::<u32>::None;
+ goto -> bb4;
+ }
+
+ bb2: {
+ _7 = ((*_1).0: u32);
+ StorageLive(_8);
+ _8 = <u32 as Step>::forward_unchecked(_7, const 1_usize) -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ ((*_1).0: u32) = move _8;
+ StorageDead(_8);
+ _0 = Option::<u32>::Some(_7);
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageDead(_6);
+ StorageDead(_7);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..65870f693
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,71 @@
+// MIR for `range_iter_next` after PreCodegen
+
+fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
+ debug it => _1;
+ let mut _0: std::option::Option<u32>;
+ scope 1 (inlined iter::range::<impl Iterator for std::ops::Range<u32>>::next) {
+ debug self => _1;
+ scope 2 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
+ debug self => _1;
+ let mut _2: &u32;
+ let mut _3: &u32;
+ let mut _6: bool;
+ let _7: u32;
+ let mut _8: u32;
+ scope 3 {
+ debug old => _7;
+ scope 4 {
+ }
+ }
+ scope 5 (inlined cmp::impls::<impl PartialOrd for u32>::lt) {
+ debug self => _2;
+ debug other => _3;
+ let mut _4: u32;
+ let mut _5: u32;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_7);
+ StorageLive(_6);
+ StorageLive(_2);
+ _2 = &((*_1).0: u32);
+ StorageLive(_3);
+ _3 = &((*_1).1: u32);
+ StorageLive(_4);
+ _4 = (*_2);
+ StorageLive(_5);
+ _5 = (*_3);
+ _6 = Lt(move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_2);
+ switchInt(move _6) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ _0 = Option::<u32>::None;
+ goto -> bb4;
+ }
+
+ bb2: {
+ _7 = ((*_1).0: u32);
+ StorageLive(_8);
+ _8 = <u32 as Step>::forward_unchecked(_7, const 1_usize) -> [return: bb3, unwind continue];
+ }
+
+ bb3: {
+ ((*_1).0: u32) = move _8;
+ StorageDead(_8);
+ _0 = Option::<u32>::Some(_7);
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageDead(_6);
+ StorageDead(_7);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/range_iter.rs b/tests/mir-opt/pre-codegen/range_iter.rs
index fe21d4dfd..cabd9419e 100644
--- a/tests/mir-opt/pre-codegen/range_iter.rs
+++ b/tests/mir-opt/pre-codegen/range_iter.rs
@@ -1,6 +1,7 @@
// compile-flags: -O -C debuginfo=0 -Zmir-opt-level=2
// only-64bit
// ignore-debug
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![crate_type = "lib"]
diff --git a/tests/mir-opt/pre-codegen/simple_option_map.ezmap.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/simple_option_map.ezmap.PreCodegen.after.mir
index 986ab3588..df45b1589 100644
--- a/tests/mir-opt/pre-codegen/simple_option_map.ezmap.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/simple_option_map.ezmap.PreCodegen.after.mir
@@ -1,56 +1,56 @@
// MIR for `ezmap` after PreCodegen
fn ezmap(_1: Option<i32>) -> Option<i32> {
- debug x => _1; // in scope 0 at $DIR/simple_option_map.rs:+0:14: +0:15
- let mut _0: std::option::Option<i32>; // return place in scope 0 at $DIR/simple_option_map.rs:+0:33: +0:44
- let mut _6: i32; // in scope 0 at $DIR/simple_option_map.rs:11:25: 11:29
- scope 1 (inlined map::<i32, i32, [closure@$DIR/simple_option_map.rs:18:12: 18:15]>) { // at $DIR/simple_option_map.rs:18:5: 18:22
- debug slf => _1; // in scope 1 at $DIR/simple_option_map.rs:6:17: 6:20
- debug f => const ZeroSized: [closure@$DIR/simple_option_map.rs:18:12: 18:15]; // in scope 1 at $DIR/simple_option_map.rs:6:33: 6:34
- let mut _2: isize; // in scope 1 at $DIR/simple_option_map.rs:11:9: 11:16
- let _3: i32; // in scope 1 at $DIR/simple_option_map.rs:11:14: 11:15
- let mut _4: i32; // in scope 1 at $DIR/simple_option_map.rs:11:25: 11:29
- let mut _5: (i32,); // in scope 1 at $DIR/simple_option_map.rs:11:25: 11:29
+ debug x => _1;
+ let mut _0: std::option::Option<i32>;
+ let mut _5: i32;
+ scope 1 (inlined map::<i32, i32, [closure@$DIR/simple_option_map.rs:18:12: 18:15]>) {
+ debug slf => _1;
+ debug f => const ZeroSized: [closure@$DIR/simple_option_map.rs:18:12: 18:15];
+ let mut _2: isize;
+ let _3: i32;
+ let mut _4: (i32,);
+ let mut _6: i32;
scope 2 {
- debug x => _3; // in scope 2 at $DIR/simple_option_map.rs:11:14: 11:15
- scope 3 (inlined ezmap::{closure#0}) { // at $DIR/simple_option_map.rs:11:25: 11:29
- debug n => _6; // in scope 3 at $DIR/simple_option_map.rs:+1:13: +1:14
+ debug x => _3;
+ scope 3 (inlined ezmap::{closure#0}) {
+ debug n => _5;
}
}
}
bb0: {
- StorageLive(_3); // scope 0 at $DIR/simple_option_map.rs:+1:5: +1:22
- _2 = discriminant(_1); // scope 1 at $DIR/simple_option_map.rs:10:11: 10:14
- switchInt(move _2) -> [0: bb1, 1: bb3, otherwise: bb2]; // scope 1 at $DIR/simple_option_map.rs:10:5: 10:14
+ StorageLive(_3);
+ _2 = discriminant(_1);
+ switchInt(move _2) -> [0: bb1, 1: bb2, otherwise: bb4];
}
bb1: {
- _0 = Option::<i32>::None; // scope 1 at $DIR/simple_option_map.rs:12:17: 12:21
- goto -> bb4; // scope 1 at $DIR/simple_option_map.rs:12:17: 12:21
+ _0 = Option::<i32>::None;
+ goto -> bb3;
}
bb2: {
- unreachable; // scope 1 at $DIR/simple_option_map.rs:10:11: 10:14
+ _3 = ((_1 as Some).0: i32);
+ StorageLive(_6);
+ StorageLive(_4);
+ _4 = (move _3,);
+ StorageLive(_5);
+ _5 = move (_4.0: i32);
+ _6 = Add(_5, const 1_i32);
+ StorageDead(_5);
+ StorageDead(_4);
+ _0 = Option::<i32>::Some(move _6);
+ StorageDead(_6);
+ goto -> bb3;
}
bb3: {
- _3 = ((_1 as Some).0: i32); // scope 1 at $DIR/simple_option_map.rs:11:14: 11:15
- StorageLive(_4); // scope 2 at $DIR/simple_option_map.rs:11:25: 11:29
- StorageLive(_5); // scope 2 at $DIR/simple_option_map.rs:11:25: 11:29
- _5 = (move _3,); // scope 2 at $DIR/simple_option_map.rs:11:25: 11:29
- StorageLive(_6); // scope 2 at $DIR/simple_option_map.rs:11:25: 11:29
- _6 = move (_5.0: i32); // scope 2 at $DIR/simple_option_map.rs:11:25: 11:29
- _4 = Add(_6, const 1_i32); // scope 3 at $DIR/simple_option_map.rs:+1:16: +1:21
- StorageDead(_6); // scope 2 at $DIR/simple_option_map.rs:11:25: 11:29
- StorageDead(_5); // scope 2 at $DIR/simple_option_map.rs:11:28: 11:29
- _0 = Option::<i32>::Some(move _4); // scope 2 at $DIR/simple_option_map.rs:11:20: 11:30
- StorageDead(_4); // scope 2 at $DIR/simple_option_map.rs:11:29: 11:30
- goto -> bb4; // scope 1 at $DIR/simple_option_map.rs:14:1: 14:2
+ StorageDead(_3);
+ return;
}
bb4: {
- StorageDead(_3); // scope 0 at $DIR/simple_option_map.rs:+1:5: +1:22
- return; // scope 0 at $DIR/simple_option_map.rs:+2:2: +2:2
+ unreachable;
}
}
diff --git a/tests/mir-opt/pre-codegen/slice_filter.rs b/tests/mir-opt/pre-codegen/slice_filter.rs
new file mode 100644
index 000000000..aba951acd
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_filter.rs
@@ -0,0 +1,15 @@
+// compile-flags: -O -Zmir-opt-level=2 -Cdebuginfo=2
+// ignore-debug: standard library debug assertions add a panic that breaks this optimization
+
+#![crate_type = "lib"]
+
+pub fn variant_a(input: &[(usize, usize, usize, usize)]) -> usize {
+ input.iter().filter(|(a, b, c, d)| a <= c && d <= b || c <= a && b <= d).count()
+}
+
+pub fn variant_b(input: &[(usize, usize, usize, usize)]) -> usize {
+ input.iter().filter(|&&(a, b, c, d)| a <= c && d <= b || c <= a && b <= d).count()
+}
+
+// EMIT_MIR slice_filter.variant_a-{closure#0}.PreCodegen.after.mir
+// EMIT_MIR slice_filter.variant_b-{closure#0}.PreCodegen.after.mir
diff --git a/tests/mir-opt/pre-codegen/slice_filter.variant_a-{closure#0}.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/slice_filter.variant_a-{closure#0}.PreCodegen.after.mir
new file mode 100644
index 000000000..499bee2ae
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_filter.variant_a-{closure#0}.PreCodegen.after.mir
@@ -0,0 +1,231 @@
+// MIR for `variant_a::{closure#0}` after PreCodegen
+
+fn variant_a::{closure#0}(_1: &mut [closure@$DIR/slice_filter.rs:7:25: 7:39], _2: &&(usize, usize, usize, usize)) -> bool {
+ let mut _0: bool;
+ let mut _3: &(usize, usize, usize, usize);
+ let _4: &usize;
+ let mut _5: &(usize, usize, usize, usize);
+ let _6: &usize;
+ let mut _7: &(usize, usize, usize, usize);
+ let _8: &usize;
+ let mut _9: &(usize, usize, usize, usize);
+ let _10: &usize;
+ let mut _11: &&usize;
+ let _12: &usize;
+ let mut _13: &&usize;
+ let mut _18: bool;
+ let mut _19: bool;
+ let mut _20: &&usize;
+ let _21: &usize;
+ let mut _22: &&usize;
+ let mut _27: bool;
+ let mut _28: &&usize;
+ let _29: &usize;
+ let mut _30: &&usize;
+ let mut _35: bool;
+ let mut _36: bool;
+ let mut _37: &&usize;
+ let _38: &usize;
+ let mut _39: &&usize;
+ let mut _44: bool;
+ scope 1 {
+ debug a => _4;
+ debug b => _6;
+ debug c => _8;
+ debug d => _10;
+ scope 2 (inlined cmp::impls::<impl PartialOrd for &usize>::le) {
+ debug self => _11;
+ debug other => _13;
+ let mut _14: &usize;
+ let mut _15: &usize;
+ scope 3 (inlined cmp::impls::<impl PartialOrd for usize>::le) {
+ debug self => _14;
+ debug other => _15;
+ let mut _16: usize;
+ let mut _17: usize;
+ }
+ }
+ scope 4 (inlined cmp::impls::<impl PartialOrd for &usize>::le) {
+ debug self => _28;
+ debug other => _30;
+ let mut _31: &usize;
+ let mut _32: &usize;
+ scope 5 (inlined cmp::impls::<impl PartialOrd for usize>::le) {
+ debug self => _31;
+ debug other => _32;
+ let mut _33: usize;
+ let mut _34: usize;
+ }
+ }
+ scope 6 (inlined cmp::impls::<impl PartialOrd for &usize>::le) {
+ debug self => _20;
+ debug other => _22;
+ let mut _23: &usize;
+ let mut _24: &usize;
+ scope 7 (inlined cmp::impls::<impl PartialOrd for usize>::le) {
+ debug self => _23;
+ debug other => _24;
+ let mut _25: usize;
+ let mut _26: usize;
+ }
+ }
+ scope 8 (inlined cmp::impls::<impl PartialOrd for &usize>::le) {
+ debug self => _37;
+ debug other => _39;
+ let mut _40: &usize;
+ let mut _41: &usize;
+ scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::le) {
+ debug self => _40;
+ debug other => _41;
+ let mut _42: usize;
+ let mut _43: usize;
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_4);
+ _3 = deref_copy (*_2);
+ _4 = &((*_3).0: usize);
+ StorageLive(_6);
+ _5 = deref_copy (*_2);
+ _6 = &((*_5).1: usize);
+ StorageLive(_8);
+ _7 = deref_copy (*_2);
+ _8 = &((*_7).2: usize);
+ StorageLive(_10);
+ _9 = deref_copy (*_2);
+ _10 = &((*_9).3: usize);
+ StorageLive(_19);
+ StorageLive(_18);
+ StorageLive(_11);
+ _11 = &_4;
+ StorageLive(_13);
+ StorageLive(_12);
+ _12 = _8;
+ _13 = &_12;
+ _14 = deref_copy (*_11);
+ _15 = deref_copy (*_13);
+ StorageLive(_16);
+ _16 = (*_14);
+ StorageLive(_17);
+ _17 = (*_15);
+ _18 = Le(move _16, move _17);
+ StorageDead(_17);
+ StorageDead(_16);
+ StorageDead(_12);
+ StorageDead(_13);
+ StorageDead(_11);
+ switchInt(move _18) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ _19 = const false;
+ goto -> bb3;
+ }
+
+ bb2: {
+ StorageLive(_27);
+ StorageLive(_20);
+ _20 = &_10;
+ StorageLive(_22);
+ StorageLive(_21);
+ _21 = _6;
+ _22 = &_21;
+ _23 = deref_copy (*_20);
+ _24 = deref_copy (*_22);
+ StorageLive(_25);
+ _25 = (*_23);
+ StorageLive(_26);
+ _26 = (*_24);
+ _27 = Le(move _25, move _26);
+ StorageDead(_26);
+ StorageDead(_25);
+ StorageDead(_21);
+ StorageDead(_22);
+ StorageDead(_20);
+ _19 = move _27;
+ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_27);
+ StorageDead(_18);
+ switchInt(move _19) -> [0: bb4, otherwise: bb8];
+ }
+
+ bb4: {
+ StorageLive(_36);
+ StorageLive(_35);
+ StorageLive(_28);
+ _28 = &_8;
+ StorageLive(_30);
+ StorageLive(_29);
+ _29 = _4;
+ _30 = &_29;
+ _31 = deref_copy (*_28);
+ _32 = deref_copy (*_30);
+ StorageLive(_33);
+ _33 = (*_31);
+ StorageLive(_34);
+ _34 = (*_32);
+ _35 = Le(move _33, move _34);
+ StorageDead(_34);
+ StorageDead(_33);
+ StorageDead(_29);
+ StorageDead(_30);
+ StorageDead(_28);
+ switchInt(move _35) -> [0: bb5, otherwise: bb6];
+ }
+
+ bb5: {
+ _36 = const false;
+ goto -> bb7;
+ }
+
+ bb6: {
+ StorageLive(_44);
+ StorageLive(_37);
+ _37 = &_6;
+ StorageLive(_39);
+ StorageLive(_38);
+ _38 = _10;
+ _39 = &_38;
+ _40 = deref_copy (*_37);
+ _41 = deref_copy (*_39);
+ StorageLive(_42);
+ _42 = (*_40);
+ StorageLive(_43);
+ _43 = (*_41);
+ _44 = Le(move _42, move _43);
+ StorageDead(_43);
+ StorageDead(_42);
+ StorageDead(_38);
+ StorageDead(_39);
+ StorageDead(_37);
+ _36 = move _44;
+ goto -> bb7;
+ }
+
+ bb7: {
+ StorageDead(_44);
+ StorageDead(_35);
+ _0 = move _36;
+ goto -> bb9;
+ }
+
+ bb8: {
+ _0 = const true;
+ goto -> bb9;
+ }
+
+ bb9: {
+ StorageDead(_36);
+ StorageDead(_19);
+ StorageDead(_10);
+ StorageDead(_8);
+ StorageDead(_6);
+ StorageDead(_4);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_filter.variant_b-{closure#0}.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/slice_filter.variant_b-{closure#0}.PreCodegen.after.mir
new file mode 100644
index 000000000..bab9f0b58
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_filter.variant_b-{closure#0}.PreCodegen.after.mir
@@ -0,0 +1,95 @@
+// MIR for `variant_b::{closure#0}` after PreCodegen
+
+fn variant_b::{closure#0}(_1: &mut [closure@$DIR/slice_filter.rs:11:25: 11:41], _2: &&(usize, usize, usize, usize)) -> bool {
+ let mut _0: bool;
+ let mut _3: &(usize, usize, usize, usize);
+ let _4: usize;
+ let mut _5: &(usize, usize, usize, usize);
+ let _6: usize;
+ let mut _7: &(usize, usize, usize, usize);
+ let _8: usize;
+ let mut _9: &(usize, usize, usize, usize);
+ let _10: usize;
+ let mut _11: bool;
+ let mut _12: bool;
+ let mut _13: bool;
+ let mut _14: bool;
+ let mut _15: bool;
+ let mut _16: bool;
+ scope 1 {
+ debug a => _4;
+ debug b => _6;
+ debug c => _8;
+ debug d => _10;
+ }
+
+ bb0: {
+ _3 = deref_copy (*_2);
+ _4 = ((*_3).0: usize);
+ _5 = deref_copy (*_2);
+ _6 = ((*_5).1: usize);
+ _7 = deref_copy (*_2);
+ _8 = ((*_7).2: usize);
+ _9 = deref_copy (*_2);
+ _10 = ((*_9).3: usize);
+ StorageLive(_12);
+ StorageLive(_11);
+ _11 = Le(_4, _8);
+ switchInt(move _11) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ _12 = const false;
+ goto -> bb3;
+ }
+
+ bb2: {
+ StorageLive(_13);
+ _13 = Le(_10, _6);
+ _12 = move _13;
+ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_13);
+ StorageDead(_11);
+ switchInt(move _12) -> [0: bb4, otherwise: bb8];
+ }
+
+ bb4: {
+ StorageLive(_15);
+ StorageLive(_14);
+ _14 = Le(_8, _4);
+ switchInt(move _14) -> [0: bb5, otherwise: bb6];
+ }
+
+ bb5: {
+ _15 = const false;
+ goto -> bb7;
+ }
+
+ bb6: {
+ StorageLive(_16);
+ _16 = Le(_6, _10);
+ _15 = move _16;
+ goto -> bb7;
+ }
+
+ bb7: {
+ StorageDead(_16);
+ StorageDead(_14);
+ _0 = move _15;
+ goto -> bb9;
+ }
+
+ bb8: {
+ _0 = const true;
+ goto -> bb9;
+ }
+
+ bb9: {
+ StorageDead(_15);
+ StorageDead(_12);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_index.rs b/tests/mir-opt/pre-codegen/slice_index.rs
index 44b456276..d80bff50c 100644
--- a/tests/mir-opt/pre-codegen/slice_index.rs
+++ b/tests/mir-opt/pre-codegen/slice_index.rs
@@ -1,6 +1,7 @@
// compile-flags: -O -C debuginfo=0 -Zmir-opt-level=2
// only-64bit
// ignore-debug
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![crate_type = "lib"]
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.mir
deleted file mode 100644
index 715a1e3fc..000000000
--- a/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.mir
+++ /dev/null
@@ -1,105 +0,0 @@
-// MIR for `slice_get_mut_usize` after PreCodegen
-
-fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
- debug slice => _1; // in scope 0 at $DIR/slice_index.rs:+0:28: +0:33
- debug index => _2; // in scope 0 at $DIR/slice_index.rs:+0:47: +0:52
- let mut _0: std::option::Option<&mut u32>; // return place in scope 0 at $DIR/slice_index.rs:+0:64: +0:80
- scope 1 (inlined core::slice::<impl [u32]>::get_mut::<usize>) { // at $DIR/slice_index.rs:16:11: 16:25
- debug self => _1; // in scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- debug index => _2; // in scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- scope 2 (inlined <usize as SliceIndex<[u32]>>::get_mut) { // at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- debug self => _2; // in scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- debug slice => _1; // in scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _3: bool; // in scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _4: usize; // in scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _5: &[u32]; // in scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _6: &mut u32; // in scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _7: *mut u32; // in scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _8: *mut [u32]; // in scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- scope 3 {
- scope 4 (inlined <usize as SliceIndex<[u32]>>::get_unchecked_mut) { // at $SRC_DIR/core/src/slice/index.rs:LL:COL
- debug self => _2; // in scope 4 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- debug slice => _8; // in scope 4 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _9: *mut u32; // in scope 4 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _10: usize; // in scope 4 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- let mut _11: *mut [u32]; // in scope 4 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- scope 5 {
- debug this => _2; // in scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- scope 6 {
- scope 7 (inlined <usize as SliceIndex<[T]>>::get_unchecked_mut::runtime::<u32>) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- debug this => _10; // in scope 7 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- debug slice => _11; // in scope 7 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- scope 8 (inlined ptr::mut_ptr::<impl *mut [u32]>::len) { // at $SRC_DIR/core/src/slice/index.rs:LL:COL
- debug self => _11; // in scope 8 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- let mut _12: *const [u32]; // in scope 8 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- scope 9 (inlined std::ptr::metadata::<[u32]>) { // at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- debug ptr => _12; // in scope 9 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- scope 10 {
- }
- }
- }
- }
- scope 11 (inlined ptr::mut_ptr::<impl *mut [u32]>::as_mut_ptr) { // at $SRC_DIR/core/src/slice/index.rs:LL:COL
- debug self => _8; // in scope 11 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- }
- scope 12 (inlined ptr::mut_ptr::<impl *mut u32>::add) { // at $SRC_DIR/core/src/slice/index.rs:LL:COL
- debug self => _9; // in scope 12 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- debug count => _2; // in scope 12 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- scope 13 {
- }
- }
- }
- }
- }
- }
- }
- }
-
- bb0: {
- StorageLive(_6); // scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageLive(_3); // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_4); // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_5); // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _5 = &(*_1); // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _4 = Len((*_5)); // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_5); // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _3 = Lt(_2, move _4); // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_4); // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- switchInt(move _3) -> [0: bb2, otherwise: bb1]; // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- }
-
- bb1: {
- StorageLive(_7); // scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_8); // scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _8 = &raw mut (*_1); // scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_10); // scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_11); // scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_12); // scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_9); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _9 = _8 as *mut u32 (PtrToPtr); // scope 11 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- _7 = Offset(_9, _2); // scope 13 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- StorageDead(_9); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_12); // scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_11); // scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_10); // scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_8); // scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _6 = &mut (*_7); // scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _0 = Option::<&mut u32>::Some(_6); // scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_7); // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- goto -> bb3; // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- }
-
- bb2: {
- _0 = const Option::<&mut u32>::None; // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- // mir::Constant
- // + span: no-location
- // + literal: Const { ty: Option<&mut u32>, val: Value(Scalar(0x0000000000000000)) }
- goto -> bb3; // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- }
-
- bb3: {
- StorageDead(_3); // scope 2 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_6); // scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- return; // scope 0 at $DIR/slice_index.rs:+2:2: +2:2
- }
-}
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..43efe034d
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,102 @@
+// MIR for `slice_get_mut_usize` after PreCodegen
+
+fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
+ debug slice => _1;
+ debug index => _2;
+ let mut _0: std::option::Option<&mut u32>;
+ scope 1 (inlined core::slice::<impl [u32]>::get_mut::<usize>) {
+ debug self => _1;
+ debug index => _2;
+ scope 2 (inlined <usize as SliceIndex<[u32]>>::get_mut) {
+ debug self => _2;
+ debug slice => _1;
+ let mut _3: &[u32];
+ let mut _4: usize;
+ let mut _5: bool;
+ let mut _6: *mut [u32];
+ let mut _8: *mut u32;
+ let mut _9: &mut u32;
+ scope 3 {
+ scope 4 (inlined <usize as SliceIndex<[u32]>>::get_unchecked_mut) {
+ debug self => _2;
+ debug slice => _6;
+ let mut _7: *mut u32;
+ let mut _10: usize;
+ let mut _11: *mut [u32];
+ scope 5 {
+ debug this => _2;
+ scope 6 {
+ scope 7 (inlined <usize as SliceIndex<[T]>>::get_unchecked_mut::runtime::<u32>) {
+ debug this => _10;
+ debug slice => _11;
+ scope 8 (inlined ptr::mut_ptr::<impl *mut [u32]>::len) {
+ debug self => _11;
+ let mut _12: *const [u32];
+ scope 9 (inlined std::ptr::metadata::<[u32]>) {
+ debug ptr => _12;
+ scope 10 {
+ }
+ }
+ }
+ }
+ scope 11 (inlined ptr::mut_ptr::<impl *mut [u32]>::as_mut_ptr) {
+ debug self => _6;
+ }
+ scope 12 (inlined ptr::mut_ptr::<impl *mut u32>::add) {
+ debug self => _7;
+ debug count => _2;
+ scope 13 {
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_9);
+ StorageLive(_5);
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _4 = Len((*_3));
+ StorageDead(_3);
+ _5 = Lt(_2, move _4);
+ StorageDead(_4);
+ switchInt(move _5) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ _0 = const Option::<&mut u32>::None;
+ goto -> bb3;
+ }
+
+ bb2: {
+ StorageLive(_8);
+ StorageLive(_6);
+ _6 = &raw mut (*_1);
+ StorageLive(_10);
+ StorageLive(_11);
+ StorageLive(_12);
+ StorageLive(_7);
+ _7 = _6 as *mut u32 (PtrToPtr);
+ _8 = Offset(_7, _2);
+ StorageDead(_7);
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_10);
+ StorageDead(_6);
+ _9 = &mut (*_8);
+ _0 = Option::<&mut u32>::Some(_9);
+ StorageDead(_8);
+ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_5);
+ StorageDead(_9);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..43efe034d
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,102 @@
+// MIR for `slice_get_mut_usize` after PreCodegen
+
+fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
+ debug slice => _1;
+ debug index => _2;
+ let mut _0: std::option::Option<&mut u32>;
+ scope 1 (inlined core::slice::<impl [u32]>::get_mut::<usize>) {
+ debug self => _1;
+ debug index => _2;
+ scope 2 (inlined <usize as SliceIndex<[u32]>>::get_mut) {
+ debug self => _2;
+ debug slice => _1;
+ let mut _3: &[u32];
+ let mut _4: usize;
+ let mut _5: bool;
+ let mut _6: *mut [u32];
+ let mut _8: *mut u32;
+ let mut _9: &mut u32;
+ scope 3 {
+ scope 4 (inlined <usize as SliceIndex<[u32]>>::get_unchecked_mut) {
+ debug self => _2;
+ debug slice => _6;
+ let mut _7: *mut u32;
+ let mut _10: usize;
+ let mut _11: *mut [u32];
+ scope 5 {
+ debug this => _2;
+ scope 6 {
+ scope 7 (inlined <usize as SliceIndex<[T]>>::get_unchecked_mut::runtime::<u32>) {
+ debug this => _10;
+ debug slice => _11;
+ scope 8 (inlined ptr::mut_ptr::<impl *mut [u32]>::len) {
+ debug self => _11;
+ let mut _12: *const [u32];
+ scope 9 (inlined std::ptr::metadata::<[u32]>) {
+ debug ptr => _12;
+ scope 10 {
+ }
+ }
+ }
+ }
+ scope 11 (inlined ptr::mut_ptr::<impl *mut [u32]>::as_mut_ptr) {
+ debug self => _6;
+ }
+ scope 12 (inlined ptr::mut_ptr::<impl *mut u32>::add) {
+ debug self => _7;
+ debug count => _2;
+ scope 13 {
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_9);
+ StorageLive(_5);
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = &(*_1);
+ _4 = Len((*_3));
+ StorageDead(_3);
+ _5 = Lt(_2, move _4);
+ StorageDead(_4);
+ switchInt(move _5) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ _0 = const Option::<&mut u32>::None;
+ goto -> bb3;
+ }
+
+ bb2: {
+ StorageLive(_8);
+ StorageLive(_6);
+ _6 = &raw mut (*_1);
+ StorageLive(_10);
+ StorageLive(_11);
+ StorageLive(_12);
+ StorageLive(_7);
+ _7 = _6 as *mut u32 (PtrToPtr);
+ _8 = Offset(_7, _2);
+ StorageDead(_7);
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_10);
+ StorageDead(_6);
+ _9 = &mut (*_8);
+ _0 = Option::<&mut u32>::Some(_9);
+ StorageDead(_8);
+ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_5);
+ StorageDead(_9);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.mir
deleted file mode 100644
index 7a10b929e..000000000
--- a/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.mir
+++ /dev/null
@@ -1,134 +0,0 @@
-// MIR for `slice_get_unchecked_mut_range` after PreCodegen
-
-fn slice_get_unchecked_mut_range(_1: &mut [u32], _2: std::ops::Range<usize>) -> &mut [u32] {
- debug slice => _1; // in scope 0 at $DIR/slice_index.rs:+0:45: +0:50
- debug index => _2; // in scope 0 at $DIR/slice_index.rs:+0:64: +0:69
- let mut _0: &mut [u32]; // return place in scope 0 at $DIR/slice_index.rs:+0:88: +0:98
- scope 1 (inlined core::slice::<impl [u32]>::get_unchecked_mut::<std::ops::Range<usize>>) { // at $DIR/slice_index.rs:26:11: 26:35
- debug self => _1; // in scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- debug index => _2; // in scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- let mut _3: *mut [u32]; // in scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- let mut _4: *mut [u32]; // in scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- scope 2 {
- scope 3 (inlined <std::ops::Range<usize> as SliceIndex<[u32]>>::get_unchecked_mut) { // at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- debug self => _2; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- debug slice => _4; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let _5: std::ops::Range<usize>; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _7: usize; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _8: usize; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _9: *mut u32; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _10: *mut u32; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _11: usize; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _12: usize; // in scope 3 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let mut _13: std::ops::Range<usize>; // in scope 3 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- let mut _14: *mut [u32]; // in scope 3 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- scope 4 {
- debug this => _5; // in scope 4 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- scope 5 {
- let _6: usize; // in scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- scope 6 {
- debug new_len => _6; // in scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- scope 11 (inlined ptr::mut_ptr::<impl *mut [u32]>::as_mut_ptr) { // at $SRC_DIR/core/src/slice/index.rs:LL:COL
- debug self => _4; // in scope 11 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- }
- scope 12 (inlined ptr::mut_ptr::<impl *mut u32>::add) { // at $SRC_DIR/core/src/slice/index.rs:LL:COL
- debug self => _10; // in scope 12 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- debug count => _11; // in scope 12 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- scope 13 {
- }
- }
- scope 14 (inlined slice_from_raw_parts_mut::<u32>) { // at $SRC_DIR/core/src/slice/index.rs:LL:COL
- debug data => _9; // in scope 14 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- debug len => _12; // in scope 14 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- let mut _16: *mut (); // in scope 14 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- scope 15 (inlined ptr::mut_ptr::<impl *mut u32>::cast::<()>) { // at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- debug self => _9; // in scope 15 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- }
- scope 16 (inlined std::ptr::from_raw_parts_mut::<[u32]>) { // at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- debug data_address => _16; // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- debug metadata => _12; // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- let mut _17: std::ptr::metadata::PtrRepr<[u32]>; // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- let mut _18: std::ptr::metadata::PtrComponents<[u32]>; // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- let mut _19: *const (); // in scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- scope 17 {
- }
- }
- }
- }
- scope 7 (inlined <std::ops::Range<usize> as SliceIndex<[T]>>::get_unchecked_mut::runtime::<u32>) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- debug this => _13; // in scope 7 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- debug slice => _14; // in scope 7 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- scope 8 (inlined ptr::mut_ptr::<impl *mut [u32]>::len) { // at $SRC_DIR/core/src/slice/index.rs:LL:COL
- debug self => _14; // in scope 8 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- let mut _15: *const [u32]; // in scope 8 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- scope 9 (inlined std::ptr::metadata::<[u32]>) { // at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- debug ptr => _15; // in scope 9 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- scope 10 {
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- bb0: {
- StorageLive(_3); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageLive(_4); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- _4 = &raw mut (*_1); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageLive(_5); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageLive(_13); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageLive(_14); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageLive(_15); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageLive(_6); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_7); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _7 = (_2.1: usize); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_8); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _8 = (_2.0: usize); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _6 = unchecked_sub::<usize>(move _7, move _8) -> [return: bb1, unwind unreachable]; // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/slice/index.rs:LL:COL
- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(usize, usize) -> usize {unchecked_sub::<usize>}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_8); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_7); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_9); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_10); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _10 = _4 as *mut u32 (PtrToPtr); // scope 11 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- StorageLive(_11); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _11 = (_2.0: usize); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _9 = Offset(_10, _11); // scope 13 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- StorageDead(_11); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_10); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_12); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _12 = _6; // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageLive(_16); // scope 14 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- _16 = _9 as *mut () (PtrToPtr); // scope 15 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- StorageLive(_17); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- StorageLive(_18); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- StorageLive(_19); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- _19 = _16 as *const () (Pointer(MutToConstPointer)); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- _18 = ptr::metadata::PtrComponents::<[u32]> { data_address: move _19, metadata: _12 }; // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- StorageDead(_19); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- _17 = ptr::metadata::PtrRepr::<[u32]> { const_ptr: move _18 }; // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- StorageDead(_18); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- _3 = (_17.1: *mut [u32]); // scope 17 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- StorageDead(_17); // scope 16 at $SRC_DIR/core/src/ptr/metadata.rs:LL:COL
- StorageDead(_16); // scope 14 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- StorageDead(_12); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_9); // scope 6 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_6); // scope 5 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_15); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageDead(_14); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageDead(_13); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageDead(_5); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageDead(_4); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- _0 = &mut (*_3); // scope 2 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageDead(_3); // scope 1 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- return; // scope 0 at $DIR/slice_index.rs:+2:2: +2:2
- }
-}
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..0c44873b7
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,103 @@
+// MIR for `slice_get_unchecked_mut_range` after PreCodegen
+
+fn slice_get_unchecked_mut_range(_1: &mut [u32], _2: std::ops::Range<usize>) -> &mut [u32] {
+ debug slice => _1;
+ debug index => _2;
+ let mut _0: &mut [u32];
+ scope 1 (inlined core::slice::<impl [u32]>::get_unchecked_mut::<std::ops::Range<usize>>) {
+ debug self => _1;
+ debug index => _2;
+ let mut _3: *mut [u32];
+ let mut _14: *mut [u32];
+ scope 2 {
+ scope 3 (inlined <std::ops::Range<usize> as SliceIndex<[u32]>>::get_unchecked_mut) {
+ debug self => _2;
+ debug slice => _3;
+ let mut _4: usize;
+ let mut _5: usize;
+ let mut _7: *mut u32;
+ let mut _8: usize;
+ let mut _9: *mut u32;
+ let _15: std::ops::Range<usize>;
+ scope 4 {
+ debug this => _15;
+ scope 5 {
+ let _6: usize;
+ scope 6 {
+ debug new_len => _6;
+ scope 7 (inlined ptr::mut_ptr::<impl *mut [u32]>::as_mut_ptr) {
+ debug self => _3;
+ }
+ scope 8 (inlined ptr::mut_ptr::<impl *mut u32>::add) {
+ debug self => _7;
+ debug count => _8;
+ scope 9 {
+ }
+ }
+ scope 10 (inlined slice_from_raw_parts_mut::<u32>) {
+ debug data => _9;
+ debug len => _6;
+ let mut _10: *mut ();
+ scope 11 (inlined ptr::mut_ptr::<impl *mut u32>::cast::<()>) {
+ debug self => _9;
+ }
+ scope 12 (inlined std::ptr::from_raw_parts_mut::<[u32]>) {
+ debug data_address => _10;
+ debug metadata => _6;
+ let mut _11: *const ();
+ let mut _12: std::ptr::metadata::PtrComponents<[u32]>;
+ let mut _13: std::ptr::metadata::PtrRepr<[u32]>;
+ scope 13 {
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_14);
+ StorageLive(_3);
+ _3 = &raw mut (*_1);
+ StorageLive(_15);
+ StorageLive(_6);
+ StorageLive(_4);
+ _4 = (_2.1: usize);
+ StorageLive(_5);
+ _5 = (_2.0: usize);
+ _6 = SubUnchecked(move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_9);
+ StorageLive(_7);
+ _7 = _3 as *mut u32 (PtrToPtr);
+ StorageLive(_8);
+ _8 = (_2.0: usize);
+ _9 = Offset(_7, _8);
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageLive(_10);
+ _10 = _9 as *mut () (PtrToPtr);
+ StorageLive(_13);
+ StorageLive(_12);
+ StorageLive(_11);
+ _11 = _10 as *const () (PointerCoercion(MutToConstPointer));
+ _12 = ptr::metadata::PtrComponents::<[u32]> { data_address: move _11, metadata: _6 };
+ StorageDead(_11);
+ _13 = ptr::metadata::PtrRepr::<[u32]> { const_ptr: move _12 };
+ StorageDead(_12);
+ _14 = (_13.1: *mut [u32]);
+ StorageDead(_13);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_6);
+ StorageDead(_15);
+ StorageDead(_3);
+ _0 = &mut (*_14);
+ StorageDead(_14);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..0c44873b7
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,103 @@
+// MIR for `slice_get_unchecked_mut_range` after PreCodegen
+
+fn slice_get_unchecked_mut_range(_1: &mut [u32], _2: std::ops::Range<usize>) -> &mut [u32] {
+ debug slice => _1;
+ debug index => _2;
+ let mut _0: &mut [u32];
+ scope 1 (inlined core::slice::<impl [u32]>::get_unchecked_mut::<std::ops::Range<usize>>) {
+ debug self => _1;
+ debug index => _2;
+ let mut _3: *mut [u32];
+ let mut _14: *mut [u32];
+ scope 2 {
+ scope 3 (inlined <std::ops::Range<usize> as SliceIndex<[u32]>>::get_unchecked_mut) {
+ debug self => _2;
+ debug slice => _3;
+ let mut _4: usize;
+ let mut _5: usize;
+ let mut _7: *mut u32;
+ let mut _8: usize;
+ let mut _9: *mut u32;
+ let _15: std::ops::Range<usize>;
+ scope 4 {
+ debug this => _15;
+ scope 5 {
+ let _6: usize;
+ scope 6 {
+ debug new_len => _6;
+ scope 7 (inlined ptr::mut_ptr::<impl *mut [u32]>::as_mut_ptr) {
+ debug self => _3;
+ }
+ scope 8 (inlined ptr::mut_ptr::<impl *mut u32>::add) {
+ debug self => _7;
+ debug count => _8;
+ scope 9 {
+ }
+ }
+ scope 10 (inlined slice_from_raw_parts_mut::<u32>) {
+ debug data => _9;
+ debug len => _6;
+ let mut _10: *mut ();
+ scope 11 (inlined ptr::mut_ptr::<impl *mut u32>::cast::<()>) {
+ debug self => _9;
+ }
+ scope 12 (inlined std::ptr::from_raw_parts_mut::<[u32]>) {
+ debug data_address => _10;
+ debug metadata => _6;
+ let mut _11: *const ();
+ let mut _12: std::ptr::metadata::PtrComponents<[u32]>;
+ let mut _13: std::ptr::metadata::PtrRepr<[u32]>;
+ scope 13 {
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_14);
+ StorageLive(_3);
+ _3 = &raw mut (*_1);
+ StorageLive(_15);
+ StorageLive(_6);
+ StorageLive(_4);
+ _4 = (_2.1: usize);
+ StorageLive(_5);
+ _5 = (_2.0: usize);
+ _6 = SubUnchecked(move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageLive(_9);
+ StorageLive(_7);
+ _7 = _3 as *mut u32 (PtrToPtr);
+ StorageLive(_8);
+ _8 = (_2.0: usize);
+ _9 = Offset(_7, _8);
+ StorageDead(_8);
+ StorageDead(_7);
+ StorageLive(_10);
+ _10 = _9 as *mut () (PtrToPtr);
+ StorageLive(_13);
+ StorageLive(_12);
+ StorageLive(_11);
+ _11 = _10 as *const () (PointerCoercion(MutToConstPointer));
+ _12 = ptr::metadata::PtrComponents::<[u32]> { data_address: move _11, metadata: _6 };
+ StorageDead(_11);
+ _13 = ptr::metadata::PtrRepr::<[u32]> { const_ptr: move _12 };
+ StorageDead(_12);
+ _14 = (_13.1: *mut [u32]);
+ StorageDead(_13);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_6);
+ StorageDead(_15);
+ StorageDead(_3);
+ _0 = &mut (*_14);
+ StorageDead(_14);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.mir
deleted file mode 100644
index dcf79a4a4..000000000
--- a/tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.mir
+++ /dev/null
@@ -1,26 +0,0 @@
-// MIR for `slice_index_range` after PreCodegen
-
-fn slice_index_range(_1: &[u32], _2: std::ops::Range<usize>) -> &[u32] {
- debug slice => _1; // in scope 0 at $DIR/slice_index.rs:+0:26: +0:31
- debug index => _2; // in scope 0 at $DIR/slice_index.rs:+0:41: +0:46
- let mut _0: &[u32]; // return place in scope 0 at $DIR/slice_index.rs:+0:65: +0:71
- scope 1 (inlined #[track_caller] core::slice::index::<impl Index<std::ops::Range<usize>> for [u32]>::index) { // at $DIR/slice_index.rs:21:6: 21:18
- debug self => _1; // in scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- debug index => _2; // in scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- let _3: &[u32]; // in scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- }
-
- bb0: {
- StorageLive(_3); // scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- _3 = <std::ops::Range<usize> as SliceIndex<[u32]>>::index(move _2, _1) -> bb1; // scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/slice/index.rs:LL:COL
- // + literal: Const { ty: for<'a> fn(std::ops::Range<usize>, &'a [u32]) -> &'a <std::ops::Range<usize> as SliceIndex<[u32]>>::Output {<std::ops::Range<usize> as SliceIndex<[u32]>>::index}, val: Value(<ZST>) }
- }
-
- bb1: {
- _0 = _3; // scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- StorageDead(_3); // scope 1 at $SRC_DIR/core/src/slice/index.rs:LL:COL
- return; // scope 0 at $DIR/slice_index.rs:+2:2: +2:2
- }
-}
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..aff718566
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,23 @@
+// MIR for `slice_index_range` after PreCodegen
+
+fn slice_index_range(_1: &[u32], _2: std::ops::Range<usize>) -> &[u32] {
+ debug slice => _1;
+ debug index => _2;
+ let mut _0: &[u32];
+ scope 1 (inlined #[track_caller] core::slice::index::<impl Index<std::ops::Range<usize>> for [u32]>::index) {
+ debug self => _1;
+ debug index => _2;
+ let _3: &[u32];
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = <std::ops::Range<usize> as SliceIndex<[u32]>>::index(move _2, _1) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _0 = _3;
+ StorageDead(_3);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..a6b931d2c
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,23 @@
+// MIR for `slice_index_range` after PreCodegen
+
+fn slice_index_range(_1: &[u32], _2: std::ops::Range<usize>) -> &[u32] {
+ debug slice => _1;
+ debug index => _2;
+ let mut _0: &[u32];
+ scope 1 (inlined #[track_caller] core::slice::index::<impl Index<std::ops::Range<usize>> for [u32]>::index) {
+ debug self => _1;
+ debug index => _2;
+ let _3: &[u32];
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = <std::ops::Range<usize> as SliceIndex<[u32]>>::index(move _2, _1) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ _0 = _3;
+ StorageDead(_3);
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.mir
deleted file mode 100644
index 6cc0ee057..000000000
--- a/tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.mir
+++ /dev/null
@@ -1,20 +0,0 @@
-// MIR for `slice_index_usize` after PreCodegen
-
-fn slice_index_usize(_1: &[u32], _2: usize) -> u32 {
- debug slice => _1; // in scope 0 at $DIR/slice_index.rs:+0:26: +0:31
- debug index => _2; // in scope 0 at $DIR/slice_index.rs:+0:41: +0:46
- let mut _0: u32; // return place in scope 0 at $DIR/slice_index.rs:+0:58: +0:61
- let mut _3: usize; // in scope 0 at $DIR/slice_index.rs:+1:5: +1:17
- let mut _4: bool; // in scope 0 at $DIR/slice_index.rs:+1:5: +1:17
-
- bb0: {
- _3 = Len((*_1)); // scope 0 at $DIR/slice_index.rs:+1:5: +1:17
- _4 = Lt(_2, _3); // scope 0 at $DIR/slice_index.rs:+1:5: +1:17
- assert(move _4, "index out of bounds: the length is {} but the index is {}", move _3, _2) -> bb1; // scope 0 at $DIR/slice_index.rs:+1:5: +1:17
- }
-
- bb1: {
- _0 = (*_1)[_2]; // scope 0 at $DIR/slice_index.rs:+1:5: +1:17
- return; // scope 0 at $DIR/slice_index.rs:+2:2: +2:2
- }
-}
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..210f9d6a1
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,20 @@
+// MIR for `slice_index_usize` after PreCodegen
+
+fn slice_index_usize(_1: &[u32], _2: usize) -> u32 {
+ debug slice => _1;
+ debug index => _2;
+ let mut _0: u32;
+ let mut _3: usize;
+ let mut _4: bool;
+
+ bb0: {
+ _3 = Len((*_1));
+ _4 = Lt(_2, _3);
+ assert(move _4, "index out of bounds: the length is {} but the index is {}", move _3, _2) -> [success: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _0 = (*_1)[_2];
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..d576520a8
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,20 @@
+// MIR for `slice_index_usize` after PreCodegen
+
+fn slice_index_usize(_1: &[u32], _2: usize) -> u32 {
+ debug slice => _1;
+ debug index => _2;
+ let mut _0: u32;
+ let mut _3: usize;
+ let mut _4: bool;
+
+ bb0: {
+ _3 = Len((*_1));
+ _4 = Lt(_2, _3);
+ assert(move _4, "index out of bounds: the length is {} but the index is {}", move _3, _2) -> [success: bb1, unwind continue];
+ }
+
+ bb1: {
+ _0 = (*_1)[_2];
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..3c4140257
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,197 @@
+// MIR for `enumerated_loop` after PreCodegen
+
+fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
+ debug slice => _1;
+ debug f => _2;
+ let mut _0: ();
+ let mut _13: std::slice::Iter<'_, T>;
+ let mut _14: std::iter::Enumerate<std::slice::Iter<'_, T>>;
+ let mut _15: std::iter::Enumerate<std::slice::Iter<'_, T>>;
+ let mut _16: &mut std::iter::Enumerate<std::slice::Iter<'_, T>>;
+ let mut _17: std::option::Option<(usize, &T)>;
+ let mut _18: isize;
+ let mut _21: &impl Fn(usize, &T);
+ let mut _22: (usize, &T);
+ let _23: ();
+ scope 1 {
+ debug iter => _15;
+ let _19: usize;
+ let _20: &T;
+ scope 2 {
+ debug i => _19;
+ debug x => _20;
+ }
+ }
+ scope 3 (inlined core::slice::<impl [T]>::iter) {
+ debug self => _1;
+ scope 4 (inlined std::slice::Iter::<'_, T>::new) {
+ debug slice => _1;
+ let _4: *const T;
+ let mut _5: bool;
+ let mut _6: usize;
+ let mut _8: usize;
+ let mut _9: *mut T;
+ let mut _11: std::ptr::NonNull<T>;
+ let mut _12: *const T;
+ scope 5 {
+ debug ptr => _4;
+ scope 6 {
+ let _7: *const T;
+ scope 7 {
+ debug end => _7;
+ scope 13 (inlined NonNull::<T>::new_unchecked) {
+ debug ptr => _9;
+ let mut _10: *const T;
+ let mut _24: *mut T;
+ scope 14 {
+ scope 15 (inlined NonNull::<T>::new_unchecked::runtime::<T>) {
+ debug ptr => _24;
+ scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null) {
+ debug self => _24;
+ let mut _25: *mut u8;
+ scope 17 {
+ scope 18 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) {
+ debug ptr => _25;
+ scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::addr) {
+ debug self => _25;
+ scope 20 {
+ scope 21 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) {
+ debug self => _25;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ scope 9 (inlined invalid::<T>) {
+ debug addr => _8;
+ scope 10 {
+ }
+ }
+ scope 11 (inlined ptr::const_ptr::<impl *const T>::add) {
+ debug self => _4;
+ debug count => _6;
+ scope 12 {
+ }
+ }
+ }
+ }
+ scope 8 (inlined core::slice::<impl [T]>::as_ptr) {
+ debug self => _1;
+ let mut _3: *const [T];
+ }
+ }
+ }
+ scope 22 (inlined <std::slice::Iter<'_, T> as Iterator>::enumerate) {
+ debug self => _13;
+ scope 23 (inlined Enumerate::<std::slice::Iter<'_, T>>::new) {
+ debug iter => _13;
+ }
+ }
+ scope 24 (inlined <Enumerate<std::slice::Iter<'_, T>> as IntoIterator>::into_iter) {
+ debug self => _14;
+ }
+
+ bb0: {
+ StorageLive(_13);
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = &raw const (*_1);
+ _4 = move _3 as *const T (PtrToPtr);
+ StorageDead(_3);
+ StorageLive(_7);
+ StorageLive(_5);
+ _5 = const _;
+ switchInt(move _5) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ StorageLive(_6);
+ _6 = Len((*_1));
+ _7 = Offset(_4, _6);
+ StorageDead(_6);
+ goto -> bb3;
+ }
+
+ bb2: {
+ StorageLive(_8);
+ _8 = Len((*_1));
+ _7 = _8 as *const T (Transmute);
+ StorageDead(_8);
+ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_5);
+ StorageLive(_11);
+ StorageLive(_9);
+ _9 = _4 as *mut T (PtrToPtr);
+ StorageLive(_10);
+ StorageLive(_24);
+ StorageLive(_25);
+ _10 = _9 as *const T (PointerCoercion(MutToConstPointer));
+ _11 = NonNull::<T> { pointer: _10 };
+ StorageDead(_25);
+ StorageDead(_24);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageLive(_12);
+ _12 = _7;
+ _13 = std::slice::Iter::<'_, T> { ptr: move _11, end: move _12, _marker: const ZeroSized: PhantomData<&T> };
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_7);
+ StorageDead(_4);
+ _14 = Enumerate::<std::slice::Iter<'_, T>> { iter: move _13, count: const 0_usize };
+ StorageDead(_13);
+ StorageLive(_15);
+ _15 = move _14;
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageLive(_17);
+ _16 = &mut _15;
+ _17 = <Enumerate<std::slice::Iter<'_, T>> as Iterator>::next(_16) -> [return: bb5, unwind unreachable];
+ }
+
+ bb5: {
+ _18 = discriminant(_17);
+ switchInt(move _18) -> [0: bb6, 1: bb8, otherwise: bb10];
+ }
+
+ bb6: {
+ StorageDead(_17);
+ StorageDead(_15);
+ drop(_2) -> [return: bb7, unwind unreachable];
+ }
+
+ bb7: {
+ return;
+ }
+
+ bb8: {
+ _19 = (((_17 as Some).0: (usize, &T)).0: usize);
+ _20 = (((_17 as Some).0: (usize, &T)).1: &T);
+ StorageLive(_21);
+ _21 = &_2;
+ StorageLive(_22);
+ _22 = (_19, _20);
+ _23 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _21, move _22) -> [return: bb9, unwind unreachable];
+ }
+
+ bb9: {
+ StorageDead(_22);
+ StorageDead(_21);
+ StorageDead(_17);
+ goto -> bb4;
+ }
+
+ bb10: {
+ unreachable;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..e3df8b961
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,205 @@
+// MIR for `enumerated_loop` after PreCodegen
+
+fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
+ debug slice => _1;
+ debug f => _2;
+ let mut _0: ();
+ let mut _13: std::slice::Iter<'_, T>;
+ let mut _14: std::iter::Enumerate<std::slice::Iter<'_, T>>;
+ let mut _15: std::iter::Enumerate<std::slice::Iter<'_, T>>;
+ let mut _16: &mut std::iter::Enumerate<std::slice::Iter<'_, T>>;
+ let mut _17: std::option::Option<(usize, &T)>;
+ let mut _18: isize;
+ let mut _21: &impl Fn(usize, &T);
+ let mut _22: (usize, &T);
+ let _23: ();
+ scope 1 {
+ debug iter => _15;
+ let _19: usize;
+ let _20: &T;
+ scope 2 {
+ debug i => _19;
+ debug x => _20;
+ }
+ }
+ scope 3 (inlined core::slice::<impl [T]>::iter) {
+ debug self => _1;
+ scope 4 (inlined std::slice::Iter::<'_, T>::new) {
+ debug slice => _1;
+ let _4: *const T;
+ let mut _5: bool;
+ let mut _6: usize;
+ let mut _8: usize;
+ let mut _9: *mut T;
+ let mut _11: std::ptr::NonNull<T>;
+ let mut _12: *const T;
+ scope 5 {
+ debug ptr => _4;
+ scope 6 {
+ let _7: *const T;
+ scope 7 {
+ debug end => _7;
+ scope 13 (inlined NonNull::<T>::new_unchecked) {
+ debug ptr => _9;
+ let mut _10: *const T;
+ let mut _24: *mut T;
+ scope 14 {
+ scope 15 (inlined NonNull::<T>::new_unchecked::runtime::<T>) {
+ debug ptr => _24;
+ scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null) {
+ debug self => _24;
+ let mut _25: *mut u8;
+ scope 17 {
+ scope 18 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) {
+ debug ptr => _25;
+ scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::addr) {
+ debug self => _25;
+ scope 20 {
+ scope 21 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) {
+ debug self => _25;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ scope 9 (inlined invalid::<T>) {
+ debug addr => _8;
+ scope 10 {
+ }
+ }
+ scope 11 (inlined ptr::const_ptr::<impl *const T>::add) {
+ debug self => _4;
+ debug count => _6;
+ scope 12 {
+ }
+ }
+ }
+ }
+ scope 8 (inlined core::slice::<impl [T]>::as_ptr) {
+ debug self => _1;
+ let mut _3: *const [T];
+ }
+ }
+ }
+ scope 22 (inlined <std::slice::Iter<'_, T> as Iterator>::enumerate) {
+ debug self => _13;
+ scope 23 (inlined Enumerate::<std::slice::Iter<'_, T>>::new) {
+ debug iter => _13;
+ }
+ }
+ scope 24 (inlined <Enumerate<std::slice::Iter<'_, T>> as IntoIterator>::into_iter) {
+ debug self => _14;
+ }
+
+ bb0: {
+ StorageLive(_13);
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = &raw const (*_1);
+ _4 = move _3 as *const T (PtrToPtr);
+ StorageDead(_3);
+ StorageLive(_7);
+ StorageLive(_5);
+ _5 = const _;
+ switchInt(move _5) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ StorageLive(_6);
+ _6 = Len((*_1));
+ _7 = Offset(_4, _6);
+ StorageDead(_6);
+ goto -> bb3;
+ }
+
+ bb2: {
+ StorageLive(_8);
+ _8 = Len((*_1));
+ _7 = _8 as *const T (Transmute);
+ StorageDead(_8);
+ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_5);
+ StorageLive(_11);
+ StorageLive(_9);
+ _9 = _4 as *mut T (PtrToPtr);
+ StorageLive(_10);
+ StorageLive(_24);
+ StorageLive(_25);
+ _10 = _9 as *const T (PointerCoercion(MutToConstPointer));
+ _11 = NonNull::<T> { pointer: _10 };
+ StorageDead(_25);
+ StorageDead(_24);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageLive(_12);
+ _12 = _7;
+ _13 = std::slice::Iter::<'_, T> { ptr: move _11, end: move _12, _marker: const ZeroSized: PhantomData<&T> };
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_7);
+ StorageDead(_4);
+ _14 = Enumerate::<std::slice::Iter<'_, T>> { iter: move _13, count: const 0_usize };
+ StorageDead(_13);
+ StorageLive(_15);
+ _15 = move _14;
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageLive(_17);
+ _16 = &mut _15;
+ _17 = <Enumerate<std::slice::Iter<'_, T>> as Iterator>::next(_16) -> [return: bb5, unwind: bb11];
+ }
+
+ bb5: {
+ _18 = discriminant(_17);
+ switchInt(move _18) -> [0: bb6, 1: bb8, otherwise: bb10];
+ }
+
+ bb6: {
+ StorageDead(_17);
+ StorageDead(_15);
+ drop(_2) -> [return: bb7, unwind continue];
+ }
+
+ bb7: {
+ return;
+ }
+
+ bb8: {
+ _19 = (((_17 as Some).0: (usize, &T)).0: usize);
+ _20 = (((_17 as Some).0: (usize, &T)).1: &T);
+ StorageLive(_21);
+ _21 = &_2;
+ StorageLive(_22);
+ _22 = (_19, _20);
+ _23 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _21, move _22) -> [return: bb9, unwind: bb11];
+ }
+
+ bb9: {
+ StorageDead(_22);
+ StorageDead(_21);
+ StorageDead(_17);
+ goto -> bb4;
+ }
+
+ bb10: {
+ unreachable;
+ }
+
+ bb11 (cleanup): {
+ drop(_2) -> [return: bb12, unwind terminate];
+ }
+
+ bb12 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.mir
deleted file mode 100644
index 0da7e5536..000000000
--- a/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.mir
+++ /dev/null
@@ -1,203 +0,0 @@
-// MIR for `forward_loop` after PreCodegen
-
-fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
- debug slice => _1; // in scope 0 at $DIR/slice_iter.rs:+0:28: +0:33
- debug f => _2; // in scope 0 at $DIR/slice_iter.rs:+0:44: +0:45
- let mut _0: (); // return place in scope 0 at $DIR/slice_iter.rs:+0:60: +0:60
- let mut _3: std::slice::Iter<'_, T>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:26
- let mut _4: std::slice::Iter<'_, T>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:26
- let _5: (); // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:26
- let mut _6: std::option::Option<&T>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:26
- let mut _7: &mut std::slice::Iter<'_, T>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:26
- let mut _8: isize; // in scope 0 at $DIR/slice_iter.rs:+1:5: +3:6
- let mut _10: &impl Fn(&T); // in scope 0 at $DIR/slice_iter.rs:+2:9: +2:10
- let mut _11: (&T,); // in scope 0 at $DIR/slice_iter.rs:+2:9: +2:13
- scope 1 {
- debug iter => _4; // in scope 1 at $DIR/slice_iter.rs:+1:14: +1:26
- let _9: &T; // in scope 1 at $DIR/slice_iter.rs:+1:9: +1:10
- scope 2 {
- debug x => _9; // in scope 2 at $DIR/slice_iter.rs:+1:9: +1:10
- }
- }
- scope 3 (inlined core::slice::<impl [T]>::iter) { // at $DIR/slice_iter.rs:28:20: 28:26
- debug self => _1; // in scope 3 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- scope 4 (inlined std::slice::Iter::<'_, T>::new) { // at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- debug slice => _1; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let _12: *const T; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let mut _14: bool; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let mut _15: usize; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let mut _16: usize; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let mut _17: std::ptr::NonNull<T>; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let mut _18: *mut T; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let mut _19: *const T; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- scope 5 {
- debug ptr => _12; // in scope 5 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- scope 6 {
- let _13: *const T; // in scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- scope 7 {
- debug end => _13; // in scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- scope 13 (inlined NonNull::<T>::new_unchecked) { // at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- debug ptr => _18; // in scope 13 at $SRC_DIR/core/src/ptr/non_null.rs:LL:COL
- let mut _21: *const T; // in scope 13 at $SRC_DIR/core/src/ptr/non_null.rs:LL:COL
- let mut _22: *mut T; // in scope 13 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- scope 14 {
- scope 15 (inlined NonNull::<T>::new_unchecked::runtime::<T>) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- debug ptr => _22; // in scope 15 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null) { // at $SRC_DIR/core/src/ptr/non_null.rs:LL:COL
- debug self => _22; // in scope 16 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- let mut _23: *mut u8; // in scope 16 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- scope 17 {
- scope 18 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) { // at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- debug ptr => _23; // in scope 18 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::addr) { // at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- debug self => _23; // in scope 19 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- scope 20 {
- scope 21 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) { // at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- debug self => _23; // in scope 21 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- scope 9 (inlined invalid::<T>) { // at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- debug addr => _15; // in scope 9 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- scope 10 {
- }
- }
- scope 11 (inlined ptr::const_ptr::<impl *const T>::add) { // at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- debug self => _12; // in scope 11 at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
- debug count => _16; // in scope 11 at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
- scope 12 {
- }
- }
- }
- }
- scope 8 (inlined core::slice::<impl [T]>::as_ptr) { // at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- debug self => _1; // in scope 8 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- let mut _20: *const [T]; // in scope 8 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- }
- }
- }
- scope 22 (inlined <std::slice::Iter<'_, T> as IntoIterator>::into_iter) { // at $DIR/slice_iter.rs:28:14: 28:26
- debug self => _3; // in scope 22 at $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
- }
-
- bb0: {
- StorageLive(_12); // scope 3 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageLive(_20); // scope 8 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- _20 = &raw const (*_1); // scope 8 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- _12 = move _20 as *const T (PtrToPtr); // scope 8 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageDead(_20); // scope 8 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageLive(_13); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_14); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _14 = const _; // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- switchInt(move _14) -> [0: bb11, otherwise: bb10]; // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- }
-
- bb1: {
- StorageLive(_6); // scope 1 at $DIR/slice_iter.rs:+1:14: +1:26
- _7 = &mut _4; // scope 1 at $DIR/slice_iter.rs:+1:14: +1:26
- _6 = <std::slice::Iter<'_, T> as Iterator>::next(_7) -> [return: bb2, unwind: bb8]; // scope 1 at $DIR/slice_iter.rs:+1:14: +1:26
- // mir::Constant
- // + span: $DIR/slice_iter.rs:28:14: 28:26
- // + literal: Const { ty: for<'a> fn(&'a mut std::slice::Iter<'_, T>) -> Option<<std::slice::Iter<'_, T> as Iterator>::Item> {<std::slice::Iter<'_, T> as Iterator>::next}, val: Value(<ZST>) }
- }
-
- bb2: {
- _8 = discriminant(_6); // scope 1 at $DIR/slice_iter.rs:+1:14: +1:26
- switchInt(move _8) -> [0: bb5, 1: bb3, otherwise: bb4]; // scope 1 at $DIR/slice_iter.rs:+1:14: +1:26
- }
-
- bb3: {
- _9 = ((_6 as Some).0: &T); // scope 1 at $DIR/slice_iter.rs:+1:9: +1:10
- StorageLive(_10); // scope 2 at $DIR/slice_iter.rs:+2:9: +2:10
- _10 = &_2; // scope 2 at $DIR/slice_iter.rs:+2:9: +2:10
- StorageLive(_11); // scope 2 at $DIR/slice_iter.rs:+2:9: +2:13
- _11 = (_9,); // scope 2 at $DIR/slice_iter.rs:+2:9: +2:13
- _5 = <impl Fn(&T) as Fn<(&T,)>>::call(move _10, move _11) -> [return: bb6, unwind: bb8]; // scope 2 at $DIR/slice_iter.rs:+2:9: +2:13
- // mir::Constant
- // + span: $DIR/slice_iter.rs:29:9: 29:10
- // + literal: Const { ty: for<'a> extern "rust-call" fn(&'a impl Fn(&T), (&T,)) -> <impl Fn(&T) as FnOnce<(&T,)>>::Output {<impl Fn(&T) as Fn<(&T,)>>::call}, val: Value(<ZST>) }
- }
-
- bb4: {
- unreachable; // scope 1 at $DIR/slice_iter.rs:+1:14: +1:26
- }
-
- bb5: {
- StorageDead(_6); // scope 1 at $DIR/slice_iter.rs:+3:5: +3:6
- StorageDead(_4); // scope 0 at $DIR/slice_iter.rs:+3:5: +3:6
- drop(_2) -> bb7; // scope 0 at $DIR/slice_iter.rs:+4:1: +4:2
- }
-
- bb6: {
- StorageDead(_11); // scope 2 at $DIR/slice_iter.rs:+2:12: +2:13
- StorageDead(_10); // scope 2 at $DIR/slice_iter.rs:+2:12: +2:13
- StorageDead(_6); // scope 1 at $DIR/slice_iter.rs:+3:5: +3:6
- goto -> bb1; // scope 1 at $DIR/slice_iter.rs:+1:5: +3:6
- }
-
- bb7: {
- return; // scope 0 at $DIR/slice_iter.rs:+4:2: +4:2
- }
-
- bb8 (cleanup): {
- drop(_2) -> [return: bb9, unwind terminate]; // scope 0 at $DIR/slice_iter.rs:+4:1: +4:2
- }
-
- bb9 (cleanup): {
- resume; // scope 0 at $DIR/slice_iter.rs:+0:1: +4:2
- }
-
- bb10: {
- StorageLive(_15); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _15 = Len((*_1)); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _13 = _15 as *const T (Transmute); // scope 10 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- StorageDead(_15); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- goto -> bb12; // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- }
-
- bb11: {
- StorageLive(_16); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _16 = Len((*_1)); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _13 = Offset(_12, _16); // scope 12 at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
- StorageDead(_16); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- goto -> bb12; // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- }
-
- bb12: {
- StorageDead(_14); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_17); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_18); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _18 = _12 as *mut T (PtrToPtr); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_21); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_22); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_23); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _21 = _18 as *const T (Pointer(MutToConstPointer)); // scope 14 at $SRC_DIR/core/src/ptr/non_null.rs:LL:COL
- _17 = NonNull::<T> { pointer: _21 }; // scope 14 at $SRC_DIR/core/src/ptr/non_null.rs:LL:COL
- StorageDead(_23); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageDead(_22); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageDead(_21); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageDead(_18); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_19); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _19 = _13; // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _3 = std::slice::Iter::<'_, T> { ptr: move _17, end: move _19, _marker: const ZeroSized: PhantomData<&T> }; // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- // mir::Constant
- // + span: no-location
- // + literal: Const { ty: PhantomData<&T>, val: Value(<ZST>) }
- // adt
- // + user_ty: UserType(1)
- StorageDead(_19); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageDead(_17); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageDead(_13); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageDead(_12); // scope 3 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageLive(_4); // scope 0 at $DIR/slice_iter.rs:+1:14: +1:26
- _4 = move _3; // scope 0 at $DIR/slice_iter.rs:+1:14: +1:26
- goto -> bb1; // scope 1 at $DIR/slice_iter.rs:+1:5: +3:6
- }
-}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..49de4b463
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,184 @@
+// MIR for `forward_loop` after PreCodegen
+
+fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
+ debug slice => _1;
+ debug f => _2;
+ let mut _0: ();
+ let mut _13: std::slice::Iter<'_, T>;
+ let mut _14: std::slice::Iter<'_, T>;
+ let mut _15: &mut std::slice::Iter<'_, T>;
+ let mut _16: std::option::Option<&T>;
+ let mut _17: isize;
+ let mut _19: &impl Fn(&T);
+ let mut _20: (&T,);
+ let _21: ();
+ scope 1 {
+ debug iter => _14;
+ let _18: &T;
+ scope 2 {
+ debug x => _18;
+ }
+ }
+ scope 3 (inlined core::slice::<impl [T]>::iter) {
+ debug self => _1;
+ scope 4 (inlined std::slice::Iter::<'_, T>::new) {
+ debug slice => _1;
+ let _4: *const T;
+ let mut _5: bool;
+ let mut _6: usize;
+ let mut _8: usize;
+ let mut _9: *mut T;
+ let mut _11: std::ptr::NonNull<T>;
+ let mut _12: *const T;
+ scope 5 {
+ debug ptr => _4;
+ scope 6 {
+ let _7: *const T;
+ scope 7 {
+ debug end => _7;
+ scope 13 (inlined NonNull::<T>::new_unchecked) {
+ debug ptr => _9;
+ let mut _10: *const T;
+ let mut _22: *mut T;
+ scope 14 {
+ scope 15 (inlined NonNull::<T>::new_unchecked::runtime::<T>) {
+ debug ptr => _22;
+ scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null) {
+ debug self => _22;
+ let mut _23: *mut u8;
+ scope 17 {
+ scope 18 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) {
+ debug ptr => _23;
+ scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::addr) {
+ debug self => _23;
+ scope 20 {
+ scope 21 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) {
+ debug self => _23;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ scope 9 (inlined invalid::<T>) {
+ debug addr => _8;
+ scope 10 {
+ }
+ }
+ scope 11 (inlined ptr::const_ptr::<impl *const T>::add) {
+ debug self => _4;
+ debug count => _6;
+ scope 12 {
+ }
+ }
+ }
+ }
+ scope 8 (inlined core::slice::<impl [T]>::as_ptr) {
+ debug self => _1;
+ let mut _3: *const [T];
+ }
+ }
+ }
+ scope 22 (inlined <std::slice::Iter<'_, T> as IntoIterator>::into_iter) {
+ debug self => _13;
+ }
+
+ bb0: {
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = &raw const (*_1);
+ _4 = move _3 as *const T (PtrToPtr);
+ StorageDead(_3);
+ StorageLive(_7);
+ StorageLive(_5);
+ _5 = const _;
+ switchInt(move _5) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ StorageLive(_6);
+ _6 = Len((*_1));
+ _7 = Offset(_4, _6);
+ StorageDead(_6);
+ goto -> bb3;
+ }
+
+ bb2: {
+ StorageLive(_8);
+ _8 = Len((*_1));
+ _7 = _8 as *const T (Transmute);
+ StorageDead(_8);
+ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_5);
+ StorageLive(_11);
+ StorageLive(_9);
+ _9 = _4 as *mut T (PtrToPtr);
+ StorageLive(_10);
+ StorageLive(_22);
+ StorageLive(_23);
+ _10 = _9 as *const T (PointerCoercion(MutToConstPointer));
+ _11 = NonNull::<T> { pointer: _10 };
+ StorageDead(_23);
+ StorageDead(_22);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageLive(_12);
+ _12 = _7;
+ _13 = std::slice::Iter::<'_, T> { ptr: move _11, end: move _12, _marker: const ZeroSized: PhantomData<&T> };
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_7);
+ StorageDead(_4);
+ StorageLive(_14);
+ _14 = move _13;
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageLive(_16);
+ _15 = &mut _14;
+ _16 = <std::slice::Iter<'_, T> as Iterator>::next(_15) -> [return: bb5, unwind unreachable];
+ }
+
+ bb5: {
+ _17 = discriminant(_16);
+ switchInt(move _17) -> [0: bb6, 1: bb8, otherwise: bb10];
+ }
+
+ bb6: {
+ StorageDead(_16);
+ StorageDead(_14);
+ drop(_2) -> [return: bb7, unwind unreachable];
+ }
+
+ bb7: {
+ return;
+ }
+
+ bb8: {
+ _18 = ((_16 as Some).0: &T);
+ StorageLive(_19);
+ _19 = &_2;
+ StorageLive(_20);
+ _20 = (_18,);
+ _21 = <impl Fn(&T) as Fn<(&T,)>>::call(move _19, move _20) -> [return: bb9, unwind unreachable];
+ }
+
+ bb9: {
+ StorageDead(_20);
+ StorageDead(_19);
+ StorageDead(_16);
+ goto -> bb4;
+ }
+
+ bb10: {
+ unreachable;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..cfc304987
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,192 @@
+// MIR for `forward_loop` after PreCodegen
+
+fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
+ debug slice => _1;
+ debug f => _2;
+ let mut _0: ();
+ let mut _13: std::slice::Iter<'_, T>;
+ let mut _14: std::slice::Iter<'_, T>;
+ let mut _15: &mut std::slice::Iter<'_, T>;
+ let mut _16: std::option::Option<&T>;
+ let mut _17: isize;
+ let mut _19: &impl Fn(&T);
+ let mut _20: (&T,);
+ let _21: ();
+ scope 1 {
+ debug iter => _14;
+ let _18: &T;
+ scope 2 {
+ debug x => _18;
+ }
+ }
+ scope 3 (inlined core::slice::<impl [T]>::iter) {
+ debug self => _1;
+ scope 4 (inlined std::slice::Iter::<'_, T>::new) {
+ debug slice => _1;
+ let _4: *const T;
+ let mut _5: bool;
+ let mut _6: usize;
+ let mut _8: usize;
+ let mut _9: *mut T;
+ let mut _11: std::ptr::NonNull<T>;
+ let mut _12: *const T;
+ scope 5 {
+ debug ptr => _4;
+ scope 6 {
+ let _7: *const T;
+ scope 7 {
+ debug end => _7;
+ scope 13 (inlined NonNull::<T>::new_unchecked) {
+ debug ptr => _9;
+ let mut _10: *const T;
+ let mut _22: *mut T;
+ scope 14 {
+ scope 15 (inlined NonNull::<T>::new_unchecked::runtime::<T>) {
+ debug ptr => _22;
+ scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null) {
+ debug self => _22;
+ let mut _23: *mut u8;
+ scope 17 {
+ scope 18 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) {
+ debug ptr => _23;
+ scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::addr) {
+ debug self => _23;
+ scope 20 {
+ scope 21 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) {
+ debug self => _23;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ scope 9 (inlined invalid::<T>) {
+ debug addr => _8;
+ scope 10 {
+ }
+ }
+ scope 11 (inlined ptr::const_ptr::<impl *const T>::add) {
+ debug self => _4;
+ debug count => _6;
+ scope 12 {
+ }
+ }
+ }
+ }
+ scope 8 (inlined core::slice::<impl [T]>::as_ptr) {
+ debug self => _1;
+ let mut _3: *const [T];
+ }
+ }
+ }
+ scope 22 (inlined <std::slice::Iter<'_, T> as IntoIterator>::into_iter) {
+ debug self => _13;
+ }
+
+ bb0: {
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = &raw const (*_1);
+ _4 = move _3 as *const T (PtrToPtr);
+ StorageDead(_3);
+ StorageLive(_7);
+ StorageLive(_5);
+ _5 = const _;
+ switchInt(move _5) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ StorageLive(_6);
+ _6 = Len((*_1));
+ _7 = Offset(_4, _6);
+ StorageDead(_6);
+ goto -> bb3;
+ }
+
+ bb2: {
+ StorageLive(_8);
+ _8 = Len((*_1));
+ _7 = _8 as *const T (Transmute);
+ StorageDead(_8);
+ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_5);
+ StorageLive(_11);
+ StorageLive(_9);
+ _9 = _4 as *mut T (PtrToPtr);
+ StorageLive(_10);
+ StorageLive(_22);
+ StorageLive(_23);
+ _10 = _9 as *const T (PointerCoercion(MutToConstPointer));
+ _11 = NonNull::<T> { pointer: _10 };
+ StorageDead(_23);
+ StorageDead(_22);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageLive(_12);
+ _12 = _7;
+ _13 = std::slice::Iter::<'_, T> { ptr: move _11, end: move _12, _marker: const ZeroSized: PhantomData<&T> };
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_7);
+ StorageDead(_4);
+ StorageLive(_14);
+ _14 = move _13;
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageLive(_16);
+ _15 = &mut _14;
+ _16 = <std::slice::Iter<'_, T> as Iterator>::next(_15) -> [return: bb5, unwind: bb11];
+ }
+
+ bb5: {
+ _17 = discriminant(_16);
+ switchInt(move _17) -> [0: bb6, 1: bb8, otherwise: bb10];
+ }
+
+ bb6: {
+ StorageDead(_16);
+ StorageDead(_14);
+ drop(_2) -> [return: bb7, unwind continue];
+ }
+
+ bb7: {
+ return;
+ }
+
+ bb8: {
+ _18 = ((_16 as Some).0: &T);
+ StorageLive(_19);
+ _19 = &_2;
+ StorageLive(_20);
+ _20 = (_18,);
+ _21 = <impl Fn(&T) as Fn<(&T,)>>::call(move _19, move _20) -> [return: bb9, unwind: bb11];
+ }
+
+ bb9: {
+ StorageDead(_20);
+ StorageDead(_19);
+ StorageDead(_16);
+ goto -> bb4;
+ }
+
+ bb10: {
+ unreachable;
+ }
+
+ bb11 (cleanup): {
+ drop(_2) -> [return: bb12, unwind terminate];
+ }
+
+ bb12 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..00177033b
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,147 @@
+// MIR for `range_loop` after PreCodegen
+
+fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
+ debug slice => _1;
+ debug f => _2;
+ let mut _0: ();
+ let mut _3: usize;
+ let mut _4: std::ops::Range<usize>;
+ let mut _5: std::ops::Range<usize>;
+ let mut _6: &mut std::ops::Range<usize>;
+ let mut _12: std::option::Option<usize>;
+ let mut _15: isize;
+ let mut _17: usize;
+ let mut _18: bool;
+ let mut _20: &impl Fn(usize, &T);
+ let mut _21: (usize, &T);
+ let _22: ();
+ scope 1 {
+ debug iter => _5;
+ let _16: usize;
+ scope 2 {
+ debug i => _16;
+ let _19: &T;
+ scope 3 {
+ debug x => _19;
+ }
+ }
+ scope 5 (inlined iter::range::<impl Iterator for std::ops::Range<usize>>::next) {
+ debug self => _6;
+ scope 6 (inlined <std::ops::Range<usize> as iter::range::RangeIteratorImpl>::spec_next) {
+ debug self => _6;
+ let mut _7: &usize;
+ let mut _8: &usize;
+ let mut _11: bool;
+ let _13: usize;
+ let mut _14: usize;
+ scope 7 {
+ debug old => _13;
+ scope 8 {
+ }
+ }
+ scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::lt) {
+ debug self => _7;
+ debug other => _8;
+ let mut _9: usize;
+ let mut _10: usize;
+ }
+ }
+ }
+ }
+ scope 4 (inlined <std::ops::Range<usize> as IntoIterator>::into_iter) {
+ debug self => _4;
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = Len((*_1));
+ _4 = std::ops::Range::<usize> { start: const 0_usize, end: move _3 };
+ StorageDead(_3);
+ StorageLive(_5);
+ _5 = move _4;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageLive(_12);
+ _6 = &mut _5;
+ StorageLive(_13);
+ StorageLive(_11);
+ StorageLive(_7);
+ _7 = &((*_6).0: usize);
+ StorageLive(_8);
+ _8 = &((*_6).1: usize);
+ StorageLive(_9);
+ _9 = (*_7);
+ StorageLive(_10);
+ _10 = (*_8);
+ _11 = Lt(move _9, move _10);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_7);
+ switchInt(move _11) -> [0: bb2, otherwise: bb3];
+ }
+
+ bb2: {
+ _12 = Option::<usize>::None;
+ goto -> bb5;
+ }
+
+ bb3: {
+ _13 = ((*_6).0: usize);
+ StorageLive(_14);
+ _14 = <usize as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind unreachable];
+ }
+
+ bb4: {
+ ((*_6).0: usize) = move _14;
+ StorageDead(_14);
+ _12 = Option::<usize>::Some(_13);
+ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_11);
+ StorageDead(_13);
+ _15 = discriminant(_12);
+ switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb11];
+ }
+
+ bb6: {
+ StorageDead(_12);
+ StorageDead(_5);
+ drop(_2) -> [return: bb7, unwind unreachable];
+ }
+
+ bb7: {
+ return;
+ }
+
+ bb8: {
+ _16 = ((_12 as Some).0: usize);
+ _17 = Len((*_1));
+ _18 = Lt(_16, _17);
+ assert(move _18, "index out of bounds: the length is {} but the index is {}", move _17, _16) -> [success: bb9, unwind unreachable];
+ }
+
+ bb9: {
+ _19 = &(*_1)[_16];
+ StorageLive(_20);
+ _20 = &_2;
+ StorageLive(_21);
+ _21 = (_16, _19);
+ _22 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _20, move _21) -> [return: bb10, unwind unreachable];
+ }
+
+ bb10: {
+ StorageDead(_21);
+ StorageDead(_20);
+ StorageDead(_12);
+ goto -> bb1;
+ }
+
+ bb11: {
+ unreachable;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..3423c5d86
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,155 @@
+// MIR for `range_loop` after PreCodegen
+
+fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
+ debug slice => _1;
+ debug f => _2;
+ let mut _0: ();
+ let mut _3: usize;
+ let mut _4: std::ops::Range<usize>;
+ let mut _5: std::ops::Range<usize>;
+ let mut _6: &mut std::ops::Range<usize>;
+ let mut _12: std::option::Option<usize>;
+ let mut _15: isize;
+ let mut _17: usize;
+ let mut _18: bool;
+ let mut _20: &impl Fn(usize, &T);
+ let mut _21: (usize, &T);
+ let _22: ();
+ scope 1 {
+ debug iter => _5;
+ let _16: usize;
+ scope 2 {
+ debug i => _16;
+ let _19: &T;
+ scope 3 {
+ debug x => _19;
+ }
+ }
+ scope 5 (inlined iter::range::<impl Iterator for std::ops::Range<usize>>::next) {
+ debug self => _6;
+ scope 6 (inlined <std::ops::Range<usize> as iter::range::RangeIteratorImpl>::spec_next) {
+ debug self => _6;
+ let mut _7: &usize;
+ let mut _8: &usize;
+ let mut _11: bool;
+ let _13: usize;
+ let mut _14: usize;
+ scope 7 {
+ debug old => _13;
+ scope 8 {
+ }
+ }
+ scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::lt) {
+ debug self => _7;
+ debug other => _8;
+ let mut _9: usize;
+ let mut _10: usize;
+ }
+ }
+ }
+ }
+ scope 4 (inlined <std::ops::Range<usize> as IntoIterator>::into_iter) {
+ debug self => _4;
+ }
+
+ bb0: {
+ StorageLive(_3);
+ _3 = Len((*_1));
+ _4 = std::ops::Range::<usize> { start: const 0_usize, end: move _3 };
+ StorageDead(_3);
+ StorageLive(_5);
+ _5 = move _4;
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageLive(_12);
+ _6 = &mut _5;
+ StorageLive(_13);
+ StorageLive(_11);
+ StorageLive(_7);
+ _7 = &((*_6).0: usize);
+ StorageLive(_8);
+ _8 = &((*_6).1: usize);
+ StorageLive(_9);
+ _9 = (*_7);
+ StorageLive(_10);
+ _10 = (*_8);
+ _11 = Lt(move _9, move _10);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_7);
+ switchInt(move _11) -> [0: bb2, otherwise: bb3];
+ }
+
+ bb2: {
+ _12 = Option::<usize>::None;
+ goto -> bb5;
+ }
+
+ bb3: {
+ _13 = ((*_6).0: usize);
+ StorageLive(_14);
+ _14 = <usize as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind: bb12];
+ }
+
+ bb4: {
+ ((*_6).0: usize) = move _14;
+ StorageDead(_14);
+ _12 = Option::<usize>::Some(_13);
+ goto -> bb5;
+ }
+
+ bb5: {
+ StorageDead(_11);
+ StorageDead(_13);
+ _15 = discriminant(_12);
+ switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb11];
+ }
+
+ bb6: {
+ StorageDead(_12);
+ StorageDead(_5);
+ drop(_2) -> [return: bb7, unwind continue];
+ }
+
+ bb7: {
+ return;
+ }
+
+ bb8: {
+ _16 = ((_12 as Some).0: usize);
+ _17 = Len((*_1));
+ _18 = Lt(_16, _17);
+ assert(move _18, "index out of bounds: the length is {} but the index is {}", move _17, _16) -> [success: bb9, unwind: bb12];
+ }
+
+ bb9: {
+ _19 = &(*_1)[_16];
+ StorageLive(_20);
+ _20 = &_2;
+ StorageLive(_21);
+ _21 = (_16, _19);
+ _22 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _20, move _21) -> [return: bb10, unwind: bb12];
+ }
+
+ bb10: {
+ StorageDead(_21);
+ StorageDead(_20);
+ StorageDead(_12);
+ goto -> bb1;
+ }
+
+ bb11: {
+ unreachable;
+ }
+
+ bb12 (cleanup): {
+ drop(_2) -> [return: bb13, unwind terminate];
+ }
+
+ bb13 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.mir
deleted file mode 100644
index 45b41b54c..000000000
--- a/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.mir
+++ /dev/null
@@ -1,220 +0,0 @@
-// MIR for `reverse_loop` after PreCodegen
-
-fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
- debug slice => _1; // in scope 0 at $DIR/slice_iter.rs:+0:28: +0:33
- debug f => _2; // in scope 0 at $DIR/slice_iter.rs:+0:44: +0:45
- let mut _0: (); // return place in scope 0 at $DIR/slice_iter.rs:+0:60: +0:60
- let mut _3: std::iter::Rev<std::slice::Iter<'_, T>>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:32
- let mut _4: std::slice::Iter<'_, T>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:26
- let mut _5: std::iter::Rev<std::slice::Iter<'_, T>>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:32
- let _6: (); // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:32
- let mut _7: std::option::Option<&T>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:32
- let mut _8: &mut std::iter::Rev<std::slice::Iter<'_, T>>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:32
- let mut _9: isize; // in scope 0 at $DIR/slice_iter.rs:+1:5: +3:6
- let mut _11: &impl Fn(&T); // in scope 0 at $DIR/slice_iter.rs:+2:9: +2:10
- let mut _12: (&T,); // in scope 0 at $DIR/slice_iter.rs:+2:9: +2:13
- scope 1 {
- debug iter => _5; // in scope 1 at $DIR/slice_iter.rs:+1:14: +1:32
- let _10: &T; // in scope 1 at $DIR/slice_iter.rs:+1:9: +1:10
- scope 2 {
- debug x => _10; // in scope 2 at $DIR/slice_iter.rs:+1:9: +1:10
- }
- scope 25 (inlined <Rev<std::slice::Iter<'_, T>> as Iterator>::next) { // at $DIR/slice_iter.rs:35:14: 35:32
- debug self => _8; // in scope 25 at $SRC_DIR/core/src/iter/adapters/rev.rs:LL:COL
- let mut _25: &mut std::slice::Iter<'_, T>; // in scope 25 at $SRC_DIR/core/src/iter/adapters/rev.rs:LL:COL
- }
- }
- scope 3 (inlined core::slice::<impl [T]>::iter) { // at $DIR/slice_iter.rs:35:20: 35:26
- debug self => _1; // in scope 3 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- scope 4 (inlined std::slice::Iter::<'_, T>::new) { // at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- debug slice => _1; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let _13: *const T; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let mut _15: bool; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let mut _16: usize; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let mut _17: usize; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let mut _18: std::ptr::NonNull<T>; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let mut _19: *mut T; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- let mut _20: *const T; // in scope 4 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- scope 5 {
- debug ptr => _13; // in scope 5 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- scope 6 {
- let _14: *const T; // in scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- scope 7 {
- debug end => _14; // in scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- scope 13 (inlined NonNull::<T>::new_unchecked) { // at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- debug ptr => _19; // in scope 13 at $SRC_DIR/core/src/ptr/non_null.rs:LL:COL
- let mut _22: *const T; // in scope 13 at $SRC_DIR/core/src/ptr/non_null.rs:LL:COL
- let mut _23: *mut T; // in scope 13 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- scope 14 {
- scope 15 (inlined NonNull::<T>::new_unchecked::runtime::<T>) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- debug ptr => _23; // in scope 15 at $SRC_DIR/core/src/intrinsics.rs:LL:COL
- scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null) { // at $SRC_DIR/core/src/ptr/non_null.rs:LL:COL
- debug self => _23; // in scope 16 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- let mut _24: *mut u8; // in scope 16 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- scope 17 {
- scope 18 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) { // at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- debug ptr => _24; // in scope 18 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::addr) { // at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- debug self => _24; // in scope 19 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- scope 20 {
- scope 21 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) { // at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- debug self => _24; // in scope 21 at $SRC_DIR/core/src/ptr/mut_ptr.rs:LL:COL
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- scope 9 (inlined invalid::<T>) { // at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- debug addr => _16; // in scope 9 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- scope 10 {
- }
- }
- scope 11 (inlined ptr::const_ptr::<impl *const T>::add) { // at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- debug self => _13; // in scope 11 at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
- debug count => _17; // in scope 11 at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
- scope 12 {
- }
- }
- }
- }
- scope 8 (inlined core::slice::<impl [T]>::as_ptr) { // at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- debug self => _1; // in scope 8 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- let mut _21: *const [T]; // in scope 8 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- }
- }
- }
- scope 22 (inlined <std::slice::Iter<'_, T> as Iterator>::rev) { // at $DIR/slice_iter.rs:35:27: 35:32
- debug self => _4; // in scope 22 at $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
- scope 23 (inlined Rev::<std::slice::Iter<'_, T>>::new) { // at $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
- debug iter => _4; // in scope 23 at $SRC_DIR/core/src/iter/adapters/rev.rs:LL:COL
- }
- }
- scope 24 (inlined <Rev<std::slice::Iter<'_, T>> as IntoIterator>::into_iter) { // at $DIR/slice_iter.rs:35:14: 35:32
- debug self => _3; // in scope 24 at $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
- }
-
- bb0: {
- StorageLive(_4); // scope 0 at $DIR/slice_iter.rs:+1:14: +1:26
- StorageLive(_13); // scope 3 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageLive(_21); // scope 8 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- _21 = &raw const (*_1); // scope 8 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- _13 = move _21 as *const T (PtrToPtr); // scope 8 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageDead(_21); // scope 8 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- StorageLive(_14); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_15); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _15 = const _; // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- switchInt(move _15) -> [0: bb10, otherwise: bb9]; // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- }
-
- bb1: {
- StorageLive(_7); // scope 1 at $DIR/slice_iter.rs:+1:14: +1:32
- _8 = &mut _5; // scope 1 at $DIR/slice_iter.rs:+1:14: +1:32
- StorageLive(_25); // scope 25 at $SRC_DIR/core/src/iter/adapters/rev.rs:LL:COL
- _25 = &mut ((*_8).0: std::slice::Iter<'_, T>); // scope 25 at $SRC_DIR/core/src/iter/adapters/rev.rs:LL:COL
- _7 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _25) -> [return: bb12, unwind: bb7]; // scope 25 at $SRC_DIR/core/src/iter/adapters/rev.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/iter/adapters/rev.rs:LL:COL
- // + literal: Const { ty: for<'a> fn(&'a mut std::slice::Iter<'_, T>) -> Option<<std::slice::Iter<'_, T> as Iterator>::Item> {<std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back}, val: Value(<ZST>) }
- }
-
- bb2: {
- _10 = ((_7 as Some).0: &T); // scope 1 at $DIR/slice_iter.rs:+1:9: +1:10
- StorageLive(_11); // scope 2 at $DIR/slice_iter.rs:+2:9: +2:10
- _11 = &_2; // scope 2 at $DIR/slice_iter.rs:+2:9: +2:10
- StorageLive(_12); // scope 2 at $DIR/slice_iter.rs:+2:9: +2:13
- _12 = (_10,); // scope 2 at $DIR/slice_iter.rs:+2:9: +2:13
- _6 = <impl Fn(&T) as Fn<(&T,)>>::call(move _11, move _12) -> [return: bb5, unwind: bb7]; // scope 2 at $DIR/slice_iter.rs:+2:9: +2:13
- // mir::Constant
- // + span: $DIR/slice_iter.rs:36:9: 36:10
- // + literal: Const { ty: for<'a> extern "rust-call" fn(&'a impl Fn(&T), (&T,)) -> <impl Fn(&T) as FnOnce<(&T,)>>::Output {<impl Fn(&T) as Fn<(&T,)>>::call}, val: Value(<ZST>) }
- }
-
- bb3: {
- unreachable; // scope 1 at $DIR/slice_iter.rs:+1:14: +1:32
- }
-
- bb4: {
- StorageDead(_7); // scope 1 at $DIR/slice_iter.rs:+3:5: +3:6
- StorageDead(_5); // scope 0 at $DIR/slice_iter.rs:+3:5: +3:6
- drop(_2) -> bb6; // scope 0 at $DIR/slice_iter.rs:+4:1: +4:2
- }
-
- bb5: {
- StorageDead(_12); // scope 2 at $DIR/slice_iter.rs:+2:12: +2:13
- StorageDead(_11); // scope 2 at $DIR/slice_iter.rs:+2:12: +2:13
- StorageDead(_7); // scope 1 at $DIR/slice_iter.rs:+3:5: +3:6
- goto -> bb1; // scope 1 at $DIR/slice_iter.rs:+1:5: +3:6
- }
-
- bb6: {
- return; // scope 0 at $DIR/slice_iter.rs:+4:2: +4:2
- }
-
- bb7 (cleanup): {
- drop(_2) -> [return: bb8, unwind terminate]; // scope 0 at $DIR/slice_iter.rs:+4:1: +4:2
- }
-
- bb8 (cleanup): {
- resume; // scope 0 at $DIR/slice_iter.rs:+0:1: +4:2
- }
-
- bb9: {
- StorageLive(_16); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _16 = Len((*_1)); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _14 = _16 as *const T (Transmute); // scope 10 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- StorageDead(_16); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- goto -> bb11; // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- }
-
- bb10: {
- StorageLive(_17); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _17 = Len((*_1)); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _14 = Offset(_13, _17); // scope 12 at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
- StorageDead(_17); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- goto -> bb11; // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- }
-
- bb11: {
- StorageDead(_15); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_18); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_19); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _19 = _13 as *mut T (PtrToPtr); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_22); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_23); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_24); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _22 = _19 as *const T (Pointer(MutToConstPointer)); // scope 14 at $SRC_DIR/core/src/ptr/non_null.rs:LL:COL
- _18 = NonNull::<T> { pointer: _22 }; // scope 14 at $SRC_DIR/core/src/ptr/non_null.rs:LL:COL
- StorageDead(_24); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageDead(_23); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageDead(_22); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageDead(_19); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageLive(_20); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _20 = _14; // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- _4 = std::slice::Iter::<'_, T> { ptr: move _18, end: move _20, _marker: const ZeroSized: PhantomData<&T> }; // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- // mir::Constant
- // + span: no-location
- // + literal: Const { ty: PhantomData<&T>, val: Value(<ZST>) }
- // adt
- // + user_ty: UserType(1)
- StorageDead(_20); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageDead(_18); // scope 7 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageDead(_14); // scope 6 at $SRC_DIR/core/src/slice/iter.rs:LL:COL
- StorageDead(_13); // scope 3 at $SRC_DIR/core/src/slice/mod.rs:LL:COL
- _3 = Rev::<std::slice::Iter<'_, T>> { iter: move _4 }; // scope 23 at $SRC_DIR/core/src/iter/adapters/rev.rs:LL:COL
- StorageDead(_4); // scope 0 at $DIR/slice_iter.rs:+1:31: +1:32
- StorageLive(_5); // scope 0 at $DIR/slice_iter.rs:+1:14: +1:32
- _5 = move _3; // scope 0 at $DIR/slice_iter.rs:+1:14: +1:32
- goto -> bb1; // scope 1 at $DIR/slice_iter.rs:+1:5: +3:6
- }
-
- bb12: {
- StorageDead(_25); // scope 25 at $SRC_DIR/core/src/iter/adapters/rev.rs:LL:COL
- _9 = discriminant(_7); // scope 1 at $DIR/slice_iter.rs:+1:14: +1:32
- switchInt(move _9) -> [0: bb4, 1: bb2, otherwise: bb3]; // scope 1 at $DIR/slice_iter.rs:+1:14: +1:32
- }
-}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..1b4ac793f
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,201 @@
+// MIR for `reverse_loop` after PreCodegen
+
+fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
+ debug slice => _1;
+ debug f => _2;
+ let mut _0: ();
+ let mut _13: std::slice::Iter<'_, T>;
+ let mut _14: std::iter::Rev<std::slice::Iter<'_, T>>;
+ let mut _15: std::iter::Rev<std::slice::Iter<'_, T>>;
+ let mut _16: &mut std::iter::Rev<std::slice::Iter<'_, T>>;
+ let mut _18: std::option::Option<&T>;
+ let mut _19: isize;
+ let mut _21: &impl Fn(&T);
+ let mut _22: (&T,);
+ let _23: ();
+ scope 1 {
+ debug iter => _15;
+ let _20: &T;
+ scope 2 {
+ debug x => _20;
+ }
+ scope 25 (inlined <Rev<std::slice::Iter<'_, T>> as Iterator>::next) {
+ debug self => _16;
+ let mut _17: &mut std::slice::Iter<'_, T>;
+ }
+ }
+ scope 3 (inlined core::slice::<impl [T]>::iter) {
+ debug self => _1;
+ scope 4 (inlined std::slice::Iter::<'_, T>::new) {
+ debug slice => _1;
+ let _4: *const T;
+ let mut _5: bool;
+ let mut _6: usize;
+ let mut _8: usize;
+ let mut _9: *mut T;
+ let mut _11: std::ptr::NonNull<T>;
+ let mut _12: *const T;
+ scope 5 {
+ debug ptr => _4;
+ scope 6 {
+ let _7: *const T;
+ scope 7 {
+ debug end => _7;
+ scope 13 (inlined NonNull::<T>::new_unchecked) {
+ debug ptr => _9;
+ let mut _10: *const T;
+ let mut _24: *mut T;
+ scope 14 {
+ scope 15 (inlined NonNull::<T>::new_unchecked::runtime::<T>) {
+ debug ptr => _24;
+ scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null) {
+ debug self => _24;
+ let mut _25: *mut u8;
+ scope 17 {
+ scope 18 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) {
+ debug ptr => _25;
+ scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::addr) {
+ debug self => _25;
+ scope 20 {
+ scope 21 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) {
+ debug self => _25;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ scope 9 (inlined invalid::<T>) {
+ debug addr => _8;
+ scope 10 {
+ }
+ }
+ scope 11 (inlined ptr::const_ptr::<impl *const T>::add) {
+ debug self => _4;
+ debug count => _6;
+ scope 12 {
+ }
+ }
+ }
+ }
+ scope 8 (inlined core::slice::<impl [T]>::as_ptr) {
+ debug self => _1;
+ let mut _3: *const [T];
+ }
+ }
+ }
+ scope 22 (inlined <std::slice::Iter<'_, T> as Iterator>::rev) {
+ debug self => _13;
+ scope 23 (inlined Rev::<std::slice::Iter<'_, T>>::new) {
+ debug iter => _13;
+ }
+ }
+ scope 24 (inlined <Rev<std::slice::Iter<'_, T>> as IntoIterator>::into_iter) {
+ debug self => _14;
+ }
+
+ bb0: {
+ StorageLive(_13);
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = &raw const (*_1);
+ _4 = move _3 as *const T (PtrToPtr);
+ StorageDead(_3);
+ StorageLive(_7);
+ StorageLive(_5);
+ _5 = const _;
+ switchInt(move _5) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ StorageLive(_6);
+ _6 = Len((*_1));
+ _7 = Offset(_4, _6);
+ StorageDead(_6);
+ goto -> bb3;
+ }
+
+ bb2: {
+ StorageLive(_8);
+ _8 = Len((*_1));
+ _7 = _8 as *const T (Transmute);
+ StorageDead(_8);
+ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_5);
+ StorageLive(_11);
+ StorageLive(_9);
+ _9 = _4 as *mut T (PtrToPtr);
+ StorageLive(_10);
+ StorageLive(_24);
+ StorageLive(_25);
+ _10 = _9 as *const T (PointerCoercion(MutToConstPointer));
+ _11 = NonNull::<T> { pointer: _10 };
+ StorageDead(_25);
+ StorageDead(_24);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageLive(_12);
+ _12 = _7;
+ _13 = std::slice::Iter::<'_, T> { ptr: move _11, end: move _12, _marker: const ZeroSized: PhantomData<&T> };
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_7);
+ StorageDead(_4);
+ _14 = Rev::<std::slice::Iter<'_, T>> { iter: move _13 };
+ StorageDead(_13);
+ StorageLive(_15);
+ _15 = move _14;
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageLive(_18);
+ _16 = &mut _15;
+ StorageLive(_17);
+ _17 = &mut ((*_16).0: std::slice::Iter<'_, T>);
+ _18 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _17) -> [return: bb5, unwind unreachable];
+ }
+
+ bb5: {
+ StorageDead(_17);
+ _19 = discriminant(_18);
+ switchInt(move _19) -> [0: bb6, 1: bb8, otherwise: bb10];
+ }
+
+ bb6: {
+ StorageDead(_18);
+ StorageDead(_15);
+ drop(_2) -> [return: bb7, unwind unreachable];
+ }
+
+ bb7: {
+ return;
+ }
+
+ bb8: {
+ _20 = ((_18 as Some).0: &T);
+ StorageLive(_21);
+ _21 = &_2;
+ StorageLive(_22);
+ _22 = (_20,);
+ _23 = <impl Fn(&T) as Fn<(&T,)>>::call(move _21, move _22) -> [return: bb9, unwind unreachable];
+ }
+
+ bb9: {
+ StorageDead(_22);
+ StorageDead(_21);
+ StorageDead(_18);
+ goto -> bb4;
+ }
+
+ bb10: {
+ unreachable;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..f75a9a03d
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,209 @@
+// MIR for `reverse_loop` after PreCodegen
+
+fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
+ debug slice => _1;
+ debug f => _2;
+ let mut _0: ();
+ let mut _13: std::slice::Iter<'_, T>;
+ let mut _14: std::iter::Rev<std::slice::Iter<'_, T>>;
+ let mut _15: std::iter::Rev<std::slice::Iter<'_, T>>;
+ let mut _16: &mut std::iter::Rev<std::slice::Iter<'_, T>>;
+ let mut _18: std::option::Option<&T>;
+ let mut _19: isize;
+ let mut _21: &impl Fn(&T);
+ let mut _22: (&T,);
+ let _23: ();
+ scope 1 {
+ debug iter => _15;
+ let _20: &T;
+ scope 2 {
+ debug x => _20;
+ }
+ scope 25 (inlined <Rev<std::slice::Iter<'_, T>> as Iterator>::next) {
+ debug self => _16;
+ let mut _17: &mut std::slice::Iter<'_, T>;
+ }
+ }
+ scope 3 (inlined core::slice::<impl [T]>::iter) {
+ debug self => _1;
+ scope 4 (inlined std::slice::Iter::<'_, T>::new) {
+ debug slice => _1;
+ let _4: *const T;
+ let mut _5: bool;
+ let mut _6: usize;
+ let mut _8: usize;
+ let mut _9: *mut T;
+ let mut _11: std::ptr::NonNull<T>;
+ let mut _12: *const T;
+ scope 5 {
+ debug ptr => _4;
+ scope 6 {
+ let _7: *const T;
+ scope 7 {
+ debug end => _7;
+ scope 13 (inlined NonNull::<T>::new_unchecked) {
+ debug ptr => _9;
+ let mut _10: *const T;
+ let mut _24: *mut T;
+ scope 14 {
+ scope 15 (inlined NonNull::<T>::new_unchecked::runtime::<T>) {
+ debug ptr => _24;
+ scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null) {
+ debug self => _24;
+ let mut _25: *mut u8;
+ scope 17 {
+ scope 18 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) {
+ debug ptr => _25;
+ scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::addr) {
+ debug self => _25;
+ scope 20 {
+ scope 21 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) {
+ debug self => _25;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ scope 9 (inlined invalid::<T>) {
+ debug addr => _8;
+ scope 10 {
+ }
+ }
+ scope 11 (inlined ptr::const_ptr::<impl *const T>::add) {
+ debug self => _4;
+ debug count => _6;
+ scope 12 {
+ }
+ }
+ }
+ }
+ scope 8 (inlined core::slice::<impl [T]>::as_ptr) {
+ debug self => _1;
+ let mut _3: *const [T];
+ }
+ }
+ }
+ scope 22 (inlined <std::slice::Iter<'_, T> as Iterator>::rev) {
+ debug self => _13;
+ scope 23 (inlined Rev::<std::slice::Iter<'_, T>>::new) {
+ debug iter => _13;
+ }
+ }
+ scope 24 (inlined <Rev<std::slice::Iter<'_, T>> as IntoIterator>::into_iter) {
+ debug self => _14;
+ }
+
+ bb0: {
+ StorageLive(_13);
+ StorageLive(_4);
+ StorageLive(_3);
+ _3 = &raw const (*_1);
+ _4 = move _3 as *const T (PtrToPtr);
+ StorageDead(_3);
+ StorageLive(_7);
+ StorageLive(_5);
+ _5 = const _;
+ switchInt(move _5) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ StorageLive(_6);
+ _6 = Len((*_1));
+ _7 = Offset(_4, _6);
+ StorageDead(_6);
+ goto -> bb3;
+ }
+
+ bb2: {
+ StorageLive(_8);
+ _8 = Len((*_1));
+ _7 = _8 as *const T (Transmute);
+ StorageDead(_8);
+ goto -> bb3;
+ }
+
+ bb3: {
+ StorageDead(_5);
+ StorageLive(_11);
+ StorageLive(_9);
+ _9 = _4 as *mut T (PtrToPtr);
+ StorageLive(_10);
+ StorageLive(_24);
+ StorageLive(_25);
+ _10 = _9 as *const T (PointerCoercion(MutToConstPointer));
+ _11 = NonNull::<T> { pointer: _10 };
+ StorageDead(_25);
+ StorageDead(_24);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageLive(_12);
+ _12 = _7;
+ _13 = std::slice::Iter::<'_, T> { ptr: move _11, end: move _12, _marker: const ZeroSized: PhantomData<&T> };
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_7);
+ StorageDead(_4);
+ _14 = Rev::<std::slice::Iter<'_, T>> { iter: move _13 };
+ StorageDead(_13);
+ StorageLive(_15);
+ _15 = move _14;
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageLive(_18);
+ _16 = &mut _15;
+ StorageLive(_17);
+ _17 = &mut ((*_16).0: std::slice::Iter<'_, T>);
+ _18 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _17) -> [return: bb5, unwind: bb11];
+ }
+
+ bb5: {
+ StorageDead(_17);
+ _19 = discriminant(_18);
+ switchInt(move _19) -> [0: bb6, 1: bb8, otherwise: bb10];
+ }
+
+ bb6: {
+ StorageDead(_18);
+ StorageDead(_15);
+ drop(_2) -> [return: bb7, unwind continue];
+ }
+
+ bb7: {
+ return;
+ }
+
+ bb8: {
+ _20 = ((_18 as Some).0: &T);
+ StorageLive(_21);
+ _21 = &_2;
+ StorageLive(_22);
+ _22 = (_20,);
+ _23 = <impl Fn(&T) as Fn<(&T,)>>::call(move _21, move _22) -> [return: bb9, unwind: bb11];
+ }
+
+ bb9: {
+ StorageDead(_22);
+ StorageDead(_21);
+ StorageDead(_18);
+ goto -> bb4;
+ }
+
+ bb10: {
+ unreachable;
+ }
+
+ bb11 (cleanup): {
+ drop(_2) -> [return: bb12, unwind terminate];
+ }
+
+ bb12 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.rs b/tests/mir-opt/pre-codegen/slice_iter.rs
index ca423ca55..4e954aa34 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.rs
+++ b/tests/mir-opt/pre-codegen/slice_iter.rs
@@ -1,6 +1,7 @@
// compile-flags: -O -C debuginfo=0 -Zmir-opt-level=2
// only-64bit
// ignore-debug
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#![crate_type = "lib"]
@@ -36,3 +37,18 @@ pub fn reverse_loop<'a, T>(slice: &'a [T], f: impl Fn(&T)) {
f(x)
}
}
+
+// EMIT_MIR slice_iter.enumerated_loop.PreCodegen.after.mir
+pub fn enumerated_loop<'a, T>(slice: &'a [T], f: impl Fn(usize, &T)) {
+ for (i, x) in slice.iter().enumerate() {
+ f(i, x)
+ }
+}
+
+// EMIT_MIR slice_iter.range_loop.PreCodegen.after.mir
+pub fn range_loop<'a, T>(slice: &'a [T], f: impl Fn(usize, &T)) {
+ for i in 0..slice.len() {
+ let x = &slice[i];
+ f(i, x)
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.mir
deleted file mode 100644
index a1431d473..000000000
--- a/tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.mir
+++ /dev/null
@@ -1,17 +0,0 @@
-// MIR for `slice_iter_mut_next_back` after PreCodegen
-
-fn slice_iter_mut_next_back(_1: &mut std::slice::IterMut<'_, T>) -> Option<&mut T> {
- debug it => _1; // in scope 0 at $DIR/slice_iter.rs:+0:40: +0:42
- let mut _0: std::option::Option<&mut T>; // return place in scope 0 at $DIR/slice_iter.rs:+0:80: +0:97
-
- bb0: {
- _0 = <std::slice::IterMut<'_, T> as DoubleEndedIterator>::next_back(_1) -> bb1; // scope 0 at $DIR/slice_iter.rs:+1:5: +1:19
- // mir::Constant
- // + span: $DIR/slice_iter.rs:23:8: 23:17
- // + literal: Const { ty: for<'a> fn(&'a mut std::slice::IterMut<'_, T>) -> Option<<std::slice::IterMut<'_, T> as Iterator>::Item> {<std::slice::IterMut<'_, T> as DoubleEndedIterator>::next_back}, val: Value(<ZST>) }
- }
-
- bb1: {
- return; // scope 0 at $DIR/slice_iter.rs:+2:2: +2:2
- }
-}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..0471d0757
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,14 @@
+// MIR for `slice_iter_mut_next_back` after PreCodegen
+
+fn slice_iter_mut_next_back(_1: &mut std::slice::IterMut<'_, T>) -> Option<&mut T> {
+ debug it => _1;
+ let mut _0: std::option::Option<&mut T>;
+
+ bb0: {
+ _0 = <std::slice::IterMut<'_, T> as DoubleEndedIterator>::next_back(_1) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..386f3a9ed
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,14 @@
+// MIR for `slice_iter_mut_next_back` after PreCodegen
+
+fn slice_iter_mut_next_back(_1: &mut std::slice::IterMut<'_, T>) -> Option<&mut T> {
+ debug it => _1;
+ let mut _0: std::option::Option<&mut T>;
+
+ bb0: {
+ _0 = <std::slice::IterMut<'_, T> as DoubleEndedIterator>::next_back(_1) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.mir
deleted file mode 100644
index d2a963cad..000000000
--- a/tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.mir
+++ /dev/null
@@ -1,17 +0,0 @@
-// MIR for `slice_iter_next` after PreCodegen
-
-fn slice_iter_next(_1: &mut std::slice::Iter<'_, T>) -> Option<&T> {
- debug it => _1; // in scope 0 at $DIR/slice_iter.rs:+0:31: +0:33
- let mut _0: std::option::Option<&T>; // return place in scope 0 at $DIR/slice_iter.rs:+0:68: +0:81
-
- bb0: {
- _0 = <std::slice::Iter<'_, T> as Iterator>::next(_1) -> bb1; // scope 0 at $DIR/slice_iter.rs:+1:5: +1:14
- // mir::Constant
- // + span: $DIR/slice_iter.rs:18:8: 18:12
- // + literal: Const { ty: for<'a> fn(&'a mut std::slice::Iter<'_, T>) -> Option<<std::slice::Iter<'_, T> as Iterator>::Item> {<std::slice::Iter<'_, T> as Iterator>::next}, val: Value(<ZST>) }
- }
-
- bb1: {
- return; // scope 0 at $DIR/slice_iter.rs:+2:2: +2:2
- }
-}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..8c0209ae1
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,14 @@
+// MIR for `slice_iter_next` after PreCodegen
+
+fn slice_iter_next(_1: &mut std::slice::Iter<'_, T>) -> Option<&T> {
+ debug it => _1;
+ let mut _0: std::option::Option<&T>;
+
+ bb0: {
+ _0 = <std::slice::Iter<'_, T> as Iterator>::next(_1) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..e76ec0039
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,14 @@
+// MIR for `slice_iter_next` after PreCodegen
+
+fn slice_iter_next(_1: &mut std::slice::Iter<'_, T>) -> Option<&T> {
+ debug it => _1;
+ let mut _0: std::option::Option<&T>;
+
+ bb0: {
+ _0 = <std::slice::Iter<'_, T> as Iterator>::next(_1) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/spans.outer.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/spans.outer.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..b9329520b
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/spans.outer.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,19 @@
+// MIR for `outer` after PreCodegen
+
+fn outer(_1: u8) -> u8 {
+ debug v => _1; // in scope 0 at $DIR/spans.rs:10:14: 10:15
+ let mut _0: u8; // return place in scope 0 at $DIR/spans.rs:10:24: 10:26
+ let _2: &u8; // in scope 0 at $DIR/spans.rs:11:11: 11:13
+
+ bb0: {
+ _2 = &_1; // scope 0 at $DIR/spans.rs:11:11: 11:13
+ _0 = inner(_2) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/spans.rs:11:5: 11:14
+ // mir::Constant
+ // + span: $DIR/spans.rs:11:5: 11:10
+ // + literal: Const { ty: for<'a> fn(&'a u8) -> u8 {inner}, val: Value(<ZST>) }
+ }
+
+ bb1: {
+ return; // scope 0 at $DIR/spans.rs:12:2: 12:2
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/spans.outer.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/spans.outer.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..1e20b1be5
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/spans.outer.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,19 @@
+// MIR for `outer` after PreCodegen
+
+fn outer(_1: u8) -> u8 {
+ debug v => _1; // in scope 0 at $DIR/spans.rs:10:14: 10:15
+ let mut _0: u8; // return place in scope 0 at $DIR/spans.rs:10:24: 10:26
+ let _2: &u8; // in scope 0 at $DIR/spans.rs:11:11: 11:13
+
+ bb0: {
+ _2 = &_1; // scope 0 at $DIR/spans.rs:11:11: 11:13
+ _0 = inner(_2) -> [return: bb1, unwind continue]; // scope 0 at $DIR/spans.rs:11:5: 11:14
+ // mir::Constant
+ // + span: $DIR/spans.rs:11:5: 11:10
+ // + literal: Const { ty: for<'a> fn(&'a u8) -> u8 {inner}, val: Value(<ZST>) }
+ }
+
+ bb1: {
+ return; // scope 0 at $DIR/spans.rs:12:2: 12:2
+ }
+}
diff --git a/tests/mir-opt/pre-codegen/spans.rs b/tests/mir-opt/pre-codegen/spans.rs
new file mode 100644
index 000000000..6ae9935ee
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/spans.rs
@@ -0,0 +1,16 @@
+// Test that the comments we emit in MIR opts are accurate.
+//
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
+// compile-flags: -Zmir-include-spans
+// ignore-wasm32
+
+#![crate_type = "lib"]
+
+// EMIT_MIR spans.outer.PreCodegen.after.mir
+pub fn outer(v: u8) -> u8 {
+ inner(&v)
+}
+
+pub fn inner(x: &u8) -> u8 {
+ *x
+}
diff --git a/tests/mir-opt/pre-codegen/try_identity.new.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/try_identity.new.PreCodegen.after.mir
index 53971b4cf..0bf4a2670 100644
--- a/tests/mir-opt/pre-codegen/try_identity.new.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/try_identity.new.PreCodegen.after.mir
@@ -1,70 +1,70 @@
// MIR for `new` after PreCodegen
fn new(_1: Result<T, E>) -> Result<T, E> {
- debug x => _1; // in scope 0 at $DIR/try_identity.rs:+0:14: +0:15
- let mut _0: std::result::Result<T, E>; // return place in scope 0 at $DIR/try_identity.rs:+0:34: +0:46
- let mut _2: std::ops::ControlFlow<E, T>; // in scope 0 at $DIR/try_identity.rs:+2:15: +7:10
- let mut _3: isize; // in scope 0 at $DIR/try_identity.rs:+4:17: +4:22
- let _4: T; // in scope 0 at $DIR/try_identity.rs:+4:20: +4:21
- let _5: E; // in scope 0 at $DIR/try_identity.rs:+5:21: +5:22
- let mut _6: isize; // in scope 0 at $DIR/try_identity.rs:+8:13: +8:37
- let _7: T; // in scope 0 at $DIR/try_identity.rs:+8:35: +8:36
- let _8: E; // in scope 0 at $DIR/try_identity.rs:+9:32: +9:33
+ debug x => _1;
+ let mut _0: std::result::Result<T, E>;
+ let mut _2: isize;
+ let _3: T;
+ let mut _4: std::ops::ControlFlow<E, T>;
+ let _5: E;
+ let mut _6: isize;
+ let _7: T;
+ let _8: E;
scope 1 {
- debug v => _4; // in scope 1 at $DIR/try_identity.rs:+4:20: +4:21
+ debug v => _3;
}
scope 2 {
- debug e => _5; // in scope 2 at $DIR/try_identity.rs:+5:21: +5:22
+ debug e => _5;
}
scope 3 {
- debug v => _7; // in scope 3 at $DIR/try_identity.rs:+8:35: +8:36
+ debug v => _7;
}
scope 4 {
- debug e => _8; // in scope 4 at $DIR/try_identity.rs:+9:32: +9:33
+ debug e => _8;
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/try_identity.rs:+2:15: +7:10
- _3 = discriminant(_1); // scope 0 at $DIR/try_identity.rs:+3:19: +3:20
- switchInt(move _3) -> [0: bb3, 1: bb1, otherwise: bb2]; // scope 0 at $DIR/try_identity.rs:+3:13: +3:20
+ StorageLive(_4);
+ _2 = discriminant(_1);
+ switchInt(move _2) -> [0: bb1, 1: bb2, otherwise: bb7];
}
bb1: {
- _5 = move ((_1 as Err).0: E); // scope 0 at $DIR/try_identity.rs:+5:21: +5:22
- _2 = ControlFlow::<E, T>::Break(move _5); // scope 2 at $DIR/try_identity.rs:+5:27: +5:48
- goto -> bb4; // scope 0 at $DIR/try_identity.rs:+5:47: +5:48
+ _3 = move ((_1 as Ok).0: T);
+ _4 = ControlFlow::<E, T>::Continue(move _3);
+ goto -> bb3;
}
bb2: {
- unreachable; // scope 0 at $DIR/try_identity.rs:+3:19: +3:20
+ _5 = move ((_1 as Err).0: E);
+ _4 = ControlFlow::<E, T>::Break(move _5);
+ goto -> bb3;
}
bb3: {
- _4 = move ((_1 as Ok).0: T); // scope 0 at $DIR/try_identity.rs:+4:20: +4:21
- _2 = ControlFlow::<E, T>::Continue(move _4); // scope 1 at $DIR/try_identity.rs:+4:26: +4:50
- goto -> bb4; // scope 0 at $DIR/try_identity.rs:+4:49: +4:50
+ _6 = discriminant(_4);
+ switchInt(move _6) -> [0: bb4, 1: bb5, otherwise: bb7];
}
bb4: {
- _6 = discriminant(_2); // scope 0 at $DIR/try_identity.rs:+2:15: +7:10
- switchInt(move _6) -> [0: bb6, 1: bb5, otherwise: bb2]; // scope 0 at $DIR/try_identity.rs:+2:9: +7:10
+ _7 = move ((_4 as Continue).0: T);
+ _0 = Result::<T, E>::Ok(move _7);
+ StorageDead(_4);
+ goto -> bb6;
}
bb5: {
- _8 = move ((_2 as Break).0: E); // scope 0 at $DIR/try_identity.rs:+9:32: +9:33
- _0 = Result::<T, E>::Err(move _8); // scope 4 at $DIR/try_identity.rs:+9:45: +9:51
- StorageDead(_2); // scope 0 at $DIR/try_identity.rs:+12:1: +12:2
- goto -> bb7; // scope 0 at $DIR/try_identity.rs:+12:1: +12:2
+ _8 = move ((_4 as Break).0: E);
+ _0 = Result::<T, E>::Err(move _8);
+ StorageDead(_4);
+ goto -> bb6;
}
bb6: {
- _7 = move ((_2 as Continue).0: T); // scope 0 at $DIR/try_identity.rs:+8:35: +8:36
- _0 = Result::<T, E>::Ok(move _7); // scope 0 at $DIR/try_identity.rs:+1:5: +11:6
- StorageDead(_2); // scope 0 at $DIR/try_identity.rs:+12:1: +12:2
- goto -> bb7; // scope 0 at $DIR/try_identity.rs:+12:1: +12:2
+ return;
}
bb7: {
- return; // scope 0 at $DIR/try_identity.rs:+12:2: +12:2
+ unreachable;
}
}
diff --git a/tests/mir-opt/pre-codegen/try_identity.old.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/try_identity.old.PreCodegen.after.mir
index e217d1994..7ccb8b043 100644
--- a/tests/mir-opt/pre-codegen/try_identity.old.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/try_identity.old.PreCodegen.after.mir
@@ -1,40 +1,40 @@
// MIR for `old` after PreCodegen
fn old(_1: Result<T, E>) -> Result<T, E> {
- debug x => _1; // in scope 0 at $DIR/try_identity.rs:+0:14: +0:15
- let mut _0: std::result::Result<T, E>; // return place in scope 0 at $DIR/try_identity.rs:+0:34: +0:46
- let mut _2: isize; // in scope 0 at $DIR/try_identity.rs:+3:13: +3:18
- let _3: T; // in scope 0 at $DIR/try_identity.rs:+3:16: +3:17
- let _4: E; // in scope 0 at $DIR/try_identity.rs:+4:17: +4:18
+ debug x => _1;
+ let mut _0: std::result::Result<T, E>;
+ let mut _2: isize;
+ let _3: T;
+ let _4: E;
scope 1 {
- debug v => _3; // in scope 1 at $DIR/try_identity.rs:+3:16: +3:17
+ debug v => _3;
}
scope 2 {
- debug e => _4; // in scope 2 at $DIR/try_identity.rs:+4:17: +4:18
+ debug e => _4;
}
bb0: {
- _2 = discriminant(_1); // scope 0 at $DIR/try_identity.rs:+2:15: +2:16
- switchInt(move _2) -> [0: bb3, 1: bb1, otherwise: bb2]; // scope 0 at $DIR/try_identity.rs:+2:9: +2:16
+ _2 = discriminant(_1);
+ switchInt(move _2) -> [0: bb1, 1: bb2, otherwise: bb4];
}
bb1: {
- _4 = move ((_1 as Err).0: E); // scope 0 at $DIR/try_identity.rs:+4:17: +4:18
- _0 = Result::<T, E>::Err(move _4); // scope 2 at $DIR/try_identity.rs:+4:30: +4:36
- goto -> bb4; // scope 0 at $DIR/try_identity.rs:+7:1: +7:2
+ _3 = move ((_1 as Ok).0: T);
+ _0 = Result::<T, E>::Ok(move _3);
+ goto -> bb3;
}
bb2: {
- unreachable; // scope 0 at $DIR/try_identity.rs:+2:15: +2:16
+ _4 = move ((_1 as Err).0: E);
+ _0 = Result::<T, E>::Err(move _4);
+ goto -> bb3;
}
bb3: {
- _3 = move ((_1 as Ok).0: T); // scope 0 at $DIR/try_identity.rs:+3:16: +3:17
- _0 = Result::<T, E>::Ok(move _3); // scope 0 at $DIR/try_identity.rs:+1:5: +6:6
- goto -> bb4; // scope 0 at $DIR/try_identity.rs:+7:1: +7:2
+ return;
}
bb4: {
- return; // scope 0 at $DIR/try_identity.rs:+7:2: +7:2
+ unreachable;
}
}
diff --git a/tests/mir-opt/reference_prop.debuginfo.ReferencePropagation.diff b/tests/mir-opt/reference_prop.debuginfo.ReferencePropagation.diff
index 07bd48fc8..132f66a1a 100644
--- a/tests/mir-opt/reference_prop.debuginfo.ReferencePropagation.diff
+++ b/tests/mir-opt/reference_prop.debuginfo.ReferencePropagation.diff
@@ -2,174 +2,162 @@
+ // MIR for `debuginfo` after ReferencePropagation
fn debuginfo() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/reference_prop.rs:+0:16: +0:16
- let _1: &mut u8; // in scope 0 at $DIR/reference_prop.rs:+3:9: +3:19
- let mut _2: u8; // in scope 0 at $DIR/reference_prop.rs:+3:27: +3:31
- let _4: debuginfo::T; // in scope 0 at $DIR/reference_prop.rs:+4:18: +4:22
- let _6: (); // in scope 0 at $DIR/reference_prop.rs:+9:5: +12:6
- let mut _7: std::option::Option<i32>; // in scope 0 at $DIR/reference_prop.rs:+9:11: +9:18
- let mut _8: isize; // in scope 0 at $DIR/reference_prop.rs:+10:9: +10:13
- let _10: (); // in scope 0 at $DIR/reference_prop.rs:+16:5: +17:6
- let mut _11: &[i32]; // in scope 0 at $DIR/reference_prop.rs:+16:82: +16:94
- let _12: &[i32]; // in scope 0 at $DIR/reference_prop.rs:+16:83: +16:94
- let mut _13: &[i32; 10]; // in scope 0 at $DIR/reference_prop.rs:+16:83: +16:90
- let _14: [i32; 10]; // in scope 0 at $DIR/reference_prop.rs:+16:83: +16:90
- let mut _15: std::ops::RangeFull; // in scope 0 at $DIR/reference_prop.rs:+16:91: +16:93
- let mut _16: usize; // in scope 0 at $DIR/reference_prop.rs:+16:12: +16:79
- let mut _17: usize; // in scope 0 at $DIR/reference_prop.rs:+16:12: +16:79
- let mut _18: bool; // in scope 0 at $DIR/reference_prop.rs:+16:12: +16:79
- let _23: &&mut u8; // in scope 0 at $DIR/reference_prop.rs:+19:28: +19:40
- let _24: &mut u8; // in scope 0 at $DIR/reference_prop.rs:+19:29: +19:40
- let mut _25: debuginfo::T; // in scope 0 at $DIR/reference_prop.rs:+19:34: +19:38
+ let mut _0: ();
+ let _1: &mut u8;
+ let mut _2: u8;
+ let _4: debuginfo::T;
+ let _6: ();
+ let mut _7: std::option::Option<i32>;
+ let mut _8: isize;
+ let _10: ();
+ let mut _11: &[i32];
+ let _12: &[i32];
+ let mut _13: &[i32; 10];
+ let _14: [i32; 10];
+ let mut _15: std::ops::RangeFull;
+ let mut _16: usize;
+ let mut _17: usize;
+ let mut _18: bool;
+ let _23: &&mut u8;
+ let _24: &mut u8;
+ let mut _25: debuginfo::T;
scope 1 {
-- debug ref_mut_u8 => _1; // in scope 1 at $DIR/reference_prop.rs:+3:9: +3:19
-+ debug ref_mut_u8 => &_2; // in scope 1 at $DIR/reference_prop.rs:+3:9: +3:19
- let _3: &u8; // in scope 1 at $DIR/reference_prop.rs:+4:9: +4:14
- let mut _28: &debuginfo::T; // in scope 1 at $DIR/reference_prop.rs:+4:17: +4:24
+- debug ref_mut_u8 => _1;
++ debug ref_mut_u8 => &_2;
+ let _3: &u8;
+ let mut _28: &debuginfo::T;
scope 2 {
-- debug field => _3; // in scope 2 at $DIR/reference_prop.rs:+4:9: +4:14
-+ debug field => &((*_28).0: u8); // in scope 2 at $DIR/reference_prop.rs:+4:9: +4:14
- let _5: &u8; // in scope 2 at $DIR/reference_prop.rs:+7:9: +7:17
+- debug field => _3;
++ debug field => &((*_28).0: u8);
+ let _5: &u8;
scope 3 {
-- debug reborrow => _5; // in scope 3 at $DIR/reference_prop.rs:+7:9: +7:17
-+ debug reborrow => &_2; // in scope 3 at $DIR/reference_prop.rs:+7:9: +7:17
- let _9: &i32; // in scope 3 at $DIR/reference_prop.rs:+11:14: +11:31
- let _22: &&&mut u8; // in scope 3 at $DIR/reference_prop.rs:+19:9: +19:24
- let mut _27: &std::option::Option<i32>; // in scope 3 at $DIR/reference_prop.rs:+11:14: +11:31
+- debug reborrow => _5;
++ debug reborrow => &_2;
+ let _9: &i32;
+ let _22: &&&mut u8;
+ let mut _27: &std::option::Option<i32>;
scope 4 {
-- debug variant_field => _9; // in scope 4 at $DIR/reference_prop.rs:+11:14: +11:31
-+ debug variant_field => &(((*_27) as Some).0: i32); // in scope 4 at $DIR/reference_prop.rs:+11:14: +11:31
+- debug variant_field => _9;
++ debug variant_field => &(((*_27) as Some).0: i32);
}
scope 5 {
-- debug constant_index => _19; // in scope 5 at $DIR/reference_prop.rs:+16:16: +16:34
-+ debug constant_index => &(*_11)[1 of 3]; // in scope 5 at $DIR/reference_prop.rs:+16:16: +16:34
- debug subslice => _20; // in scope 5 at $DIR/reference_prop.rs:+16:36: +16:44
- debug constant_index_from_end => _21; // in scope 5 at $DIR/reference_prop.rs:+16:51: +16:78
- let _19: &i32; // in scope 5 at $DIR/reference_prop.rs:+16:16: +16:34
- let _20: &[i32]; // in scope 5 at $DIR/reference_prop.rs:+16:36: +16:44
- let _21: &i32; // in scope 5 at $DIR/reference_prop.rs:+16:51: +16:78
- let mut _26: &[i32; 10]; // in scope 5 at $DIR/reference_prop.rs:+16:83: +16:90
+- debug constant_index => _19;
++ debug constant_index => &(*_11)[1 of 3];
+ debug subslice => _20;
+ debug constant_index_from_end => _21;
+ let _19: &i32;
+ let _20: &[i32];
+ let _21: &i32;
+ let mut _26: &[i32; 10];
}
scope 6 {
-- debug multiple_borrow => _22; // in scope 6 at $DIR/reference_prop.rs:+19:9: +19:24
-+ debug multiple_borrow => &&&(_25.0: u8); // in scope 6 at $DIR/reference_prop.rs:+19:9: +19:24
+- debug multiple_borrow => _22;
++ debug multiple_borrow => &&&(_25.0: u8);
}
}
}
}
bb0: {
-- StorageLive(_1); // scope 0 at $DIR/reference_prop.rs:+3:9: +3:19
- StorageLive(_2); // scope 0 at $DIR/reference_prop.rs:+3:27: +3:31
- _2 = const 5_u8; // scope 0 at $DIR/reference_prop.rs:+3:27: +3:31
-- _1 = &mut _2; // scope 0 at $DIR/reference_prop.rs:+3:22: +3:31
-- StorageLive(_3); // scope 1 at $DIR/reference_prop.rs:+4:9: +4:14
- _28 = const _; // scope 1 at $DIR/reference_prop.rs:+4:17: +4:24
- // mir::Constant
- // + span: $DIR/reference_prop.rs:535:17: 535:24
- // + literal: Const { ty: &T, val: Unevaluated(debuginfo, [], Some(promoted[2])) }
-- _3 = &((*_28).0: u8); // scope 1 at $DIR/reference_prop.rs:+4:17: +4:24
-- StorageLive(_5); // scope 2 at $DIR/reference_prop.rs:+7:9: +7:17
-- _5 = &(*_1); // scope 2 at $DIR/reference_prop.rs:+7:20: +7:32
-- StorageLive(_6); // scope 3 at $DIR/reference_prop.rs:+9:5: +12:6
- StorageLive(_7); // scope 3 at $DIR/reference_prop.rs:+9:11: +9:18
- _7 = Option::<i32>::Some(const 0_i32); // scope 3 at $DIR/reference_prop.rs:+9:11: +9:18
- _8 = discriminant(_7); // scope 3 at $DIR/reference_prop.rs:+9:11: +9:18
- switchInt(move _8) -> [0: bb3, 1: bb1, otherwise: bb2]; // scope 3 at $DIR/reference_prop.rs:+9:5: +9:18
+- StorageLive(_1);
+ StorageLive(_2);
+ _2 = const 5_u8;
+- _1 = &mut _2;
+- StorageLive(_3);
+ _28 = const _;
+- _3 = &((*_28).0: u8);
+- StorageLive(_5);
+- _5 = &(*_1);
+- StorageLive(_6);
+ StorageLive(_7);
+ _7 = Option::<i32>::Some(const 0_i32);
+ _8 = discriminant(_7);
+ switchInt(move _8) -> [0: bb3, 1: bb1, otherwise: bb2];
}
bb1: {
-- StorageLive(_9); // scope 3 at $DIR/reference_prop.rs:+11:14: +11:31
- _27 = const _; // scope 3 at $DIR/reference_prop.rs:+11:14: +11:31
- // mir::Constant
- // + span: $DIR/reference_prop.rs:542:14: 542:31
- // + literal: Const { ty: &Option<i32>, val: Unevaluated(debuginfo, [], Some(promoted[1])) }
-- _9 = &(((*_27) as Some).0: i32); // scope 3 at $DIR/reference_prop.rs:+11:14: +11:31
-- _6 = const (); // scope 4 at $DIR/reference_prop.rs:+11:36: +11:38
-- StorageDead(_9); // scope 3 at $DIR/reference_prop.rs:+11:37: +11:38
- goto -> bb4; // scope 3 at $DIR/reference_prop.rs:+11:37: +11:38
+- StorageLive(_9);
+ _27 = const _;
+- _9 = &(((*_27) as Some).0: i32);
+- _6 = const ();
+- StorageDead(_9);
+ goto -> bb4;
}
bb2: {
- unreachable; // scope 3 at $DIR/reference_prop.rs:+9:11: +9:18
+ unreachable;
}
bb3: {
-- _6 = const (); // scope 3 at $DIR/reference_prop.rs:+10:17: +10:19
- goto -> bb4; // scope 3 at $DIR/reference_prop.rs:+10:17: +10:19
+- _6 = const ();
+ goto -> bb4;
}
bb4: {
- StorageDead(_7); // scope 3 at $DIR/reference_prop.rs:+12:5: +12:6
-- StorageDead(_6); // scope 3 at $DIR/reference_prop.rs:+12:5: +12:6
-- StorageLive(_10); // scope 3 at $DIR/reference_prop.rs:+16:5: +17:6
- StorageLive(_11); // scope 5 at $DIR/reference_prop.rs:+16:82: +16:94
- StorageLive(_12); // scope 5 at $DIR/reference_prop.rs:+16:83: +16:94
- StorageLive(_13); // scope 5 at $DIR/reference_prop.rs:+16:83: +16:90
- _26 = const _; // scope 5 at $DIR/reference_prop.rs:+16:83: +16:90
- // mir::Constant
- // + span: $DIR/reference_prop.rs:547:83: 547:90
- // + literal: Const { ty: &[i32; 10], val: Unevaluated(debuginfo, [], Some(promoted[0])) }
- _13 = &(*_26); // scope 5 at $DIR/reference_prop.rs:+16:83: +16:90
- StorageLive(_15); // scope 5 at $DIR/reference_prop.rs:+16:91: +16:93
- _15 = RangeFull; // scope 5 at $DIR/reference_prop.rs:+16:91: +16:93
- _12 = <[i32; 10] as Index<RangeFull>>::index(move _13, move _15) -> bb5; // scope 5 at $DIR/reference_prop.rs:+16:83: +16:94
- // mir::Constant
- // + span: $DIR/reference_prop.rs:547:83: 547:94
- // + literal: Const { ty: for<'a> fn(&'a [i32; 10], RangeFull) -> &'a <[i32; 10] as Index<RangeFull>>::Output {<[i32; 10] as Index<RangeFull>>::index}, val: Value(<ZST>) }
+ StorageDead(_7);
+- StorageDead(_6);
+- StorageLive(_10);
+ StorageLive(_11);
+ StorageLive(_12);
+ StorageLive(_13);
+ _26 = const _;
+ _13 = &(*_26);
+ StorageLive(_15);
+ _15 = RangeFull;
+ _12 = <[i32; 10] as Index<RangeFull>>::index(move _13, move _15) -> [return: bb5, unwind continue];
}
bb5: {
- StorageDead(_15); // scope 5 at $DIR/reference_prop.rs:+16:93: +16:94
- StorageDead(_13); // scope 5 at $DIR/reference_prop.rs:+16:93: +16:94
- _11 = &(*_12); // scope 5 at $DIR/reference_prop.rs:+16:82: +16:94
- _16 = Len((*_11)); // scope 5 at $DIR/reference_prop.rs:+16:12: +16:79
- _17 = const 3_usize; // scope 5 at $DIR/reference_prop.rs:+16:12: +16:79
- _18 = Ge(move _16, move _17); // scope 5 at $DIR/reference_prop.rs:+16:12: +16:79
- switchInt(move _18) -> [0: bb7, otherwise: bb6]; // scope 5 at $DIR/reference_prop.rs:+16:12: +16:79
+ StorageDead(_15);
+ StorageDead(_13);
+ _11 = &(*_12);
+ _16 = Len((*_11));
+ _17 = const 3_usize;
+ _18 = Ge(move _16, move _17);
+ switchInt(move _18) -> [0: bb7, otherwise: bb6];
}
bb6: {
-- StorageLive(_19); // scope 5 at $DIR/reference_prop.rs:+16:16: +16:34
-- _19 = &(*_11)[1 of 3]; // scope 5 at $DIR/reference_prop.rs:+16:16: +16:34
- StorageLive(_20); // scope 5 at $DIR/reference_prop.rs:+16:36: +16:44
- _20 = &(*_11)[2:-1]; // scope 5 at $DIR/reference_prop.rs:+16:36: +16:44
- StorageLive(_21); // scope 5 at $DIR/reference_prop.rs:+16:51: +16:78
- _21 = &(*_11)[-1 of 3]; // scope 5 at $DIR/reference_prop.rs:+16:51: +16:78
-- _10 = const (); // scope 5 at $DIR/reference_prop.rs:+16:95: +17:6
- StorageDead(_21); // scope 3 at $DIR/reference_prop.rs:+17:5: +17:6
- StorageDead(_20); // scope 3 at $DIR/reference_prop.rs:+17:5: +17:6
-- StorageDead(_19); // scope 3 at $DIR/reference_prop.rs:+17:5: +17:6
- goto -> bb8; // scope 3 at $DIR/reference_prop.rs:+16:5: +17:6
+- StorageLive(_19);
+- _19 = &(*_11)[1 of 3];
+ StorageLive(_20);
+ _20 = &(*_11)[2:-1];
+ StorageLive(_21);
+ _21 = &(*_11)[-1 of 3];
+- _10 = const ();
+ StorageDead(_21);
+ StorageDead(_20);
+- StorageDead(_19);
+ goto -> bb8;
}
bb7: {
-- _10 = const (); // scope 3 at $DIR/reference_prop.rs:+17:6: +17:6
- goto -> bb8; // scope 3 at $DIR/reference_prop.rs:+16:5: +17:6
+- _10 = const ();
+ goto -> bb8;
}
bb8: {
- StorageDead(_12); // scope 3 at $DIR/reference_prop.rs:+17:5: +17:6
- StorageDead(_11); // scope 3 at $DIR/reference_prop.rs:+17:5: +17:6
-- StorageDead(_10); // scope 3 at $DIR/reference_prop.rs:+17:5: +17:6
-- StorageLive(_22); // scope 3 at $DIR/reference_prop.rs:+19:9: +19:24
-- StorageLive(_23); // scope 3 at $DIR/reference_prop.rs:+19:28: +19:40
-- StorageLive(_24); // scope 3 at $DIR/reference_prop.rs:+19:29: +19:40
- StorageLive(_25); // scope 3 at $DIR/reference_prop.rs:+19:34: +19:38
- _25 = T(const 6_u8); // scope 3 at $DIR/reference_prop.rs:+19:34: +19:38
-- _24 = &mut (_25.0: u8); // scope 3 at $DIR/reference_prop.rs:+19:29: +19:40
-- _23 = &_24; // scope 3 at $DIR/reference_prop.rs:+19:28: +19:40
-- _22 = &_23; // scope 3 at $DIR/reference_prop.rs:+19:27: +19:40
- _0 = const (); // scope 0 at $DIR/reference_prop.rs:+0:16: +20:2
- StorageDead(_25); // scope 3 at $DIR/reference_prop.rs:+20:1: +20:2
-- StorageDead(_24); // scope 3 at $DIR/reference_prop.rs:+20:1: +20:2
-- StorageDead(_23); // scope 3 at $DIR/reference_prop.rs:+20:1: +20:2
-- StorageDead(_22); // scope 3 at $DIR/reference_prop.rs:+20:1: +20:2
-- StorageDead(_5); // scope 2 at $DIR/reference_prop.rs:+20:1: +20:2
-- StorageDead(_3); // scope 1 at $DIR/reference_prop.rs:+20:1: +20:2
- StorageDead(_2); // scope 0 at $DIR/reference_prop.rs:+20:1: +20:2
-- StorageDead(_1); // scope 0 at $DIR/reference_prop.rs:+20:1: +20:2
- return; // scope 0 at $DIR/reference_prop.rs:+20:2: +20:2
+ StorageDead(_12);
+ StorageDead(_11);
+- StorageDead(_10);
+- StorageLive(_22);
+- StorageLive(_23);
+- StorageLive(_24);
+ StorageLive(_25);
+ _25 = T(const 6_u8);
+- _24 = &mut (_25.0: u8);
+- _23 = &_24;
+- _22 = &_23;
+ _0 = const ();
+ StorageDead(_25);
+- StorageDead(_24);
+- StorageDead(_23);
+- StorageDead(_22);
+- StorageDead(_5);
+- StorageDead(_3);
+ StorageDead(_2);
+- StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/reference_prop.dominate_storage.ReferencePropagation.diff b/tests/mir-opt/reference_prop.dominate_storage.ReferencePropagation.diff
index e158f64e9..012efa969 100644
--- a/tests/mir-opt/reference_prop.dominate_storage.ReferencePropagation.diff
+++ b/tests/mir-opt/reference_prop.dominate_storage.ReferencePropagation.diff
@@ -2,37 +2,34 @@
+ // MIR for `dominate_storage` after ReferencePropagation
fn dominate_storage() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/reference_prop.rs:+0:23: +0:23
- let mut _1: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _2: &i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _4: bool; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _5: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _6: bool; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _2: &i32;
+ let mut _3: i32;
+ let mut _4: bool;
+ let mut _5: i32;
+ let mut _6: bool;
bb0: {
- goto -> bb1; // scope 0 at $DIR/reference_prop.rs:+8:11: +8:20
+ goto -> bb1;
}
bb1: {
- _1 = const 5_i32; // scope 0 at $DIR/reference_prop.rs:+10:13: +10:18
- _2 = &_1; // scope 0 at $DIR/reference_prop.rs:+11:13: +11:19
- goto -> bb2; // scope 0 at $DIR/reference_prop.rs:+12:13: +12:22
+ _1 = const 5_i32;
+ _2 = &_1;
+ goto -> bb2;
}
bb2: {
- _5 = (*_2); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _0 = opaque::<i32>(_5) -> bb3; // scope 0 at $DIR/reference_prop.rs:+16:13: +16:38
- // mir::Constant
- // + span: $DIR/reference_prop.rs:455:28: 455:34
- // + literal: Const { ty: fn(i32) {opaque::<i32>}, val: Value(<ZST>) }
+ _5 = (*_2);
+ _0 = opaque::<i32>(_5) -> [return: bb3, unwind continue];
}
bb3: {
- StorageDead(_1); // scope 0 at $DIR/reference_prop.rs:+19:13: +19:27
- StorageLive(_1); // scope 0 at $DIR/reference_prop.rs:+20:13: +20:27
- _6 = const true; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- switchInt(_6) -> [0: bb3, otherwise: bb1]; // scope 0 at $DIR/reference_prop.rs:+22:13: +22:47
+ StorageDead(_1);
+ StorageLive(_1);
+ _6 = const true;
+ switchInt(_6) -> [0: bb3, otherwise: bb1];
}
}
diff --git a/tests/mir-opt/reference_prop.maybe_dead.ReferencePropagation.diff b/tests/mir-opt/reference_prop.maybe_dead.ReferencePropagation.diff
index 38ab16ced..c6bd6c212 100644
--- a/tests/mir-opt/reference_prop.maybe_dead.ReferencePropagation.diff
+++ b/tests/mir-opt/reference_prop.maybe_dead.ReferencePropagation.diff
@@ -2,55 +2,46 @@
+ // MIR for `maybe_dead` after ReferencePropagation
fn maybe_dead(_1: bool) -> () {
- let mut _0: (); // return place in scope 0 at $DIR/reference_prop.rs:+0:24: +0:24
- let mut _2: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _4: &i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _5: &mut i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _6: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _7: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _8: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: ();
+ let mut _2: i32;
+ let mut _3: i32;
+ let mut _4: &i32;
+ let mut _5: &mut i32;
+ let mut _6: i32;
+ let mut _7: i32;
+ let mut _8: i32;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/reference_prop.rs:+7:13: +7:27
- StorageLive(_3); // scope 0 at $DIR/reference_prop.rs:+8:13: +8:27
- _2 = const 5_i32; // scope 0 at $DIR/reference_prop.rs:+9:13: +9:18
- _3 = const 5_i32; // scope 0 at $DIR/reference_prop.rs:+10:13: +10:18
- _4 = &_2; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _5 = &mut _3; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- (*_5) = const 7_i32; // scope 0 at $DIR/reference_prop.rs:+14:13: +14:19
-- _6 = (*_4); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
-+ _6 = _2; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- switchInt(_1) -> [1: bb1, otherwise: bb2]; // scope 0 at $DIR/reference_prop.rs:+17:13: +17:46
+ StorageLive(_2);
+ StorageLive(_3);
+ _2 = const 5_i32;
+ _3 = const 5_i32;
+ _4 = &_2;
+ _5 = &mut _3;
+ (*_5) = const 7_i32;
+- _6 = (*_4);
++ _6 = _2;
+ switchInt(_1) -> [1: bb1, otherwise: bb2];
}
bb1: {
- StorageDead(_2); // scope 0 at $DIR/reference_prop.rs:+20:13: +20:27
- StorageDead(_3); // scope 0 at $DIR/reference_prop.rs:+21:13: +21:27
- _0 = opaque::<i32>(_6) -> bb2; // scope 0 at $DIR/reference_prop.rs:+22:13: +22:38
- // mir::Constant
- // + span: $DIR/reference_prop.rs:489:28: 489:34
- // + literal: Const { ty: fn(i32) {opaque::<i32>}, val: Value(<ZST>) }
+ StorageDead(_2);
+ StorageDead(_3);
+ _0 = opaque::<i32>(_6) -> [return: bb2, unwind continue];
}
bb2: {
- _7 = (*_4); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _0 = opaque::<i32>(_7) -> bb3; // scope 0 at $DIR/reference_prop.rs:+27:13: +27:38
- // mir::Constant
- // + span: $DIR/reference_prop.rs:494:28: 494:34
- // + literal: Const { ty: fn(i32) {opaque::<i32>}, val: Value(<ZST>) }
+ _7 = (*_4);
+ _0 = opaque::<i32>(_7) -> [return: bb3, unwind continue];
}
bb3: {
- _8 = (*_5); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _0 = opaque::<i32>(_8) -> bb4; // scope 0 at $DIR/reference_prop.rs:+33:13: +33:43
- // mir::Constant
- // + span: $DIR/reference_prop.rs:500:33: 500:39
- // + literal: Const { ty: fn(i32) {opaque::<i32>}, val: Value(<ZST>) }
+ _8 = (*_5);
+ _0 = opaque::<i32>(_8) -> [return: bb4, unwind continue];
}
bb4: {
- return; // scope 0 at $DIR/reference_prop.rs:+36:13: +36:21
+ return;
}
}
diff --git a/tests/mir-opt/reference_prop.multiple_storage.ReferencePropagation.diff b/tests/mir-opt/reference_prop.multiple_storage.ReferencePropagation.diff
index 6e4517868..0fd74155a 100644
--- a/tests/mir-opt/reference_prop.multiple_storage.ReferencePropagation.diff
+++ b/tests/mir-opt/reference_prop.multiple_storage.ReferencePropagation.diff
@@ -2,26 +2,23 @@
+ // MIR for `multiple_storage` after ReferencePropagation
fn multiple_storage() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/reference_prop.rs:+0:23: +0:23
- let mut _1: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _2: &i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: i32; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _2: &i32;
+ let mut _3: i32;
bb0: {
- StorageLive(_1); // scope 0 at $DIR/reference_prop.rs:+6:13: +6:27
- _1 = const 5_i32; // scope 0 at $DIR/reference_prop.rs:+7:13: +7:18
- _2 = &_1; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- StorageDead(_1); // scope 0 at $DIR/reference_prop.rs:+9:13: +9:27
- StorageLive(_1); // scope 0 at $DIR/reference_prop.rs:+10:13: +10:27
- _3 = (*_2); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- _0 = opaque::<i32>(_3) -> bb1; // scope 0 at $DIR/reference_prop.rs:+14:13: +14:43
- // mir::Constant
- // + span: $DIR/reference_prop.rs:429:33: 429:39
- // + literal: Const { ty: fn(i32) {opaque::<i32>}, val: Value(<ZST>) }
+ StorageLive(_1);
+ _1 = const 5_i32;
+ _2 = &_1;
+ StorageDead(_1);
+ StorageLive(_1);
+ _3 = (*_2);
+ _0 = opaque::<i32>(_3) -> [return: bb1, unwind continue];
}
bb1: {
- return; // scope 0 at $DIR/reference_prop.rs:+18:13: +18:21
+ return;
}
}
diff --git a/tests/mir-opt/reference_prop.mut_raw_then_mut_shr.ReferencePropagation.diff b/tests/mir-opt/reference_prop.mut_raw_then_mut_shr.ReferencePropagation.diff
index d99e11035..9ec8f9d78 100644
--- a/tests/mir-opt/reference_prop.mut_raw_then_mut_shr.ReferencePropagation.diff
+++ b/tests/mir-opt/reference_prop.mut_raw_then_mut_shr.ReferencePropagation.diff
@@ -2,30 +2,30 @@
+ // MIR for `mut_raw_then_mut_shr` after ReferencePropagation
fn mut_raw_then_mut_shr() -> (i32, i32) {
- let mut _0: (i32, i32); // return place in scope 0 at $DIR/reference_prop.rs:+0:30: +0:40
- let mut _1: i32; // in scope 0 at $DIR/reference_prop.rs:+1:9: +1:14
- let mut _4: *mut i32; // in scope 0 at $DIR/reference_prop.rs:+3:16: +3:36
- let mut _5: &mut i32; // in scope 0 at $DIR/reference_prop.rs:+3:16: +3:26
- let _8: (); // in scope 0 at $DIR/reference_prop.rs:+7:5: +7:26
- let mut _9: i32; // in scope 0 at $DIR/reference_prop.rs:+8:6: +8:7
- let mut _10: i32; // in scope 0 at $DIR/reference_prop.rs:+8:9: +8:10
+ let mut _0: (i32, i32);
+ let mut _1: i32;
+ let mut _4: *mut i32;
+ let mut _5: &mut i32;
+ let _8: ();
+ let mut _9: i32;
+ let mut _10: i32;
scope 1 {
- debug x => _1; // in scope 1 at $DIR/reference_prop.rs:+1:9: +1:14
- let _2: &mut i32; // in scope 1 at $DIR/reference_prop.rs:+2:9: +2:13
+ debug x => _1;
+ let _2: &mut i32;
scope 2 {
-- debug xref => _2; // in scope 2 at $DIR/reference_prop.rs:+2:9: +2:13
-+ debug xref => &_1; // in scope 2 at $DIR/reference_prop.rs:+2:9: +2:13
- let _3: *mut i32; // in scope 2 at $DIR/reference_prop.rs:+3:9: +3:13
+- debug xref => _2;
++ debug xref => &_1;
+ let _3: *mut i32;
scope 3 {
-- debug xraw => _3; // in scope 3 at $DIR/reference_prop.rs:+3:9: +3:13
-+ debug xraw => &_1; // in scope 3 at $DIR/reference_prop.rs:+3:9: +3:13
- let _6: &i32; // in scope 3 at $DIR/reference_prop.rs:+4:9: +4:13
+- debug xraw => _3;
++ debug xraw => &_1;
+ let _6: &i32;
scope 4 {
-- debug xshr => _6; // in scope 4 at $DIR/reference_prop.rs:+4:9: +4:13
-+ debug xshr => &_1; // in scope 4 at $DIR/reference_prop.rs:+4:9: +4:13
- let _7: i32; // in scope 4 at $DIR/reference_prop.rs:+6:9: +6:10
+- debug xshr => _6;
++ debug xshr => &_1;
+ let _7: i32;
scope 5 {
- debug a => _7; // in scope 5 at $DIR/reference_prop.rs:+6:9: +6:10
+ debug a => _7;
scope 6 {
}
}
@@ -35,41 +35,41 @@
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/reference_prop.rs:+1:9: +1:14
- _1 = const 2_i32; // scope 0 at $DIR/reference_prop.rs:+1:17: +1:18
-- StorageLive(_2); // scope 1 at $DIR/reference_prop.rs:+2:9: +2:13
-- _2 = &mut _1; // scope 1 at $DIR/reference_prop.rs:+2:16: +2:22
-- StorageLive(_3); // scope 2 at $DIR/reference_prop.rs:+3:9: +3:13
-- StorageLive(_4); // scope 2 at $DIR/reference_prop.rs:+3:16: +3:36
-- StorageLive(_5); // scope 2 at $DIR/reference_prop.rs:+3:16: +3:26
-- _5 = &mut (*_2); // scope 2 at $DIR/reference_prop.rs:+3:16: +3:26
-- _4 = &raw mut (*_5); // scope 2 at $DIR/reference_prop.rs:+3:16: +3:26
-- _3 = _4; // scope 2 at $DIR/reference_prop.rs:+3:16: +3:36
-- StorageDead(_5); // scope 2 at $DIR/reference_prop.rs:+3:36: +3:37
-- StorageDead(_4); // scope 2 at $DIR/reference_prop.rs:+3:36: +3:37
-- StorageLive(_6); // scope 3 at $DIR/reference_prop.rs:+4:9: +4:13
-- _6 = &(*_2); // scope 3 at $DIR/reference_prop.rs:+4:16: +4:22
- StorageLive(_7); // scope 4 at $DIR/reference_prop.rs:+6:9: +6:10
-- _7 = (*_6); // scope 4 at $DIR/reference_prop.rs:+6:13: +6:18
-- StorageLive(_8); // scope 5 at $DIR/reference_prop.rs:+7:5: +7:26
-- (*_3) = const 4_i32; // scope 6 at $DIR/reference_prop.rs:+7:14: +7:23
-- _8 = const (); // scope 6 at $DIR/reference_prop.rs:+7:5: +7:26
-- StorageDead(_8); // scope 5 at $DIR/reference_prop.rs:+7:25: +7:26
-+ _7 = _1; // scope 4 at $DIR/reference_prop.rs:+6:13: +6:18
-+ _1 = const 4_i32; // scope 6 at $DIR/reference_prop.rs:+7:14: +7:23
- StorageLive(_9); // scope 5 at $DIR/reference_prop.rs:+8:6: +8:7
- _9 = _7; // scope 5 at $DIR/reference_prop.rs:+8:6: +8:7
- StorageLive(_10); // scope 5 at $DIR/reference_prop.rs:+8:9: +8:10
- _10 = _1; // scope 5 at $DIR/reference_prop.rs:+8:9: +8:10
- _0 = (move _9, move _10); // scope 5 at $DIR/reference_prop.rs:+8:5: +8:11
- StorageDead(_10); // scope 5 at $DIR/reference_prop.rs:+8:10: +8:11
- StorageDead(_9); // scope 5 at $DIR/reference_prop.rs:+8:10: +8:11
- StorageDead(_7); // scope 4 at $DIR/reference_prop.rs:+9:1: +9:2
-- StorageDead(_6); // scope 3 at $DIR/reference_prop.rs:+9:1: +9:2
-- StorageDead(_3); // scope 2 at $DIR/reference_prop.rs:+9:1: +9:2
-- StorageDead(_2); // scope 1 at $DIR/reference_prop.rs:+9:1: +9:2
- StorageDead(_1); // scope 0 at $DIR/reference_prop.rs:+9:1: +9:2
- return; // scope 0 at $DIR/reference_prop.rs:+9:2: +9:2
+ StorageLive(_1);
+ _1 = const 2_i32;
+- StorageLive(_2);
+- _2 = &mut _1;
+- StorageLive(_3);
+- StorageLive(_4);
+- StorageLive(_5);
+- _5 = &mut (*_2);
+- _4 = &raw mut (*_5);
+- _3 = _4;
+- StorageDead(_5);
+- StorageDead(_4);
+- StorageLive(_6);
+- _6 = &(*_2);
+ StorageLive(_7);
+- _7 = (*_6);
+- StorageLive(_8);
+- (*_3) = const 4_i32;
+- _8 = const ();
+- StorageDead(_8);
++ _7 = _1;
++ _1 = const 4_i32;
+ StorageLive(_9);
+ _9 = _7;
+ StorageLive(_10);
+ _10 = _1;
+ _0 = (move _9, move _10);
+ StorageDead(_10);
+ StorageDead(_9);
+ StorageDead(_7);
+- StorageDead(_6);
+- StorageDead(_3);
+- StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/reference_prop.read_through_raw.ReferencePropagation.diff b/tests/mir-opt/reference_prop.read_through_raw.ReferencePropagation.diff
index 75c1f8f57..371b0e468 100644
--- a/tests/mir-opt/reference_prop.read_through_raw.ReferencePropagation.diff
+++ b/tests/mir-opt/reference_prop.read_through_raw.ReferencePropagation.diff
@@ -2,22 +2,22 @@
+ // MIR for `read_through_raw` after ReferencePropagation
fn read_through_raw(_1: &mut usize) -> usize {
- let mut _0: usize; // return place in scope 0 at $DIR/reference_prop.rs:+0:39: +0:44
- let mut _2: &mut usize; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _3: &mut usize; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _4: *mut usize; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
- let mut _5: *mut usize; // in scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL
+ let mut _0: usize;
+ let mut _2: &mut usize;
+ let mut _3: &mut usize;
+ let mut _4: *mut usize;
+ let mut _5: *mut usize;
bb0: {
-- _2 = &mut (*_1); // scope 0 at $DIR/reference_prop.rs:+10:13: +10:25
-- _3 = &mut (*_2); // scope 0 at $DIR/reference_prop.rs:+11:13: +11:26
-- _4 = &raw mut (*_2); // scope 0 at $DIR/reference_prop.rs:+12:13: +12:30
-- _5 = &raw mut (*_3); // scope 0 at $DIR/reference_prop.rs:+13:13: +13:30
-- _0 = (*_4); // scope 0 at $DIR/reference_prop.rs:+15:13: +15:22
-- _0 = (*_5); // scope 0 at $DIR/reference_prop.rs:+16:13: +16:22
-+ _0 = (*_1); // scope 0 at $DIR/reference_prop.rs:+15:13: +15:22
-+ _0 = (*_1); // scope 0 at $DIR/reference_prop.rs:+16:13: +16:22
- return; // scope 0 at $DIR/reference_prop.rs:+17:13: +17:21
+- _2 = &mut (*_1);
+- _3 = &mut (*_2);
+- _4 = &raw mut (*_2);
+- _5 = &raw mut (*_3);
+- _0 = (*_4);
+- _0 = (*_5);
++ _0 = (*_1);
++ _0 = (*_1);
+ return;
}
}
diff --git a/tests/mir-opt/reference_prop.reference_propagation.ReferencePropagation.diff b/tests/mir-opt/reference_prop.reference_propagation.ReferencePropagation.diff
index 7b31ee695..f1f77cffd 100644
--- a/tests/mir-opt/reference_prop.reference_propagation.ReferencePropagation.diff
+++ b/tests/mir-opt/reference_prop.reference_propagation.ReferencePropagation.diff
@@ -2,137 +2,137 @@
+ // MIR for `reference_propagation` after ReferencePropagation
fn reference_propagation(_1: &T, _2: &T) -> () {
- debug single => _1; // in scope 0 at $DIR/reference_prop.rs:+0:39: +0:45
- debug multiple => _2; // in scope 0 at $DIR/reference_prop.rs:+0:54: +0:66
- let mut _0: (); // return place in scope 0 at $DIR/reference_prop.rs:+0:75: +0:75
- let _3: (); // in scope 0 at $DIR/reference_prop.rs:+2:5: +7:6
- let _4: usize; // in scope 0 at $DIR/reference_prop.rs:+3:13: +3:14
- let _7: (); // in scope 0 at $DIR/reference_prop.rs:+6:9: +6:19
- let mut _8: (); // in scope 0 at $DIR/reference_prop.rs:+6:16: +6:18
- let _9: (); // in scope 0 at $DIR/reference_prop.rs:+10:5: +18:6
- let _10: usize; // in scope 0 at $DIR/reference_prop.rs:+11:13: +11:14
- let mut _13: &usize; // in scope 0 at $DIR/reference_prop.rs:+14:13: +14:16
- let _14: &usize; // in scope 0 at $DIR/reference_prop.rs:+14:13: +14:16
- let _16: (); // in scope 0 at $DIR/reference_prop.rs:+17:9: +17:19
- let mut _17: (); // in scope 0 at $DIR/reference_prop.rs:+17:16: +17:18
- let _18: (); // in scope 0 at $DIR/reference_prop.rs:+21:5: +27:6
- let _19: usize; // in scope 0 at $DIR/reference_prop.rs:+22:13: +22:14
- let _23: (); // in scope 0 at $DIR/reference_prop.rs:+26:9: +26:18
- let mut _24: &&usize; // in scope 0 at $DIR/reference_prop.rs:+26:16: +26:17
- let _25: (); // in scope 0 at $DIR/reference_prop.rs:+30:5: +36:6
- let _26: usize; // in scope 0 at $DIR/reference_prop.rs:+31:13: +31:14
- let _30: (); // in scope 0 at $DIR/reference_prop.rs:+35:9: +35:18
- let mut _31: *mut &usize; // in scope 0 at $DIR/reference_prop.rs:+35:16: +35:17
- let _32: (); // in scope 0 at $DIR/reference_prop.rs:+39:5: +44:6
- let _33: usize; // in scope 0 at $DIR/reference_prop.rs:+40:13: +40:14
- let _36: (); // in scope 0 at $DIR/reference_prop.rs:+43:9: +43:18
- let mut _37: &usize; // in scope 0 at $DIR/reference_prop.rs:+43:16: +43:17
- let _38: (); // in scope 0 at $DIR/reference_prop.rs:+47:5: +57:6
- let _39: usize; // in scope 0 at $DIR/reference_prop.rs:+48:13: +48:14
- let _45: (); // in scope 0 at $DIR/reference_prop.rs:+56:9: +56:19
- let mut _46: &usize; // in scope 0 at $DIR/reference_prop.rs:+56:16: +56:18
- let _47: (); // in scope 0 at $DIR/reference_prop.rs:+60:5: +64:6
- let _48: &T; // in scope 0 at $DIR/reference_prop.rs:+61:13: +61:14
- let _50: (); // in scope 0 at $DIR/reference_prop.rs:+63:9: +63:19
- let mut _51: (); // in scope 0 at $DIR/reference_prop.rs:+63:16: +63:18
- let _52: (); // in scope 0 at $DIR/reference_prop.rs:+67:5: +72:6
- let _53: &T; // in scope 0 at $DIR/reference_prop.rs:+68:13: +68:14
- let mut _54: &T; // in scope 0 at $DIR/reference_prop.rs:+69:20: +69:28
- let _55: &T; // in scope 0 at $DIR/reference_prop.rs:+69:20: +69:28
- let _57: (); // in scope 0 at $DIR/reference_prop.rs:+71:9: +71:19
- let mut _58: (); // in scope 0 at $DIR/reference_prop.rs:+71:16: +71:18
- let _59: (); // in scope 0 at $DIR/reference_prop.rs:+75:5: +81:6
- let _60: usize; // in scope 0 at $DIR/reference_prop.rs:+76:13: +76:14
- let _64: (); // in scope 0 at $DIR/reference_prop.rs:+80:9: +80:19
- let mut _65: (); // in scope 0 at $DIR/reference_prop.rs:+80:16: +80:18
- let _66: usize; // in scope 0 at $DIR/reference_prop.rs:+85:13: +85:14
- let _70: (); // in scope 0 at $DIR/reference_prop.rs:+89:9: +89:19
- let mut _71: (); // in scope 0 at $DIR/reference_prop.rs:+89:16: +89:18
+ debug single => _1;
+ debug multiple => _2;
+ let mut _0: ();
+ let _3: ();
+ let _4: usize;
+ let _7: ();
+ let mut _8: ();
+ let _9: ();
+ let _10: usize;
+ let mut _13: &usize;
+ let _14: &usize;
+ let _16: ();
+ let mut _17: ();
+ let _18: ();
+ let _19: usize;
+ let _23: ();
+ let mut _24: &&usize;
+ let _25: ();
+ let _26: usize;
+ let _30: ();
+ let mut _31: *mut &usize;
+ let _32: ();
+ let _33: usize;
+ let _36: ();
+ let mut _37: &usize;
+ let _38: ();
+ let _39: usize;
+ let _45: ();
+ let mut _46: &usize;
+ let _47: ();
+ let _48: &T;
+ let _50: ();
+ let mut _51: ();
+ let _52: ();
+ let _53: &T;
+ let mut _54: &T;
+ let _55: &T;
+ let _57: ();
+ let mut _58: ();
+ let _59: ();
+ let _60: usize;
+ let _64: ();
+ let mut _65: ();
+ let _66: usize;
+ let _70: ();
+ let mut _71: ();
scope 1 {
- debug a => _4; // in scope 1 at $DIR/reference_prop.rs:+3:13: +3:14
- let _5: &usize; // in scope 1 at $DIR/reference_prop.rs:+4:13: +4:14
+ debug a => _4;
+ let _5: &usize;
scope 2 {
-- debug b => _5; // in scope 2 at $DIR/reference_prop.rs:+4:13: +4:14
-+ debug b => &_4; // in scope 2 at $DIR/reference_prop.rs:+4:13: +4:14
- let _6: usize; // in scope 2 at $DIR/reference_prop.rs:+5:13: +5:14
+- debug b => _5;
++ debug b => &_4;
+ let _6: usize;
scope 3 {
- debug c => _6; // in scope 3 at $DIR/reference_prop.rs:+5:13: +5:14
+ debug c => _6;
}
}
}
scope 4 {
- debug a => _10; // in scope 4 at $DIR/reference_prop.rs:+11:13: +11:14
- let _11: usize; // in scope 4 at $DIR/reference_prop.rs:+12:13: +12:15
+ debug a => _10;
+ let _11: usize;
scope 5 {
- debug a2 => _11; // in scope 5 at $DIR/reference_prop.rs:+12:13: +12:15
- let mut _12: &usize; // in scope 5 at $DIR/reference_prop.rs:+13:13: +13:18
+ debug a2 => _11;
+ let mut _12: &usize;
scope 6 {
- debug b => _12; // in scope 6 at $DIR/reference_prop.rs:+13:13: +13:18
- let _15: usize; // in scope 6 at $DIR/reference_prop.rs:+16:13: +16:14
+ debug b => _12;
+ let _15: usize;
scope 7 {
- debug c => _15; // in scope 7 at $DIR/reference_prop.rs:+16:13: +16:14
+ debug c => _15;
}
}
}
}
scope 8 {
- debug a => _19; // in scope 8 at $DIR/reference_prop.rs:+22:13: +22:14
- let _20: &usize; // in scope 8 at $DIR/reference_prop.rs:+23:13: +23:14
+ debug a => _19;
+ let _20: &usize;
scope 9 {
- debug b => _20; // in scope 9 at $DIR/reference_prop.rs:+23:13: +23:14
- let _21: &&usize; // in scope 9 at $DIR/reference_prop.rs:+24:13: +24:14
+ debug b => _20;
+ let _21: &&usize;
scope 10 {
- debug d => _21; // in scope 10 at $DIR/reference_prop.rs:+24:13: +24:14
- let _22: usize; // in scope 10 at $DIR/reference_prop.rs:+25:13: +25:14
+ debug d => _21;
+ let _22: usize;
scope 11 {
- debug c => _22; // in scope 11 at $DIR/reference_prop.rs:+25:13: +25:14
+ debug c => _22;
}
}
}
}
scope 12 {
- debug a => _26; // in scope 12 at $DIR/reference_prop.rs:+31:13: +31:14
- let mut _27: &usize; // in scope 12 at $DIR/reference_prop.rs:+32:13: +32:18
+ debug a => _26;
+ let mut _27: &usize;
scope 13 {
- debug b => _27; // in scope 13 at $DIR/reference_prop.rs:+32:13: +32:18
- let _28: *mut &usize; // in scope 13 at $DIR/reference_prop.rs:+33:13: +33:14
+ debug b => _27;
+ let _28: *mut &usize;
scope 14 {
- debug d => _28; // in scope 14 at $DIR/reference_prop.rs:+33:13: +33:14
- let _29: usize; // in scope 14 at $DIR/reference_prop.rs:+34:13: +34:14
+ debug d => _28;
+ let _29: usize;
scope 15 {
- debug c => _29; // in scope 15 at $DIR/reference_prop.rs:+34:13: +34:14
+ debug c => _29;
}
}
}
}
scope 16 {
- debug a => _33; // in scope 16 at $DIR/reference_prop.rs:+40:13: +40:14
- let _34: &usize; // in scope 16 at $DIR/reference_prop.rs:+41:13: +41:14
+ debug a => _33;
+ let _34: &usize;
scope 17 {
- debug b => _34; // in scope 17 at $DIR/reference_prop.rs:+41:13: +41:14
- let _35: usize; // in scope 17 at $DIR/reference_prop.rs:+42:13: +42:14
+ debug b => _34;
+ let _35: usize;
scope 18 {
- debug c => _35; // in scope 18 at $DIR/reference_prop.rs:+42:13: +42:14
+ debug c => _35;
}
}
}
scope 19 {
- debug a => _39; // in scope 19 at $DIR/reference_prop.rs:+48:13: +48:14
- let _40: &usize; // in scope 19 at $DIR/reference_prop.rs:+49:13: +49:15
+ debug a => _39;
+ let _40: &usize;
scope 20 {
- debug b1 => _40; // in scope 20 at $DIR/reference_prop.rs:+49:13: +49:15
- let _41: usize; // in scope 20 at $DIR/reference_prop.rs:+50:13: +50:14
+ debug b1 => _40;
+ let _41: usize;
scope 21 {
- debug c => _41; // in scope 21 at $DIR/reference_prop.rs:+50:13: +50:14
- let _42: &usize; // in scope 21 at $DIR/reference_prop.rs:+51:13: +51:15
+ debug c => _41;
+ let _42: &usize;
scope 22 {
- debug b2 => _42; // in scope 22 at $DIR/reference_prop.rs:+51:13: +51:15
- let _43: usize; // in scope 22 at $DIR/reference_prop.rs:+52:13: +52:15
+ debug b2 => _42;
+ let _43: usize;
scope 23 {
- debug c2 => _43; // in scope 23 at $DIR/reference_prop.rs:+52:13: +52:15
- let _44: &usize; // in scope 23 at $DIR/reference_prop.rs:+53:13: +53:15
+ debug c2 => _43;
+ let _44: &usize;
scope 24 {
- debug b3 => _44; // in scope 24 at $DIR/reference_prop.rs:+53:13: +53:15
+ debug b3 => _44;
}
}
}
@@ -140,336 +140,306 @@
}
}
scope 25 {
-- debug a => _48; // in scope 25 at $DIR/reference_prop.rs:+61:13: +61:14
-+ debug a => _1; // in scope 25 at $DIR/reference_prop.rs:+61:13: +61:14
- let _49: T; // in scope 25 at $DIR/reference_prop.rs:+62:13: +62:14
+- debug a => _48;
++ debug a => _1;
+ let _49: T;
scope 26 {
- debug b => _49; // in scope 26 at $DIR/reference_prop.rs:+62:13: +62:14
+ debug b => _49;
}
}
scope 27 {
- debug a => _53; // in scope 27 at $DIR/reference_prop.rs:+68:13: +68:14
- let _56: T; // in scope 27 at $DIR/reference_prop.rs:+70:13: +70:14
+ debug a => _53;
+ let _56: T;
scope 28 {
- debug b => _56; // in scope 28 at $DIR/reference_prop.rs:+70:13: +70:14
+ debug b => _56;
}
}
scope 29 {
- debug a => _60; // in scope 29 at $DIR/reference_prop.rs:+76:13: +76:14
- let _61: &usize; // in scope 29 at $DIR/reference_prop.rs:+77:13: +77:14
+ debug a => _60;
+ let _61: &usize;
scope 30 {
-- debug b => _61; // in scope 30 at $DIR/reference_prop.rs:+77:13: +77:14
-+ debug b => &_60; // in scope 30 at $DIR/reference_prop.rs:+77:13: +77:14
- let _62: &&usize; // in scope 30 at $DIR/reference_prop.rs:+78:13: +78:14
+- debug b => _61;
++ debug b => &_60;
+ let _62: &&usize;
scope 31 {
-- debug d => _62; // in scope 31 at $DIR/reference_prop.rs:+78:13: +78:14
-+ debug d => &&_60; // in scope 31 at $DIR/reference_prop.rs:+78:13: +78:14
- let _63: usize; // in scope 31 at $DIR/reference_prop.rs:+79:13: +79:14
+- debug d => _62;
++ debug d => &&_60;
+ let _63: usize;
scope 32 {
- debug c => _63; // in scope 32 at $DIR/reference_prop.rs:+79:13: +79:14
+ debug c => _63;
}
}
}
}
scope 33 {
- debug a => _66; // in scope 33 at $DIR/reference_prop.rs:+85:13: +85:14
- let mut _67: &usize; // in scope 33 at $DIR/reference_prop.rs:+86:13: +86:18
+ debug a => _66;
+ let mut _67: &usize;
scope 34 {
-- debug b => _67; // in scope 34 at $DIR/reference_prop.rs:+86:13: +86:18
-+ debug b => &_66; // in scope 34 at $DIR/reference_prop.rs:+86:13: +86:18
- let _68: &mut &usize; // in scope 34 at $DIR/reference_prop.rs:+87:13: +87:14
+- debug b => _67;
++ debug b => &_66;
+ let _68: &mut &usize;
scope 35 {
-- debug d => _68; // in scope 35 at $DIR/reference_prop.rs:+87:13: +87:14
-+ debug d => &&_66; // in scope 35 at $DIR/reference_prop.rs:+87:13: +87:14
- let _69: usize; // in scope 35 at $DIR/reference_prop.rs:+88:13: +88:14
+- debug d => _68;
++ debug d => &&_66;
+ let _69: usize;
scope 36 {
- debug c => _69; // in scope 36 at $DIR/reference_prop.rs:+88:13: +88:14
+ debug c => _69;
}
}
}
}
bb0: {
-- StorageLive(_3); // scope 0 at $DIR/reference_prop.rs:+2:5: +7:6
- StorageLive(_4); // scope 0 at $DIR/reference_prop.rs:+3:13: +3:14
- _4 = const 5_usize; // scope 0 at $DIR/reference_prop.rs:+3:17: +3:24
-- StorageLive(_5); // scope 1 at $DIR/reference_prop.rs:+4:13: +4:14
-- _5 = &_4; // scope 1 at $DIR/reference_prop.rs:+4:17: +4:19
- StorageLive(_6); // scope 2 at $DIR/reference_prop.rs:+5:13: +5:14
-- _6 = (*_5); // scope 2 at $DIR/reference_prop.rs:+5:17: +5:19
-+ _6 = _4; // scope 2 at $DIR/reference_prop.rs:+5:17: +5:19
- StorageLive(_7); // scope 3 at $DIR/reference_prop.rs:+6:9: +6:19
- StorageLive(_8); // scope 3 at $DIR/reference_prop.rs:+6:16: +6:18
- _8 = (); // scope 3 at $DIR/reference_prop.rs:+6:16: +6:18
- _7 = opaque::<()>(move _8) -> bb1; // scope 3 at $DIR/reference_prop.rs:+6:9: +6:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:16:9: 16:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+- StorageLive(_3);
+ StorageLive(_4);
+ _4 = const 5_usize;
+- StorageLive(_5);
+- _5 = &_4;
+ StorageLive(_6);
+- _6 = (*_5);
++ _6 = _4;
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = ();
+ _7 = opaque::<()>(move _8) -> [return: bb1, unwind continue];
}
bb1: {
- StorageDead(_8); // scope 3 at $DIR/reference_prop.rs:+6:18: +6:19
- StorageDead(_7); // scope 3 at $DIR/reference_prop.rs:+6:19: +6:20
-- _3 = const (); // scope 0 at $DIR/reference_prop.rs:+2:5: +7:6
- StorageDead(_6); // scope 2 at $DIR/reference_prop.rs:+7:5: +7:6
-- StorageDead(_5); // scope 1 at $DIR/reference_prop.rs:+7:5: +7:6
- StorageDead(_4); // scope 0 at $DIR/reference_prop.rs:+7:5: +7:6
-- StorageDead(_3); // scope 0 at $DIR/reference_prop.rs:+7:5: +7:6
-- StorageLive(_9); // scope 0 at $DIR/reference_prop.rs:+10:5: +18:6
- StorageLive(_10); // scope 0 at $DIR/reference_prop.rs:+11:13: +11:14
- _10 = const 5_usize; // scope 0 at $DIR/reference_prop.rs:+11:17: +11:24
- StorageLive(_11); // scope 4 at $DIR/reference_prop.rs:+12:13: +12:15
- _11 = const 7_usize; // scope 4 at $DIR/reference_prop.rs:+12:18: +12:25
- StorageLive(_12); // scope 5 at $DIR/reference_prop.rs:+13:13: +13:18
- _12 = &_10; // scope 5 at $DIR/reference_prop.rs:+13:21: +13:23
- StorageLive(_13); // scope 6 at $DIR/reference_prop.rs:+14:13: +14:16
-- StorageLive(_14); // scope 6 at $DIR/reference_prop.rs:+14:13: +14:16
-- _14 = &_11; // scope 6 at $DIR/reference_prop.rs:+14:13: +14:16
-- _13 = &(*_14); // scope 6 at $DIR/reference_prop.rs:+14:13: +14:16
-+ _13 = &_11; // scope 6 at $DIR/reference_prop.rs:+14:13: +14:16
- _12 = move _13; // scope 6 at $DIR/reference_prop.rs:+14:9: +14:16
- StorageDead(_13); // scope 6 at $DIR/reference_prop.rs:+14:15: +14:16
-- StorageDead(_14); // scope 6 at $DIR/reference_prop.rs:+14:16: +14:17
- StorageLive(_15); // scope 6 at $DIR/reference_prop.rs:+16:13: +16:14
- _15 = (*_12); // scope 6 at $DIR/reference_prop.rs:+16:17: +16:19
- StorageLive(_16); // scope 7 at $DIR/reference_prop.rs:+17:9: +17:19
- StorageLive(_17); // scope 7 at $DIR/reference_prop.rs:+17:16: +17:18
- _17 = (); // scope 7 at $DIR/reference_prop.rs:+17:16: +17:18
- _16 = opaque::<()>(move _17) -> bb2; // scope 7 at $DIR/reference_prop.rs:+17:9: +17:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:27:9: 27:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_8);
+ StorageDead(_7);
+- _3 = const ();
+ StorageDead(_6);
+- StorageDead(_5);
+ StorageDead(_4);
+- StorageDead(_3);
+- StorageLive(_9);
+ StorageLive(_10);
+ _10 = const 5_usize;
+ StorageLive(_11);
+ _11 = const 7_usize;
+ StorageLive(_12);
+ _12 = &_10;
+ StorageLive(_13);
+- StorageLive(_14);
+- _14 = &_11;
+- _13 = &(*_14);
++ _13 = &_11;
+ _12 = move _13;
+ StorageDead(_13);
+- StorageDead(_14);
+ StorageLive(_15);
+ _15 = (*_12);
+ StorageLive(_16);
+ StorageLive(_17);
+ _17 = ();
+ _16 = opaque::<()>(move _17) -> [return: bb2, unwind continue];
}
bb2: {
- StorageDead(_17); // scope 7 at $DIR/reference_prop.rs:+17:18: +17:19
- StorageDead(_16); // scope 7 at $DIR/reference_prop.rs:+17:19: +17:20
-- _9 = const (); // scope 0 at $DIR/reference_prop.rs:+10:5: +18:6
- StorageDead(_15); // scope 6 at $DIR/reference_prop.rs:+18:5: +18:6
- StorageDead(_12); // scope 5 at $DIR/reference_prop.rs:+18:5: +18:6
- StorageDead(_11); // scope 4 at $DIR/reference_prop.rs:+18:5: +18:6
- StorageDead(_10); // scope 0 at $DIR/reference_prop.rs:+18:5: +18:6
-- StorageDead(_9); // scope 0 at $DIR/reference_prop.rs:+18:5: +18:6
-- StorageLive(_18); // scope 0 at $DIR/reference_prop.rs:+21:5: +27:6
- StorageLive(_19); // scope 0 at $DIR/reference_prop.rs:+22:13: +22:14
- _19 = const 5_usize; // scope 0 at $DIR/reference_prop.rs:+22:17: +22:24
- StorageLive(_20); // scope 8 at $DIR/reference_prop.rs:+23:13: +23:14
- _20 = &_19; // scope 8 at $DIR/reference_prop.rs:+23:17: +23:19
- StorageLive(_21); // scope 9 at $DIR/reference_prop.rs:+24:13: +24:14
- _21 = &_20; // scope 9 at $DIR/reference_prop.rs:+24:17: +24:19
- StorageLive(_22); // scope 10 at $DIR/reference_prop.rs:+25:13: +25:14
- _22 = (*_20); // scope 10 at $DIR/reference_prop.rs:+25:17: +25:19
- StorageLive(_23); // scope 11 at $DIR/reference_prop.rs:+26:9: +26:18
- StorageLive(_24); // scope 11 at $DIR/reference_prop.rs:+26:16: +26:17
- _24 = _21; // scope 11 at $DIR/reference_prop.rs:+26:16: +26:17
- _23 = opaque::<&&usize>(move _24) -> bb3; // scope 11 at $DIR/reference_prop.rs:+26:9: +26:18
- // mir::Constant
- // + span: $DIR/reference_prop.rs:36:9: 36:15
- // + literal: Const { ty: fn(&&usize) {opaque::<&&usize>}, val: Value(<ZST>) }
+ StorageDead(_17);
+ StorageDead(_16);
+- _9 = const ();
+ StorageDead(_15);
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_10);
+- StorageDead(_9);
+- StorageLive(_18);
+ StorageLive(_19);
+ _19 = const 5_usize;
+ StorageLive(_20);
+ _20 = &_19;
+ StorageLive(_21);
+ _21 = &_20;
+ StorageLive(_22);
+ _22 = (*_20);
+ StorageLive(_23);
+ StorageLive(_24);
+ _24 = _21;
+ _23 = opaque::<&&usize>(move _24) -> [return: bb3, unwind continue];
}
bb3: {
- StorageDead(_24); // scope 11 at $DIR/reference_prop.rs:+26:17: +26:18
- StorageDead(_23); // scope 11 at $DIR/reference_prop.rs:+26:18: +26:19
-- _18 = const (); // scope 0 at $DIR/reference_prop.rs:+21:5: +27:6
- StorageDead(_22); // scope 10 at $DIR/reference_prop.rs:+27:5: +27:6
- StorageDead(_21); // scope 9 at $DIR/reference_prop.rs:+27:5: +27:6
- StorageDead(_20); // scope 8 at $DIR/reference_prop.rs:+27:5: +27:6
- StorageDead(_19); // scope 0 at $DIR/reference_prop.rs:+27:5: +27:6
-- StorageDead(_18); // scope 0 at $DIR/reference_prop.rs:+27:5: +27:6
-- StorageLive(_25); // scope 0 at $DIR/reference_prop.rs:+30:5: +36:6
- StorageLive(_26); // scope 0 at $DIR/reference_prop.rs:+31:13: +31:14
- _26 = const 5_usize; // scope 0 at $DIR/reference_prop.rs:+31:17: +31:24
- StorageLive(_27); // scope 12 at $DIR/reference_prop.rs:+32:13: +32:18
- _27 = &_26; // scope 12 at $DIR/reference_prop.rs:+32:21: +32:23
- StorageLive(_28); // scope 13 at $DIR/reference_prop.rs:+33:13: +33:14
- _28 = &raw mut _27; // scope 13 at $DIR/reference_prop.rs:+33:17: +33:27
- StorageLive(_29); // scope 14 at $DIR/reference_prop.rs:+34:13: +34:14
- _29 = (*_27); // scope 14 at $DIR/reference_prop.rs:+34:17: +34:19
- StorageLive(_30); // scope 15 at $DIR/reference_prop.rs:+35:9: +35:18
- StorageLive(_31); // scope 15 at $DIR/reference_prop.rs:+35:16: +35:17
- _31 = _28; // scope 15 at $DIR/reference_prop.rs:+35:16: +35:17
- _30 = opaque::<*mut &usize>(move _31) -> bb4; // scope 15 at $DIR/reference_prop.rs:+35:9: +35:18
- // mir::Constant
- // + span: $DIR/reference_prop.rs:45:9: 45:15
- // + literal: Const { ty: fn(*mut &usize) {opaque::<*mut &usize>}, val: Value(<ZST>) }
+ StorageDead(_24);
+ StorageDead(_23);
+- _18 = const ();
+ StorageDead(_22);
+ StorageDead(_21);
+ StorageDead(_20);
+ StorageDead(_19);
+- StorageDead(_18);
+- StorageLive(_25);
+ StorageLive(_26);
+ _26 = const 5_usize;
+ StorageLive(_27);
+ _27 = &_26;
+ StorageLive(_28);
+ _28 = &raw mut _27;
+ StorageLive(_29);
+ _29 = (*_27);
+ StorageLive(_30);
+ StorageLive(_31);
+ _31 = _28;
+ _30 = opaque::<*mut &usize>(move _31) -> [return: bb4, unwind continue];
}
bb4: {
- StorageDead(_31); // scope 15 at $DIR/reference_prop.rs:+35:17: +35:18
- StorageDead(_30); // scope 15 at $DIR/reference_prop.rs:+35:18: +35:19
-- _25 = const (); // scope 0 at $DIR/reference_prop.rs:+30:5: +36:6
- StorageDead(_29); // scope 14 at $DIR/reference_prop.rs:+36:5: +36:6
- StorageDead(_28); // scope 13 at $DIR/reference_prop.rs:+36:5: +36:6
- StorageDead(_27); // scope 12 at $DIR/reference_prop.rs:+36:5: +36:6
- StorageDead(_26); // scope 0 at $DIR/reference_prop.rs:+36:5: +36:6
-- StorageDead(_25); // scope 0 at $DIR/reference_prop.rs:+36:5: +36:6
-- StorageLive(_32); // scope 0 at $DIR/reference_prop.rs:+39:5: +44:6
- StorageLive(_33); // scope 0 at $DIR/reference_prop.rs:+40:13: +40:14
- _33 = const 7_usize; // scope 0 at $DIR/reference_prop.rs:+40:17: +40:24
- StorageLive(_34); // scope 16 at $DIR/reference_prop.rs:+41:13: +41:14
- _34 = &_33; // scope 16 at $DIR/reference_prop.rs:+41:17: +41:19
- StorageLive(_35); // scope 17 at $DIR/reference_prop.rs:+42:13: +42:14
-- _35 = (*_34); // scope 17 at $DIR/reference_prop.rs:+42:17: +42:19
-+ _35 = _33; // scope 17 at $DIR/reference_prop.rs:+42:17: +42:19
- StorageLive(_36); // scope 18 at $DIR/reference_prop.rs:+43:9: +43:18
- StorageLive(_37); // scope 18 at $DIR/reference_prop.rs:+43:16: +43:17
- _37 = _34; // scope 18 at $DIR/reference_prop.rs:+43:16: +43:17
- _36 = opaque::<&usize>(move _37) -> bb5; // scope 18 at $DIR/reference_prop.rs:+43:9: +43:18
- // mir::Constant
- // + span: $DIR/reference_prop.rs:53:9: 53:15
- // + literal: Const { ty: fn(&usize) {opaque::<&usize>}, val: Value(<ZST>) }
+ StorageDead(_31);
+ StorageDead(_30);
+- _25 = const ();
+ StorageDead(_29);
+ StorageDead(_28);
+ StorageDead(_27);
+ StorageDead(_26);
+- StorageDead(_25);
+- StorageLive(_32);
+ StorageLive(_33);
+ _33 = const 7_usize;
+ StorageLive(_34);
+ _34 = &_33;
+ StorageLive(_35);
+- _35 = (*_34);
++ _35 = _33;
+ StorageLive(_36);
+ StorageLive(_37);
+ _37 = _34;
+ _36 = opaque::<&usize>(move _37) -> [return: bb5, unwind continue];
}
bb5: {
- StorageDead(_37); // scope 18 at $DIR/reference_prop.rs:+43:17: +43:18
- StorageDead(_36); // scope 18 at $DIR/reference_prop.rs:+43:18: +43:19
-- _32 = const (); // scope 0 at $DIR/reference_prop.rs:+39:5: +44:6
- StorageDead(_35); // scope 17 at $DIR/reference_prop.rs:+44:5: +44:6
- StorageDead(_34); // scope 16 at $DIR/reference_prop.rs:+44:5: +44:6
- StorageDead(_33); // scope 0 at $DIR/reference_prop.rs:+44:5: +44:6
-- StorageDead(_32); // scope 0 at $DIR/reference_prop.rs:+44:5: +44:6
-- StorageLive(_38); // scope 0 at $DIR/reference_prop.rs:+47:5: +57:6
- StorageLive(_39); // scope 0 at $DIR/reference_prop.rs:+48:13: +48:14
- _39 = const 7_usize; // scope 0 at $DIR/reference_prop.rs:+48:17: +48:24
- StorageLive(_40); // scope 19 at $DIR/reference_prop.rs:+49:13: +49:15
- _40 = &_39; // scope 19 at $DIR/reference_prop.rs:+49:18: +49:20
- StorageLive(_41); // scope 20 at $DIR/reference_prop.rs:+50:13: +50:14
-- _41 = (*_40); // scope 20 at $DIR/reference_prop.rs:+50:17: +50:20
-+ _41 = _39; // scope 20 at $DIR/reference_prop.rs:+50:17: +50:20
- StorageLive(_42); // scope 21 at $DIR/reference_prop.rs:+51:13: +51:15
- _42 = _40; // scope 21 at $DIR/reference_prop.rs:+51:18: +51:20
- StorageLive(_43); // scope 22 at $DIR/reference_prop.rs:+52:13: +52:15
-- _43 = (*_42); // scope 22 at $DIR/reference_prop.rs:+52:18: +52:21
-+ _43 = _39; // scope 22 at $DIR/reference_prop.rs:+52:18: +52:21
- StorageLive(_44); // scope 23 at $DIR/reference_prop.rs:+53:13: +53:15
- _44 = _42; // scope 23 at $DIR/reference_prop.rs:+53:18: +53:20
- StorageLive(_45); // scope 24 at $DIR/reference_prop.rs:+56:9: +56:19
- StorageLive(_46); // scope 24 at $DIR/reference_prop.rs:+56:16: +56:18
- _46 = _44; // scope 24 at $DIR/reference_prop.rs:+56:16: +56:18
- _45 = opaque::<&usize>(move _46) -> bb6; // scope 24 at $DIR/reference_prop.rs:+56:9: +56:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:66:9: 66:15
- // + literal: Const { ty: fn(&usize) {opaque::<&usize>}, val: Value(<ZST>) }
+ StorageDead(_37);
+ StorageDead(_36);
+- _32 = const ();
+ StorageDead(_35);
+ StorageDead(_34);
+ StorageDead(_33);
+- StorageDead(_32);
+- StorageLive(_38);
+ StorageLive(_39);
+ _39 = const 7_usize;
+ StorageLive(_40);
+ _40 = &_39;
+ StorageLive(_41);
+- _41 = (*_40);
++ _41 = _39;
+ StorageLive(_42);
+ _42 = _40;
+ StorageLive(_43);
+- _43 = (*_42);
++ _43 = _39;
+ StorageLive(_44);
+ _44 = _42;
+ StorageLive(_45);
+ StorageLive(_46);
+ _46 = _44;
+ _45 = opaque::<&usize>(move _46) -> [return: bb6, unwind continue];
}
bb6: {
- StorageDead(_46); // scope 24 at $DIR/reference_prop.rs:+56:18: +56:19
- StorageDead(_45); // scope 24 at $DIR/reference_prop.rs:+56:19: +56:20
-- _38 = const (); // scope 0 at $DIR/reference_prop.rs:+47:5: +57:6
- StorageDead(_44); // scope 23 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_43); // scope 22 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_42); // scope 21 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_41); // scope 20 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_40); // scope 19 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_39); // scope 0 at $DIR/reference_prop.rs:+57:5: +57:6
-- StorageDead(_38); // scope 0 at $DIR/reference_prop.rs:+57:5: +57:6
-- StorageLive(_47); // scope 0 at $DIR/reference_prop.rs:+60:5: +64:6
-- StorageLive(_48); // scope 0 at $DIR/reference_prop.rs:+61:13: +61:14
-- _48 = &(*_1); // scope 0 at $DIR/reference_prop.rs:+61:17: +61:25
- StorageLive(_49); // scope 25 at $DIR/reference_prop.rs:+62:13: +62:14
-- _49 = (*_48); // scope 25 at $DIR/reference_prop.rs:+62:17: +62:19
-+ _49 = (*_1); // scope 25 at $DIR/reference_prop.rs:+62:17: +62:19
- StorageLive(_50); // scope 26 at $DIR/reference_prop.rs:+63:9: +63:19
- StorageLive(_51); // scope 26 at $DIR/reference_prop.rs:+63:16: +63:18
- _51 = (); // scope 26 at $DIR/reference_prop.rs:+63:16: +63:18
- _50 = opaque::<()>(move _51) -> bb7; // scope 26 at $DIR/reference_prop.rs:+63:9: +63:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:73:9: 73:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_46);
+ StorageDead(_45);
+- _38 = const ();
+ StorageDead(_44);
+ StorageDead(_43);
+ StorageDead(_42);
+ StorageDead(_41);
+ StorageDead(_40);
+ StorageDead(_39);
+- StorageDead(_38);
+- StorageLive(_47);
+- StorageLive(_48);
+- _48 = &(*_1);
+ StorageLive(_49);
+- _49 = (*_48);
++ _49 = (*_1);
+ StorageLive(_50);
+ StorageLive(_51);
+ _51 = ();
+ _50 = opaque::<()>(move _51) -> [return: bb7, unwind continue];
}
bb7: {
- StorageDead(_51); // scope 26 at $DIR/reference_prop.rs:+63:18: +63:19
- StorageDead(_50); // scope 26 at $DIR/reference_prop.rs:+63:19: +63:20
-- _47 = const (); // scope 0 at $DIR/reference_prop.rs:+60:5: +64:6
- StorageDead(_49); // scope 25 at $DIR/reference_prop.rs:+64:5: +64:6
-- StorageDead(_48); // scope 0 at $DIR/reference_prop.rs:+64:5: +64:6
-- StorageDead(_47); // scope 0 at $DIR/reference_prop.rs:+64:5: +64:6
-- StorageLive(_52); // scope 0 at $DIR/reference_prop.rs:+67:5: +72:6
- StorageLive(_53); // scope 0 at $DIR/reference_prop.rs:+68:13: +68:14
- _53 = &(*_2); // scope 0 at $DIR/reference_prop.rs:+68:17: +68:27
- StorageLive(_54); // scope 27 at $DIR/reference_prop.rs:+69:20: +69:28
-- StorageLive(_55); // scope 27 at $DIR/reference_prop.rs:+69:20: +69:28
-- _55 = &(*_1); // scope 27 at $DIR/reference_prop.rs:+69:20: +69:28
-- _54 = &(*_55); // scope 27 at $DIR/reference_prop.rs:+69:20: +69:28
-+ _54 = &(*_1); // scope 27 at $DIR/reference_prop.rs:+69:20: +69:28
- _2 = move _54; // scope 27 at $DIR/reference_prop.rs:+69:9: +69:28
- StorageDead(_54); // scope 27 at $DIR/reference_prop.rs:+69:27: +69:28
-- StorageDead(_55); // scope 27 at $DIR/reference_prop.rs:+69:28: +69:29
- StorageLive(_56); // scope 27 at $DIR/reference_prop.rs:+70:13: +70:14
- _56 = (*_53); // scope 27 at $DIR/reference_prop.rs:+70:17: +70:19
- StorageLive(_57); // scope 28 at $DIR/reference_prop.rs:+71:9: +71:19
- StorageLive(_58); // scope 28 at $DIR/reference_prop.rs:+71:16: +71:18
- _58 = (); // scope 28 at $DIR/reference_prop.rs:+71:16: +71:18
- _57 = opaque::<()>(move _58) -> bb8; // scope 28 at $DIR/reference_prop.rs:+71:9: +71:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:81:9: 81:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_51);
+ StorageDead(_50);
+- _47 = const ();
+ StorageDead(_49);
+- StorageDead(_48);
+- StorageDead(_47);
+- StorageLive(_52);
+ StorageLive(_53);
+ _53 = &(*_2);
+ StorageLive(_54);
+- StorageLive(_55);
+- _55 = &(*_1);
+- _54 = &(*_55);
++ _54 = &(*_1);
+ _2 = move _54;
+ StorageDead(_54);
+- StorageDead(_55);
+ StorageLive(_56);
+ _56 = (*_53);
+ StorageLive(_57);
+ StorageLive(_58);
+ _58 = ();
+ _57 = opaque::<()>(move _58) -> [return: bb8, unwind continue];
}
bb8: {
- StorageDead(_58); // scope 28 at $DIR/reference_prop.rs:+71:18: +71:19
- StorageDead(_57); // scope 28 at $DIR/reference_prop.rs:+71:19: +71:20
-- _52 = const (); // scope 0 at $DIR/reference_prop.rs:+67:5: +72:6
- StorageDead(_56); // scope 27 at $DIR/reference_prop.rs:+72:5: +72:6
- StorageDead(_53); // scope 0 at $DIR/reference_prop.rs:+72:5: +72:6
-- StorageDead(_52); // scope 0 at $DIR/reference_prop.rs:+72:5: +72:6
-- StorageLive(_59); // scope 0 at $DIR/reference_prop.rs:+75:5: +81:6
- StorageLive(_60); // scope 0 at $DIR/reference_prop.rs:+76:13: +76:14
- _60 = const 5_usize; // scope 0 at $DIR/reference_prop.rs:+76:17: +76:24
-- StorageLive(_61); // scope 29 at $DIR/reference_prop.rs:+77:13: +77:14
-- _61 = &_60; // scope 29 at $DIR/reference_prop.rs:+77:17: +77:19
-- StorageLive(_62); // scope 30 at $DIR/reference_prop.rs:+78:13: +78:14
-- _62 = &_61; // scope 30 at $DIR/reference_prop.rs:+78:17: +78:19
- StorageLive(_63); // scope 31 at $DIR/reference_prop.rs:+79:13: +79:14
-- _63 = (*_61); // scope 31 at $DIR/reference_prop.rs:+79:17: +79:19
-+ _63 = _60; // scope 31 at $DIR/reference_prop.rs:+79:17: +79:19
- StorageLive(_64); // scope 32 at $DIR/reference_prop.rs:+80:9: +80:19
- StorageLive(_65); // scope 32 at $DIR/reference_prop.rs:+80:16: +80:18
- _65 = (); // scope 32 at $DIR/reference_prop.rs:+80:16: +80:18
- _64 = opaque::<()>(move _65) -> bb9; // scope 32 at $DIR/reference_prop.rs:+80:9: +80:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:90:9: 90:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_58);
+ StorageDead(_57);
+- _52 = const ();
+ StorageDead(_56);
+ StorageDead(_53);
+- StorageDead(_52);
+- StorageLive(_59);
+ StorageLive(_60);
+ _60 = const 5_usize;
+- StorageLive(_61);
+- _61 = &_60;
+- StorageLive(_62);
+- _62 = &_61;
+ StorageLive(_63);
+- _63 = (*_61);
++ _63 = _60;
+ StorageLive(_64);
+ StorageLive(_65);
+ _65 = ();
+ _64 = opaque::<()>(move _65) -> [return: bb9, unwind continue];
}
bb9: {
- StorageDead(_65); // scope 32 at $DIR/reference_prop.rs:+80:18: +80:19
- StorageDead(_64); // scope 32 at $DIR/reference_prop.rs:+80:19: +80:20
-- _59 = const (); // scope 0 at $DIR/reference_prop.rs:+75:5: +81:6
- StorageDead(_63); // scope 31 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageDead(_62); // scope 30 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageDead(_61); // scope 29 at $DIR/reference_prop.rs:+81:5: +81:6
- StorageDead(_60); // scope 0 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageDead(_59); // scope 0 at $DIR/reference_prop.rs:+81:5: +81:6
- StorageLive(_66); // scope 0 at $DIR/reference_prop.rs:+85:13: +85:14
- _66 = const 5_usize; // scope 0 at $DIR/reference_prop.rs:+85:17: +85:24
-- StorageLive(_67); // scope 33 at $DIR/reference_prop.rs:+86:13: +86:18
-- _67 = &_66; // scope 33 at $DIR/reference_prop.rs:+86:21: +86:23
-- StorageLive(_68); // scope 34 at $DIR/reference_prop.rs:+87:13: +87:14
-- _68 = &mut _67; // scope 34 at $DIR/reference_prop.rs:+87:17: +87:23
- StorageLive(_69); // scope 35 at $DIR/reference_prop.rs:+88:13: +88:14
-- _69 = (*_67); // scope 35 at $DIR/reference_prop.rs:+88:17: +88:19
-+ _69 = _66; // scope 35 at $DIR/reference_prop.rs:+88:17: +88:19
- StorageLive(_70); // scope 36 at $DIR/reference_prop.rs:+89:9: +89:19
- StorageLive(_71); // scope 36 at $DIR/reference_prop.rs:+89:16: +89:18
- _71 = (); // scope 36 at $DIR/reference_prop.rs:+89:16: +89:18
- _70 = opaque::<()>(move _71) -> bb10; // scope 36 at $DIR/reference_prop.rs:+89:9: +89:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:99:9: 99:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_65);
+ StorageDead(_64);
+- _59 = const ();
+ StorageDead(_63);
+- StorageDead(_62);
+- StorageDead(_61);
+ StorageDead(_60);
+- StorageDead(_59);
+ StorageLive(_66);
+ _66 = const 5_usize;
+- StorageLive(_67);
+- _67 = &_66;
+- StorageLive(_68);
+- _68 = &mut _67;
+ StorageLive(_69);
+- _69 = (*_67);
++ _69 = _66;
+ StorageLive(_70);
+ StorageLive(_71);
+ _71 = ();
+ _70 = opaque::<()>(move _71) -> [return: bb10, unwind continue];
}
bb10: {
- StorageDead(_71); // scope 36 at $DIR/reference_prop.rs:+89:18: +89:19
- StorageDead(_70); // scope 36 at $DIR/reference_prop.rs:+89:19: +89:20
- _0 = const (); // scope 0 at $DIR/reference_prop.rs:+84:5: +90:6
- StorageDead(_69); // scope 35 at $DIR/reference_prop.rs:+90:5: +90:6
-- StorageDead(_68); // scope 34 at $DIR/reference_prop.rs:+90:5: +90:6
-- StorageDead(_67); // scope 33 at $DIR/reference_prop.rs:+90:5: +90:6
- StorageDead(_66); // scope 0 at $DIR/reference_prop.rs:+90:5: +90:6
- return; // scope 0 at $DIR/reference_prop.rs:+91:2: +91:2
+ StorageDead(_71);
+ StorageDead(_70);
+ _0 = const ();
+ StorageDead(_69);
+- StorageDead(_68);
+- StorageDead(_67);
+ StorageDead(_66);
+ return;
}
}
diff --git a/tests/mir-opt/reference_prop.reference_propagation_const_ptr.ReferencePropagation.diff b/tests/mir-opt/reference_prop.reference_propagation_const_ptr.ReferencePropagation.diff
index ddeb04e50..05eab7989 100644
--- a/tests/mir-opt/reference_prop.reference_propagation_const_ptr.ReferencePropagation.diff
+++ b/tests/mir-opt/reference_prop.reference_propagation_const_ptr.ReferencePropagation.diff
@@ -2,145 +2,145 @@
+ // MIR for `reference_propagation_const_ptr` after ReferencePropagation
fn reference_propagation_const_ptr(_1: *const T, _2: *const T) -> () {
- debug single => _1; // in scope 0 at $DIR/reference_prop.rs:+0:45: +0:51
- debug multiple => _2; // in scope 0 at $DIR/reference_prop.rs:+0:63: +0:75
- let mut _0: (); // return place in scope 0 at $DIR/reference_prop.rs:+0:87: +0:87
- let _3: (); // in scope 0 at $DIR/reference_prop.rs:+2:5: +7:6
- let _7: (); // in scope 0 at $DIR/reference_prop.rs:+6:9: +6:19
- let mut _8: (); // in scope 0 at $DIR/reference_prop.rs:+6:16: +6:18
- let _9: (); // in scope 0 at $DIR/reference_prop.rs:+10:5: +18:6
- let mut _13: *const usize; // in scope 0 at $DIR/reference_prop.rs:+14:13: +14:26
- let _15: (); // in scope 0 at $DIR/reference_prop.rs:+17:9: +17:19
- let mut _16: (); // in scope 0 at $DIR/reference_prop.rs:+17:16: +17:18
- let _17: (); // in scope 0 at $DIR/reference_prop.rs:+21:5: +27:6
- let _22: (); // in scope 0 at $DIR/reference_prop.rs:+26:9: +26:18
- let mut _23: &*const usize; // in scope 0 at $DIR/reference_prop.rs:+26:16: +26:17
- let _24: (); // in scope 0 at $DIR/reference_prop.rs:+30:5: +36:6
- let _29: (); // in scope 0 at $DIR/reference_prop.rs:+35:9: +35:18
- let mut _30: *mut *const usize; // in scope 0 at $DIR/reference_prop.rs:+35:16: +35:17
- let _31: (); // in scope 0 at $DIR/reference_prop.rs:+39:5: +44:6
- let _35: (); // in scope 0 at $DIR/reference_prop.rs:+43:9: +43:18
- let mut _36: *const usize; // in scope 0 at $DIR/reference_prop.rs:+43:16: +43:17
- let _37: (); // in scope 0 at $DIR/reference_prop.rs:+47:5: +57:6
- let _44: (); // in scope 0 at $DIR/reference_prop.rs:+56:9: +56:19
- let mut _45: *const usize; // in scope 0 at $DIR/reference_prop.rs:+56:16: +56:18
- let _46: (); // in scope 0 at $DIR/reference_prop.rs:+60:5: +64:6
- let _49: (); // in scope 0 at $DIR/reference_prop.rs:+63:9: +63:19
- let mut _50: (); // in scope 0 at $DIR/reference_prop.rs:+63:16: +63:18
- let _51: (); // in scope 0 at $DIR/reference_prop.rs:+67:5: +72:6
- let mut _53: *const T; // in scope 0 at $DIR/reference_prop.rs:+69:20: +69:38
- let _55: (); // in scope 0 at $DIR/reference_prop.rs:+71:9: +71:19
- let mut _56: (); // in scope 0 at $DIR/reference_prop.rs:+71:16: +71:18
- let _57: (); // in scope 0 at $DIR/reference_prop.rs:+75:5: +81:6
- let _62: (); // in scope 0 at $DIR/reference_prop.rs:+80:9: +80:19
- let mut _63: (); // in scope 0 at $DIR/reference_prop.rs:+80:16: +80:18
- let _64: (); // in scope 0 at $DIR/reference_prop.rs:+84:5: +90:6
- let _69: (); // in scope 0 at $DIR/reference_prop.rs:+89:9: +89:19
- let mut _70: (); // in scope 0 at $DIR/reference_prop.rs:+89:16: +89:18
- let _75: (); // in scope 0 at $DIR/reference_prop.rs:+98:9: +98:19
- let mut _76: (); // in scope 0 at $DIR/reference_prop.rs:+98:16: +98:18
+ debug single => _1;
+ debug multiple => _2;
+ let mut _0: ();
+ let _3: ();
+ let _7: ();
+ let mut _8: ();
+ let _9: ();
+ let mut _13: *const usize;
+ let _15: ();
+ let mut _16: ();
+ let _17: ();
+ let _22: ();
+ let mut _23: &*const usize;
+ let _24: ();
+ let _29: ();
+ let mut _30: *mut *const usize;
+ let _31: ();
+ let _35: ();
+ let mut _36: *const usize;
+ let _37: ();
+ let _44: ();
+ let mut _45: *const usize;
+ let _46: ();
+ let _49: ();
+ let mut _50: ();
+ let _51: ();
+ let mut _53: *const T;
+ let _55: ();
+ let mut _56: ();
+ let _57: ();
+ let _62: ();
+ let mut _63: ();
+ let _64: ();
+ let _69: ();
+ let mut _70: ();
+ let _75: ();
+ let mut _76: ();
scope 1 {
- let _4: usize; // in scope 1 at $DIR/reference_prop.rs:+3:13: +3:14
+ let _4: usize;
scope 2 {
- debug a => _4; // in scope 2 at $DIR/reference_prop.rs:+3:13: +3:14
- let _5: *const usize; // in scope 2 at $DIR/reference_prop.rs:+4:13: +4:14
+ debug a => _4;
+ let _5: *const usize;
scope 3 {
-- debug b => _5; // in scope 3 at $DIR/reference_prop.rs:+4:13: +4:14
-+ debug b => &_4; // in scope 3 at $DIR/reference_prop.rs:+4:13: +4:14
- let _6: usize; // in scope 3 at $DIR/reference_prop.rs:+5:13: +5:14
+- debug b => _5;
++ debug b => &_4;
+ let _6: usize;
scope 4 {
- debug c => _6; // in scope 4 at $DIR/reference_prop.rs:+5:13: +5:14
+ debug c => _6;
}
}
}
}
scope 5 {
- let _10: usize; // in scope 5 at $DIR/reference_prop.rs:+11:13: +11:14
+ let _10: usize;
scope 6 {
- debug a => _10; // in scope 6 at $DIR/reference_prop.rs:+11:13: +11:14
- let _11: usize; // in scope 6 at $DIR/reference_prop.rs:+12:13: +12:15
+ debug a => _10;
+ let _11: usize;
scope 7 {
- debug a2 => _11; // in scope 7 at $DIR/reference_prop.rs:+12:13: +12:15
- let mut _12: *const usize; // in scope 7 at $DIR/reference_prop.rs:+13:13: +13:18
+ debug a2 => _11;
+ let mut _12: *const usize;
scope 8 {
- debug b => _12; // in scope 8 at $DIR/reference_prop.rs:+13:13: +13:18
- let _14: usize; // in scope 8 at $DIR/reference_prop.rs:+16:13: +16:14
+ debug b => _12;
+ let _14: usize;
scope 9 {
- debug c => _14; // in scope 9 at $DIR/reference_prop.rs:+16:13: +16:14
+ debug c => _14;
}
}
}
}
}
scope 10 {
- let _18: usize; // in scope 10 at $DIR/reference_prop.rs:+22:13: +22:14
+ let _18: usize;
scope 11 {
- debug a => _18; // in scope 11 at $DIR/reference_prop.rs:+22:13: +22:14
- let _19: *const usize; // in scope 11 at $DIR/reference_prop.rs:+23:13: +23:14
+ debug a => _18;
+ let _19: *const usize;
scope 12 {
- debug b => _19; // in scope 12 at $DIR/reference_prop.rs:+23:13: +23:14
- let _20: &*const usize; // in scope 12 at $DIR/reference_prop.rs:+24:13: +24:14
+ debug b => _19;
+ let _20: &*const usize;
scope 13 {
- debug d => _20; // in scope 13 at $DIR/reference_prop.rs:+24:13: +24:14
- let _21: usize; // in scope 13 at $DIR/reference_prop.rs:+25:13: +25:14
+ debug d => _20;
+ let _21: usize;
scope 14 {
- debug c => _21; // in scope 14 at $DIR/reference_prop.rs:+25:13: +25:14
+ debug c => _21;
}
}
}
}
}
scope 15 {
- let _25: usize; // in scope 15 at $DIR/reference_prop.rs:+31:13: +31:14
+ let _25: usize;
scope 16 {
- debug a => _25; // in scope 16 at $DIR/reference_prop.rs:+31:13: +31:14
- let mut _26: *const usize; // in scope 16 at $DIR/reference_prop.rs:+32:13: +32:18
+ debug a => _25;
+ let mut _26: *const usize;
scope 17 {
- debug b => _26; // in scope 17 at $DIR/reference_prop.rs:+32:13: +32:18
- let _27: *mut *const usize; // in scope 17 at $DIR/reference_prop.rs:+33:13: +33:14
+ debug b => _26;
+ let _27: *mut *const usize;
scope 18 {
- debug d => _27; // in scope 18 at $DIR/reference_prop.rs:+33:13: +33:14
- let _28: usize; // in scope 18 at $DIR/reference_prop.rs:+34:13: +34:14
+ debug d => _27;
+ let _28: usize;
scope 19 {
- debug c => _28; // in scope 19 at $DIR/reference_prop.rs:+34:13: +34:14
+ debug c => _28;
}
}
}
}
}
scope 20 {
- let _32: usize; // in scope 20 at $DIR/reference_prop.rs:+40:13: +40:14
+ let _32: usize;
scope 21 {
- debug a => _32; // in scope 21 at $DIR/reference_prop.rs:+40:13: +40:14
- let _33: *const usize; // in scope 21 at $DIR/reference_prop.rs:+41:13: +41:14
+ debug a => _32;
+ let _33: *const usize;
scope 22 {
- debug b => _33; // in scope 22 at $DIR/reference_prop.rs:+41:13: +41:14
- let _34: usize; // in scope 22 at $DIR/reference_prop.rs:+42:13: +42:14
+ debug b => _33;
+ let _34: usize;
scope 23 {
- debug c => _34; // in scope 23 at $DIR/reference_prop.rs:+42:13: +42:14
+ debug c => _34;
}
}
}
}
scope 24 {
- let _38: usize; // in scope 24 at $DIR/reference_prop.rs:+48:13: +48:14
+ let _38: usize;
scope 25 {
- debug a => _38; // in scope 25 at $DIR/reference_prop.rs:+48:13: +48:14
- let _39: *const usize; // in scope 25 at $DIR/reference_prop.rs:+49:13: +49:15
+ debug a => _38;
+ let _39: *const usize;
scope 26 {
- debug b1 => _39; // in scope 26 at $DIR/reference_prop.rs:+49:13: +49:15
- let _40: usize; // in scope 26 at $DIR/reference_prop.rs:+50:13: +50:14
+ debug b1 => _39;
+ let _40: usize;
scope 27 {
- debug c => _40; // in scope 27 at $DIR/reference_prop.rs:+50:13: +50:14
- let _41: *const usize; // in scope 27 at $DIR/reference_prop.rs:+51:13: +51:15
+ debug c => _40;
+ let _41: *const usize;
scope 28 {
- debug b2 => _41; // in scope 28 at $DIR/reference_prop.rs:+51:13: +51:15
- let _42: usize; // in scope 28 at $DIR/reference_prop.rs:+52:13: +52:15
+ debug b2 => _41;
+ let _42: usize;
scope 29 {
- debug c2 => _42; // in scope 29 at $DIR/reference_prop.rs:+52:13: +52:15
- let _43: *const usize; // in scope 29 at $DIR/reference_prop.rs:+53:13: +53:15
+ debug c2 => _42;
+ let _43: *const usize;
scope 30 {
- debug b3 => _43; // in scope 30 at $DIR/reference_prop.rs:+53:13: +53:15
+ debug b3 => _43;
}
}
}
@@ -149,81 +149,81 @@
}
}
scope 31 {
- let _47: *const T; // in scope 31 at $DIR/reference_prop.rs:+61:13: +61:14
+ let _47: *const T;
scope 32 {
-- debug a => _47; // in scope 32 at $DIR/reference_prop.rs:+61:13: +61:14
-+ debug a => _1; // in scope 32 at $DIR/reference_prop.rs:+61:13: +61:14
- let _48: T; // in scope 32 at $DIR/reference_prop.rs:+62:13: +62:14
+- debug a => _47;
++ debug a => _1;
+ let _48: T;
scope 33 {
- debug b => _48; // in scope 33 at $DIR/reference_prop.rs:+62:13: +62:14
+ debug b => _48;
}
}
}
scope 34 {
- let _52: *const T; // in scope 34 at $DIR/reference_prop.rs:+68:13: +68:14
+ let _52: *const T;
scope 35 {
- debug a => _52; // in scope 35 at $DIR/reference_prop.rs:+68:13: +68:14
- let _54: T; // in scope 35 at $DIR/reference_prop.rs:+70:13: +70:14
+ debug a => _52;
+ let _54: T;
scope 36 {
- debug b => _54; // in scope 36 at $DIR/reference_prop.rs:+70:13: +70:14
+ debug b => _54;
}
}
}
scope 37 {
- let _58: usize; // in scope 37 at $DIR/reference_prop.rs:+76:13: +76:14
+ let _58: usize;
scope 38 {
- debug a => _58; // in scope 38 at $DIR/reference_prop.rs:+76:13: +76:14
- let _59: *const usize; // in scope 38 at $DIR/reference_prop.rs:+77:13: +77:14
+ debug a => _58;
+ let _59: *const usize;
scope 39 {
-- debug b => _59; // in scope 39 at $DIR/reference_prop.rs:+77:13: +77:14
-+ debug b => &_58; // in scope 39 at $DIR/reference_prop.rs:+77:13: +77:14
- let _60: *const usize; // in scope 39 at $DIR/reference_prop.rs:+78:13: +78:14
+- debug b => _59;
++ debug b => &_58;
+ let _60: *const usize;
scope 40 {
-- debug c => _60; // in scope 40 at $DIR/reference_prop.rs:+78:13: +78:14
-+ debug c => &_58; // in scope 40 at $DIR/reference_prop.rs:+78:13: +78:14
- let _61: usize; // in scope 40 at $DIR/reference_prop.rs:+79:13: +79:14
+- debug c => _60;
++ debug c => &_58;
+ let _61: usize;
scope 41 {
- debug e => _61; // in scope 41 at $DIR/reference_prop.rs:+79:13: +79:14
+ debug e => _61;
}
}
}
}
}
scope 42 {
- let _65: usize; // in scope 42 at $DIR/reference_prop.rs:+85:13: +85:14
+ let _65: usize;
scope 43 {
- debug a => _65; // in scope 43 at $DIR/reference_prop.rs:+85:13: +85:14
- let _66: *const usize; // in scope 43 at $DIR/reference_prop.rs:+86:13: +86:14
+ debug a => _65;
+ let _66: *const usize;
scope 44 {
-- debug b => _66; // in scope 44 at $DIR/reference_prop.rs:+86:13: +86:14
-+ debug b => &_65; // in scope 44 at $DIR/reference_prop.rs:+86:13: +86:14
- let _67: &*const usize; // in scope 44 at $DIR/reference_prop.rs:+87:13: +87:14
+- debug b => _66;
++ debug b => &_65;
+ let _67: &*const usize;
scope 45 {
-- debug d => _67; // in scope 45 at $DIR/reference_prop.rs:+87:13: +87:14
-+ debug d => &&_65; // in scope 45 at $DIR/reference_prop.rs:+87:13: +87:14
- let _68: usize; // in scope 45 at $DIR/reference_prop.rs:+88:13: +88:14
+- debug d => _67;
++ debug d => &&_65;
+ let _68: usize;
scope 46 {
- debug c => _68; // in scope 46 at $DIR/reference_prop.rs:+88:13: +88:14
+ debug c => _68;
}
}
}
}
}
scope 47 {
- let _71: usize; // in scope 47 at $DIR/reference_prop.rs:+94:13: +94:14
+ let _71: usize;
scope 48 {
- debug a => _71; // in scope 48 at $DIR/reference_prop.rs:+94:13: +94:14
- let mut _72: *const usize; // in scope 48 at $DIR/reference_prop.rs:+95:13: +95:18
+ debug a => _71;
+ let mut _72: *const usize;
scope 49 {
-- debug b => _72; // in scope 49 at $DIR/reference_prop.rs:+95:13: +95:18
-+ debug b => &_71; // in scope 49 at $DIR/reference_prop.rs:+95:13: +95:18
- let _73: &mut *const usize; // in scope 49 at $DIR/reference_prop.rs:+96:13: +96:14
+- debug b => _72;
++ debug b => &_71;
+ let _73: &mut *const usize;
scope 50 {
-- debug d => _73; // in scope 50 at $DIR/reference_prop.rs:+96:13: +96:14
-+ debug d => &&_71; // in scope 50 at $DIR/reference_prop.rs:+96:13: +96:14
- let _74: usize; // in scope 50 at $DIR/reference_prop.rs:+97:13: +97:14
+- debug d => _73;
++ debug d => &&_71;
+ let _74: usize;
scope 51 {
- debug c => _74; // in scope 51 at $DIR/reference_prop.rs:+97:13: +97:14
+ debug c => _74;
}
}
}
@@ -231,306 +231,273 @@
}
bb0: {
-- StorageLive(_3); // scope 0 at $DIR/reference_prop.rs:+2:5: +7:6
- StorageLive(_4); // scope 1 at $DIR/reference_prop.rs:+3:13: +3:14
- _4 = const 5_usize; // scope 1 at $DIR/reference_prop.rs:+3:17: +3:24
-- StorageLive(_5); // scope 2 at $DIR/reference_prop.rs:+4:13: +4:14
-- _5 = &raw const _4; // scope 2 at $DIR/reference_prop.rs:+4:17: +4:29
- StorageLive(_6); // scope 3 at $DIR/reference_prop.rs:+5:13: +5:14
-- _6 = (*_5); // scope 3 at $DIR/reference_prop.rs:+5:17: +5:19
-+ _6 = _4; // scope 3 at $DIR/reference_prop.rs:+5:17: +5:19
- StorageLive(_7); // scope 4 at $DIR/reference_prop.rs:+6:9: +6:19
- StorageLive(_8); // scope 4 at $DIR/reference_prop.rs:+6:16: +6:18
- _8 = (); // scope 4 at $DIR/reference_prop.rs:+6:16: +6:18
- _7 = opaque::<()>(move _8) -> bb1; // scope 4 at $DIR/reference_prop.rs:+6:9: +6:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:202:9: 202:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+- StorageLive(_3);
+ StorageLive(_4);
+ _4 = const 5_usize;
+- StorageLive(_5);
+- _5 = &raw const _4;
+ StorageLive(_6);
+- _6 = (*_5);
++ _6 = _4;
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = ();
+ _7 = opaque::<()>(move _8) -> [return: bb1, unwind continue];
}
bb1: {
- StorageDead(_8); // scope 4 at $DIR/reference_prop.rs:+6:18: +6:19
- StorageDead(_7); // scope 4 at $DIR/reference_prop.rs:+6:19: +6:20
-- _3 = const (); // scope 1 at $DIR/reference_prop.rs:+2:5: +7:6
- StorageDead(_6); // scope 3 at $DIR/reference_prop.rs:+7:5: +7:6
-- StorageDead(_5); // scope 2 at $DIR/reference_prop.rs:+7:5: +7:6
- StorageDead(_4); // scope 1 at $DIR/reference_prop.rs:+7:5: +7:6
-- StorageDead(_3); // scope 0 at $DIR/reference_prop.rs:+7:5: +7:6
-- StorageLive(_9); // scope 0 at $DIR/reference_prop.rs:+10:5: +18:6
- StorageLive(_10); // scope 5 at $DIR/reference_prop.rs:+11:13: +11:14
- _10 = const 5_usize; // scope 5 at $DIR/reference_prop.rs:+11:17: +11:24
- StorageLive(_11); // scope 6 at $DIR/reference_prop.rs:+12:13: +12:15
- _11 = const 7_usize; // scope 6 at $DIR/reference_prop.rs:+12:18: +12:25
- StorageLive(_12); // scope 7 at $DIR/reference_prop.rs:+13:13: +13:18
- _12 = &raw const _10; // scope 7 at $DIR/reference_prop.rs:+13:21: +13:33
- StorageLive(_13); // scope 8 at $DIR/reference_prop.rs:+14:13: +14:26
- _13 = &raw const _11; // scope 8 at $DIR/reference_prop.rs:+14:13: +14:26
- _12 = move _13; // scope 8 at $DIR/reference_prop.rs:+14:9: +14:26
- StorageDead(_13); // scope 8 at $DIR/reference_prop.rs:+14:25: +14:26
- StorageLive(_14); // scope 8 at $DIR/reference_prop.rs:+16:13: +16:14
- _14 = (*_12); // scope 8 at $DIR/reference_prop.rs:+16:17: +16:19
- StorageLive(_15); // scope 9 at $DIR/reference_prop.rs:+17:9: +17:19
- StorageLive(_16); // scope 9 at $DIR/reference_prop.rs:+17:16: +17:18
- _16 = (); // scope 9 at $DIR/reference_prop.rs:+17:16: +17:18
- _15 = opaque::<()>(move _16) -> bb2; // scope 9 at $DIR/reference_prop.rs:+17:9: +17:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:213:9: 213:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_8);
+ StorageDead(_7);
+- _3 = const ();
+ StorageDead(_6);
+- StorageDead(_5);
+ StorageDead(_4);
+- StorageDead(_3);
+- StorageLive(_9);
+ StorageLive(_10);
+ _10 = const 5_usize;
+ StorageLive(_11);
+ _11 = const 7_usize;
+ StorageLive(_12);
+ _12 = &raw const _10;
+ StorageLive(_13);
+ _13 = &raw const _11;
+ _12 = move _13;
+ StorageDead(_13);
+ StorageLive(_14);
+ _14 = (*_12);
+ StorageLive(_15);
+ StorageLive(_16);
+ _16 = ();
+ _15 = opaque::<()>(move _16) -> [return: bb2, unwind continue];
}
bb2: {
- StorageDead(_16); // scope 9 at $DIR/reference_prop.rs:+17:18: +17:19
- StorageDead(_15); // scope 9 at $DIR/reference_prop.rs:+17:19: +17:20
-- _9 = const (); // scope 5 at $DIR/reference_prop.rs:+10:5: +18:6
- StorageDead(_14); // scope 8 at $DIR/reference_prop.rs:+18:5: +18:6
- StorageDead(_12); // scope 7 at $DIR/reference_prop.rs:+18:5: +18:6
- StorageDead(_11); // scope 6 at $DIR/reference_prop.rs:+18:5: +18:6
- StorageDead(_10); // scope 5 at $DIR/reference_prop.rs:+18:5: +18:6
-- StorageDead(_9); // scope 0 at $DIR/reference_prop.rs:+18:5: +18:6
-- StorageLive(_17); // scope 0 at $DIR/reference_prop.rs:+21:5: +27:6
- StorageLive(_18); // scope 10 at $DIR/reference_prop.rs:+22:13: +22:14
- _18 = const 5_usize; // scope 10 at $DIR/reference_prop.rs:+22:17: +22:24
- StorageLive(_19); // scope 11 at $DIR/reference_prop.rs:+23:13: +23:14
- _19 = &raw const _18; // scope 11 at $DIR/reference_prop.rs:+23:17: +23:29
- StorageLive(_20); // scope 12 at $DIR/reference_prop.rs:+24:13: +24:14
- _20 = &_19; // scope 12 at $DIR/reference_prop.rs:+24:17: +24:19
- StorageLive(_21); // scope 13 at $DIR/reference_prop.rs:+25:13: +25:14
- _21 = (*_19); // scope 13 at $DIR/reference_prop.rs:+25:17: +25:19
- StorageLive(_22); // scope 14 at $DIR/reference_prop.rs:+26:9: +26:18
- StorageLive(_23); // scope 14 at $DIR/reference_prop.rs:+26:16: +26:17
- _23 = _20; // scope 14 at $DIR/reference_prop.rs:+26:16: +26:17
- _22 = opaque::<&*const usize>(move _23) -> bb3; // scope 14 at $DIR/reference_prop.rs:+26:9: +26:18
- // mir::Constant
- // + span: $DIR/reference_prop.rs:222:9: 222:15
- // + literal: Const { ty: fn(&*const usize) {opaque::<&*const usize>}, val: Value(<ZST>) }
+ StorageDead(_16);
+ StorageDead(_15);
+- _9 = const ();
+ StorageDead(_14);
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_10);
+- StorageDead(_9);
+- StorageLive(_17);
+ StorageLive(_18);
+ _18 = const 5_usize;
+ StorageLive(_19);
+ _19 = &raw const _18;
+ StorageLive(_20);
+ _20 = &_19;
+ StorageLive(_21);
+ _21 = (*_19);
+ StorageLive(_22);
+ StorageLive(_23);
+ _23 = _20;
+ _22 = opaque::<&*const usize>(move _23) -> [return: bb3, unwind continue];
}
bb3: {
- StorageDead(_23); // scope 14 at $DIR/reference_prop.rs:+26:17: +26:18
- StorageDead(_22); // scope 14 at $DIR/reference_prop.rs:+26:18: +26:19
-- _17 = const (); // scope 10 at $DIR/reference_prop.rs:+21:5: +27:6
- StorageDead(_21); // scope 13 at $DIR/reference_prop.rs:+27:5: +27:6
- StorageDead(_20); // scope 12 at $DIR/reference_prop.rs:+27:5: +27:6
- StorageDead(_19); // scope 11 at $DIR/reference_prop.rs:+27:5: +27:6
- StorageDead(_18); // scope 10 at $DIR/reference_prop.rs:+27:5: +27:6
-- StorageDead(_17); // scope 0 at $DIR/reference_prop.rs:+27:5: +27:6
-- StorageLive(_24); // scope 0 at $DIR/reference_prop.rs:+30:5: +36:6
- StorageLive(_25); // scope 15 at $DIR/reference_prop.rs:+31:13: +31:14
- _25 = const 5_usize; // scope 15 at $DIR/reference_prop.rs:+31:17: +31:24
- StorageLive(_26); // scope 16 at $DIR/reference_prop.rs:+32:13: +32:18
- _26 = &raw const _25; // scope 16 at $DIR/reference_prop.rs:+32:21: +32:33
- StorageLive(_27); // scope 17 at $DIR/reference_prop.rs:+33:13: +33:14
- _27 = &raw mut _26; // scope 17 at $DIR/reference_prop.rs:+33:17: +33:27
- StorageLive(_28); // scope 18 at $DIR/reference_prop.rs:+34:13: +34:14
- _28 = (*_26); // scope 18 at $DIR/reference_prop.rs:+34:17: +34:19
- StorageLive(_29); // scope 19 at $DIR/reference_prop.rs:+35:9: +35:18
- StorageLive(_30); // scope 19 at $DIR/reference_prop.rs:+35:16: +35:17
- _30 = _27; // scope 19 at $DIR/reference_prop.rs:+35:16: +35:17
- _29 = opaque::<*mut *const usize>(move _30) -> bb4; // scope 19 at $DIR/reference_prop.rs:+35:9: +35:18
- // mir::Constant
- // + span: $DIR/reference_prop.rs:231:9: 231:15
- // + literal: Const { ty: fn(*mut *const usize) {opaque::<*mut *const usize>}, val: Value(<ZST>) }
+ StorageDead(_23);
+ StorageDead(_22);
+- _17 = const ();
+ StorageDead(_21);
+ StorageDead(_20);
+ StorageDead(_19);
+ StorageDead(_18);
+- StorageDead(_17);
+- StorageLive(_24);
+ StorageLive(_25);
+ _25 = const 5_usize;
+ StorageLive(_26);
+ _26 = &raw const _25;
+ StorageLive(_27);
+ _27 = &raw mut _26;
+ StorageLive(_28);
+ _28 = (*_26);
+ StorageLive(_29);
+ StorageLive(_30);
+ _30 = _27;
+ _29 = opaque::<*mut *const usize>(move _30) -> [return: bb4, unwind continue];
}
bb4: {
- StorageDead(_30); // scope 19 at $DIR/reference_prop.rs:+35:17: +35:18
- StorageDead(_29); // scope 19 at $DIR/reference_prop.rs:+35:18: +35:19
-- _24 = const (); // scope 15 at $DIR/reference_prop.rs:+30:5: +36:6
- StorageDead(_28); // scope 18 at $DIR/reference_prop.rs:+36:5: +36:6
- StorageDead(_27); // scope 17 at $DIR/reference_prop.rs:+36:5: +36:6
- StorageDead(_26); // scope 16 at $DIR/reference_prop.rs:+36:5: +36:6
- StorageDead(_25); // scope 15 at $DIR/reference_prop.rs:+36:5: +36:6
-- StorageDead(_24); // scope 0 at $DIR/reference_prop.rs:+36:5: +36:6
-- StorageLive(_31); // scope 0 at $DIR/reference_prop.rs:+39:5: +44:6
- StorageLive(_32); // scope 20 at $DIR/reference_prop.rs:+40:13: +40:14
- _32 = const 7_usize; // scope 20 at $DIR/reference_prop.rs:+40:17: +40:24
- StorageLive(_33); // scope 21 at $DIR/reference_prop.rs:+41:13: +41:14
- _33 = &raw const _32; // scope 21 at $DIR/reference_prop.rs:+41:17: +41:29
- StorageLive(_34); // scope 22 at $DIR/reference_prop.rs:+42:13: +42:14
-- _34 = (*_33); // scope 22 at $DIR/reference_prop.rs:+42:17: +42:19
-+ _34 = _32; // scope 22 at $DIR/reference_prop.rs:+42:17: +42:19
- StorageLive(_35); // scope 23 at $DIR/reference_prop.rs:+43:9: +43:18
- StorageLive(_36); // scope 23 at $DIR/reference_prop.rs:+43:16: +43:17
- _36 = _33; // scope 23 at $DIR/reference_prop.rs:+43:16: +43:17
- _35 = opaque::<*const usize>(move _36) -> bb5; // scope 23 at $DIR/reference_prop.rs:+43:9: +43:18
- // mir::Constant
- // + span: $DIR/reference_prop.rs:239:9: 239:15
- // + literal: Const { ty: fn(*const usize) {opaque::<*const usize>}, val: Value(<ZST>) }
+ StorageDead(_30);
+ StorageDead(_29);
+- _24 = const ();
+ StorageDead(_28);
+ StorageDead(_27);
+ StorageDead(_26);
+ StorageDead(_25);
+- StorageDead(_24);
+- StorageLive(_31);
+ StorageLive(_32);
+ _32 = const 7_usize;
+ StorageLive(_33);
+ _33 = &raw const _32;
+ StorageLive(_34);
+- _34 = (*_33);
++ _34 = _32;
+ StorageLive(_35);
+ StorageLive(_36);
+ _36 = _33;
+ _35 = opaque::<*const usize>(move _36) -> [return: bb5, unwind continue];
}
bb5: {
- StorageDead(_36); // scope 23 at $DIR/reference_prop.rs:+43:17: +43:18
- StorageDead(_35); // scope 23 at $DIR/reference_prop.rs:+43:18: +43:19
-- _31 = const (); // scope 20 at $DIR/reference_prop.rs:+39:5: +44:6
- StorageDead(_34); // scope 22 at $DIR/reference_prop.rs:+44:5: +44:6
- StorageDead(_33); // scope 21 at $DIR/reference_prop.rs:+44:5: +44:6
- StorageDead(_32); // scope 20 at $DIR/reference_prop.rs:+44:5: +44:6
-- StorageDead(_31); // scope 0 at $DIR/reference_prop.rs:+44:5: +44:6
-- StorageLive(_37); // scope 0 at $DIR/reference_prop.rs:+47:5: +57:6
- StorageLive(_38); // scope 24 at $DIR/reference_prop.rs:+48:13: +48:14
- _38 = const 7_usize; // scope 24 at $DIR/reference_prop.rs:+48:17: +48:24
- StorageLive(_39); // scope 25 at $DIR/reference_prop.rs:+49:13: +49:15
- _39 = &raw const _38; // scope 25 at $DIR/reference_prop.rs:+49:18: +49:30
- StorageLive(_40); // scope 26 at $DIR/reference_prop.rs:+50:13: +50:14
-- _40 = (*_39); // scope 26 at $DIR/reference_prop.rs:+50:17: +50:20
-+ _40 = _38; // scope 26 at $DIR/reference_prop.rs:+50:17: +50:20
- StorageLive(_41); // scope 27 at $DIR/reference_prop.rs:+51:13: +51:15
- _41 = _39; // scope 27 at $DIR/reference_prop.rs:+51:18: +51:20
- StorageLive(_42); // scope 28 at $DIR/reference_prop.rs:+52:13: +52:15
-- _42 = (*_41); // scope 28 at $DIR/reference_prop.rs:+52:18: +52:21
-+ _42 = _38; // scope 28 at $DIR/reference_prop.rs:+52:18: +52:21
- StorageLive(_43); // scope 29 at $DIR/reference_prop.rs:+53:13: +53:15
- _43 = _41; // scope 29 at $DIR/reference_prop.rs:+53:18: +53:20
- StorageLive(_44); // scope 30 at $DIR/reference_prop.rs:+56:9: +56:19
- StorageLive(_45); // scope 30 at $DIR/reference_prop.rs:+56:16: +56:18
- _45 = _43; // scope 30 at $DIR/reference_prop.rs:+56:16: +56:18
- _44 = opaque::<*const usize>(move _45) -> bb6; // scope 30 at $DIR/reference_prop.rs:+56:9: +56:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:252:9: 252:15
- // + literal: Const { ty: fn(*const usize) {opaque::<*const usize>}, val: Value(<ZST>) }
+ StorageDead(_36);
+ StorageDead(_35);
+- _31 = const ();
+ StorageDead(_34);
+ StorageDead(_33);
+ StorageDead(_32);
+- StorageDead(_31);
+- StorageLive(_37);
+ StorageLive(_38);
+ _38 = const 7_usize;
+ StorageLive(_39);
+ _39 = &raw const _38;
+ StorageLive(_40);
+- _40 = (*_39);
++ _40 = _38;
+ StorageLive(_41);
+ _41 = _39;
+ StorageLive(_42);
+- _42 = (*_41);
++ _42 = _38;
+ StorageLive(_43);
+ _43 = _41;
+ StorageLive(_44);
+ StorageLive(_45);
+ _45 = _43;
+ _44 = opaque::<*const usize>(move _45) -> [return: bb6, unwind continue];
}
bb6: {
- StorageDead(_45); // scope 30 at $DIR/reference_prop.rs:+56:18: +56:19
- StorageDead(_44); // scope 30 at $DIR/reference_prop.rs:+56:19: +56:20
-- _37 = const (); // scope 24 at $DIR/reference_prop.rs:+47:5: +57:6
- StorageDead(_43); // scope 29 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_42); // scope 28 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_41); // scope 27 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_40); // scope 26 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_39); // scope 25 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_38); // scope 24 at $DIR/reference_prop.rs:+57:5: +57:6
-- StorageDead(_37); // scope 0 at $DIR/reference_prop.rs:+57:5: +57:6
-- StorageLive(_46); // scope 0 at $DIR/reference_prop.rs:+60:5: +64:6
-- StorageLive(_47); // scope 31 at $DIR/reference_prop.rs:+61:13: +61:14
-- _47 = &raw const (*_1); // scope 31 at $DIR/reference_prop.rs:+61:17: +61:35
- StorageLive(_48); // scope 32 at $DIR/reference_prop.rs:+62:13: +62:14
-- _48 = (*_47); // scope 32 at $DIR/reference_prop.rs:+62:17: +62:19
-+ _48 = (*_1); // scope 32 at $DIR/reference_prop.rs:+62:17: +62:19
- StorageLive(_49); // scope 33 at $DIR/reference_prop.rs:+63:9: +63:19
- StorageLive(_50); // scope 33 at $DIR/reference_prop.rs:+63:16: +63:18
- _50 = (); // scope 33 at $DIR/reference_prop.rs:+63:16: +63:18
- _49 = opaque::<()>(move _50) -> bb7; // scope 33 at $DIR/reference_prop.rs:+63:9: +63:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:259:9: 259:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_45);
+ StorageDead(_44);
+- _37 = const ();
+ StorageDead(_43);
+ StorageDead(_42);
+ StorageDead(_41);
+ StorageDead(_40);
+ StorageDead(_39);
+ StorageDead(_38);
+- StorageDead(_37);
+- StorageLive(_46);
+- StorageLive(_47);
+- _47 = &raw const (*_1);
+ StorageLive(_48);
+- _48 = (*_47);
++ _48 = (*_1);
+ StorageLive(_49);
+ StorageLive(_50);
+ _50 = ();
+ _49 = opaque::<()>(move _50) -> [return: bb7, unwind continue];
}
bb7: {
- StorageDead(_50); // scope 33 at $DIR/reference_prop.rs:+63:18: +63:19
- StorageDead(_49); // scope 33 at $DIR/reference_prop.rs:+63:19: +63:20
-- _46 = const (); // scope 31 at $DIR/reference_prop.rs:+60:5: +64:6
- StorageDead(_48); // scope 32 at $DIR/reference_prop.rs:+64:5: +64:6
-- StorageDead(_47); // scope 31 at $DIR/reference_prop.rs:+64:5: +64:6
-- StorageDead(_46); // scope 0 at $DIR/reference_prop.rs:+64:5: +64:6
-- StorageLive(_51); // scope 0 at $DIR/reference_prop.rs:+67:5: +72:6
- StorageLive(_52); // scope 34 at $DIR/reference_prop.rs:+68:13: +68:14
- _52 = &raw const (*_2); // scope 34 at $DIR/reference_prop.rs:+68:17: +68:37
- StorageLive(_53); // scope 35 at $DIR/reference_prop.rs:+69:20: +69:38
- _53 = &raw const (*_1); // scope 35 at $DIR/reference_prop.rs:+69:20: +69:38
- _2 = move _53; // scope 35 at $DIR/reference_prop.rs:+69:9: +69:38
- StorageDead(_53); // scope 35 at $DIR/reference_prop.rs:+69:37: +69:38
- StorageLive(_54); // scope 35 at $DIR/reference_prop.rs:+70:13: +70:14
- _54 = (*_52); // scope 35 at $DIR/reference_prop.rs:+70:17: +70:19
- StorageLive(_55); // scope 36 at $DIR/reference_prop.rs:+71:9: +71:19
- StorageLive(_56); // scope 36 at $DIR/reference_prop.rs:+71:16: +71:18
- _56 = (); // scope 36 at $DIR/reference_prop.rs:+71:16: +71:18
- _55 = opaque::<()>(move _56) -> bb8; // scope 36 at $DIR/reference_prop.rs:+71:9: +71:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:267:9: 267:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_50);
+ StorageDead(_49);
+- _46 = const ();
+ StorageDead(_48);
+- StorageDead(_47);
+- StorageDead(_46);
+- StorageLive(_51);
+ StorageLive(_52);
+ _52 = &raw const (*_2);
+ StorageLive(_53);
+ _53 = &raw const (*_1);
+ _2 = move _53;
+ StorageDead(_53);
+ StorageLive(_54);
+ _54 = (*_52);
+ StorageLive(_55);
+ StorageLive(_56);
+ _56 = ();
+ _55 = opaque::<()>(move _56) -> [return: bb8, unwind continue];
}
bb8: {
- StorageDead(_56); // scope 36 at $DIR/reference_prop.rs:+71:18: +71:19
- StorageDead(_55); // scope 36 at $DIR/reference_prop.rs:+71:19: +71:20
-- _51 = const (); // scope 34 at $DIR/reference_prop.rs:+67:5: +72:6
- StorageDead(_54); // scope 35 at $DIR/reference_prop.rs:+72:5: +72:6
- StorageDead(_52); // scope 34 at $DIR/reference_prop.rs:+72:5: +72:6
-- StorageDead(_51); // scope 0 at $DIR/reference_prop.rs:+72:5: +72:6
-- StorageLive(_57); // scope 0 at $DIR/reference_prop.rs:+75:5: +81:6
- StorageLive(_58); // scope 37 at $DIR/reference_prop.rs:+76:13: +76:14
- _58 = const 13_usize; // scope 37 at $DIR/reference_prop.rs:+76:17: +76:25
-- StorageLive(_59); // scope 38 at $DIR/reference_prop.rs:+77:13: +77:14
-- _59 = &raw const _58; // scope 38 at $DIR/reference_prop.rs:+77:17: +77:29
-- StorageLive(_60); // scope 39 at $DIR/reference_prop.rs:+78:13: +78:14
-- _60 = &raw const (*_59); // scope 39 at $DIR/reference_prop.rs:+78:17: +78:30
- StorageLive(_61); // scope 40 at $DIR/reference_prop.rs:+79:13: +79:14
-- _61 = (*_60); // scope 40 at $DIR/reference_prop.rs:+79:17: +79:19
-+ _61 = _58; // scope 40 at $DIR/reference_prop.rs:+79:17: +79:19
- StorageLive(_62); // scope 41 at $DIR/reference_prop.rs:+80:9: +80:19
- StorageLive(_63); // scope 41 at $DIR/reference_prop.rs:+80:16: +80:18
- _63 = (); // scope 41 at $DIR/reference_prop.rs:+80:16: +80:18
- _62 = opaque::<()>(move _63) -> bb9; // scope 41 at $DIR/reference_prop.rs:+80:9: +80:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:276:9: 276:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_56);
+ StorageDead(_55);
+- _51 = const ();
+ StorageDead(_54);
+ StorageDead(_52);
+- StorageDead(_51);
+- StorageLive(_57);
+ StorageLive(_58);
+ _58 = const 13_usize;
+- StorageLive(_59);
+- _59 = &raw const _58;
+- StorageLive(_60);
+- _60 = &raw const (*_59);
+ StorageLive(_61);
+- _61 = (*_60);
++ _61 = _58;
+ StorageLive(_62);
+ StorageLive(_63);
+ _63 = ();
+ _62 = opaque::<()>(move _63) -> [return: bb9, unwind continue];
}
bb9: {
- StorageDead(_63); // scope 41 at $DIR/reference_prop.rs:+80:18: +80:19
- StorageDead(_62); // scope 41 at $DIR/reference_prop.rs:+80:19: +80:20
-- _57 = const (); // scope 37 at $DIR/reference_prop.rs:+75:5: +81:6
- StorageDead(_61); // scope 40 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageDead(_60); // scope 39 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageDead(_59); // scope 38 at $DIR/reference_prop.rs:+81:5: +81:6
- StorageDead(_58); // scope 37 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageDead(_57); // scope 0 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageLive(_64); // scope 0 at $DIR/reference_prop.rs:+84:5: +90:6
- StorageLive(_65); // scope 42 at $DIR/reference_prop.rs:+85:13: +85:14
- _65 = const 5_usize; // scope 42 at $DIR/reference_prop.rs:+85:17: +85:24
-- StorageLive(_66); // scope 43 at $DIR/reference_prop.rs:+86:13: +86:14
-- _66 = &raw const _65; // scope 43 at $DIR/reference_prop.rs:+86:17: +86:29
-- StorageLive(_67); // scope 44 at $DIR/reference_prop.rs:+87:13: +87:14
-- _67 = &_66; // scope 44 at $DIR/reference_prop.rs:+87:17: +87:19
- StorageLive(_68); // scope 45 at $DIR/reference_prop.rs:+88:13: +88:14
-- _68 = (*_66); // scope 45 at $DIR/reference_prop.rs:+88:17: +88:19
-+ _68 = _65; // scope 45 at $DIR/reference_prop.rs:+88:17: +88:19
- StorageLive(_69); // scope 46 at $DIR/reference_prop.rs:+89:9: +89:19
- StorageLive(_70); // scope 46 at $DIR/reference_prop.rs:+89:16: +89:18
- _70 = (); // scope 46 at $DIR/reference_prop.rs:+89:16: +89:18
- _69 = opaque::<()>(move _70) -> bb10; // scope 46 at $DIR/reference_prop.rs:+89:9: +89:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:285:9: 285:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_63);
+ StorageDead(_62);
+- _57 = const ();
+ StorageDead(_61);
+- StorageDead(_60);
+- StorageDead(_59);
+ StorageDead(_58);
+- StorageDead(_57);
+- StorageLive(_64);
+ StorageLive(_65);
+ _65 = const 5_usize;
+- StorageLive(_66);
+- _66 = &raw const _65;
+- StorageLive(_67);
+- _67 = &_66;
+ StorageLive(_68);
+- _68 = (*_66);
++ _68 = _65;
+ StorageLive(_69);
+ StorageLive(_70);
+ _70 = ();
+ _69 = opaque::<()>(move _70) -> [return: bb10, unwind continue];
}
bb10: {
- StorageDead(_70); // scope 46 at $DIR/reference_prop.rs:+89:18: +89:19
- StorageDead(_69); // scope 46 at $DIR/reference_prop.rs:+89:19: +89:20
-- _64 = const (); // scope 42 at $DIR/reference_prop.rs:+84:5: +90:6
- StorageDead(_68); // scope 45 at $DIR/reference_prop.rs:+90:5: +90:6
-- StorageDead(_67); // scope 44 at $DIR/reference_prop.rs:+90:5: +90:6
-- StorageDead(_66); // scope 43 at $DIR/reference_prop.rs:+90:5: +90:6
- StorageDead(_65); // scope 42 at $DIR/reference_prop.rs:+90:5: +90:6
-- StorageDead(_64); // scope 0 at $DIR/reference_prop.rs:+90:5: +90:6
- StorageLive(_71); // scope 47 at $DIR/reference_prop.rs:+94:13: +94:14
- _71 = const 5_usize; // scope 47 at $DIR/reference_prop.rs:+94:17: +94:24
-- StorageLive(_72); // scope 48 at $DIR/reference_prop.rs:+95:13: +95:18
-- _72 = &raw const _71; // scope 48 at $DIR/reference_prop.rs:+95:21: +95:33
-- StorageLive(_73); // scope 49 at $DIR/reference_prop.rs:+96:13: +96:14
-- _73 = &mut _72; // scope 49 at $DIR/reference_prop.rs:+96:17: +96:23
- StorageLive(_74); // scope 50 at $DIR/reference_prop.rs:+97:13: +97:14
-- _74 = (*_72); // scope 50 at $DIR/reference_prop.rs:+97:17: +97:19
-+ _74 = _71; // scope 50 at $DIR/reference_prop.rs:+97:17: +97:19
- StorageLive(_75); // scope 51 at $DIR/reference_prop.rs:+98:9: +98:19
- StorageLive(_76); // scope 51 at $DIR/reference_prop.rs:+98:16: +98:18
- _76 = (); // scope 51 at $DIR/reference_prop.rs:+98:16: +98:18
- _75 = opaque::<()>(move _76) -> bb11; // scope 51 at $DIR/reference_prop.rs:+98:9: +98:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:294:9: 294:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_70);
+ StorageDead(_69);
+- _64 = const ();
+ StorageDead(_68);
+- StorageDead(_67);
+- StorageDead(_66);
+ StorageDead(_65);
+- StorageDead(_64);
+ StorageLive(_71);
+ _71 = const 5_usize;
+- StorageLive(_72);
+- _72 = &raw const _71;
+- StorageLive(_73);
+- _73 = &mut _72;
+ StorageLive(_74);
+- _74 = (*_72);
++ _74 = _71;
+ StorageLive(_75);
+ StorageLive(_76);
+ _76 = ();
+ _75 = opaque::<()>(move _76) -> [return: bb11, unwind continue];
}
bb11: {
- StorageDead(_76); // scope 51 at $DIR/reference_prop.rs:+98:18: +98:19
- StorageDead(_75); // scope 51 at $DIR/reference_prop.rs:+98:19: +98:20
- _0 = const (); // scope 47 at $DIR/reference_prop.rs:+93:5: +99:6
- StorageDead(_74); // scope 50 at $DIR/reference_prop.rs:+99:5: +99:6
-- StorageDead(_73); // scope 49 at $DIR/reference_prop.rs:+99:5: +99:6
-- StorageDead(_72); // scope 48 at $DIR/reference_prop.rs:+99:5: +99:6
- StorageDead(_71); // scope 47 at $DIR/reference_prop.rs:+99:5: +99:6
- return; // scope 0 at $DIR/reference_prop.rs:+100:2: +100:2
+ StorageDead(_76);
+ StorageDead(_75);
+ _0 = const ();
+ StorageDead(_74);
+- StorageDead(_73);
+- StorageDead(_72);
+ StorageDead(_71);
+ return;
}
}
diff --git a/tests/mir-opt/reference_prop.reference_propagation_mut.ReferencePropagation.diff b/tests/mir-opt/reference_prop.reference_propagation_mut.ReferencePropagation.diff
index 8d059de5b..ee680fdb3 100644
--- a/tests/mir-opt/reference_prop.reference_propagation_mut.ReferencePropagation.diff
+++ b/tests/mir-opt/reference_prop.reference_propagation_mut.ReferencePropagation.diff
@@ -2,137 +2,137 @@
+ // MIR for `reference_propagation_mut` after ReferencePropagation
fn reference_propagation_mut(_1: &mut T, _2: &mut T) -> () {
- debug single => _1; // in scope 0 at $DIR/reference_prop.rs:+0:43: +0:49
- debug multiple => _2; // in scope 0 at $DIR/reference_prop.rs:+0:62: +0:74
- let mut _0: (); // return place in scope 0 at $DIR/reference_prop.rs:+0:87: +0:87
- let _3: (); // in scope 0 at $DIR/reference_prop.rs:+2:5: +7:6
- let mut _4: usize; // in scope 0 at $DIR/reference_prop.rs:+3:13: +3:18
- let _7: (); // in scope 0 at $DIR/reference_prop.rs:+6:9: +6:19
- let mut _8: (); // in scope 0 at $DIR/reference_prop.rs:+6:16: +6:18
- let _9: (); // in scope 0 at $DIR/reference_prop.rs:+10:5: +18:6
- let mut _10: usize; // in scope 0 at $DIR/reference_prop.rs:+11:13: +11:18
- let mut _13: &mut usize; // in scope 0 at $DIR/reference_prop.rs:+14:13: +14:20
- let mut _14: &mut usize; // in scope 0 at $DIR/reference_prop.rs:+14:13: +14:20
- let _16: (); // in scope 0 at $DIR/reference_prop.rs:+17:9: +17:19
- let mut _17: (); // in scope 0 at $DIR/reference_prop.rs:+17:16: +17:18
- let _18: (); // in scope 0 at $DIR/reference_prop.rs:+21:5: +27:6
- let mut _19: usize; // in scope 0 at $DIR/reference_prop.rs:+22:13: +22:18
- let _23: (); // in scope 0 at $DIR/reference_prop.rs:+26:9: +26:18
- let mut _24: &&mut usize; // in scope 0 at $DIR/reference_prop.rs:+26:16: +26:17
- let _25: (); // in scope 0 at $DIR/reference_prop.rs:+30:5: +36:6
- let mut _26: usize; // in scope 0 at $DIR/reference_prop.rs:+31:13: +31:18
- let _30: (); // in scope 0 at $DIR/reference_prop.rs:+35:9: +35:18
- let mut _31: *mut &mut usize; // in scope 0 at $DIR/reference_prop.rs:+35:16: +35:17
- let _32: (); // in scope 0 at $DIR/reference_prop.rs:+39:5: +44:6
- let mut _33: usize; // in scope 0 at $DIR/reference_prop.rs:+40:13: +40:18
- let _36: (); // in scope 0 at $DIR/reference_prop.rs:+43:9: +43:18
- let mut _37: &mut usize; // in scope 0 at $DIR/reference_prop.rs:+43:16: +43:17
- let _38: (); // in scope 0 at $DIR/reference_prop.rs:+47:5: +57:6
- let mut _39: usize; // in scope 0 at $DIR/reference_prop.rs:+48:13: +48:18
- let _45: (); // in scope 0 at $DIR/reference_prop.rs:+56:9: +56:19
- let mut _46: &mut usize; // in scope 0 at $DIR/reference_prop.rs:+56:16: +56:18
- let _47: (); // in scope 0 at $DIR/reference_prop.rs:+60:5: +64:6
- let _48: &mut T; // in scope 0 at $DIR/reference_prop.rs:+61:13: +61:14
- let _50: (); // in scope 0 at $DIR/reference_prop.rs:+63:9: +63:19
- let mut _51: (); // in scope 0 at $DIR/reference_prop.rs:+63:16: +63:18
- let _52: (); // in scope 0 at $DIR/reference_prop.rs:+67:5: +72:6
- let _53: &mut T; // in scope 0 at $DIR/reference_prop.rs:+68:13: +68:14
- let mut _54: &mut T; // in scope 0 at $DIR/reference_prop.rs:+69:20: +69:32
- let mut _55: &mut T; // in scope 0 at $DIR/reference_prop.rs:+69:20: +69:32
- let _57: (); // in scope 0 at $DIR/reference_prop.rs:+71:9: +71:19
- let mut _58: (); // in scope 0 at $DIR/reference_prop.rs:+71:16: +71:18
- let _59: (); // in scope 0 at $DIR/reference_prop.rs:+75:5: +81:6
- let mut _60: usize; // in scope 0 at $DIR/reference_prop.rs:+76:13: +76:18
- let _64: (); // in scope 0 at $DIR/reference_prop.rs:+80:9: +80:19
- let mut _65: (); // in scope 0 at $DIR/reference_prop.rs:+80:16: +80:18
- let mut _66: usize; // in scope 0 at $DIR/reference_prop.rs:+85:13: +85:18
- let _70: (); // in scope 0 at $DIR/reference_prop.rs:+89:9: +89:19
- let mut _71: (); // in scope 0 at $DIR/reference_prop.rs:+89:16: +89:18
+ debug single => _1;
+ debug multiple => _2;
+ let mut _0: ();
+ let _3: ();
+ let mut _4: usize;
+ let _7: ();
+ let mut _8: ();
+ let _9: ();
+ let mut _10: usize;
+ let mut _13: &mut usize;
+ let mut _14: &mut usize;
+ let _16: ();
+ let mut _17: ();
+ let _18: ();
+ let mut _19: usize;
+ let _23: ();
+ let mut _24: &&mut usize;
+ let _25: ();
+ let mut _26: usize;
+ let _30: ();
+ let mut _31: *mut &mut usize;
+ let _32: ();
+ let mut _33: usize;
+ let _36: ();
+ let mut _37: &mut usize;
+ let _38: ();
+ let mut _39: usize;
+ let _45: ();
+ let mut _46: &mut usize;
+ let _47: ();
+ let _48: &mut T;
+ let _50: ();
+ let mut _51: ();
+ let _52: ();
+ let _53: &mut T;
+ let mut _54: &mut T;
+ let mut _55: &mut T;
+ let _57: ();
+ let mut _58: ();
+ let _59: ();
+ let mut _60: usize;
+ let _64: ();
+ let mut _65: ();
+ let mut _66: usize;
+ let _70: ();
+ let mut _71: ();
scope 1 {
- debug a => _4; // in scope 1 at $DIR/reference_prop.rs:+3:13: +3:18
- let _5: &mut usize; // in scope 1 at $DIR/reference_prop.rs:+4:13: +4:14
+ debug a => _4;
+ let _5: &mut usize;
scope 2 {
-- debug b => _5; // in scope 2 at $DIR/reference_prop.rs:+4:13: +4:14
-+ debug b => &_4; // in scope 2 at $DIR/reference_prop.rs:+4:13: +4:14
- let _6: usize; // in scope 2 at $DIR/reference_prop.rs:+5:13: +5:14
+- debug b => _5;
++ debug b => &_4;
+ let _6: usize;
scope 3 {
- debug c => _6; // in scope 3 at $DIR/reference_prop.rs:+5:13: +5:14
+ debug c => _6;
}
}
}
scope 4 {
- debug a => _10; // in scope 4 at $DIR/reference_prop.rs:+11:13: +11:18
- let mut _11: usize; // in scope 4 at $DIR/reference_prop.rs:+12:13: +12:19
+ debug a => _10;
+ let mut _11: usize;
scope 5 {
- debug a2 => _11; // in scope 5 at $DIR/reference_prop.rs:+12:13: +12:19
- let mut _12: &mut usize; // in scope 5 at $DIR/reference_prop.rs:+13:13: +13:18
+ debug a2 => _11;
+ let mut _12: &mut usize;
scope 6 {
- debug b => _12; // in scope 6 at $DIR/reference_prop.rs:+13:13: +13:18
- let _15: usize; // in scope 6 at $DIR/reference_prop.rs:+16:13: +16:14
+ debug b => _12;
+ let _15: usize;
scope 7 {
- debug c => _15; // in scope 7 at $DIR/reference_prop.rs:+16:13: +16:14
+ debug c => _15;
}
}
}
}
scope 8 {
- debug a => _19; // in scope 8 at $DIR/reference_prop.rs:+22:13: +22:18
- let _20: &mut usize; // in scope 8 at $DIR/reference_prop.rs:+23:13: +23:14
+ debug a => _19;
+ let _20: &mut usize;
scope 9 {
- debug b => _20; // in scope 9 at $DIR/reference_prop.rs:+23:13: +23:14
- let _21: &&mut usize; // in scope 9 at $DIR/reference_prop.rs:+24:13: +24:14
+ debug b => _20;
+ let _21: &&mut usize;
scope 10 {
- debug d => _21; // in scope 10 at $DIR/reference_prop.rs:+24:13: +24:14
- let _22: usize; // in scope 10 at $DIR/reference_prop.rs:+25:13: +25:14
+ debug d => _21;
+ let _22: usize;
scope 11 {
- debug c => _22; // in scope 11 at $DIR/reference_prop.rs:+25:13: +25:14
+ debug c => _22;
}
}
}
}
scope 12 {
- debug a => _26; // in scope 12 at $DIR/reference_prop.rs:+31:13: +31:18
- let mut _27: &mut usize; // in scope 12 at $DIR/reference_prop.rs:+32:13: +32:18
+ debug a => _26;
+ let mut _27: &mut usize;
scope 13 {
- debug b => _27; // in scope 13 at $DIR/reference_prop.rs:+32:13: +32:18
- let _28: *mut &mut usize; // in scope 13 at $DIR/reference_prop.rs:+33:13: +33:14
+ debug b => _27;
+ let _28: *mut &mut usize;
scope 14 {
- debug d => _28; // in scope 14 at $DIR/reference_prop.rs:+33:13: +33:14
- let _29: usize; // in scope 14 at $DIR/reference_prop.rs:+34:13: +34:14
+ debug d => _28;
+ let _29: usize;
scope 15 {
- debug c => _29; // in scope 15 at $DIR/reference_prop.rs:+34:13: +34:14
+ debug c => _29;
}
}
}
}
scope 16 {
- debug a => _33; // in scope 16 at $DIR/reference_prop.rs:+40:13: +40:18
- let _34: &mut usize; // in scope 16 at $DIR/reference_prop.rs:+41:13: +41:14
+ debug a => _33;
+ let _34: &mut usize;
scope 17 {
- debug b => _34; // in scope 17 at $DIR/reference_prop.rs:+41:13: +41:14
- let _35: usize; // in scope 17 at $DIR/reference_prop.rs:+42:13: +42:14
+ debug b => _34;
+ let _35: usize;
scope 18 {
- debug c => _35; // in scope 18 at $DIR/reference_prop.rs:+42:13: +42:14
+ debug c => _35;
}
}
}
scope 19 {
- debug a => _39; // in scope 19 at $DIR/reference_prop.rs:+48:13: +48:18
- let _40: &mut usize; // in scope 19 at $DIR/reference_prop.rs:+49:13: +49:15
+ debug a => _39;
+ let _40: &mut usize;
scope 20 {
- debug b1 => _40; // in scope 20 at $DIR/reference_prop.rs:+49:13: +49:15
- let _41: usize; // in scope 20 at $DIR/reference_prop.rs:+50:13: +50:14
+ debug b1 => _40;
+ let _41: usize;
scope 21 {
- debug c => _41; // in scope 21 at $DIR/reference_prop.rs:+50:13: +50:14
- let _42: &mut usize; // in scope 21 at $DIR/reference_prop.rs:+51:13: +51:15
+ debug c => _41;
+ let _42: &mut usize;
scope 22 {
- debug b2 => _42; // in scope 22 at $DIR/reference_prop.rs:+51:13: +51:15
- let _43: usize; // in scope 22 at $DIR/reference_prop.rs:+52:13: +52:15
+ debug b2 => _42;
+ let _43: usize;
scope 23 {
- debug c2 => _43; // in scope 23 at $DIR/reference_prop.rs:+52:13: +52:15
- let _44: &mut usize; // in scope 23 at $DIR/reference_prop.rs:+53:13: +53:15
+ debug c2 => _43;
+ let _44: &mut usize;
scope 24 {
- debug b3 => _44; // in scope 24 at $DIR/reference_prop.rs:+53:13: +53:15
+ debug b3 => _44;
}
}
}
@@ -140,333 +140,303 @@
}
}
scope 25 {
-- debug a => _48; // in scope 25 at $DIR/reference_prop.rs:+61:13: +61:14
-+ debug a => _1; // in scope 25 at $DIR/reference_prop.rs:+61:13: +61:14
- let _49: T; // in scope 25 at $DIR/reference_prop.rs:+62:13: +62:14
+- debug a => _48;
++ debug a => _1;
+ let _49: T;
scope 26 {
- debug b => _49; // in scope 26 at $DIR/reference_prop.rs:+62:13: +62:14
+ debug b => _49;
}
}
scope 27 {
- debug a => _53; // in scope 27 at $DIR/reference_prop.rs:+68:13: +68:14
- let _56: T; // in scope 27 at $DIR/reference_prop.rs:+70:13: +70:14
+ debug a => _53;
+ let _56: T;
scope 28 {
- debug b => _56; // in scope 28 at $DIR/reference_prop.rs:+70:13: +70:14
+ debug b => _56;
}
}
scope 29 {
- debug a => _60; // in scope 29 at $DIR/reference_prop.rs:+76:13: +76:18
- let _61: &mut usize; // in scope 29 at $DIR/reference_prop.rs:+77:13: +77:14
+ debug a => _60;
+ let _61: &mut usize;
scope 30 {
-- debug b => _61; // in scope 30 at $DIR/reference_prop.rs:+77:13: +77:14
-+ debug b => &_60; // in scope 30 at $DIR/reference_prop.rs:+77:13: +77:14
- let _62: &&mut usize; // in scope 30 at $DIR/reference_prop.rs:+78:13: +78:14
+- debug b => _61;
++ debug b => &_60;
+ let _62: &&mut usize;
scope 31 {
-- debug d => _62; // in scope 31 at $DIR/reference_prop.rs:+78:13: +78:14
-+ debug d => &&_60; // in scope 31 at $DIR/reference_prop.rs:+78:13: +78:14
- let _63: usize; // in scope 31 at $DIR/reference_prop.rs:+79:13: +79:14
+- debug d => _62;
++ debug d => &&_60;
+ let _63: usize;
scope 32 {
- debug c => _63; // in scope 32 at $DIR/reference_prop.rs:+79:13: +79:14
+ debug c => _63;
}
}
}
}
scope 33 {
- debug a => _66; // in scope 33 at $DIR/reference_prop.rs:+85:13: +85:18
- let mut _67: &mut usize; // in scope 33 at $DIR/reference_prop.rs:+86:13: +86:18
+ debug a => _66;
+ let mut _67: &mut usize;
scope 34 {
-- debug b => _67; // in scope 34 at $DIR/reference_prop.rs:+86:13: +86:18
-+ debug b => &_66; // in scope 34 at $DIR/reference_prop.rs:+86:13: +86:18
- let _68: &mut &mut usize; // in scope 34 at $DIR/reference_prop.rs:+87:13: +87:14
+- debug b => _67;
++ debug b => &_66;
+ let _68: &mut &mut usize;
scope 35 {
-- debug d => _68; // in scope 35 at $DIR/reference_prop.rs:+87:13: +87:14
-+ debug d => &&_66; // in scope 35 at $DIR/reference_prop.rs:+87:13: +87:14
- let _69: usize; // in scope 35 at $DIR/reference_prop.rs:+88:13: +88:14
+- debug d => _68;
++ debug d => &&_66;
+ let _69: usize;
scope 36 {
- debug c => _69; // in scope 36 at $DIR/reference_prop.rs:+88:13: +88:14
+ debug c => _69;
}
}
}
}
bb0: {
-- StorageLive(_3); // scope 0 at $DIR/reference_prop.rs:+2:5: +7:6
- StorageLive(_4); // scope 0 at $DIR/reference_prop.rs:+3:13: +3:18
- _4 = const 5_usize; // scope 0 at $DIR/reference_prop.rs:+3:21: +3:28
-- StorageLive(_5); // scope 1 at $DIR/reference_prop.rs:+4:13: +4:14
-- _5 = &mut _4; // scope 1 at $DIR/reference_prop.rs:+4:17: +4:23
- StorageLive(_6); // scope 2 at $DIR/reference_prop.rs:+5:13: +5:14
-- _6 = (*_5); // scope 2 at $DIR/reference_prop.rs:+5:17: +5:19
-+ _6 = _4; // scope 2 at $DIR/reference_prop.rs:+5:17: +5:19
- StorageLive(_7); // scope 3 at $DIR/reference_prop.rs:+6:9: +6:19
- StorageLive(_8); // scope 3 at $DIR/reference_prop.rs:+6:16: +6:18
- _8 = (); // scope 3 at $DIR/reference_prop.rs:+6:16: +6:18
- _7 = opaque::<()>(move _8) -> bb1; // scope 3 at $DIR/reference_prop.rs:+6:9: +6:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:109:9: 109:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+- StorageLive(_3);
+ StorageLive(_4);
+ _4 = const 5_usize;
+- StorageLive(_5);
+- _5 = &mut _4;
+ StorageLive(_6);
+- _6 = (*_5);
++ _6 = _4;
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = ();
+ _7 = opaque::<()>(move _8) -> [return: bb1, unwind continue];
}
bb1: {
- StorageDead(_8); // scope 3 at $DIR/reference_prop.rs:+6:18: +6:19
- StorageDead(_7); // scope 3 at $DIR/reference_prop.rs:+6:19: +6:20
-- _3 = const (); // scope 0 at $DIR/reference_prop.rs:+2:5: +7:6
- StorageDead(_6); // scope 2 at $DIR/reference_prop.rs:+7:5: +7:6
-- StorageDead(_5); // scope 1 at $DIR/reference_prop.rs:+7:5: +7:6
- StorageDead(_4); // scope 0 at $DIR/reference_prop.rs:+7:5: +7:6
-- StorageDead(_3); // scope 0 at $DIR/reference_prop.rs:+7:5: +7:6
-- StorageLive(_9); // scope 0 at $DIR/reference_prop.rs:+10:5: +18:6
- StorageLive(_10); // scope 0 at $DIR/reference_prop.rs:+11:13: +11:18
- _10 = const 5_usize; // scope 0 at $DIR/reference_prop.rs:+11:21: +11:28
- StorageLive(_11); // scope 4 at $DIR/reference_prop.rs:+12:13: +12:19
- _11 = const 7_usize; // scope 4 at $DIR/reference_prop.rs:+12:22: +12:29
- StorageLive(_12); // scope 5 at $DIR/reference_prop.rs:+13:13: +13:18
- _12 = &mut _10; // scope 5 at $DIR/reference_prop.rs:+13:21: +13:27
- StorageLive(_13); // scope 6 at $DIR/reference_prop.rs:+14:13: +14:20
-- StorageLive(_14); // scope 6 at $DIR/reference_prop.rs:+14:13: +14:20
-- _14 = &mut _11; // scope 6 at $DIR/reference_prop.rs:+14:13: +14:20
-- _13 = &mut (*_14); // scope 6 at $DIR/reference_prop.rs:+14:13: +14:20
-+ _13 = &mut _11; // scope 6 at $DIR/reference_prop.rs:+14:13: +14:20
- _12 = move _13; // scope 6 at $DIR/reference_prop.rs:+14:9: +14:20
- StorageDead(_13); // scope 6 at $DIR/reference_prop.rs:+14:19: +14:20
-- StorageDead(_14); // scope 6 at $DIR/reference_prop.rs:+14:20: +14:21
- StorageLive(_15); // scope 6 at $DIR/reference_prop.rs:+16:13: +16:14
- _15 = (*_12); // scope 6 at $DIR/reference_prop.rs:+16:17: +16:19
- StorageLive(_16); // scope 7 at $DIR/reference_prop.rs:+17:9: +17:19
- StorageLive(_17); // scope 7 at $DIR/reference_prop.rs:+17:16: +17:18
- _17 = (); // scope 7 at $DIR/reference_prop.rs:+17:16: +17:18
- _16 = opaque::<()>(move _17) -> bb2; // scope 7 at $DIR/reference_prop.rs:+17:9: +17:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:120:9: 120:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_8);
+ StorageDead(_7);
+- _3 = const ();
+ StorageDead(_6);
+- StorageDead(_5);
+ StorageDead(_4);
+- StorageDead(_3);
+- StorageLive(_9);
+ StorageLive(_10);
+ _10 = const 5_usize;
+ StorageLive(_11);
+ _11 = const 7_usize;
+ StorageLive(_12);
+ _12 = &mut _10;
+ StorageLive(_13);
+- StorageLive(_14);
+- _14 = &mut _11;
+- _13 = &mut (*_14);
++ _13 = &mut _11;
+ _12 = move _13;
+ StorageDead(_13);
+- StorageDead(_14);
+ StorageLive(_15);
+ _15 = (*_12);
+ StorageLive(_16);
+ StorageLive(_17);
+ _17 = ();
+ _16 = opaque::<()>(move _17) -> [return: bb2, unwind continue];
}
bb2: {
- StorageDead(_17); // scope 7 at $DIR/reference_prop.rs:+17:18: +17:19
- StorageDead(_16); // scope 7 at $DIR/reference_prop.rs:+17:19: +17:20
-- _9 = const (); // scope 0 at $DIR/reference_prop.rs:+10:5: +18:6
- StorageDead(_15); // scope 6 at $DIR/reference_prop.rs:+18:5: +18:6
- StorageDead(_12); // scope 5 at $DIR/reference_prop.rs:+18:5: +18:6
- StorageDead(_11); // scope 4 at $DIR/reference_prop.rs:+18:5: +18:6
- StorageDead(_10); // scope 0 at $DIR/reference_prop.rs:+18:5: +18:6
-- StorageDead(_9); // scope 0 at $DIR/reference_prop.rs:+18:5: +18:6
-- StorageLive(_18); // scope 0 at $DIR/reference_prop.rs:+21:5: +27:6
- StorageLive(_19); // scope 0 at $DIR/reference_prop.rs:+22:13: +22:18
- _19 = const 5_usize; // scope 0 at $DIR/reference_prop.rs:+22:21: +22:28
- StorageLive(_20); // scope 8 at $DIR/reference_prop.rs:+23:13: +23:14
- _20 = &mut _19; // scope 8 at $DIR/reference_prop.rs:+23:17: +23:23
- StorageLive(_21); // scope 9 at $DIR/reference_prop.rs:+24:13: +24:14
- _21 = &_20; // scope 9 at $DIR/reference_prop.rs:+24:17: +24:19
- StorageLive(_22); // scope 10 at $DIR/reference_prop.rs:+25:13: +25:14
- _22 = (*_20); // scope 10 at $DIR/reference_prop.rs:+25:17: +25:19
- StorageLive(_23); // scope 11 at $DIR/reference_prop.rs:+26:9: +26:18
- StorageLive(_24); // scope 11 at $DIR/reference_prop.rs:+26:16: +26:17
- _24 = _21; // scope 11 at $DIR/reference_prop.rs:+26:16: +26:17
- _23 = opaque::<&&mut usize>(move _24) -> bb3; // scope 11 at $DIR/reference_prop.rs:+26:9: +26:18
- // mir::Constant
- // + span: $DIR/reference_prop.rs:129:9: 129:15
- // + literal: Const { ty: fn(&&mut usize) {opaque::<&&mut usize>}, val: Value(<ZST>) }
+ StorageDead(_17);
+ StorageDead(_16);
+- _9 = const ();
+ StorageDead(_15);
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_10);
+- StorageDead(_9);
+- StorageLive(_18);
+ StorageLive(_19);
+ _19 = const 5_usize;
+ StorageLive(_20);
+ _20 = &mut _19;
+ StorageLive(_21);
+ _21 = &_20;
+ StorageLive(_22);
+ _22 = (*_20);
+ StorageLive(_23);
+ StorageLive(_24);
+ _24 = _21;
+ _23 = opaque::<&&mut usize>(move _24) -> [return: bb3, unwind continue];
}
bb3: {
- StorageDead(_24); // scope 11 at $DIR/reference_prop.rs:+26:17: +26:18
- StorageDead(_23); // scope 11 at $DIR/reference_prop.rs:+26:18: +26:19
-- _18 = const (); // scope 0 at $DIR/reference_prop.rs:+21:5: +27:6
- StorageDead(_22); // scope 10 at $DIR/reference_prop.rs:+27:5: +27:6
- StorageDead(_21); // scope 9 at $DIR/reference_prop.rs:+27:5: +27:6
- StorageDead(_20); // scope 8 at $DIR/reference_prop.rs:+27:5: +27:6
- StorageDead(_19); // scope 0 at $DIR/reference_prop.rs:+27:5: +27:6
-- StorageDead(_18); // scope 0 at $DIR/reference_prop.rs:+27:5: +27:6
-- StorageLive(_25); // scope 0 at $DIR/reference_prop.rs:+30:5: +36:6
- StorageLive(_26); // scope 0 at $DIR/reference_prop.rs:+31:13: +31:18
- _26 = const 5_usize; // scope 0 at $DIR/reference_prop.rs:+31:21: +31:28
- StorageLive(_27); // scope 12 at $DIR/reference_prop.rs:+32:13: +32:18
- _27 = &mut _26; // scope 12 at $DIR/reference_prop.rs:+32:21: +32:27
- StorageLive(_28); // scope 13 at $DIR/reference_prop.rs:+33:13: +33:14
- _28 = &raw mut _27; // scope 13 at $DIR/reference_prop.rs:+33:17: +33:27
- StorageLive(_29); // scope 14 at $DIR/reference_prop.rs:+34:13: +34:14
- _29 = (*_27); // scope 14 at $DIR/reference_prop.rs:+34:17: +34:19
- StorageLive(_30); // scope 15 at $DIR/reference_prop.rs:+35:9: +35:18
- StorageLive(_31); // scope 15 at $DIR/reference_prop.rs:+35:16: +35:17
- _31 = _28; // scope 15 at $DIR/reference_prop.rs:+35:16: +35:17
- _30 = opaque::<*mut &mut usize>(move _31) -> bb4; // scope 15 at $DIR/reference_prop.rs:+35:9: +35:18
- // mir::Constant
- // + span: $DIR/reference_prop.rs:138:9: 138:15
- // + literal: Const { ty: fn(*mut &mut usize) {opaque::<*mut &mut usize>}, val: Value(<ZST>) }
+ StorageDead(_24);
+ StorageDead(_23);
+- _18 = const ();
+ StorageDead(_22);
+ StorageDead(_21);
+ StorageDead(_20);
+ StorageDead(_19);
+- StorageDead(_18);
+- StorageLive(_25);
+ StorageLive(_26);
+ _26 = const 5_usize;
+ StorageLive(_27);
+ _27 = &mut _26;
+ StorageLive(_28);
+ _28 = &raw mut _27;
+ StorageLive(_29);
+ _29 = (*_27);
+ StorageLive(_30);
+ StorageLive(_31);
+ _31 = _28;
+ _30 = opaque::<*mut &mut usize>(move _31) -> [return: bb4, unwind continue];
}
bb4: {
- StorageDead(_31); // scope 15 at $DIR/reference_prop.rs:+35:17: +35:18
- StorageDead(_30); // scope 15 at $DIR/reference_prop.rs:+35:18: +35:19
-- _25 = const (); // scope 0 at $DIR/reference_prop.rs:+30:5: +36:6
- StorageDead(_29); // scope 14 at $DIR/reference_prop.rs:+36:5: +36:6
- StorageDead(_28); // scope 13 at $DIR/reference_prop.rs:+36:5: +36:6
- StorageDead(_27); // scope 12 at $DIR/reference_prop.rs:+36:5: +36:6
- StorageDead(_26); // scope 0 at $DIR/reference_prop.rs:+36:5: +36:6
-- StorageDead(_25); // scope 0 at $DIR/reference_prop.rs:+36:5: +36:6
-- StorageLive(_32); // scope 0 at $DIR/reference_prop.rs:+39:5: +44:6
- StorageLive(_33); // scope 0 at $DIR/reference_prop.rs:+40:13: +40:18
- _33 = const 7_usize; // scope 0 at $DIR/reference_prop.rs:+40:21: +40:28
- StorageLive(_34); // scope 16 at $DIR/reference_prop.rs:+41:13: +41:14
- _34 = &mut _33; // scope 16 at $DIR/reference_prop.rs:+41:17: +41:23
- StorageLive(_35); // scope 17 at $DIR/reference_prop.rs:+42:13: +42:14
- _35 = (*_34); // scope 17 at $DIR/reference_prop.rs:+42:17: +42:19
- StorageLive(_36); // scope 18 at $DIR/reference_prop.rs:+43:9: +43:18
- StorageLive(_37); // scope 18 at $DIR/reference_prop.rs:+43:16: +43:17
- _37 = move _34; // scope 18 at $DIR/reference_prop.rs:+43:16: +43:17
- _36 = opaque::<&mut usize>(move _37) -> bb5; // scope 18 at $DIR/reference_prop.rs:+43:9: +43:18
- // mir::Constant
- // + span: $DIR/reference_prop.rs:146:9: 146:15
- // + literal: Const { ty: fn(&mut usize) {opaque::<&mut usize>}, val: Value(<ZST>) }
+ StorageDead(_31);
+ StorageDead(_30);
+- _25 = const ();
+ StorageDead(_29);
+ StorageDead(_28);
+ StorageDead(_27);
+ StorageDead(_26);
+- StorageDead(_25);
+- StorageLive(_32);
+ StorageLive(_33);
+ _33 = const 7_usize;
+ StorageLive(_34);
+ _34 = &mut _33;
+ StorageLive(_35);
+ _35 = (*_34);
+ StorageLive(_36);
+ StorageLive(_37);
+ _37 = move _34;
+ _36 = opaque::<&mut usize>(move _37) -> [return: bb5, unwind continue];
}
bb5: {
- StorageDead(_37); // scope 18 at $DIR/reference_prop.rs:+43:17: +43:18
- StorageDead(_36); // scope 18 at $DIR/reference_prop.rs:+43:18: +43:19
-- _32 = const (); // scope 0 at $DIR/reference_prop.rs:+39:5: +44:6
- StorageDead(_35); // scope 17 at $DIR/reference_prop.rs:+44:5: +44:6
- StorageDead(_34); // scope 16 at $DIR/reference_prop.rs:+44:5: +44:6
- StorageDead(_33); // scope 0 at $DIR/reference_prop.rs:+44:5: +44:6
-- StorageDead(_32); // scope 0 at $DIR/reference_prop.rs:+44:5: +44:6
-- StorageLive(_38); // scope 0 at $DIR/reference_prop.rs:+47:5: +57:6
- StorageLive(_39); // scope 0 at $DIR/reference_prop.rs:+48:13: +48:18
- _39 = const 7_usize; // scope 0 at $DIR/reference_prop.rs:+48:21: +48:28
- StorageLive(_40); // scope 19 at $DIR/reference_prop.rs:+49:13: +49:15
- _40 = &mut _39; // scope 19 at $DIR/reference_prop.rs:+49:18: +49:24
- StorageLive(_41); // scope 20 at $DIR/reference_prop.rs:+50:13: +50:14
- _41 = (*_40); // scope 20 at $DIR/reference_prop.rs:+50:17: +50:20
- StorageLive(_42); // scope 21 at $DIR/reference_prop.rs:+51:13: +51:15
- _42 = move _40; // scope 21 at $DIR/reference_prop.rs:+51:18: +51:20
- StorageLive(_43); // scope 22 at $DIR/reference_prop.rs:+52:13: +52:15
- _43 = (*_42); // scope 22 at $DIR/reference_prop.rs:+52:18: +52:21
- StorageLive(_44); // scope 23 at $DIR/reference_prop.rs:+53:13: +53:15
- _44 = move _42; // scope 23 at $DIR/reference_prop.rs:+53:18: +53:20
- StorageLive(_45); // scope 24 at $DIR/reference_prop.rs:+56:9: +56:19
- StorageLive(_46); // scope 24 at $DIR/reference_prop.rs:+56:16: +56:18
- _46 = move _44; // scope 24 at $DIR/reference_prop.rs:+56:16: +56:18
- _45 = opaque::<&mut usize>(move _46) -> bb6; // scope 24 at $DIR/reference_prop.rs:+56:9: +56:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:159:9: 159:15
- // + literal: Const { ty: fn(&mut usize) {opaque::<&mut usize>}, val: Value(<ZST>) }
+ StorageDead(_37);
+ StorageDead(_36);
+- _32 = const ();
+ StorageDead(_35);
+ StorageDead(_34);
+ StorageDead(_33);
+- StorageDead(_32);
+- StorageLive(_38);
+ StorageLive(_39);
+ _39 = const 7_usize;
+ StorageLive(_40);
+ _40 = &mut _39;
+ StorageLive(_41);
+ _41 = (*_40);
+ StorageLive(_42);
+ _42 = move _40;
+ StorageLive(_43);
+ _43 = (*_42);
+ StorageLive(_44);
+ _44 = move _42;
+ StorageLive(_45);
+ StorageLive(_46);
+ _46 = move _44;
+ _45 = opaque::<&mut usize>(move _46) -> [return: bb6, unwind continue];
}
bb6: {
- StorageDead(_46); // scope 24 at $DIR/reference_prop.rs:+56:18: +56:19
- StorageDead(_45); // scope 24 at $DIR/reference_prop.rs:+56:19: +56:20
-- _38 = const (); // scope 0 at $DIR/reference_prop.rs:+47:5: +57:6
- StorageDead(_44); // scope 23 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_43); // scope 22 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_42); // scope 21 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_41); // scope 20 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_40); // scope 19 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_39); // scope 0 at $DIR/reference_prop.rs:+57:5: +57:6
-- StorageDead(_38); // scope 0 at $DIR/reference_prop.rs:+57:5: +57:6
-- StorageLive(_47); // scope 0 at $DIR/reference_prop.rs:+60:5: +64:6
-- StorageLive(_48); // scope 0 at $DIR/reference_prop.rs:+61:13: +61:14
-- _48 = &mut (*_1); // scope 0 at $DIR/reference_prop.rs:+61:17: +61:29
- StorageLive(_49); // scope 25 at $DIR/reference_prop.rs:+62:13: +62:14
-- _49 = (*_48); // scope 25 at $DIR/reference_prop.rs:+62:17: +62:19
-+ _49 = (*_1); // scope 25 at $DIR/reference_prop.rs:+62:17: +62:19
- StorageLive(_50); // scope 26 at $DIR/reference_prop.rs:+63:9: +63:19
- StorageLive(_51); // scope 26 at $DIR/reference_prop.rs:+63:16: +63:18
- _51 = (); // scope 26 at $DIR/reference_prop.rs:+63:16: +63:18
- _50 = opaque::<()>(move _51) -> bb7; // scope 26 at $DIR/reference_prop.rs:+63:9: +63:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:166:9: 166:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_46);
+ StorageDead(_45);
+- _38 = const ();
+ StorageDead(_44);
+ StorageDead(_43);
+ StorageDead(_42);
+ StorageDead(_41);
+ StorageDead(_40);
+ StorageDead(_39);
+- StorageDead(_38);
+- StorageLive(_47);
+- StorageLive(_48);
+- _48 = &mut (*_1);
+ StorageLive(_49);
+- _49 = (*_48);
++ _49 = (*_1);
+ StorageLive(_50);
+ StorageLive(_51);
+ _51 = ();
+ _50 = opaque::<()>(move _51) -> [return: bb7, unwind continue];
}
bb7: {
- StorageDead(_51); // scope 26 at $DIR/reference_prop.rs:+63:18: +63:19
- StorageDead(_50); // scope 26 at $DIR/reference_prop.rs:+63:19: +63:20
-- _47 = const (); // scope 0 at $DIR/reference_prop.rs:+60:5: +64:6
- StorageDead(_49); // scope 25 at $DIR/reference_prop.rs:+64:5: +64:6
-- StorageDead(_48); // scope 0 at $DIR/reference_prop.rs:+64:5: +64:6
-- StorageDead(_47); // scope 0 at $DIR/reference_prop.rs:+64:5: +64:6
-- StorageLive(_52); // scope 0 at $DIR/reference_prop.rs:+67:5: +72:6
- StorageLive(_53); // scope 0 at $DIR/reference_prop.rs:+68:13: +68:14
- _53 = &mut (*_2); // scope 0 at $DIR/reference_prop.rs:+68:17: +68:31
- StorageLive(_54); // scope 27 at $DIR/reference_prop.rs:+69:20: +69:32
-- StorageLive(_55); // scope 27 at $DIR/reference_prop.rs:+69:20: +69:32
-- _55 = &mut (*_1); // scope 27 at $DIR/reference_prop.rs:+69:20: +69:32
-- _54 = &mut (*_55); // scope 27 at $DIR/reference_prop.rs:+69:20: +69:32
-+ _54 = &mut (*_1); // scope 27 at $DIR/reference_prop.rs:+69:20: +69:32
- _2 = move _54; // scope 27 at $DIR/reference_prop.rs:+69:9: +69:32
- StorageDead(_54); // scope 27 at $DIR/reference_prop.rs:+69:31: +69:32
-- StorageDead(_55); // scope 27 at $DIR/reference_prop.rs:+69:32: +69:33
- StorageLive(_56); // scope 27 at $DIR/reference_prop.rs:+70:13: +70:14
- _56 = (*_53); // scope 27 at $DIR/reference_prop.rs:+70:17: +70:19
- StorageLive(_57); // scope 28 at $DIR/reference_prop.rs:+71:9: +71:19
- StorageLive(_58); // scope 28 at $DIR/reference_prop.rs:+71:16: +71:18
- _58 = (); // scope 28 at $DIR/reference_prop.rs:+71:16: +71:18
- _57 = opaque::<()>(move _58) -> bb8; // scope 28 at $DIR/reference_prop.rs:+71:9: +71:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:174:9: 174:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_51);
+ StorageDead(_50);
+- _47 = const ();
+ StorageDead(_49);
+- StorageDead(_48);
+- StorageDead(_47);
+- StorageLive(_52);
+ StorageLive(_53);
+ _53 = &mut (*_2);
+ StorageLive(_54);
+- StorageLive(_55);
+- _55 = &mut (*_1);
+- _54 = &mut (*_55);
++ _54 = &mut (*_1);
+ _2 = move _54;
+ StorageDead(_54);
+- StorageDead(_55);
+ StorageLive(_56);
+ _56 = (*_53);
+ StorageLive(_57);
+ StorageLive(_58);
+ _58 = ();
+ _57 = opaque::<()>(move _58) -> [return: bb8, unwind continue];
}
bb8: {
- StorageDead(_58); // scope 28 at $DIR/reference_prop.rs:+71:18: +71:19
- StorageDead(_57); // scope 28 at $DIR/reference_prop.rs:+71:19: +71:20
-- _52 = const (); // scope 0 at $DIR/reference_prop.rs:+67:5: +72:6
- StorageDead(_56); // scope 27 at $DIR/reference_prop.rs:+72:5: +72:6
- StorageDead(_53); // scope 0 at $DIR/reference_prop.rs:+72:5: +72:6
-- StorageDead(_52); // scope 0 at $DIR/reference_prop.rs:+72:5: +72:6
-- StorageLive(_59); // scope 0 at $DIR/reference_prop.rs:+75:5: +81:6
- StorageLive(_60); // scope 0 at $DIR/reference_prop.rs:+76:13: +76:18
- _60 = const 5_usize; // scope 0 at $DIR/reference_prop.rs:+76:21: +76:28
-- StorageLive(_61); // scope 29 at $DIR/reference_prop.rs:+77:13: +77:14
-- _61 = &mut _60; // scope 29 at $DIR/reference_prop.rs:+77:17: +77:23
-- StorageLive(_62); // scope 30 at $DIR/reference_prop.rs:+78:13: +78:14
-- _62 = &_61; // scope 30 at $DIR/reference_prop.rs:+78:17: +78:19
- StorageLive(_63); // scope 31 at $DIR/reference_prop.rs:+79:13: +79:14
-- _63 = (*_61); // scope 31 at $DIR/reference_prop.rs:+79:17: +79:19
-+ _63 = _60; // scope 31 at $DIR/reference_prop.rs:+79:17: +79:19
- StorageLive(_64); // scope 32 at $DIR/reference_prop.rs:+80:9: +80:19
- StorageLive(_65); // scope 32 at $DIR/reference_prop.rs:+80:16: +80:18
- _65 = (); // scope 32 at $DIR/reference_prop.rs:+80:16: +80:18
- _64 = opaque::<()>(move _65) -> bb9; // scope 32 at $DIR/reference_prop.rs:+80:9: +80:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:183:9: 183:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_58);
+ StorageDead(_57);
+- _52 = const ();
+ StorageDead(_56);
+ StorageDead(_53);
+- StorageDead(_52);
+- StorageLive(_59);
+ StorageLive(_60);
+ _60 = const 5_usize;
+- StorageLive(_61);
+- _61 = &mut _60;
+- StorageLive(_62);
+- _62 = &_61;
+ StorageLive(_63);
+- _63 = (*_61);
++ _63 = _60;
+ StorageLive(_64);
+ StorageLive(_65);
+ _65 = ();
+ _64 = opaque::<()>(move _65) -> [return: bb9, unwind continue];
}
bb9: {
- StorageDead(_65); // scope 32 at $DIR/reference_prop.rs:+80:18: +80:19
- StorageDead(_64); // scope 32 at $DIR/reference_prop.rs:+80:19: +80:20
-- _59 = const (); // scope 0 at $DIR/reference_prop.rs:+75:5: +81:6
- StorageDead(_63); // scope 31 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageDead(_62); // scope 30 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageDead(_61); // scope 29 at $DIR/reference_prop.rs:+81:5: +81:6
- StorageDead(_60); // scope 0 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageDead(_59); // scope 0 at $DIR/reference_prop.rs:+81:5: +81:6
- StorageLive(_66); // scope 0 at $DIR/reference_prop.rs:+85:13: +85:18
- _66 = const 5_usize; // scope 0 at $DIR/reference_prop.rs:+85:21: +85:28
-- StorageLive(_67); // scope 33 at $DIR/reference_prop.rs:+86:13: +86:18
-- _67 = &mut _66; // scope 33 at $DIR/reference_prop.rs:+86:21: +86:27
-- StorageLive(_68); // scope 34 at $DIR/reference_prop.rs:+87:13: +87:14
-- _68 = &mut _67; // scope 34 at $DIR/reference_prop.rs:+87:17: +87:23
- StorageLive(_69); // scope 35 at $DIR/reference_prop.rs:+88:13: +88:14
-- _69 = (*_67); // scope 35 at $DIR/reference_prop.rs:+88:17: +88:19
-+ _69 = _66; // scope 35 at $DIR/reference_prop.rs:+88:17: +88:19
- StorageLive(_70); // scope 36 at $DIR/reference_prop.rs:+89:9: +89:19
- StorageLive(_71); // scope 36 at $DIR/reference_prop.rs:+89:16: +89:18
- _71 = (); // scope 36 at $DIR/reference_prop.rs:+89:16: +89:18
- _70 = opaque::<()>(move _71) -> bb10; // scope 36 at $DIR/reference_prop.rs:+89:9: +89:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:192:9: 192:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_65);
+ StorageDead(_64);
+- _59 = const ();
+ StorageDead(_63);
+- StorageDead(_62);
+- StorageDead(_61);
+ StorageDead(_60);
+- StorageDead(_59);
+ StorageLive(_66);
+ _66 = const 5_usize;
+- StorageLive(_67);
+- _67 = &mut _66;
+- StorageLive(_68);
+- _68 = &mut _67;
+ StorageLive(_69);
+- _69 = (*_67);
++ _69 = _66;
+ StorageLive(_70);
+ StorageLive(_71);
+ _71 = ();
+ _70 = opaque::<()>(move _71) -> [return: bb10, unwind continue];
}
bb10: {
- StorageDead(_71); // scope 36 at $DIR/reference_prop.rs:+89:18: +89:19
- StorageDead(_70); // scope 36 at $DIR/reference_prop.rs:+89:19: +89:20
- _0 = const (); // scope 0 at $DIR/reference_prop.rs:+84:5: +90:6
- StorageDead(_69); // scope 35 at $DIR/reference_prop.rs:+90:5: +90:6
-- StorageDead(_68); // scope 34 at $DIR/reference_prop.rs:+90:5: +90:6
-- StorageDead(_67); // scope 33 at $DIR/reference_prop.rs:+90:5: +90:6
- StorageDead(_66); // scope 0 at $DIR/reference_prop.rs:+90:5: +90:6
- return; // scope 0 at $DIR/reference_prop.rs:+91:2: +91:2
+ StorageDead(_71);
+ StorageDead(_70);
+ _0 = const ();
+ StorageDead(_69);
+- StorageDead(_68);
+- StorageDead(_67);
+ StorageDead(_66);
+ return;
}
}
diff --git a/tests/mir-opt/reference_prop.reference_propagation_mut_ptr.ReferencePropagation.diff b/tests/mir-opt/reference_prop.reference_propagation_mut_ptr.ReferencePropagation.diff
index c93aa52be..fb0ef3184 100644
--- a/tests/mir-opt/reference_prop.reference_propagation_mut_ptr.ReferencePropagation.diff
+++ b/tests/mir-opt/reference_prop.reference_propagation_mut_ptr.ReferencePropagation.diff
@@ -2,142 +2,142 @@
+ // MIR for `reference_propagation_mut_ptr` after ReferencePropagation
fn reference_propagation_mut_ptr(_1: *mut T, _2: *mut T) -> () {
- debug single => _1; // in scope 0 at $DIR/reference_prop.rs:+0:43: +0:49
- debug multiple => _2; // in scope 0 at $DIR/reference_prop.rs:+0:59: +0:71
- let mut _0: (); // return place in scope 0 at $DIR/reference_prop.rs:+0:81: +0:81
- let _3: (); // in scope 0 at $DIR/reference_prop.rs:+2:5: +7:6
- let _7: (); // in scope 0 at $DIR/reference_prop.rs:+6:9: +6:19
- let mut _8: (); // in scope 0 at $DIR/reference_prop.rs:+6:16: +6:18
- let _9: (); // in scope 0 at $DIR/reference_prop.rs:+10:5: +18:6
- let mut _13: *mut usize; // in scope 0 at $DIR/reference_prop.rs:+14:13: +14:24
- let _15: (); // in scope 0 at $DIR/reference_prop.rs:+17:9: +17:19
- let mut _16: (); // in scope 0 at $DIR/reference_prop.rs:+17:16: +17:18
- let _17: (); // in scope 0 at $DIR/reference_prop.rs:+21:5: +27:6
- let _22: (); // in scope 0 at $DIR/reference_prop.rs:+26:9: +26:18
- let mut _23: &*mut usize; // in scope 0 at $DIR/reference_prop.rs:+26:16: +26:17
- let _24: (); // in scope 0 at $DIR/reference_prop.rs:+30:5: +36:6
- let _29: (); // in scope 0 at $DIR/reference_prop.rs:+35:9: +35:18
- let mut _30: *mut *mut usize; // in scope 0 at $DIR/reference_prop.rs:+35:16: +35:17
- let _31: (); // in scope 0 at $DIR/reference_prop.rs:+39:5: +44:6
- let _35: (); // in scope 0 at $DIR/reference_prop.rs:+43:9: +43:18
- let mut _36: *mut usize; // in scope 0 at $DIR/reference_prop.rs:+43:16: +43:17
- let _37: (); // in scope 0 at $DIR/reference_prop.rs:+47:5: +57:6
- let _44: (); // in scope 0 at $DIR/reference_prop.rs:+56:9: +56:19
- let mut _45: *mut usize; // in scope 0 at $DIR/reference_prop.rs:+56:16: +56:18
- let _46: (); // in scope 0 at $DIR/reference_prop.rs:+60:5: +64:6
- let _49: (); // in scope 0 at $DIR/reference_prop.rs:+63:9: +63:19
- let mut _50: (); // in scope 0 at $DIR/reference_prop.rs:+63:16: +63:18
- let _51: (); // in scope 0 at $DIR/reference_prop.rs:+67:5: +72:6
- let mut _53: *mut T; // in scope 0 at $DIR/reference_prop.rs:+69:20: +69:36
- let _55: (); // in scope 0 at $DIR/reference_prop.rs:+71:9: +71:19
- let mut _56: (); // in scope 0 at $DIR/reference_prop.rs:+71:16: +71:18
- let _57: (); // in scope 0 at $DIR/reference_prop.rs:+75:5: +81:6
- let _62: (); // in scope 0 at $DIR/reference_prop.rs:+80:9: +80:19
- let mut _63: (); // in scope 0 at $DIR/reference_prop.rs:+80:16: +80:18
- let _68: (); // in scope 0 at $DIR/reference_prop.rs:+89:9: +89:19
- let mut _69: (); // in scope 0 at $DIR/reference_prop.rs:+89:16: +89:18
+ debug single => _1;
+ debug multiple => _2;
+ let mut _0: ();
+ let _3: ();
+ let _7: ();
+ let mut _8: ();
+ let _9: ();
+ let mut _13: *mut usize;
+ let _15: ();
+ let mut _16: ();
+ let _17: ();
+ let _22: ();
+ let mut _23: &*mut usize;
+ let _24: ();
+ let _29: ();
+ let mut _30: *mut *mut usize;
+ let _31: ();
+ let _35: ();
+ let mut _36: *mut usize;
+ let _37: ();
+ let _44: ();
+ let mut _45: *mut usize;
+ let _46: ();
+ let _49: ();
+ let mut _50: ();
+ let _51: ();
+ let mut _53: *mut T;
+ let _55: ();
+ let mut _56: ();
+ let _57: ();
+ let _62: ();
+ let mut _63: ();
+ let _68: ();
+ let mut _69: ();
scope 1 {
- let mut _4: usize; // in scope 1 at $DIR/reference_prop.rs:+3:13: +3:18
+ let mut _4: usize;
scope 2 {
- debug a => _4; // in scope 2 at $DIR/reference_prop.rs:+3:13: +3:18
- let _5: *mut usize; // in scope 2 at $DIR/reference_prop.rs:+4:13: +4:14
+ debug a => _4;
+ let _5: *mut usize;
scope 3 {
-- debug b => _5; // in scope 3 at $DIR/reference_prop.rs:+4:13: +4:14
-+ debug b => &_4; // in scope 3 at $DIR/reference_prop.rs:+4:13: +4:14
- let _6: usize; // in scope 3 at $DIR/reference_prop.rs:+5:13: +5:14
+- debug b => _5;
++ debug b => &_4;
+ let _6: usize;
scope 4 {
- debug c => _6; // in scope 4 at $DIR/reference_prop.rs:+5:13: +5:14
+ debug c => _6;
}
}
}
}
scope 5 {
- let mut _10: usize; // in scope 5 at $DIR/reference_prop.rs:+11:13: +11:18
+ let mut _10: usize;
scope 6 {
- debug a => _10; // in scope 6 at $DIR/reference_prop.rs:+11:13: +11:18
- let mut _11: usize; // in scope 6 at $DIR/reference_prop.rs:+12:13: +12:19
+ debug a => _10;
+ let mut _11: usize;
scope 7 {
- debug a2 => _11; // in scope 7 at $DIR/reference_prop.rs:+12:13: +12:19
- let mut _12: *mut usize; // in scope 7 at $DIR/reference_prop.rs:+13:13: +13:18
+ debug a2 => _11;
+ let mut _12: *mut usize;
scope 8 {
- debug b => _12; // in scope 8 at $DIR/reference_prop.rs:+13:13: +13:18
- let _14: usize; // in scope 8 at $DIR/reference_prop.rs:+16:13: +16:14
+ debug b => _12;
+ let _14: usize;
scope 9 {
- debug c => _14; // in scope 9 at $DIR/reference_prop.rs:+16:13: +16:14
+ debug c => _14;
}
}
}
}
}
scope 10 {
- let mut _18: usize; // in scope 10 at $DIR/reference_prop.rs:+22:13: +22:18
+ let mut _18: usize;
scope 11 {
- debug a => _18; // in scope 11 at $DIR/reference_prop.rs:+22:13: +22:18
- let _19: *mut usize; // in scope 11 at $DIR/reference_prop.rs:+23:13: +23:14
+ debug a => _18;
+ let _19: *mut usize;
scope 12 {
- debug b => _19; // in scope 12 at $DIR/reference_prop.rs:+23:13: +23:14
- let _20: &*mut usize; // in scope 12 at $DIR/reference_prop.rs:+24:13: +24:14
+ debug b => _19;
+ let _20: &*mut usize;
scope 13 {
- debug d => _20; // in scope 13 at $DIR/reference_prop.rs:+24:13: +24:14
- let _21: usize; // in scope 13 at $DIR/reference_prop.rs:+25:13: +25:14
+ debug d => _20;
+ let _21: usize;
scope 14 {
- debug c => _21; // in scope 14 at $DIR/reference_prop.rs:+25:13: +25:14
+ debug c => _21;
}
}
}
}
}
scope 15 {
- let mut _25: usize; // in scope 15 at $DIR/reference_prop.rs:+31:13: +31:18
+ let mut _25: usize;
scope 16 {
- debug a => _25; // in scope 16 at $DIR/reference_prop.rs:+31:13: +31:18
- let mut _26: *mut usize; // in scope 16 at $DIR/reference_prop.rs:+32:13: +32:18
+ debug a => _25;
+ let mut _26: *mut usize;
scope 17 {
- debug b => _26; // in scope 17 at $DIR/reference_prop.rs:+32:13: +32:18
- let _27: *mut *mut usize; // in scope 17 at $DIR/reference_prop.rs:+33:13: +33:14
+ debug b => _26;
+ let _27: *mut *mut usize;
scope 18 {
- debug d => _27; // in scope 18 at $DIR/reference_prop.rs:+33:13: +33:14
- let _28: usize; // in scope 18 at $DIR/reference_prop.rs:+34:13: +34:14
+ debug d => _27;
+ let _28: usize;
scope 19 {
- debug c => _28; // in scope 19 at $DIR/reference_prop.rs:+34:13: +34:14
+ debug c => _28;
}
}
}
}
}
scope 20 {
- let mut _32: usize; // in scope 20 at $DIR/reference_prop.rs:+40:13: +40:18
+ let mut _32: usize;
scope 21 {
- debug a => _32; // in scope 21 at $DIR/reference_prop.rs:+40:13: +40:18
- let _33: *mut usize; // in scope 21 at $DIR/reference_prop.rs:+41:13: +41:14
+ debug a => _32;
+ let _33: *mut usize;
scope 22 {
- debug b => _33; // in scope 22 at $DIR/reference_prop.rs:+41:13: +41:14
- let _34: usize; // in scope 22 at $DIR/reference_prop.rs:+42:13: +42:14
+ debug b => _33;
+ let _34: usize;
scope 23 {
- debug c => _34; // in scope 23 at $DIR/reference_prop.rs:+42:13: +42:14
+ debug c => _34;
}
}
}
}
scope 24 {
- let mut _38: usize; // in scope 24 at $DIR/reference_prop.rs:+48:13: +48:18
+ let mut _38: usize;
scope 25 {
- debug a => _38; // in scope 25 at $DIR/reference_prop.rs:+48:13: +48:18
- let _39: *mut usize; // in scope 25 at $DIR/reference_prop.rs:+49:13: +49:15
+ debug a => _38;
+ let _39: *mut usize;
scope 26 {
- debug b1 => _39; // in scope 26 at $DIR/reference_prop.rs:+49:13: +49:15
- let _40: usize; // in scope 26 at $DIR/reference_prop.rs:+50:13: +50:14
+ debug b1 => _39;
+ let _40: usize;
scope 27 {
- debug c => _40; // in scope 27 at $DIR/reference_prop.rs:+50:13: +50:14
- let _41: *mut usize; // in scope 27 at $DIR/reference_prop.rs:+51:13: +51:15
+ debug c => _40;
+ let _41: *mut usize;
scope 28 {
- debug b2 => _41; // in scope 28 at $DIR/reference_prop.rs:+51:13: +51:15
- let _42: usize; // in scope 28 at $DIR/reference_prop.rs:+52:13: +52:15
+ debug b2 => _41;
+ let _42: usize;
scope 29 {
- debug c2 => _42; // in scope 29 at $DIR/reference_prop.rs:+52:13: +52:15
- let _43: *mut usize; // in scope 29 at $DIR/reference_prop.rs:+53:13: +53:15
+ debug c2 => _42;
+ let _43: *mut usize;
scope 30 {
- debug b3 => _43; // in scope 30 at $DIR/reference_prop.rs:+53:13: +53:15
+ debug b3 => _43;
}
}
}
@@ -146,61 +146,61 @@
}
}
scope 31 {
- let _47: *mut T; // in scope 31 at $DIR/reference_prop.rs:+61:13: +61:14
+ let _47: *mut T;
scope 32 {
-- debug a => _47; // in scope 32 at $DIR/reference_prop.rs:+61:13: +61:14
-+ debug a => _1; // in scope 32 at $DIR/reference_prop.rs:+61:13: +61:14
- let _48: T; // in scope 32 at $DIR/reference_prop.rs:+62:13: +62:14
+- debug a => _47;
++ debug a => _1;
+ let _48: T;
scope 33 {
- debug b => _48; // in scope 33 at $DIR/reference_prop.rs:+62:13: +62:14
+ debug b => _48;
}
}
}
scope 34 {
- let _52: *mut T; // in scope 34 at $DIR/reference_prop.rs:+68:13: +68:14
+ let _52: *mut T;
scope 35 {
- debug a => _52; // in scope 35 at $DIR/reference_prop.rs:+68:13: +68:14
- let _54: T; // in scope 35 at $DIR/reference_prop.rs:+70:13: +70:14
+ debug a => _52;
+ let _54: T;
scope 36 {
- debug b => _54; // in scope 36 at $DIR/reference_prop.rs:+70:13: +70:14
+ debug b => _54;
}
}
}
scope 37 {
- let mut _58: usize; // in scope 37 at $DIR/reference_prop.rs:+76:13: +76:18
+ let mut _58: usize;
scope 38 {
- debug a => _58; // in scope 38 at $DIR/reference_prop.rs:+76:13: +76:18
- let _59: *mut usize; // in scope 38 at $DIR/reference_prop.rs:+77:13: +77:14
+ debug a => _58;
+ let _59: *mut usize;
scope 39 {
-- debug b => _59; // in scope 39 at $DIR/reference_prop.rs:+77:13: +77:14
-+ debug b => &_58; // in scope 39 at $DIR/reference_prop.rs:+77:13: +77:14
- let _60: &*mut usize; // in scope 39 at $DIR/reference_prop.rs:+78:13: +78:14
+- debug b => _59;
++ debug b => &_58;
+ let _60: &*mut usize;
scope 40 {
-- debug d => _60; // in scope 40 at $DIR/reference_prop.rs:+78:13: +78:14
-+ debug d => &&_58; // in scope 40 at $DIR/reference_prop.rs:+78:13: +78:14
- let _61: usize; // in scope 40 at $DIR/reference_prop.rs:+79:13: +79:14
+- debug d => _60;
++ debug d => &&_58;
+ let _61: usize;
scope 41 {
- debug c => _61; // in scope 41 at $DIR/reference_prop.rs:+79:13: +79:14
+ debug c => _61;
}
}
}
}
}
scope 42 {
- let mut _64: usize; // in scope 42 at $DIR/reference_prop.rs:+85:13: +85:18
+ let mut _64: usize;
scope 43 {
- debug a => _64; // in scope 43 at $DIR/reference_prop.rs:+85:13: +85:18
- let mut _65: *mut usize; // in scope 43 at $DIR/reference_prop.rs:+86:13: +86:18
+ debug a => _64;
+ let mut _65: *mut usize;
scope 44 {
-- debug b => _65; // in scope 44 at $DIR/reference_prop.rs:+86:13: +86:18
-+ debug b => &_64; // in scope 44 at $DIR/reference_prop.rs:+86:13: +86:18
- let _66: &mut *mut usize; // in scope 44 at $DIR/reference_prop.rs:+87:13: +87:14
+- debug b => _65;
++ debug b => &_64;
+ let _66: &mut *mut usize;
scope 45 {
-- debug d => _66; // in scope 45 at $DIR/reference_prop.rs:+87:13: +87:14
-+ debug d => &&_64; // in scope 45 at $DIR/reference_prop.rs:+87:13: +87:14
- let _67: usize; // in scope 45 at $DIR/reference_prop.rs:+88:13: +88:14
+- debug d => _66;
++ debug d => &&_64;
+ let _67: usize;
scope 46 {
- debug c => _67; // in scope 46 at $DIR/reference_prop.rs:+88:13: +88:14
+ debug c => _67;
}
}
}
@@ -208,275 +208,245 @@
}
bb0: {
-- StorageLive(_3); // scope 0 at $DIR/reference_prop.rs:+2:5: +7:6
- StorageLive(_4); // scope 1 at $DIR/reference_prop.rs:+3:13: +3:18
- _4 = const 5_usize; // scope 1 at $DIR/reference_prop.rs:+3:21: +3:28
-- StorageLive(_5); // scope 2 at $DIR/reference_prop.rs:+4:13: +4:14
-- _5 = &raw mut _4; // scope 2 at $DIR/reference_prop.rs:+4:17: +4:27
- StorageLive(_6); // scope 3 at $DIR/reference_prop.rs:+5:13: +5:14
-- _6 = (*_5); // scope 3 at $DIR/reference_prop.rs:+5:17: +5:19
-+ _6 = _4; // scope 3 at $DIR/reference_prop.rs:+5:17: +5:19
- StorageLive(_7); // scope 4 at $DIR/reference_prop.rs:+6:9: +6:19
- StorageLive(_8); // scope 4 at $DIR/reference_prop.rs:+6:16: +6:18
- _8 = (); // scope 4 at $DIR/reference_prop.rs:+6:16: +6:18
- _7 = opaque::<()>(move _8) -> bb1; // scope 4 at $DIR/reference_prop.rs:+6:9: +6:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:304:9: 304:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+- StorageLive(_3);
+ StorageLive(_4);
+ _4 = const 5_usize;
+- StorageLive(_5);
+- _5 = &raw mut _4;
+ StorageLive(_6);
+- _6 = (*_5);
++ _6 = _4;
+ StorageLive(_7);
+ StorageLive(_8);
+ _8 = ();
+ _7 = opaque::<()>(move _8) -> [return: bb1, unwind continue];
}
bb1: {
- StorageDead(_8); // scope 4 at $DIR/reference_prop.rs:+6:18: +6:19
- StorageDead(_7); // scope 4 at $DIR/reference_prop.rs:+6:19: +6:20
-- _3 = const (); // scope 1 at $DIR/reference_prop.rs:+2:5: +7:6
- StorageDead(_6); // scope 3 at $DIR/reference_prop.rs:+7:5: +7:6
-- StorageDead(_5); // scope 2 at $DIR/reference_prop.rs:+7:5: +7:6
- StorageDead(_4); // scope 1 at $DIR/reference_prop.rs:+7:5: +7:6
-- StorageDead(_3); // scope 0 at $DIR/reference_prop.rs:+7:5: +7:6
-- StorageLive(_9); // scope 0 at $DIR/reference_prop.rs:+10:5: +18:6
- StorageLive(_10); // scope 5 at $DIR/reference_prop.rs:+11:13: +11:18
- _10 = const 5_usize; // scope 5 at $DIR/reference_prop.rs:+11:21: +11:28
- StorageLive(_11); // scope 6 at $DIR/reference_prop.rs:+12:13: +12:19
- _11 = const 7_usize; // scope 6 at $DIR/reference_prop.rs:+12:22: +12:29
- StorageLive(_12); // scope 7 at $DIR/reference_prop.rs:+13:13: +13:18
- _12 = &raw mut _10; // scope 7 at $DIR/reference_prop.rs:+13:21: +13:31
- StorageLive(_13); // scope 8 at $DIR/reference_prop.rs:+14:13: +14:24
- _13 = &raw mut _11; // scope 8 at $DIR/reference_prop.rs:+14:13: +14:24
- _12 = move _13; // scope 8 at $DIR/reference_prop.rs:+14:9: +14:24
- StorageDead(_13); // scope 8 at $DIR/reference_prop.rs:+14:23: +14:24
- StorageLive(_14); // scope 8 at $DIR/reference_prop.rs:+16:13: +16:14
- _14 = (*_12); // scope 8 at $DIR/reference_prop.rs:+16:17: +16:19
- StorageLive(_15); // scope 9 at $DIR/reference_prop.rs:+17:9: +17:19
- StorageLive(_16); // scope 9 at $DIR/reference_prop.rs:+17:16: +17:18
- _16 = (); // scope 9 at $DIR/reference_prop.rs:+17:16: +17:18
- _15 = opaque::<()>(move _16) -> bb2; // scope 9 at $DIR/reference_prop.rs:+17:9: +17:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:315:9: 315:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_8);
+ StorageDead(_7);
+- _3 = const ();
+ StorageDead(_6);
+- StorageDead(_5);
+ StorageDead(_4);
+- StorageDead(_3);
+- StorageLive(_9);
+ StorageLive(_10);
+ _10 = const 5_usize;
+ StorageLive(_11);
+ _11 = const 7_usize;
+ StorageLive(_12);
+ _12 = &raw mut _10;
+ StorageLive(_13);
+ _13 = &raw mut _11;
+ _12 = move _13;
+ StorageDead(_13);
+ StorageLive(_14);
+ _14 = (*_12);
+ StorageLive(_15);
+ StorageLive(_16);
+ _16 = ();
+ _15 = opaque::<()>(move _16) -> [return: bb2, unwind continue];
}
bb2: {
- StorageDead(_16); // scope 9 at $DIR/reference_prop.rs:+17:18: +17:19
- StorageDead(_15); // scope 9 at $DIR/reference_prop.rs:+17:19: +17:20
-- _9 = const (); // scope 5 at $DIR/reference_prop.rs:+10:5: +18:6
- StorageDead(_14); // scope 8 at $DIR/reference_prop.rs:+18:5: +18:6
- StorageDead(_12); // scope 7 at $DIR/reference_prop.rs:+18:5: +18:6
- StorageDead(_11); // scope 6 at $DIR/reference_prop.rs:+18:5: +18:6
- StorageDead(_10); // scope 5 at $DIR/reference_prop.rs:+18:5: +18:6
-- StorageDead(_9); // scope 0 at $DIR/reference_prop.rs:+18:5: +18:6
-- StorageLive(_17); // scope 0 at $DIR/reference_prop.rs:+21:5: +27:6
- StorageLive(_18); // scope 10 at $DIR/reference_prop.rs:+22:13: +22:18
- _18 = const 5_usize; // scope 10 at $DIR/reference_prop.rs:+22:21: +22:28
- StorageLive(_19); // scope 11 at $DIR/reference_prop.rs:+23:13: +23:14
- _19 = &raw mut _18; // scope 11 at $DIR/reference_prop.rs:+23:17: +23:27
- StorageLive(_20); // scope 12 at $DIR/reference_prop.rs:+24:13: +24:14
- _20 = &_19; // scope 12 at $DIR/reference_prop.rs:+24:17: +24:19
- StorageLive(_21); // scope 13 at $DIR/reference_prop.rs:+25:13: +25:14
- _21 = (*_19); // scope 13 at $DIR/reference_prop.rs:+25:17: +25:19
- StorageLive(_22); // scope 14 at $DIR/reference_prop.rs:+26:9: +26:18
- StorageLive(_23); // scope 14 at $DIR/reference_prop.rs:+26:16: +26:17
- _23 = _20; // scope 14 at $DIR/reference_prop.rs:+26:16: +26:17
- _22 = opaque::<&*mut usize>(move _23) -> bb3; // scope 14 at $DIR/reference_prop.rs:+26:9: +26:18
- // mir::Constant
- // + span: $DIR/reference_prop.rs:324:9: 324:15
- // + literal: Const { ty: fn(&*mut usize) {opaque::<&*mut usize>}, val: Value(<ZST>) }
+ StorageDead(_16);
+ StorageDead(_15);
+- _9 = const ();
+ StorageDead(_14);
+ StorageDead(_12);
+ StorageDead(_11);
+ StorageDead(_10);
+- StorageDead(_9);
+- StorageLive(_17);
+ StorageLive(_18);
+ _18 = const 5_usize;
+ StorageLive(_19);
+ _19 = &raw mut _18;
+ StorageLive(_20);
+ _20 = &_19;
+ StorageLive(_21);
+ _21 = (*_19);
+ StorageLive(_22);
+ StorageLive(_23);
+ _23 = _20;
+ _22 = opaque::<&*mut usize>(move _23) -> [return: bb3, unwind continue];
}
bb3: {
- StorageDead(_23); // scope 14 at $DIR/reference_prop.rs:+26:17: +26:18
- StorageDead(_22); // scope 14 at $DIR/reference_prop.rs:+26:18: +26:19
-- _17 = const (); // scope 10 at $DIR/reference_prop.rs:+21:5: +27:6
- StorageDead(_21); // scope 13 at $DIR/reference_prop.rs:+27:5: +27:6
- StorageDead(_20); // scope 12 at $DIR/reference_prop.rs:+27:5: +27:6
- StorageDead(_19); // scope 11 at $DIR/reference_prop.rs:+27:5: +27:6
- StorageDead(_18); // scope 10 at $DIR/reference_prop.rs:+27:5: +27:6
-- StorageDead(_17); // scope 0 at $DIR/reference_prop.rs:+27:5: +27:6
-- StorageLive(_24); // scope 0 at $DIR/reference_prop.rs:+30:5: +36:6
- StorageLive(_25); // scope 15 at $DIR/reference_prop.rs:+31:13: +31:18
- _25 = const 5_usize; // scope 15 at $DIR/reference_prop.rs:+31:21: +31:28
- StorageLive(_26); // scope 16 at $DIR/reference_prop.rs:+32:13: +32:18
- _26 = &raw mut _25; // scope 16 at $DIR/reference_prop.rs:+32:21: +32:31
- StorageLive(_27); // scope 17 at $DIR/reference_prop.rs:+33:13: +33:14
- _27 = &raw mut _26; // scope 17 at $DIR/reference_prop.rs:+33:17: +33:27
- StorageLive(_28); // scope 18 at $DIR/reference_prop.rs:+34:13: +34:14
- _28 = (*_26); // scope 18 at $DIR/reference_prop.rs:+34:17: +34:19
- StorageLive(_29); // scope 19 at $DIR/reference_prop.rs:+35:9: +35:18
- StorageLive(_30); // scope 19 at $DIR/reference_prop.rs:+35:16: +35:17
- _30 = _27; // scope 19 at $DIR/reference_prop.rs:+35:16: +35:17
- _29 = opaque::<*mut *mut usize>(move _30) -> bb4; // scope 19 at $DIR/reference_prop.rs:+35:9: +35:18
- // mir::Constant
- // + span: $DIR/reference_prop.rs:333:9: 333:15
- // + literal: Const { ty: fn(*mut *mut usize) {opaque::<*mut *mut usize>}, val: Value(<ZST>) }
+ StorageDead(_23);
+ StorageDead(_22);
+- _17 = const ();
+ StorageDead(_21);
+ StorageDead(_20);
+ StorageDead(_19);
+ StorageDead(_18);
+- StorageDead(_17);
+- StorageLive(_24);
+ StorageLive(_25);
+ _25 = const 5_usize;
+ StorageLive(_26);
+ _26 = &raw mut _25;
+ StorageLive(_27);
+ _27 = &raw mut _26;
+ StorageLive(_28);
+ _28 = (*_26);
+ StorageLive(_29);
+ StorageLive(_30);
+ _30 = _27;
+ _29 = opaque::<*mut *mut usize>(move _30) -> [return: bb4, unwind continue];
}
bb4: {
- StorageDead(_30); // scope 19 at $DIR/reference_prop.rs:+35:17: +35:18
- StorageDead(_29); // scope 19 at $DIR/reference_prop.rs:+35:18: +35:19
-- _24 = const (); // scope 15 at $DIR/reference_prop.rs:+30:5: +36:6
- StorageDead(_28); // scope 18 at $DIR/reference_prop.rs:+36:5: +36:6
- StorageDead(_27); // scope 17 at $DIR/reference_prop.rs:+36:5: +36:6
- StorageDead(_26); // scope 16 at $DIR/reference_prop.rs:+36:5: +36:6
- StorageDead(_25); // scope 15 at $DIR/reference_prop.rs:+36:5: +36:6
-- StorageDead(_24); // scope 0 at $DIR/reference_prop.rs:+36:5: +36:6
-- StorageLive(_31); // scope 0 at $DIR/reference_prop.rs:+39:5: +44:6
- StorageLive(_32); // scope 20 at $DIR/reference_prop.rs:+40:13: +40:18
- _32 = const 7_usize; // scope 20 at $DIR/reference_prop.rs:+40:21: +40:28
- StorageLive(_33); // scope 21 at $DIR/reference_prop.rs:+41:13: +41:14
- _33 = &raw mut _32; // scope 21 at $DIR/reference_prop.rs:+41:17: +41:27
- StorageLive(_34); // scope 22 at $DIR/reference_prop.rs:+42:13: +42:14
- _34 = (*_33); // scope 22 at $DIR/reference_prop.rs:+42:17: +42:19
- StorageLive(_35); // scope 23 at $DIR/reference_prop.rs:+43:9: +43:18
- StorageLive(_36); // scope 23 at $DIR/reference_prop.rs:+43:16: +43:17
- _36 = _33; // scope 23 at $DIR/reference_prop.rs:+43:16: +43:17
- _35 = opaque::<*mut usize>(move _36) -> bb5; // scope 23 at $DIR/reference_prop.rs:+43:9: +43:18
- // mir::Constant
- // + span: $DIR/reference_prop.rs:341:9: 341:15
- // + literal: Const { ty: fn(*mut usize) {opaque::<*mut usize>}, val: Value(<ZST>) }
+ StorageDead(_30);
+ StorageDead(_29);
+- _24 = const ();
+ StorageDead(_28);
+ StorageDead(_27);
+ StorageDead(_26);
+ StorageDead(_25);
+- StorageDead(_24);
+- StorageLive(_31);
+ StorageLive(_32);
+ _32 = const 7_usize;
+ StorageLive(_33);
+ _33 = &raw mut _32;
+ StorageLive(_34);
+ _34 = (*_33);
+ StorageLive(_35);
+ StorageLive(_36);
+ _36 = _33;
+ _35 = opaque::<*mut usize>(move _36) -> [return: bb5, unwind continue];
}
bb5: {
- StorageDead(_36); // scope 23 at $DIR/reference_prop.rs:+43:17: +43:18
- StorageDead(_35); // scope 23 at $DIR/reference_prop.rs:+43:18: +43:19
-- _31 = const (); // scope 20 at $DIR/reference_prop.rs:+39:5: +44:6
- StorageDead(_34); // scope 22 at $DIR/reference_prop.rs:+44:5: +44:6
- StorageDead(_33); // scope 21 at $DIR/reference_prop.rs:+44:5: +44:6
- StorageDead(_32); // scope 20 at $DIR/reference_prop.rs:+44:5: +44:6
-- StorageDead(_31); // scope 0 at $DIR/reference_prop.rs:+44:5: +44:6
-- StorageLive(_37); // scope 0 at $DIR/reference_prop.rs:+47:5: +57:6
- StorageLive(_38); // scope 24 at $DIR/reference_prop.rs:+48:13: +48:18
- _38 = const 7_usize; // scope 24 at $DIR/reference_prop.rs:+48:21: +48:28
- StorageLive(_39); // scope 25 at $DIR/reference_prop.rs:+49:13: +49:15
- _39 = &raw mut _38; // scope 25 at $DIR/reference_prop.rs:+49:18: +49:28
- StorageLive(_40); // scope 26 at $DIR/reference_prop.rs:+50:13: +50:14
- _40 = (*_39); // scope 26 at $DIR/reference_prop.rs:+50:17: +50:20
- StorageLive(_41); // scope 27 at $DIR/reference_prop.rs:+51:13: +51:15
- _41 = _39; // scope 27 at $DIR/reference_prop.rs:+51:18: +51:20
- StorageLive(_42); // scope 28 at $DIR/reference_prop.rs:+52:13: +52:15
- _42 = (*_41); // scope 28 at $DIR/reference_prop.rs:+52:18: +52:21
- StorageLive(_43); // scope 29 at $DIR/reference_prop.rs:+53:13: +53:15
- _43 = _41; // scope 29 at $DIR/reference_prop.rs:+53:18: +53:20
- StorageLive(_44); // scope 30 at $DIR/reference_prop.rs:+56:9: +56:19
- StorageLive(_45); // scope 30 at $DIR/reference_prop.rs:+56:16: +56:18
- _45 = _43; // scope 30 at $DIR/reference_prop.rs:+56:16: +56:18
- _44 = opaque::<*mut usize>(move _45) -> bb6; // scope 30 at $DIR/reference_prop.rs:+56:9: +56:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:354:9: 354:15
- // + literal: Const { ty: fn(*mut usize) {opaque::<*mut usize>}, val: Value(<ZST>) }
+ StorageDead(_36);
+ StorageDead(_35);
+- _31 = const ();
+ StorageDead(_34);
+ StorageDead(_33);
+ StorageDead(_32);
+- StorageDead(_31);
+- StorageLive(_37);
+ StorageLive(_38);
+ _38 = const 7_usize;
+ StorageLive(_39);
+ _39 = &raw mut _38;
+ StorageLive(_40);
+ _40 = (*_39);
+ StorageLive(_41);
+ _41 = _39;
+ StorageLive(_42);
+ _42 = (*_41);
+ StorageLive(_43);
+ _43 = _41;
+ StorageLive(_44);
+ StorageLive(_45);
+ _45 = _43;
+ _44 = opaque::<*mut usize>(move _45) -> [return: bb6, unwind continue];
}
bb6: {
- StorageDead(_45); // scope 30 at $DIR/reference_prop.rs:+56:18: +56:19
- StorageDead(_44); // scope 30 at $DIR/reference_prop.rs:+56:19: +56:20
-- _37 = const (); // scope 24 at $DIR/reference_prop.rs:+47:5: +57:6
- StorageDead(_43); // scope 29 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_42); // scope 28 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_41); // scope 27 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_40); // scope 26 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_39); // scope 25 at $DIR/reference_prop.rs:+57:5: +57:6
- StorageDead(_38); // scope 24 at $DIR/reference_prop.rs:+57:5: +57:6
-- StorageDead(_37); // scope 0 at $DIR/reference_prop.rs:+57:5: +57:6
-- StorageLive(_46); // scope 0 at $DIR/reference_prop.rs:+60:5: +64:6
-- StorageLive(_47); // scope 31 at $DIR/reference_prop.rs:+61:13: +61:14
-- _47 = &raw mut (*_1); // scope 31 at $DIR/reference_prop.rs:+61:17: +61:33
- StorageLive(_48); // scope 32 at $DIR/reference_prop.rs:+62:13: +62:14
-- _48 = (*_47); // scope 32 at $DIR/reference_prop.rs:+62:17: +62:19
-+ _48 = (*_1); // scope 32 at $DIR/reference_prop.rs:+62:17: +62:19
- StorageLive(_49); // scope 33 at $DIR/reference_prop.rs:+63:9: +63:19
- StorageLive(_50); // scope 33 at $DIR/reference_prop.rs:+63:16: +63:18
- _50 = (); // scope 33 at $DIR/reference_prop.rs:+63:16: +63:18
- _49 = opaque::<()>(move _50) -> bb7; // scope 33 at $DIR/reference_prop.rs:+63:9: +63:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:361:9: 361:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_45);
+ StorageDead(_44);
+- _37 = const ();
+ StorageDead(_43);
+ StorageDead(_42);
+ StorageDead(_41);
+ StorageDead(_40);
+ StorageDead(_39);
+ StorageDead(_38);
+- StorageDead(_37);
+- StorageLive(_46);
+- StorageLive(_47);
+- _47 = &raw mut (*_1);
+ StorageLive(_48);
+- _48 = (*_47);
++ _48 = (*_1);
+ StorageLive(_49);
+ StorageLive(_50);
+ _50 = ();
+ _49 = opaque::<()>(move _50) -> [return: bb7, unwind continue];
}
bb7: {
- StorageDead(_50); // scope 33 at $DIR/reference_prop.rs:+63:18: +63:19
- StorageDead(_49); // scope 33 at $DIR/reference_prop.rs:+63:19: +63:20
-- _46 = const (); // scope 31 at $DIR/reference_prop.rs:+60:5: +64:6
- StorageDead(_48); // scope 32 at $DIR/reference_prop.rs:+64:5: +64:6
-- StorageDead(_47); // scope 31 at $DIR/reference_prop.rs:+64:5: +64:6
-- StorageDead(_46); // scope 0 at $DIR/reference_prop.rs:+64:5: +64:6
-- StorageLive(_51); // scope 0 at $DIR/reference_prop.rs:+67:5: +72:6
- StorageLive(_52); // scope 34 at $DIR/reference_prop.rs:+68:13: +68:14
- _52 = &raw mut (*_2); // scope 34 at $DIR/reference_prop.rs:+68:17: +68:35
- StorageLive(_53); // scope 35 at $DIR/reference_prop.rs:+69:20: +69:36
- _53 = &raw mut (*_1); // scope 35 at $DIR/reference_prop.rs:+69:20: +69:36
- _2 = move _53; // scope 35 at $DIR/reference_prop.rs:+69:9: +69:36
- StorageDead(_53); // scope 35 at $DIR/reference_prop.rs:+69:35: +69:36
- StorageLive(_54); // scope 35 at $DIR/reference_prop.rs:+70:13: +70:14
- _54 = (*_52); // scope 35 at $DIR/reference_prop.rs:+70:17: +70:19
- StorageLive(_55); // scope 36 at $DIR/reference_prop.rs:+71:9: +71:19
- StorageLive(_56); // scope 36 at $DIR/reference_prop.rs:+71:16: +71:18
- _56 = (); // scope 36 at $DIR/reference_prop.rs:+71:16: +71:18
- _55 = opaque::<()>(move _56) -> bb8; // scope 36 at $DIR/reference_prop.rs:+71:9: +71:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:369:9: 369:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_50);
+ StorageDead(_49);
+- _46 = const ();
+ StorageDead(_48);
+- StorageDead(_47);
+- StorageDead(_46);
+- StorageLive(_51);
+ StorageLive(_52);
+ _52 = &raw mut (*_2);
+ StorageLive(_53);
+ _53 = &raw mut (*_1);
+ _2 = move _53;
+ StorageDead(_53);
+ StorageLive(_54);
+ _54 = (*_52);
+ StorageLive(_55);
+ StorageLive(_56);
+ _56 = ();
+ _55 = opaque::<()>(move _56) -> [return: bb8, unwind continue];
}
bb8: {
- StorageDead(_56); // scope 36 at $DIR/reference_prop.rs:+71:18: +71:19
- StorageDead(_55); // scope 36 at $DIR/reference_prop.rs:+71:19: +71:20
-- _51 = const (); // scope 34 at $DIR/reference_prop.rs:+67:5: +72:6
- StorageDead(_54); // scope 35 at $DIR/reference_prop.rs:+72:5: +72:6
- StorageDead(_52); // scope 34 at $DIR/reference_prop.rs:+72:5: +72:6
-- StorageDead(_51); // scope 0 at $DIR/reference_prop.rs:+72:5: +72:6
-- StorageLive(_57); // scope 0 at $DIR/reference_prop.rs:+75:5: +81:6
- StorageLive(_58); // scope 37 at $DIR/reference_prop.rs:+76:13: +76:18
- _58 = const 5_usize; // scope 37 at $DIR/reference_prop.rs:+76:21: +76:28
-- StorageLive(_59); // scope 38 at $DIR/reference_prop.rs:+77:13: +77:14
-- _59 = &raw mut _58; // scope 38 at $DIR/reference_prop.rs:+77:17: +77:27
-- StorageLive(_60); // scope 39 at $DIR/reference_prop.rs:+78:13: +78:14
-- _60 = &_59; // scope 39 at $DIR/reference_prop.rs:+78:17: +78:19
- StorageLive(_61); // scope 40 at $DIR/reference_prop.rs:+79:13: +79:14
-- _61 = (*_59); // scope 40 at $DIR/reference_prop.rs:+79:17: +79:19
-+ _61 = _58; // scope 40 at $DIR/reference_prop.rs:+79:17: +79:19
- StorageLive(_62); // scope 41 at $DIR/reference_prop.rs:+80:9: +80:19
- StorageLive(_63); // scope 41 at $DIR/reference_prop.rs:+80:16: +80:18
- _63 = (); // scope 41 at $DIR/reference_prop.rs:+80:16: +80:18
- _62 = opaque::<()>(move _63) -> bb9; // scope 41 at $DIR/reference_prop.rs:+80:9: +80:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:378:9: 378:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_56);
+ StorageDead(_55);
+- _51 = const ();
+ StorageDead(_54);
+ StorageDead(_52);
+- StorageDead(_51);
+- StorageLive(_57);
+ StorageLive(_58);
+ _58 = const 5_usize;
+- StorageLive(_59);
+- _59 = &raw mut _58;
+- StorageLive(_60);
+- _60 = &_59;
+ StorageLive(_61);
+- _61 = (*_59);
++ _61 = _58;
+ StorageLive(_62);
+ StorageLive(_63);
+ _63 = ();
+ _62 = opaque::<()>(move _63) -> [return: bb9, unwind continue];
}
bb9: {
- StorageDead(_63); // scope 41 at $DIR/reference_prop.rs:+80:18: +80:19
- StorageDead(_62); // scope 41 at $DIR/reference_prop.rs:+80:19: +80:20
-- _57 = const (); // scope 37 at $DIR/reference_prop.rs:+75:5: +81:6
- StorageDead(_61); // scope 40 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageDead(_60); // scope 39 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageDead(_59); // scope 38 at $DIR/reference_prop.rs:+81:5: +81:6
- StorageDead(_58); // scope 37 at $DIR/reference_prop.rs:+81:5: +81:6
-- StorageDead(_57); // scope 0 at $DIR/reference_prop.rs:+81:5: +81:6
- StorageLive(_64); // scope 42 at $DIR/reference_prop.rs:+85:13: +85:18
- _64 = const 5_usize; // scope 42 at $DIR/reference_prop.rs:+85:21: +85:28
-- StorageLive(_65); // scope 43 at $DIR/reference_prop.rs:+86:13: +86:18
-- _65 = &raw mut _64; // scope 43 at $DIR/reference_prop.rs:+86:21: +86:31
-- StorageLive(_66); // scope 44 at $DIR/reference_prop.rs:+87:13: +87:14
-- _66 = &mut _65; // scope 44 at $DIR/reference_prop.rs:+87:17: +87:23
- StorageLive(_67); // scope 45 at $DIR/reference_prop.rs:+88:13: +88:14
-- _67 = (*_65); // scope 45 at $DIR/reference_prop.rs:+88:17: +88:19
-+ _67 = _64; // scope 45 at $DIR/reference_prop.rs:+88:17: +88:19
- StorageLive(_68); // scope 46 at $DIR/reference_prop.rs:+89:9: +89:19
- StorageLive(_69); // scope 46 at $DIR/reference_prop.rs:+89:16: +89:18
- _69 = (); // scope 46 at $DIR/reference_prop.rs:+89:16: +89:18
- _68 = opaque::<()>(move _69) -> bb10; // scope 46 at $DIR/reference_prop.rs:+89:9: +89:19
- // mir::Constant
- // + span: $DIR/reference_prop.rs:387:9: 387:15
- // + literal: Const { ty: fn(()) {opaque::<()>}, val: Value(<ZST>) }
+ StorageDead(_63);
+ StorageDead(_62);
+- _57 = const ();
+ StorageDead(_61);
+- StorageDead(_60);
+- StorageDead(_59);
+ StorageDead(_58);
+- StorageDead(_57);
+ StorageLive(_64);
+ _64 = const 5_usize;
+- StorageLive(_65);
+- _65 = &raw mut _64;
+- StorageLive(_66);
+- _66 = &mut _65;
+ StorageLive(_67);
+- _67 = (*_65);
++ _67 = _64;
+ StorageLive(_68);
+ StorageLive(_69);
+ _69 = ();
+ _68 = opaque::<()>(move _69) -> [return: bb10, unwind continue];
}
bb10: {
- StorageDead(_69); // scope 46 at $DIR/reference_prop.rs:+89:18: +89:19
- StorageDead(_68); // scope 46 at $DIR/reference_prop.rs:+89:19: +89:20
- _0 = const (); // scope 42 at $DIR/reference_prop.rs:+84:5: +90:6
- StorageDead(_67); // scope 45 at $DIR/reference_prop.rs:+90:5: +90:6
-- StorageDead(_66); // scope 44 at $DIR/reference_prop.rs:+90:5: +90:6
-- StorageDead(_65); // scope 43 at $DIR/reference_prop.rs:+90:5: +90:6
- StorageDead(_64); // scope 42 at $DIR/reference_prop.rs:+90:5: +90:6
- return; // scope 0 at $DIR/reference_prop.rs:+91:2: +91:2
+ StorageDead(_69);
+ StorageDead(_68);
+ _0 = const ();
+ StorageDead(_67);
+- StorageDead(_66);
+- StorageDead(_65);
+ StorageDead(_64);
+ return;
}
}
diff --git a/tests/mir-opt/reference_prop.unique_with_copies.ReferencePropagation.diff b/tests/mir-opt/reference_prop.unique_with_copies.ReferencePropagation.diff
index b754aff47..b4912a918 100644
--- a/tests/mir-opt/reference_prop.unique_with_copies.ReferencePropagation.diff
+++ b/tests/mir-opt/reference_prop.unique_with_copies.ReferencePropagation.diff
@@ -2,66 +2,60 @@
+ // MIR for `unique_with_copies` after ReferencePropagation
fn unique_with_copies() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/reference_prop.rs:+0:25: +0:25
- let _1: *mut i32; // in scope 0 at $DIR/reference_prop.rs:+1:9: +1:10
- let mut _2: i32; // in scope 0 at $DIR/reference_prop.rs:+2:13: +2:18
- let _4: (); // in scope 0 at $DIR/reference_prop.rs:+5:18: +5:28
- let mut _5: i32; // in scope 0 at $DIR/reference_prop.rs:+5:25: +5:27
- let _6: (); // in scope 0 at $DIR/reference_prop.rs:+9:14: +9:24
- let mut _7: i32; // in scope 0 at $DIR/reference_prop.rs:+9:21: +9:23
+ let mut _0: ();
+ let _1: *mut i32;
+ let mut _2: i32;
+ let _4: ();
+ let mut _5: i32;
+ let _6: ();
+ let mut _7: i32;
scope 1 {
-- debug y => _1; // in scope 1 at $DIR/reference_prop.rs:+1:9: +1:10
-+ debug y => _3; // in scope 1 at $DIR/reference_prop.rs:+1:9: +1:10
+- debug y => _1;
++ debug y => _3;
scope 5 {
}
}
scope 2 {
- debug a => _2; // in scope 2 at $DIR/reference_prop.rs:+2:13: +2:18
- let _3: *mut i32; // in scope 2 at $DIR/reference_prop.rs:+3:13: +3:14
+ debug a => _2;
+ let _3: *mut i32;
scope 3 {
- debug x => _3; // in scope 3 at $DIR/reference_prop.rs:+3:13: +3:14
+ debug x => _3;
scope 4 {
}
}
}
bb0: {
-- StorageLive(_1); // scope 0 at $DIR/reference_prop.rs:+1:9: +1:10
- StorageLive(_2); // scope 0 at $DIR/reference_prop.rs:+2:13: +2:18
- _2 = const 0_i32; // scope 0 at $DIR/reference_prop.rs:+2:21: +2:22
-- StorageLive(_3); // scope 2 at $DIR/reference_prop.rs:+3:13: +3:14
- _3 = &raw mut _2; // scope 2 at $DIR/reference_prop.rs:+3:17: +3:27
- StorageLive(_4); // scope 3 at $DIR/reference_prop.rs:+5:9: +5:30
- StorageLive(_5); // scope 4 at $DIR/reference_prop.rs:+5:25: +5:27
- _5 = (*_3); // scope 4 at $DIR/reference_prop.rs:+5:25: +5:27
- _4 = opaque::<i32>(move _5) -> bb1; // scope 4 at $DIR/reference_prop.rs:+5:18: +5:28
- // mir::Constant
- // + span: $DIR/reference_prop.rs:524:18: 524:24
- // + literal: Const { ty: fn(i32) {opaque::<i32>}, val: Value(<ZST>) }
+- StorageLive(_1);
+ StorageLive(_2);
+ _2 = const 0_i32;
+- StorageLive(_3);
+ _3 = &raw mut _2;
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = (*_3);
+ _4 = opaque::<i32>(move _5) -> [return: bb1, unwind continue];
}
bb1: {
- StorageDead(_5); // scope 4 at $DIR/reference_prop.rs:+5:27: +5:28
- StorageDead(_4); // scope 3 at $DIR/reference_prop.rs:+5:30: +5:31
-- _1 = _3; // scope 3 at $DIR/reference_prop.rs:+6:9: +6:10
-- StorageDead(_3); // scope 2 at $DIR/reference_prop.rs:+7:5: +7:6
- StorageDead(_2); // scope 0 at $DIR/reference_prop.rs:+7:5: +7:6
- StorageLive(_6); // scope 1 at $DIR/reference_prop.rs:+9:5: +9:26
- StorageLive(_7); // scope 5 at $DIR/reference_prop.rs:+9:21: +9:23
-- _7 = (*_1); // scope 5 at $DIR/reference_prop.rs:+9:21: +9:23
-+ _7 = (*_3); // scope 5 at $DIR/reference_prop.rs:+9:21: +9:23
- _6 = opaque::<i32>(move _7) -> bb2; // scope 5 at $DIR/reference_prop.rs:+9:14: +9:24
- // mir::Constant
- // + span: $DIR/reference_prop.rs:528:14: 528:20
- // + literal: Const { ty: fn(i32) {opaque::<i32>}, val: Value(<ZST>) }
+ StorageDead(_5);
+ StorageDead(_4);
+- _1 = _3;
+- StorageDead(_3);
+ StorageDead(_2);
+ StorageLive(_6);
+ StorageLive(_7);
+- _7 = (*_1);
++ _7 = (*_3);
+ _6 = opaque::<i32>(move _7) -> [return: bb2, unwind continue];
}
bb2: {
- StorageDead(_7); // scope 5 at $DIR/reference_prop.rs:+9:23: +9:24
- StorageDead(_6); // scope 1 at $DIR/reference_prop.rs:+9:26: +9:27
- _0 = const (); // scope 0 at $DIR/reference_prop.rs:+0:25: +10:2
-- StorageDead(_1); // scope 0 at $DIR/reference_prop.rs:+10:1: +10:2
- return; // scope 0 at $DIR/reference_prop.rs:+10:2: +10:2
+ StorageDead(_7);
+ StorageDead(_6);
+ _0 = const ();
+- StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.diff b/tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.diff
deleted file mode 100644
index 0b3da98a5..000000000
--- a/tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.diff
+++ /dev/null
@@ -1,74 +0,0 @@
-- // MIR for `match_guard` before CleanupPostBorrowck
-+ // MIR for `match_guard` after CleanupPostBorrowck
-
- fn match_guard(_1: Option<&&i32>, _2: bool) -> i32 {
- debug x => _1; // in scope 0 at $DIR/remove_fake_borrows.rs:+0:16: +0:17
- debug c => _2; // in scope 0 at $DIR/remove_fake_borrows.rs:+0:34: +0:35
- let mut _0: i32; // return place in scope 0 at $DIR/remove_fake_borrows.rs:+0:46: +0:49
- let mut _3: isize; // in scope 0 at $DIR/remove_fake_borrows.rs:+2:9: +2:16
- let mut _4: &std::option::Option<&&i32>; // in scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
- let mut _5: &&i32; // in scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
- let mut _6: &&&i32; // in scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
- let mut _7: &i32; // in scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
- let mut _8: bool; // in scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
-
- bb0: {
-- FakeRead(ForMatchedPlace(None), _1); // scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
-+ nop; // scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
- _3 = discriminant(_1); // scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
- switchInt(move _3) -> [1: bb2, otherwise: bb1]; // scope 0 at $DIR/remove_fake_borrows.rs:+1:5: +1:12
- }
-
- bb1: {
- _0 = const 1_i32; // scope 0 at $DIR/remove_fake_borrows.rs:+3:14: +3:15
- goto -> bb7; // scope 0 at $DIR/remove_fake_borrows.rs:+3:14: +3:15
- }
-
- bb2: {
- switchInt((*(*((_1 as Some).0: &&i32)))) -> [0: bb3, otherwise: bb1]; // scope 0 at $DIR/remove_fake_borrows.rs:+1:5: +1:12
- }
-
- bb3: {
-- falseEdge -> [real: bb4, imaginary: bb1]; // scope 0 at $DIR/remove_fake_borrows.rs:+2:9: +2:16
-+ goto -> bb4; // scope 0 at $DIR/remove_fake_borrows.rs:+2:9: +2:16
- }
-
- bb4: {
-- _4 = &shallow _1; // scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
-- _5 = &shallow (*((_1 as Some).0: &&i32)); // scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
-- _6 = &shallow ((_1 as Some).0: &&i32); // scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
-- _7 = &shallow (*(*((_1 as Some).0: &&i32))); // scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
-+ nop; // scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
-+ nop; // scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
-+ nop; // scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
-+ nop; // scope 0 at $DIR/remove_fake_borrows.rs:+1:11: +1:12
- StorageLive(_8); // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
- _8 = _2; // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
- switchInt(move _8) -> [0: bb6, otherwise: bb5]; // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
- }
-
- bb5: {
- StorageDead(_8); // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
-- FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
-- FakeRead(ForMatchGuard, _5); // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
-- FakeRead(ForMatchGuard, _6); // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
-- FakeRead(ForMatchGuard, _7); // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
-+ nop; // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
-+ nop; // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
-+ nop; // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
-+ nop; // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
- _0 = const 0_i32; // scope 0 at $DIR/remove_fake_borrows.rs:+2:25: +2:26
- goto -> bb7; // scope 0 at $DIR/remove_fake_borrows.rs:+2:25: +2:26
- }
-
- bb6: {
- StorageDead(_8); // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
-- falseEdge -> [real: bb1, imaginary: bb1]; // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
-+ goto -> bb1; // scope 0 at $DIR/remove_fake_borrows.rs:+2:20: +2:21
- }
-
- bb7: {
- return; // scope 0 at $DIR/remove_fake_borrows.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.panic-abort.diff b/tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.panic-abort.diff
new file mode 100644
index 000000000..33322c41b
--- /dev/null
+++ b/tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.panic-abort.diff
@@ -0,0 +1,74 @@
+- // MIR for `match_guard` before CleanupPostBorrowck
++ // MIR for `match_guard` after CleanupPostBorrowck
+
+ fn match_guard(_1: Option<&&i32>, _2: bool) -> i32 {
+ debug x => _1;
+ debug c => _2;
+ let mut _0: i32;
+ let mut _3: isize;
+ let mut _4: &std::option::Option<&&i32>;
+ let mut _5: &&i32;
+ let mut _6: &&&i32;
+ let mut _7: &i32;
+ let mut _8: bool;
+
+ bb0: {
+- FakeRead(ForMatchedPlace(None), _1);
++ nop;
+ _3 = discriminant(_1);
+ switchInt(move _3) -> [1: bb2, otherwise: bb1];
+ }
+
+ bb1: {
+ _0 = const 1_i32;
+ goto -> bb7;
+ }
+
+ bb2: {
+ switchInt((*(*((_1 as Some).0: &&i32)))) -> [0: bb3, otherwise: bb1];
+ }
+
+ bb3: {
+- falseEdge -> [real: bb4, imaginary: bb1];
++ goto -> bb4;
+ }
+
+ bb4: {
+- _4 = &shallow _1;
+- _5 = &shallow (*((_1 as Some).0: &&i32));
+- _6 = &shallow ((_1 as Some).0: &&i32);
+- _7 = &shallow (*(*((_1 as Some).0: &&i32)));
++ nop;
++ nop;
++ nop;
++ nop;
+ StorageLive(_8);
+ _8 = _2;
+ switchInt(move _8) -> [0: bb6, otherwise: bb5];
+ }
+
+ bb5: {
+ StorageDead(_8);
+- FakeRead(ForMatchGuard, _4);
+- FakeRead(ForMatchGuard, _5);
+- FakeRead(ForMatchGuard, _6);
+- FakeRead(ForMatchGuard, _7);
++ nop;
++ nop;
++ nop;
++ nop;
+ _0 = const 0_i32;
+ goto -> bb7;
+ }
+
+ bb6: {
+ StorageDead(_8);
+- falseEdge -> [real: bb1, imaginary: bb1];
++ goto -> bb1;
+ }
+
+ bb7: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.panic-unwind.diff b/tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.panic-unwind.diff
new file mode 100644
index 000000000..33322c41b
--- /dev/null
+++ b/tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.panic-unwind.diff
@@ -0,0 +1,74 @@
+- // MIR for `match_guard` before CleanupPostBorrowck
++ // MIR for `match_guard` after CleanupPostBorrowck
+
+ fn match_guard(_1: Option<&&i32>, _2: bool) -> i32 {
+ debug x => _1;
+ debug c => _2;
+ let mut _0: i32;
+ let mut _3: isize;
+ let mut _4: &std::option::Option<&&i32>;
+ let mut _5: &&i32;
+ let mut _6: &&&i32;
+ let mut _7: &i32;
+ let mut _8: bool;
+
+ bb0: {
+- FakeRead(ForMatchedPlace(None), _1);
++ nop;
+ _3 = discriminant(_1);
+ switchInt(move _3) -> [1: bb2, otherwise: bb1];
+ }
+
+ bb1: {
+ _0 = const 1_i32;
+ goto -> bb7;
+ }
+
+ bb2: {
+ switchInt((*(*((_1 as Some).0: &&i32)))) -> [0: bb3, otherwise: bb1];
+ }
+
+ bb3: {
+- falseEdge -> [real: bb4, imaginary: bb1];
++ goto -> bb4;
+ }
+
+ bb4: {
+- _4 = &shallow _1;
+- _5 = &shallow (*((_1 as Some).0: &&i32));
+- _6 = &shallow ((_1 as Some).0: &&i32);
+- _7 = &shallow (*(*((_1 as Some).0: &&i32)));
++ nop;
++ nop;
++ nop;
++ nop;
+ StorageLive(_8);
+ _8 = _2;
+ switchInt(move _8) -> [0: bb6, otherwise: bb5];
+ }
+
+ bb5: {
+ StorageDead(_8);
+- FakeRead(ForMatchGuard, _4);
+- FakeRead(ForMatchGuard, _5);
+- FakeRead(ForMatchGuard, _6);
+- FakeRead(ForMatchGuard, _7);
++ nop;
++ nop;
++ nop;
++ nop;
+ _0 = const 0_i32;
+ goto -> bb7;
+ }
+
+ bb6: {
+ StorageDead(_8);
+- falseEdge -> [real: bb1, imaginary: bb1];
++ goto -> bb1;
+ }
+
+ bb7: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/remove_fake_borrows.rs b/tests/mir-opt/remove_fake_borrows.rs
index d26c6f5d7..f0ee98f77 100644
--- a/tests/mir-opt/remove_fake_borrows.rs
+++ b/tests/mir-opt/remove_fake_borrows.rs
@@ -1,6 +1,6 @@
// Test that the fake borrows for matches are removed after borrow checking.
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// EMIT_MIR remove_fake_borrows.match_guard.CleanupPostBorrowck.diff
fn match_guard(x: Option<&&i32>, c: bool) -> i32 {
diff --git a/tests/mir-opt/remove_never_const.no_codegen.PreCodegen.after.mir b/tests/mir-opt/remove_never_const.no_codegen.PreCodegen.after.mir
index 8eb0e9c8f..695bf2336 100644
--- a/tests/mir-opt/remove_never_const.no_codegen.PreCodegen.after.mir
+++ b/tests/mir-opt/remove_never_const.no_codegen.PreCodegen.after.mir
@@ -1,11 +1,11 @@
// MIR for `no_codegen` after PreCodegen
fn no_codegen() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/remove_never_const.rs:+0:20: +0:20
+ let mut _0: ();
scope 1 {
}
bb0: {
- unreachable; // scope 0 at $DIR/remove_never_const.rs:+1:13: +1:33
+ unreachable;
}
}
diff --git a/tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.diff b/tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.diff
deleted file mode 100644
index 0e8309532..000000000
--- a/tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.diff
+++ /dev/null
@@ -1,98 +0,0 @@
-- // MIR for `main` before RemoveStorageMarkers
-+ // MIR for `main` after RemoveStorageMarkers
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/remove_storage_markers.rs:+0:11: +0:11
- let mut _1: i32; // in scope 0 at $DIR/remove_storage_markers.rs:+1:9: +1:16
- let mut _2: std::ops::Range<i32>; // in scope 0 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- let mut _3: std::ops::Range<i32>; // in scope 0 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- let mut _5: (); // in scope 0 at $DIR/remove_storage_markers.rs:+0:1: +5:2
- let _6: (); // in scope 0 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- let mut _7: std::option::Option<i32>; // in scope 0 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- let mut _8: &mut std::ops::Range<i32>; // in scope 0 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- let mut _9: &mut std::ops::Range<i32>; // in scope 0 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- let mut _10: isize; // in scope 0 at $DIR/remove_storage_markers.rs:+2:5: +4:6
- let mut _11: !; // in scope 0 at $DIR/remove_storage_markers.rs:+2:5: +4:6
- let mut _13: i32; // in scope 0 at $DIR/remove_storage_markers.rs:+3:16: +3:17
- scope 1 {
- debug sum => _1; // in scope 1 at $DIR/remove_storage_markers.rs:+1:9: +1:16
- let mut _4: std::ops::Range<i32>; // in scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- scope 2 {
- debug iter => _4; // in scope 2 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- let _12: i32; // in scope 2 at $DIR/remove_storage_markers.rs:+2:9: +2:10
- scope 3 {
- debug i => _12; // in scope 3 at $DIR/remove_storage_markers.rs:+2:9: +2:10
- }
- }
- }
-
- bb0: {
-- StorageLive(_1); // scope 0 at $DIR/remove_storage_markers.rs:+1:9: +1:16
- _1 = const 0_i32; // scope 0 at $DIR/remove_storage_markers.rs:+1:19: +1:20
-- StorageLive(_2); // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
-- StorageLive(_3); // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- _3 = std::ops::Range::<i32> { start: const 0_i32, end: const 10_i32 }; // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- _2 = <std::ops::Range<i32> as IntoIterator>::into_iter(move _3) -> bb1; // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- // mir::Constant
- // + span: $DIR/remove_storage_markers.rs:11:14: 11:19
- // + literal: Const { ty: fn(std::ops::Range<i32>) -> <std::ops::Range<i32> as IntoIterator>::IntoIter {<std::ops::Range<i32> as IntoIterator>::into_iter}, val: Value(<ZST>) }
- }
-
- bb1: {
-- StorageDead(_3); // scope 1 at $DIR/remove_storage_markers.rs:+2:18: +2:19
-- StorageLive(_4); // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- _4 = move _2; // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- goto -> bb2; // scope 2 at $DIR/remove_storage_markers.rs:+2:5: +4:6
- }
-
- bb2: {
-- StorageLive(_6); // scope 2 at $DIR/remove_storage_markers.rs:+2:14: +2:19
-- StorageLive(_7); // scope 2 at $DIR/remove_storage_markers.rs:+2:14: +2:19
-- StorageLive(_8); // scope 2 at $DIR/remove_storage_markers.rs:+2:14: +2:19
-- StorageLive(_9); // scope 2 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- _9 = &mut _4; // scope 2 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- _8 = &mut (*_9); // scope 2 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- _7 = <std::ops::Range<i32> as Iterator>::next(move _8) -> bb3; // scope 2 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- // mir::Constant
- // + span: $DIR/remove_storage_markers.rs:11:14: 11:19
- // + literal: Const { ty: for<'a> fn(&'a mut std::ops::Range<i32>) -> Option<<std::ops::Range<i32> as Iterator>::Item> {<std::ops::Range<i32> as Iterator>::next}, val: Value(<ZST>) }
- }
-
- bb3: {
-- StorageDead(_8); // scope 2 at $DIR/remove_storage_markers.rs:+2:18: +2:19
- _10 = discriminant(_7); // scope 2 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- switchInt(move _10) -> [0: bb6, 1: bb4, otherwise: bb5]; // scope 2 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- }
-
- bb4: {
-- StorageLive(_12); // scope 2 at $DIR/remove_storage_markers.rs:+2:9: +2:10
- _12 = ((_7 as Some).0: i32); // scope 2 at $DIR/remove_storage_markers.rs:+2:9: +2:10
-- StorageLive(_13); // scope 3 at $DIR/remove_storage_markers.rs:+3:16: +3:17
- _13 = _12; // scope 3 at $DIR/remove_storage_markers.rs:+3:16: +3:17
- _1 = Add(_1, move _13); // scope 3 at $DIR/remove_storage_markers.rs:+3:9: +3:17
-- StorageDead(_13); // scope 3 at $DIR/remove_storage_markers.rs:+3:16: +3:17
- _6 = const (); // scope 3 at $DIR/remove_storage_markers.rs:+2:20: +4:6
-- StorageDead(_12); // scope 2 at $DIR/remove_storage_markers.rs:+4:5: +4:6
-- StorageDead(_9); // scope 2 at $DIR/remove_storage_markers.rs:+4:5: +4:6
-- StorageDead(_7); // scope 2 at $DIR/remove_storage_markers.rs:+4:5: +4:6
-- StorageDead(_6); // scope 2 at $DIR/remove_storage_markers.rs:+4:5: +4:6
- _5 = const (); // scope 2 at $DIR/remove_storage_markers.rs:+2:5: +4:6
- goto -> bb2; // scope 2 at $DIR/remove_storage_markers.rs:+2:5: +4:6
- }
-
- bb5: {
- unreachable; // scope 2 at $DIR/remove_storage_markers.rs:+2:14: +2:19
- }
-
- bb6: {
- _0 = const (); // scope 2 at $DIR/remove_storage_markers.rs:+2:5: +4:6
-- StorageDead(_9); // scope 2 at $DIR/remove_storage_markers.rs:+4:5: +4:6
-- StorageDead(_7); // scope 2 at $DIR/remove_storage_markers.rs:+4:5: +4:6
-- StorageDead(_6); // scope 2 at $DIR/remove_storage_markers.rs:+4:5: +4:6
-- StorageDead(_4); // scope 1 at $DIR/remove_storage_markers.rs:+4:5: +4:6
-- StorageDead(_2); // scope 1 at $DIR/remove_storage_markers.rs:+4:5: +4:6
-- StorageDead(_1); // scope 0 at $DIR/remove_storage_markers.rs:+5:1: +5:2
- return; // scope 0 at $DIR/remove_storage_markers.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.panic-abort.diff b/tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.panic-abort.diff
new file mode 100644
index 000000000..8804e6715
--- /dev/null
+++ b/tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.panic-abort.diff
@@ -0,0 +1,92 @@
+- // MIR for `main` before RemoveStorageMarkers
++ // MIR for `main` after RemoveStorageMarkers
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _2: std::ops::Range<i32>;
+ let mut _3: std::ops::Range<i32>;
+ let mut _5: ();
+ let _6: ();
+ let mut _7: std::option::Option<i32>;
+ let mut _8: &mut std::ops::Range<i32>;
+ let mut _9: &mut std::ops::Range<i32>;
+ let mut _10: isize;
+ let mut _11: !;
+ let mut _13: i32;
+ scope 1 {
+ debug sum => _1;
+ let mut _4: std::ops::Range<i32>;
+ scope 2 {
+ debug iter => _4;
+ let _12: i32;
+ scope 3 {
+ debug i => _12;
+ }
+ }
+ }
+
+ bb0: {
+- StorageLive(_1);
+ _1 = const 0_i32;
+- StorageLive(_2);
+- StorageLive(_3);
+ _3 = std::ops::Range::<i32> { start: const 0_i32, end: const 10_i32 };
+ _2 = <std::ops::Range<i32> as IntoIterator>::into_iter(move _3) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+- StorageDead(_3);
+- StorageLive(_4);
+ _4 = move _2;
+ goto -> bb2;
+ }
+
+ bb2: {
+- StorageLive(_6);
+- StorageLive(_7);
+- StorageLive(_8);
+- StorageLive(_9);
+ _9 = &mut _4;
+ _8 = &mut (*_9);
+ _7 = <std::ops::Range<i32> as Iterator>::next(move _8) -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+- StorageDead(_8);
+ _10 = discriminant(_7);
+ switchInt(move _10) -> [0: bb6, 1: bb4, otherwise: bb5];
+ }
+
+ bb4: {
+- StorageLive(_12);
+ _12 = ((_7 as Some).0: i32);
+- StorageLive(_13);
+ _13 = _12;
+ _1 = Add(_1, move _13);
+- StorageDead(_13);
+ _6 = const ();
+- StorageDead(_12);
+- StorageDead(_9);
+- StorageDead(_7);
+- StorageDead(_6);
+ _5 = const ();
+ goto -> bb2;
+ }
+
+ bb5: {
+ unreachable;
+ }
+
+ bb6: {
+ _0 = const ();
+- StorageDead(_9);
+- StorageDead(_7);
+- StorageDead(_6);
+- StorageDead(_4);
+- StorageDead(_2);
+- StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.panic-unwind.diff b/tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.panic-unwind.diff
new file mode 100644
index 000000000..faaebc300
--- /dev/null
+++ b/tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.panic-unwind.diff
@@ -0,0 +1,92 @@
+- // MIR for `main` before RemoveStorageMarkers
++ // MIR for `main` after RemoveStorageMarkers
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+ let mut _2: std::ops::Range<i32>;
+ let mut _3: std::ops::Range<i32>;
+ let mut _5: ();
+ let _6: ();
+ let mut _7: std::option::Option<i32>;
+ let mut _8: &mut std::ops::Range<i32>;
+ let mut _9: &mut std::ops::Range<i32>;
+ let mut _10: isize;
+ let mut _11: !;
+ let mut _13: i32;
+ scope 1 {
+ debug sum => _1;
+ let mut _4: std::ops::Range<i32>;
+ scope 2 {
+ debug iter => _4;
+ let _12: i32;
+ scope 3 {
+ debug i => _12;
+ }
+ }
+ }
+
+ bb0: {
+- StorageLive(_1);
+ _1 = const 0_i32;
+- StorageLive(_2);
+- StorageLive(_3);
+ _3 = std::ops::Range::<i32> { start: const 0_i32, end: const 10_i32 };
+ _2 = <std::ops::Range<i32> as IntoIterator>::into_iter(move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+- StorageDead(_3);
+- StorageLive(_4);
+ _4 = move _2;
+ goto -> bb2;
+ }
+
+ bb2: {
+- StorageLive(_6);
+- StorageLive(_7);
+- StorageLive(_8);
+- StorageLive(_9);
+ _9 = &mut _4;
+ _8 = &mut (*_9);
+ _7 = <std::ops::Range<i32> as Iterator>::next(move _8) -> [return: bb3, unwind continue];
+ }
+
+ bb3: {
+- StorageDead(_8);
+ _10 = discriminant(_7);
+ switchInt(move _10) -> [0: bb6, 1: bb4, otherwise: bb5];
+ }
+
+ bb4: {
+- StorageLive(_12);
+ _12 = ((_7 as Some).0: i32);
+- StorageLive(_13);
+ _13 = _12;
+ _1 = Add(_1, move _13);
+- StorageDead(_13);
+ _6 = const ();
+- StorageDead(_12);
+- StorageDead(_9);
+- StorageDead(_7);
+- StorageDead(_6);
+ _5 = const ();
+ goto -> bb2;
+ }
+
+ bb5: {
+ unreachable;
+ }
+
+ bb6: {
+ _0 = const ();
+- StorageDead(_9);
+- StorageDead(_7);
+- StorageDead(_6);
+- StorageDead(_4);
+- StorageDead(_2);
+- StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/remove_storage_markers.rs b/tests/mir-opt/remove_storage_markers.rs
index 480db8ac1..330264461 100644
--- a/tests/mir-opt/remove_storage_markers.rs
+++ b/tests/mir-opt/remove_storage_markers.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: RemoveStorageMarkers
// Checks that storage markers are removed at opt-level=0.
diff --git a/tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.diff b/tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.diff
deleted file mode 100644
index 7713649c5..000000000
--- a/tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-- // MIR for `cannot_opt_generic` before RemoveUnneededDrops
-+ // MIR for `cannot_opt_generic` after RemoveUnneededDrops
-
- fn cannot_opt_generic(_1: T) -> () {
- debug x => _1; // in scope 0 at $DIR/remove_unneeded_drops.rs:+0:26: +0:27
- let mut _0: (); // return place in scope 0 at $DIR/remove_unneeded_drops.rs:+0:32: +0:32
- let _2: (); // in scope 0 at $DIR/remove_unneeded_drops.rs:+1:5: +1:12
- let mut _3: T; // in scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11
- scope 1 (inlined std::mem::drop::<T>) { // at $DIR/remove_unneeded_drops.rs:21:5: 21:12
- debug _x => _3; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- }
-
- bb0: {
- nop; // scope 0 at $DIR/remove_unneeded_drops.rs:+1:5: +1:12
- StorageLive(_3); // scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11
- _3 = move _1; // scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11
- drop(_3) -> [return: bb2, unwind: bb1]; // scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- }
-
- bb1 (cleanup): {
- resume; // scope 0 at $DIR/remove_unneeded_drops.rs:+0:1: +2:2
- }
-
- bb2: {
- StorageDead(_3); // scope 0 at $DIR/remove_unneeded_drops.rs:+1:11: +1:12
- nop; // scope 0 at $DIR/remove_unneeded_drops.rs:+1:12: +1:13
- nop; // scope 0 at $DIR/remove_unneeded_drops.rs:+0:32: +2:2
- return; // scope 0 at $DIR/remove_unneeded_drops.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.panic-abort.diff b/tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.panic-abort.diff
new file mode 100644
index 000000000..22a1a882b
--- /dev/null
+++ b/tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.panic-abort.diff
@@ -0,0 +1,27 @@
+- // MIR for `cannot_opt_generic` before RemoveUnneededDrops
++ // MIR for `cannot_opt_generic` after RemoveUnneededDrops
+
+ fn cannot_opt_generic(_1: T) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: T;
+ scope 1 (inlined std::mem::drop::<T>) {
+ debug _x => _3;
+ }
+
+ bb0: {
+ nop;
+ StorageLive(_3);
+ _3 = move _1;
+ drop(_3) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ nop;
+ nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.panic-unwind.diff b/tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.panic-unwind.diff
new file mode 100644
index 000000000..56070e610
--- /dev/null
+++ b/tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.panic-unwind.diff
@@ -0,0 +1,31 @@
+- // MIR for `cannot_opt_generic` before RemoveUnneededDrops
++ // MIR for `cannot_opt_generic` after RemoveUnneededDrops
+
+ fn cannot_opt_generic(_1: T) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: T;
+ scope 1 (inlined std::mem::drop::<T>) {
+ debug _x => _3;
+ }
+
+ bb0: {
+ nop;
+ StorageLive(_3);
+ _3 = move _1;
+ drop(_3) -> [return: bb2, unwind: bb1];
+ }
+
+ bb1 (cleanup): {
+ resume;
+ }
+
+ bb2: {
+ StorageDead(_3);
+ nop;
+ nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.diff b/tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.diff
deleted file mode 100644
index 533db4051..000000000
--- a/tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-- // MIR for `dont_opt` before RemoveUnneededDrops
-+ // MIR for `dont_opt` after RemoveUnneededDrops
-
- fn dont_opt(_1: Vec<bool>) -> () {
- debug x => _1; // in scope 0 at $DIR/remove_unneeded_drops.rs:+0:13: +0:14
- let mut _0: (); // return place in scope 0 at $DIR/remove_unneeded_drops.rs:+0:27: +0:27
- let _2: (); // in scope 0 at $DIR/remove_unneeded_drops.rs:+1:5: +1:12
- let mut _3: std::vec::Vec<bool>; // in scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11
- scope 1 (inlined std::mem::drop::<Vec<bool>>) { // at $DIR/remove_unneeded_drops.rs:9:5: 9:12
- debug _x => _3; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- }
-
- bb0: {
- nop; // scope 0 at $DIR/remove_unneeded_drops.rs:+1:5: +1:12
- StorageLive(_3); // scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11
- _3 = move _1; // scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11
- drop(_3) -> [return: bb2, unwind: bb1]; // scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- }
-
- bb1 (cleanup): {
- resume; // scope 0 at $DIR/remove_unneeded_drops.rs:+0:1: +2:2
- }
-
- bb2: {
- StorageDead(_3); // scope 0 at $DIR/remove_unneeded_drops.rs:+1:11: +1:12
- nop; // scope 0 at $DIR/remove_unneeded_drops.rs:+1:12: +1:13
- nop; // scope 0 at $DIR/remove_unneeded_drops.rs:+0:27: +2:2
- return; // scope 0 at $DIR/remove_unneeded_drops.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.panic-abort.diff b/tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.panic-abort.diff
new file mode 100644
index 000000000..105bedd0a
--- /dev/null
+++ b/tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.panic-abort.diff
@@ -0,0 +1,27 @@
+- // MIR for `dont_opt` before RemoveUnneededDrops
++ // MIR for `dont_opt` after RemoveUnneededDrops
+
+ fn dont_opt(_1: Vec<bool>) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: std::vec::Vec<bool>;
+ scope 1 (inlined std::mem::drop::<Vec<bool>>) {
+ debug _x => _3;
+ }
+
+ bb0: {
+ nop;
+ StorageLive(_3);
+ _3 = move _1;
+ drop(_3) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_3);
+ nop;
+ nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.panic-unwind.diff b/tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.panic-unwind.diff
new file mode 100644
index 000000000..c9790dc07
--- /dev/null
+++ b/tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.panic-unwind.diff
@@ -0,0 +1,31 @@
+- // MIR for `dont_opt` before RemoveUnneededDrops
++ // MIR for `dont_opt` after RemoveUnneededDrops
+
+ fn dont_opt(_1: Vec<bool>) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: std::vec::Vec<bool>;
+ scope 1 (inlined std::mem::drop::<Vec<bool>>) {
+ debug _x => _3;
+ }
+
+ bb0: {
+ nop;
+ StorageLive(_3);
+ _3 = move _1;
+ drop(_3) -> [return: bb2, unwind: bb1];
+ }
+
+ bb1 (cleanup): {
+ resume;
+ }
+
+ bb2: {
+ StorageDead(_3);
+ nop;
+ nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.diff b/tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.diff
deleted file mode 100644
index 04a2d54e9..000000000
--- a/tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.diff
+++ /dev/null
@@ -1,27 +0,0 @@
-- // MIR for `opt` before RemoveUnneededDrops
-+ // MIR for `opt` after RemoveUnneededDrops
-
- fn opt(_1: bool) -> () {
- debug x => _1; // in scope 0 at $DIR/remove_unneeded_drops.rs:+0:8: +0:9
- let mut _0: (); // return place in scope 0 at $DIR/remove_unneeded_drops.rs:+0:17: +0:17
- let _2: (); // in scope 0 at $DIR/remove_unneeded_drops.rs:+1:5: +1:12
- let mut _3: bool; // in scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11
- scope 1 (inlined std::mem::drop::<bool>) { // at $DIR/remove_unneeded_drops.rs:4:5: 4:12
- debug _x => _3; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- }
-
- bb0: {
-- nop; // scope 0 at $DIR/remove_unneeded_drops.rs:+1:5: +1:12
- StorageLive(_3); // scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11
- _3 = _1; // scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11
-- drop(_3) -> bb1; // scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
-- }
--
-- bb1: {
- StorageDead(_3); // scope 0 at $DIR/remove_unneeded_drops.rs:+1:11: +1:12
-- nop; // scope 0 at $DIR/remove_unneeded_drops.rs:+1:12: +1:13
-- nop; // scope 0 at $DIR/remove_unneeded_drops.rs:+0:17: +2:2
- return; // scope 0 at $DIR/remove_unneeded_drops.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.panic-abort.diff b/tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.panic-abort.diff
new file mode 100644
index 000000000..a48ac82ea
--- /dev/null
+++ b/tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.panic-abort.diff
@@ -0,0 +1,27 @@
+- // MIR for `opt` before RemoveUnneededDrops
++ // MIR for `opt` after RemoveUnneededDrops
+
+ fn opt(_1: bool) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: bool;
+ scope 1 (inlined std::mem::drop::<bool>) {
+ debug _x => _3;
+ }
+
+ bb0: {
+- nop;
+ StorageLive(_3);
+ _3 = _1;
+- drop(_3) -> [return: bb1, unwind unreachable];
+- }
+-
+- bb1: {
+ StorageDead(_3);
+- nop;
+- nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.panic-unwind.diff b/tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.panic-unwind.diff
new file mode 100644
index 000000000..a335e8853
--- /dev/null
+++ b/tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.panic-unwind.diff
@@ -0,0 +1,27 @@
+- // MIR for `opt` before RemoveUnneededDrops
++ // MIR for `opt` after RemoveUnneededDrops
+
+ fn opt(_1: bool) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: bool;
+ scope 1 (inlined std::mem::drop::<bool>) {
+ debug _x => _3;
+ }
+
+ bb0: {
+- nop;
+ StorageLive(_3);
+ _3 = _1;
+- drop(_3) -> [return: bb1, unwind continue];
+- }
+-
+- bb1: {
+ StorageDead(_3);
+- nop;
+- nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.diff b/tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.diff
deleted file mode 100644
index 782d0c6c5..000000000
--- a/tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.diff
+++ /dev/null
@@ -1,27 +0,0 @@
-- // MIR for `opt_generic_copy` before RemoveUnneededDrops
-+ // MIR for `opt_generic_copy` after RemoveUnneededDrops
-
- fn opt_generic_copy(_1: T) -> () {
- debug x => _1; // in scope 0 at $DIR/remove_unneeded_drops.rs:+0:30: +0:31
- let mut _0: (); // return place in scope 0 at $DIR/remove_unneeded_drops.rs:+0:36: +0:36
- let _2: (); // in scope 0 at $DIR/remove_unneeded_drops.rs:+1:5: +1:12
- let mut _3: T; // in scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11
- scope 1 (inlined std::mem::drop::<T>) { // at $DIR/remove_unneeded_drops.rs:14:5: 14:12
- debug _x => _3; // in scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
- }
-
- bb0: {
-- nop; // scope 0 at $DIR/remove_unneeded_drops.rs:+1:5: +1:12
- StorageLive(_3); // scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11
- _3 = _1; // scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11
-- drop(_3) -> bb1; // scope 1 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
-- }
--
-- bb1: {
- StorageDead(_3); // scope 0 at $DIR/remove_unneeded_drops.rs:+1:11: +1:12
-- nop; // scope 0 at $DIR/remove_unneeded_drops.rs:+1:12: +1:13
-- nop; // scope 0 at $DIR/remove_unneeded_drops.rs:+0:36: +2:2
- return; // scope 0 at $DIR/remove_unneeded_drops.rs:+2:2: +2:2
- }
- }
-
diff --git a/tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.panic-abort.diff b/tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.panic-abort.diff
new file mode 100644
index 000000000..049b32f28
--- /dev/null
+++ b/tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.panic-abort.diff
@@ -0,0 +1,27 @@
+- // MIR for `opt_generic_copy` before RemoveUnneededDrops
++ // MIR for `opt_generic_copy` after RemoveUnneededDrops
+
+ fn opt_generic_copy(_1: T) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: T;
+ scope 1 (inlined std::mem::drop::<T>) {
+ debug _x => _3;
+ }
+
+ bb0: {
+- nop;
+ StorageLive(_3);
+ _3 = _1;
+- drop(_3) -> [return: bb1, unwind unreachable];
+- }
+-
+- bb1: {
+ StorageDead(_3);
+- nop;
+- nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.panic-unwind.diff b/tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.panic-unwind.diff
new file mode 100644
index 000000000..1f7a6f9ad
--- /dev/null
+++ b/tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.panic-unwind.diff
@@ -0,0 +1,27 @@
+- // MIR for `opt_generic_copy` before RemoveUnneededDrops
++ // MIR for `opt_generic_copy` after RemoveUnneededDrops
+
+ fn opt_generic_copy(_1: T) -> () {
+ debug x => _1;
+ let mut _0: ();
+ let _2: ();
+ let mut _3: T;
+ scope 1 (inlined std::mem::drop::<T>) {
+ debug _x => _3;
+ }
+
+ bb0: {
+- nop;
+ StorageLive(_3);
+ _3 = _1;
+- drop(_3) -> [return: bb1, unwind continue];
+- }
+-
+- bb1: {
+ StorageDead(_3);
+- nop;
+- nop;
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/remove_unneeded_drops.rs b/tests/mir-opt/remove_unneeded_drops.rs
index 1052f2886..178d0924c 100644
--- a/tests/mir-opt/remove_unneeded_drops.rs
+++ b/tests/mir-opt/remove_unneeded_drops.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// EMIT_MIR remove_unneeded_drops.opt.RemoveUnneededDrops.diff
fn opt(x: bool) {
drop(x);
diff --git a/tests/mir-opt/remove_zsts.get_union.PreCodegen.after.mir b/tests/mir-opt/remove_zsts.get_union.PreCodegen.after.mir
index 7ac9ef3d4..5886a5bfe 100644
--- a/tests/mir-opt/remove_zsts.get_union.PreCodegen.after.mir
+++ b/tests/mir-opt/remove_zsts.get_union.PreCodegen.after.mir
@@ -1,10 +1,10 @@
// MIR for `get_union` after PreCodegen
fn get_union() -> Foo {
- let mut _0: Foo; // return place in scope 0 at $DIR/remove_zsts.rs:+0:19: +0:22
+ let mut _0: Foo;
bb0: {
- _0 = Foo { x: const () }; // scope 0 at $DIR/remove_zsts.rs:+1:5: +1:18
- return; // scope 0 at $DIR/remove_zsts.rs:+2:2: +2:2
+ _0 = Foo { x: const () };
+ return;
}
}
diff --git a/tests/mir-opt/remove_zsts.get_union.RemoveZsts.diff b/tests/mir-opt/remove_zsts.get_union.RemoveZsts.diff
index edd86ef0a..748c18ba7 100644
--- a/tests/mir-opt/remove_zsts.get_union.RemoveZsts.diff
+++ b/tests/mir-opt/remove_zsts.get_union.RemoveZsts.diff
@@ -2,19 +2,19 @@
+ // MIR for `get_union` after RemoveZsts
fn get_union() -> Foo {
- let mut _0: Foo; // return place in scope 0 at $DIR/remove_zsts.rs:+0:19: +0:22
- let mut _1: (); // in scope 0 at $DIR/remove_zsts.rs:+1:14: +1:16
+ let mut _0: Foo;
+ let mut _1: ();
bb0: {
-- StorageLive(_1); // scope 0 at $DIR/remove_zsts.rs:+1:14: +1:16
-- _1 = (); // scope 0 at $DIR/remove_zsts.rs:+1:14: +1:16
-- _0 = Foo { x: move _1 }; // scope 0 at $DIR/remove_zsts.rs:+1:5: +1:18
-- StorageDead(_1); // scope 0 at $DIR/remove_zsts.rs:+1:17: +1:18
-+ nop; // scope 0 at $DIR/remove_zsts.rs:+1:14: +1:16
-+ nop; // scope 0 at $DIR/remove_zsts.rs:+1:14: +1:16
-+ _0 = Foo { x: const () }; // scope 0 at $DIR/remove_zsts.rs:+1:5: +1:18
-+ nop; // scope 0 at $DIR/remove_zsts.rs:+1:17: +1:18
- return; // scope 0 at $DIR/remove_zsts.rs:+2:2: +2:2
+- StorageLive(_1);
+- _1 = ();
+- _0 = Foo { x: move _1 };
+- StorageDead(_1);
++ nop;
++ nop;
++ _0 = Foo { x: const () };
++ nop;
+ return;
}
}
diff --git a/tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.mir b/tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.mir
deleted file mode 100644
index 3b479710b..000000000
--- a/tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.mir
+++ /dev/null
@@ -1,188 +0,0 @@
-// MIR for `array_casts` after SimplifyCfg-elaborate-drops
-
-fn array_casts() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/retag.rs:+0:18: +0:18
- let mut _1: [usize; 2]; // in scope 0 at $DIR/retag.rs:+1:9: +1:14
- let mut _3: *mut [usize; 2]; // in scope 0 at $DIR/retag.rs:+2:13: +2:19
- let mut _4: &mut [usize; 2]; // in scope 0 at $DIR/retag.rs:+2:13: +2:19
- let _5: (); // in scope 0 at $DIR/retag.rs:+3:5: +3:30
- let mut _6: *mut usize; // in scope 0 at $DIR/retag.rs:+3:15: +3:23
- let mut _7: *mut usize; // in scope 0 at $DIR/retag.rs:+3:15: +3:16
- let mut _10: *const [usize; 2]; // in scope 0 at $DIR/retag.rs:+6:13: +6:15
- let _11: &[usize; 2]; // in scope 0 at $DIR/retag.rs:+6:13: +6:15
- let _12: (); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _13: (&usize, &usize); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _14: &usize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _15: usize; // in scope 0 at $DIR/retag.rs:+7:16: +7:36
- let mut _16: *const usize; // in scope 0 at $DIR/retag.rs:+7:26: +7:34
- let mut _17: *const usize; // in scope 0 at $DIR/retag.rs:+7:26: +7:27
- let mut _18: &usize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _19: usize; // in scope 0 at $DIR/retag.rs:+7:38: +7:39
- let mut _22: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _23: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _24: usize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _25: usize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _26: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _28: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _29: core::panicking::AssertKind; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _30: &usize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _31: &usize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _32: &usize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _33: &usize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _34: std::option::Option<std::fmt::Arguments<'_>>; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/retag.rs:+1:9: +1:14
- let _2: *mut usize; // in scope 1 at $DIR/retag.rs:+2:9: +2:10
- scope 2 {
- debug p => _2; // in scope 2 at $DIR/retag.rs:+2:9: +2:10
- let _8: [usize; 2]; // in scope 2 at $DIR/retag.rs:+5:9: +5:10
- scope 3 {
- }
- scope 4 {
- debug x => _8; // in scope 4 at $DIR/retag.rs:+5:9: +5:10
- let _9: *const usize; // in scope 4 at $DIR/retag.rs:+6:9: +6:10
- scope 5 {
- debug p => _9; // in scope 5 at $DIR/retag.rs:+6:9: +6:10
- let _20: &usize; // in scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _21: &usize; // in scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let mut _35: &usize; // in scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- scope 6 {
- }
- scope 7 {
- debug left_val => _20; // in scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- debug right_val => _21; // in scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- let _27: core::panicking::AssertKind; // in scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- scope 8 {
- debug kind => _27; // in scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- }
- }
- }
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/retag.rs:+1:9: +1:14
- _1 = [const 0_usize, const 0_usize]; // scope 0 at $DIR/retag.rs:+1:29: +1:35
- StorageLive(_2); // scope 1 at $DIR/retag.rs:+2:9: +2:10
- StorageLive(_3); // scope 1 at $DIR/retag.rs:+2:13: +2:19
- StorageLive(_4); // scope 1 at $DIR/retag.rs:+2:13: +2:19
- _4 = &mut _1; // scope 1 at $DIR/retag.rs:+2:13: +2:19
- _3 = &raw mut (*_4); // scope 1 at $DIR/retag.rs:+2:13: +2:19
- _2 = move _3 as *mut usize (Pointer(ArrayToPointer)); // scope 1 at $DIR/retag.rs:+2:13: +2:33
- StorageDead(_3); // scope 1 at $DIR/retag.rs:+2:32: +2:33
- StorageDead(_4); // scope 1 at $DIR/retag.rs:+2:33: +2:34
- StorageLive(_5); // scope 2 at $DIR/retag.rs:+3:5: +3:30
- StorageLive(_6); // scope 3 at $DIR/retag.rs:+3:15: +3:23
- StorageLive(_7); // scope 3 at $DIR/retag.rs:+3:15: +3:16
- _7 = _2; // scope 3 at $DIR/retag.rs:+3:15: +3:16
- _6 = ptr::mut_ptr::<impl *mut usize>::add(move _7, const 1_usize) -> bb1; // scope 3 at $DIR/retag.rs:+3:15: +3:23
- // mir::Constant
- // + span: $DIR/retag.rs:61:17: 61:20
- // + literal: Const { ty: unsafe fn(*mut usize, usize) -> *mut usize {ptr::mut_ptr::<impl *mut usize>::add}, val: Value(<ZST>) }
- }
-
- bb1: {
- StorageDead(_7); // scope 3 at $DIR/retag.rs:+3:22: +3:23
- (*_6) = const 1_usize; // scope 3 at $DIR/retag.rs:+3:14: +3:27
- StorageDead(_6); // scope 3 at $DIR/retag.rs:+3:27: +3:28
- _5 = const (); // scope 3 at $DIR/retag.rs:+3:5: +3:30
- StorageDead(_5); // scope 2 at $DIR/retag.rs:+3:29: +3:30
- StorageLive(_8); // scope 2 at $DIR/retag.rs:+5:9: +5:10
- _8 = [const 0_usize, const 1_usize]; // scope 2 at $DIR/retag.rs:+5:25: +5:31
- StorageLive(_9); // scope 4 at $DIR/retag.rs:+6:9: +6:10
- StorageLive(_10); // scope 4 at $DIR/retag.rs:+6:13: +6:15
- StorageLive(_11); // scope 4 at $DIR/retag.rs:+6:13: +6:15
- _11 = &_8; // scope 4 at $DIR/retag.rs:+6:13: +6:15
- _10 = &raw const (*_11); // scope 4 at $DIR/retag.rs:+6:13: +6:15
- _9 = move _10 as *const usize (Pointer(ArrayToPointer)); // scope 4 at $DIR/retag.rs:+6:13: +6:31
- StorageDead(_10); // scope 4 at $DIR/retag.rs:+6:30: +6:31
- StorageDead(_11); // scope 4 at $DIR/retag.rs:+6:31: +6:32
- StorageLive(_12); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_13); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_14); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_15); // scope 5 at $DIR/retag.rs:+7:16: +7:36
- StorageLive(_16); // scope 6 at $DIR/retag.rs:+7:26: +7:34
- StorageLive(_17); // scope 6 at $DIR/retag.rs:+7:26: +7:27
- _17 = _9; // scope 6 at $DIR/retag.rs:+7:26: +7:27
- _16 = ptr::const_ptr::<impl *const usize>::add(move _17, const 1_usize) -> bb2; // scope 6 at $DIR/retag.rs:+7:26: +7:34
- // mir::Constant
- // + span: $DIR/retag.rs:65:28: 65:31
- // + literal: Const { ty: unsafe fn(*const usize, usize) -> *const usize {ptr::const_ptr::<impl *const usize>::add}, val: Value(<ZST>) }
- }
-
- bb2: {
- StorageDead(_17); // scope 6 at $DIR/retag.rs:+7:33: +7:34
- _15 = (*_16); // scope 6 at $DIR/retag.rs:+7:25: +7:34
- _14 = &_15; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_18); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _35 = const _; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
- // + literal: Const { ty: &usize, val: Unevaluated(array_casts, [], Some(promoted[0])) }
- Retag(_35); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _18 = &(*_35); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _13 = (move _14, move _18); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- Retag(_13); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_18); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_14); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_20); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _20 = (_13.0: &usize); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- Retag(_20); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_21); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _21 = (_13.1: &usize); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- Retag(_21); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_22); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_23); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_24); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _24 = (*_20); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_25); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _25 = (*_21); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _23 = Eq(move _24, move _25); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_25); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_24); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _22 = Not(move _23); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_23); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- switchInt(move _22) -> [0: bb4, otherwise: bb3]; // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- }
-
- bb3: {
- StorageLive(_27); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _27 = core::panicking::AssertKind::Eq; // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_28); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_29); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _29 = move _27; // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_30); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_31); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _31 = &(*_20); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _30 = &(*_31); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_32); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_33); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _33 = &(*_21); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _32 = &(*_33); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageLive(_34); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _34 = Option::<Arguments<'_>>::None; // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- Retag(_34); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _28 = core::panicking::assert_failed::<usize, usize>(move _29, move _30, move _32, move _34); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
- // + literal: Const { ty: for<'a, 'b, 'c> fn(core::panicking::AssertKind, &'a usize, &'b usize, Option<Arguments<'c>>) -> ! {core::panicking::assert_failed::<usize, usize>}, val: Value(<ZST>) }
- }
-
- bb4: {
- _12 = const (); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_22); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_21); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_20); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_16); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_15); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_13); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- StorageDead(_12); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
- _0 = const (); // scope 0 at $DIR/retag.rs:+0:18: +8:2
- StorageDead(_9); // scope 4 at $DIR/retag.rs:+8:1: +8:2
- StorageDead(_8); // scope 2 at $DIR/retag.rs:+8:1: +8:2
- StorageDead(_2); // scope 1 at $DIR/retag.rs:+8:1: +8:2
- StorageDead(_1); // scope 0 at $DIR/retag.rs:+8:1: +8:2
- return; // scope 0 at $DIR/retag.rs:+8:2: +8:2
- }
-}
diff --git a/tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.panic-abort.mir b/tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.panic-abort.mir
new file mode 100644
index 000000000..70efdbf4b
--- /dev/null
+++ b/tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.panic-abort.mir
@@ -0,0 +1,176 @@
+// MIR for `array_casts` after SimplifyCfg-elaborate-drops
+
+fn array_casts() -> () {
+ let mut _0: ();
+ let mut _1: [usize; 2];
+ let mut _3: *mut [usize; 2];
+ let mut _4: &mut [usize; 2];
+ let _5: ();
+ let mut _6: *mut usize;
+ let mut _7: *mut usize;
+ let mut _10: *const [usize; 2];
+ let _11: &[usize; 2];
+ let _12: ();
+ let mut _13: (&usize, &usize);
+ let mut _14: &usize;
+ let _15: usize;
+ let mut _16: *const usize;
+ let mut _17: *const usize;
+ let mut _18: &usize;
+ let _19: usize;
+ let mut _22: bool;
+ let mut _23: bool;
+ let mut _24: usize;
+ let mut _25: usize;
+ let mut _26: !;
+ let _28: !;
+ let mut _29: core::panicking::AssertKind;
+ let mut _30: &usize;
+ let _31: &usize;
+ let mut _32: &usize;
+ let _33: &usize;
+ let mut _34: std::option::Option<std::fmt::Arguments<'_>>;
+ scope 1 {
+ debug x => _1;
+ let _2: *mut usize;
+ scope 2 {
+ debug p => _2;
+ let _8: [usize; 2];
+ scope 3 {
+ }
+ scope 4 {
+ debug x => _8;
+ let _9: *const usize;
+ scope 5 {
+ debug p => _9;
+ let _20: &usize;
+ let _21: &usize;
+ let mut _35: &usize;
+ scope 6 {
+ }
+ scope 7 {
+ debug left_val => _20;
+ debug right_val => _21;
+ let _27: core::panicking::AssertKind;
+ scope 8 {
+ debug kind => _27;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = [const 0_usize, const 0_usize];
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &mut _1;
+ _3 = &raw mut (*_4);
+ _2 = move _3 as *mut usize (PointerCoercion(ArrayToPointer));
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = _2;
+ _6 = ptr::mut_ptr::<impl *mut usize>::add(move _7, const 1_usize) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ StorageDead(_7);
+ (*_6) = const 1_usize;
+ StorageDead(_6);
+ _5 = const ();
+ StorageDead(_5);
+ StorageLive(_8);
+ _8 = [const 0_usize, const 1_usize];
+ StorageLive(_9);
+ StorageLive(_10);
+ StorageLive(_11);
+ _11 = &_8;
+ _10 = &raw const (*_11);
+ _9 = move _10 as *const usize (PointerCoercion(ArrayToPointer));
+ StorageDead(_10);
+ StorageDead(_11);
+ StorageLive(_12);
+ StorageLive(_13);
+ StorageLive(_14);
+ StorageLive(_15);
+ StorageLive(_16);
+ StorageLive(_17);
+ _17 = _9;
+ _16 = ptr::const_ptr::<impl *const usize>::add(move _17, const 1_usize) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ StorageDead(_17);
+ _15 = (*_16);
+ _14 = &_15;
+ StorageLive(_18);
+ _35 = const _;
+ Retag(_35);
+ _18 = &(*_35);
+ _13 = (move _14, move _18);
+ Retag(_13);
+ StorageDead(_18);
+ StorageDead(_14);
+ StorageLive(_20);
+ _20 = (_13.0: &usize);
+ Retag(_20);
+ StorageLive(_21);
+ _21 = (_13.1: &usize);
+ Retag(_21);
+ StorageLive(_22);
+ StorageLive(_23);
+ StorageLive(_24);
+ _24 = (*_20);
+ StorageLive(_25);
+ _25 = (*_21);
+ _23 = Eq(move _24, move _25);
+ StorageDead(_25);
+ StorageDead(_24);
+ _22 = Not(move _23);
+ StorageDead(_23);
+ switchInt(move _22) -> [0: bb4, otherwise: bb3];
+ }
+
+ bb3: {
+ StorageLive(_27);
+ _27 = core::panicking::AssertKind::Eq;
+ StorageLive(_28);
+ StorageLive(_29);
+ _29 = move _27;
+ StorageLive(_30);
+ StorageLive(_31);
+ _31 = &(*_20);
+ _30 = &(*_31);
+ StorageLive(_32);
+ StorageLive(_33);
+ _33 = &(*_21);
+ _32 = &(*_33);
+ StorageLive(_34);
+ _34 = Option::<Arguments<'_>>::None;
+ Retag(_34);
+ _28 = core::panicking::assert_failed::<usize, usize>(move _29, move _30, move _32, move _34) -> unwind unreachable;
+ }
+
+ bb4: {
+ _12 = const ();
+ StorageDead(_22);
+ StorageDead(_21);
+ StorageDead(_20);
+ StorageDead(_16);
+ StorageDead(_15);
+ StorageDead(_13);
+ StorageDead(_12);
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+}
diff --git a/tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.panic-unwind.mir b/tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
new file mode 100644
index 000000000..cfa9628d4
--- /dev/null
+++ b/tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
@@ -0,0 +1,176 @@
+// MIR for `array_casts` after SimplifyCfg-elaborate-drops
+
+fn array_casts() -> () {
+ let mut _0: ();
+ let mut _1: [usize; 2];
+ let mut _3: *mut [usize; 2];
+ let mut _4: &mut [usize; 2];
+ let _5: ();
+ let mut _6: *mut usize;
+ let mut _7: *mut usize;
+ let mut _10: *const [usize; 2];
+ let _11: &[usize; 2];
+ let _12: ();
+ let mut _13: (&usize, &usize);
+ let mut _14: &usize;
+ let _15: usize;
+ let mut _16: *const usize;
+ let mut _17: *const usize;
+ let mut _18: &usize;
+ let _19: usize;
+ let mut _22: bool;
+ let mut _23: bool;
+ let mut _24: usize;
+ let mut _25: usize;
+ let mut _26: !;
+ let _28: !;
+ let mut _29: core::panicking::AssertKind;
+ let mut _30: &usize;
+ let _31: &usize;
+ let mut _32: &usize;
+ let _33: &usize;
+ let mut _34: std::option::Option<std::fmt::Arguments<'_>>;
+ scope 1 {
+ debug x => _1;
+ let _2: *mut usize;
+ scope 2 {
+ debug p => _2;
+ let _8: [usize; 2];
+ scope 3 {
+ }
+ scope 4 {
+ debug x => _8;
+ let _9: *const usize;
+ scope 5 {
+ debug p => _9;
+ let _20: &usize;
+ let _21: &usize;
+ let mut _35: &usize;
+ scope 6 {
+ }
+ scope 7 {
+ debug left_val => _20;
+ debug right_val => _21;
+ let _27: core::panicking::AssertKind;
+ scope 8 {
+ debug kind => _27;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = [const 0_usize, const 0_usize];
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &mut _1;
+ _3 = &raw mut (*_4);
+ _2 = move _3 as *mut usize (PointerCoercion(ArrayToPointer));
+ StorageDead(_3);
+ StorageDead(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = _2;
+ _6 = ptr::mut_ptr::<impl *mut usize>::add(move _7, const 1_usize) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ StorageDead(_7);
+ (*_6) = const 1_usize;
+ StorageDead(_6);
+ _5 = const ();
+ StorageDead(_5);
+ StorageLive(_8);
+ _8 = [const 0_usize, const 1_usize];
+ StorageLive(_9);
+ StorageLive(_10);
+ StorageLive(_11);
+ _11 = &_8;
+ _10 = &raw const (*_11);
+ _9 = move _10 as *const usize (PointerCoercion(ArrayToPointer));
+ StorageDead(_10);
+ StorageDead(_11);
+ StorageLive(_12);
+ StorageLive(_13);
+ StorageLive(_14);
+ StorageLive(_15);
+ StorageLive(_16);
+ StorageLive(_17);
+ _17 = _9;
+ _16 = ptr::const_ptr::<impl *const usize>::add(move _17, const 1_usize) -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ StorageDead(_17);
+ _15 = (*_16);
+ _14 = &_15;
+ StorageLive(_18);
+ _35 = const _;
+ Retag(_35);
+ _18 = &(*_35);
+ _13 = (move _14, move _18);
+ Retag(_13);
+ StorageDead(_18);
+ StorageDead(_14);
+ StorageLive(_20);
+ _20 = (_13.0: &usize);
+ Retag(_20);
+ StorageLive(_21);
+ _21 = (_13.1: &usize);
+ Retag(_21);
+ StorageLive(_22);
+ StorageLive(_23);
+ StorageLive(_24);
+ _24 = (*_20);
+ StorageLive(_25);
+ _25 = (*_21);
+ _23 = Eq(move _24, move _25);
+ StorageDead(_25);
+ StorageDead(_24);
+ _22 = Not(move _23);
+ StorageDead(_23);
+ switchInt(move _22) -> [0: bb4, otherwise: bb3];
+ }
+
+ bb3: {
+ StorageLive(_27);
+ _27 = core::panicking::AssertKind::Eq;
+ StorageLive(_28);
+ StorageLive(_29);
+ _29 = move _27;
+ StorageLive(_30);
+ StorageLive(_31);
+ _31 = &(*_20);
+ _30 = &(*_31);
+ StorageLive(_32);
+ StorageLive(_33);
+ _33 = &(*_21);
+ _32 = &(*_33);
+ StorageLive(_34);
+ _34 = Option::<Arguments<'_>>::None;
+ Retag(_34);
+ _28 = core::panicking::assert_failed::<usize, usize>(move _29, move _30, move _32, move _34) -> unwind continue;
+ }
+
+ bb4: {
+ _12 = const ();
+ StorageDead(_22);
+ StorageDead(_21);
+ StorageDead(_20);
+ StorageDead(_16);
+ StorageDead(_15);
+ StorageDead(_13);
+ StorageDead(_12);
+ _0 = const ();
+ StorageDead(_9);
+ StorageDead(_8);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
+ }
+}
diff --git a/tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir b/tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir
deleted file mode 100644
index f495f147b..000000000
--- a/tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir
+++ /dev/null
@@ -1,22 +0,0 @@
-// MIR for `std::ptr::drop_in_place` after SimplifyCfg-make_shim
-
-fn std::ptr::drop_in_place(_1: *mut Test) -> () {
- let mut _0: (); // return place in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- let mut _2: &mut Test; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- let mut _3: &mut Test; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- let mut _4: (); // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
-
- bb0: {
- _2 = &mut (*_1); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- Retag([fn entry] _2); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- _3 = &mut (*_2); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- _4 = <Test as Drop>::drop(move _3) -> bb1; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- // mir::Constant
- // + span: $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- // + literal: Const { ty: for<'a> fn(&'a mut Test) {<Test as Drop>::drop}, val: Value(<ZST>) }
- }
-
- bb1: {
- return; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- }
-}
diff --git a/tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.panic-abort.mir b/tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.panic-abort.mir
new file mode 100644
index 000000000..146f4240f
--- /dev/null
+++ b/tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.panic-abort.mir
@@ -0,0 +1,23 @@
+// MIR for `std::ptr::drop_in_place` after SimplifyCfg-make_shim
+
+fn std::ptr::drop_in_place(_1: *mut Test) -> () {
+ let mut _0: ();
+ let mut _2: &mut Test;
+ let mut _3: &mut Test;
+ let mut _4: ();
+
+ bb0: {
+ _2 = &mut (*_1);
+ Retag([fn entry] _2);
+ _3 = &mut (*_2);
+ _4 = <Test as Drop>::drop(move _3) -> [return: bb2, unwind: bb1];
+ }
+
+ bb1 (cleanup): {
+ resume;
+ }
+
+ bb2: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.panic-unwind.mir b/tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.panic-unwind.mir
new file mode 100644
index 000000000..70c53bafa
--- /dev/null
+++ b/tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.panic-unwind.mir
@@ -0,0 +1,19 @@
+// MIR for `std::ptr::drop_in_place` after SimplifyCfg-make_shim
+
+fn std::ptr::drop_in_place(_1: *mut Test) -> () {
+ let mut _0: ();
+ let mut _2: &mut Test;
+ let mut _3: &mut Test;
+ let mut _4: ();
+
+ bb0: {
+ _2 = &mut (*_1);
+ Retag([fn entry] _2);
+ _3 = &mut (*_2);
+ _4 = <Test as Drop>::drop(move _3) -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ return;
+ }
+}
diff --git a/tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.mir b/tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.mir
deleted file mode 100644
index 9e5c119a2..000000000
--- a/tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.mir
+++ /dev/null
@@ -1,21 +0,0 @@
-// MIR for `main::{closure#0}` after SimplifyCfg-elaborate-drops
-
-fn main::{closure#0}(_1: &[closure@main::{closure#0}], _2: &i32) -> &i32 {
- debug x => _2; // in scope 0 at $DIR/retag.rs:+0:32: +0:33
- let mut _0: &i32; // return place in scope 0 at $DIR/retag.rs:+0:44: +0:48
- let _3: &i32; // in scope 0 at $DIR/retag.rs:+1:13: +1:15
- scope 1 {
- debug _y => _3; // in scope 1 at $DIR/retag.rs:+1:13: +1:15
- }
-
- bb0: {
- Retag([fn entry] _1); // scope 0 at $DIR/retag.rs:+0:31: +3:6
- Retag([fn entry] _2); // scope 0 at $DIR/retag.rs:+0:32: +0:33
- StorageLive(_3); // scope 0 at $DIR/retag.rs:+1:13: +1:15
- _3 = _2; // scope 0 at $DIR/retag.rs:+1:18: +1:19
- Retag(_3); // scope 0 at $DIR/retag.rs:+1:18: +1:19
- _0 = &(*_2); // scope 1 at $DIR/retag.rs:+2:9: +2:10
- StorageDead(_3); // scope 0 at $DIR/retag.rs:+3:5: +3:6
- return; // scope 0 at $DIR/retag.rs:+3:6: +3:6
- }
-}
diff --git a/tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.panic-abort.mir b/tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.panic-abort.mir
new file mode 100644
index 000000000..4a3d19784
--- /dev/null
+++ b/tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.panic-abort.mir
@@ -0,0 +1,21 @@
+// MIR for `main::{closure#0}` after SimplifyCfg-elaborate-drops
+
+fn main::{closure#0}(_1: &[closure@main::{closure#0}], _2: &i32) -> &i32 {
+ debug x => _2;
+ let mut _0: &i32;
+ let _3: &i32;
+ scope 1 {
+ debug _y => _3;
+ }
+
+ bb0: {
+ Retag([fn entry] _1);
+ Retag([fn entry] _2);
+ StorageLive(_3);
+ _3 = _2;
+ Retag(_3);
+ _0 = &(*_2);
+ StorageDead(_3);
+ return;
+ }
+}
diff --git a/tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.panic-unwind.mir b/tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
new file mode 100644
index 000000000..4a3d19784
--- /dev/null
+++ b/tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
@@ -0,0 +1,21 @@
+// MIR for `main::{closure#0}` after SimplifyCfg-elaborate-drops
+
+fn main::{closure#0}(_1: &[closure@main::{closure#0}], _2: &i32) -> &i32 {
+ debug x => _2;
+ let mut _0: &i32;
+ let _3: &i32;
+ scope 1 {
+ debug _y => _3;
+ }
+
+ bb0: {
+ Retag([fn entry] _1);
+ Retag([fn entry] _2);
+ StorageLive(_3);
+ _3 = _2;
+ Retag(_3);
+ _0 = &(*_2);
+ StorageDead(_3);
+ return;
+ }
+}
diff --git a/tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.mir b/tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.mir
deleted file mode 100644
index 4eef028e1..000000000
--- a/tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.mir
+++ /dev/null
@@ -1,199 +0,0 @@
-// MIR for `main` after SimplifyCfg-elaborate-drops
-
-fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/retag.rs:+0:11: +0:11
- let mut _1: i32; // in scope 0 at $DIR/retag.rs:+1:9: +1:14
- let _2: (); // in scope 0 at $DIR/retag.rs:+2:5: +8:6
- let mut _4: &Test; // in scope 0 at $DIR/retag.rs:+3:17: +3:36
- let _5: Test; // in scope 0 at $DIR/retag.rs:+3:17: +3:24
- let mut _6: &mut i32; // in scope 0 at $DIR/retag.rs:+3:29: +3:35
- let mut _7: &mut i32; // in scope 0 at $DIR/retag.rs:+3:29: +3:35
- let mut _9: &mut i32; // in scope 0 at $DIR/retag.rs:+4:19: +4:20
- let mut _12: *mut i32; // in scope 0 at $DIR/retag.rs:+7:18: +7:29
- let mut _14: [closure@main::{closure#0}]; // in scope 0 at $DIR/retag.rs:+11:31: +14:6
- let mut _16: for<'a> fn(&'a i32) -> &'a i32; // in scope 0 at $DIR/retag.rs:+15:14: +15:15
- let mut _17: &i32; // in scope 0 at $DIR/retag.rs:+15:16: +15:18
- let _18: &i32; // in scope 0 at $DIR/retag.rs:+15:16: +15:18
- let _19: &i32; // in scope 0 at $DIR/retag.rs:+18:5: +18:24
- let mut _20: &Test; // in scope 0 at $DIR/retag.rs:+18:5: +18:24
- let _21: Test; // in scope 0 at $DIR/retag.rs:+18:5: +18:12
- let mut _22: &i32; // in scope 0 at $DIR/retag.rs:+18:21: +18:23
- let _23: &i32; // in scope 0 at $DIR/retag.rs:+18:21: +18:23
- let _24: i32; // in scope 0 at $DIR/retag.rs:+18:22: +18:23
- let mut _26: *const i32; // in scope 0 at $DIR/retag.rs:+21:14: +21:28
- let _27: (); // in scope 0 at $DIR/retag.rs:+23:5: +23:18
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/retag.rs:+1:9: +1:14
- let _3: &mut i32; // in scope 1 at $DIR/retag.rs:+3:13: +3:14
- let _13: for<'a> fn(&'a i32) -> &'a i32; // in scope 1 at $DIR/retag.rs:+11:9: +11:10
- scope 2 {
- debug v => _3; // in scope 2 at $DIR/retag.rs:+3:13: +3:14
- let _8: &mut i32; // in scope 2 at $DIR/retag.rs:+4:13: +4:14
- scope 3 {
- debug w => _8; // in scope 3 at $DIR/retag.rs:+4:13: +4:14
- let _10: &mut i32; // in scope 3 at $DIR/retag.rs:+5:13: +5:14
- scope 4 {
- debug w => _10; // in scope 4 at $DIR/retag.rs:+5:13: +5:14
- let _11: *mut i32; // in scope 4 at $DIR/retag.rs:+7:13: +7:15
- scope 5 {
- debug _w => _11; // in scope 5 at $DIR/retag.rs:+7:13: +7:15
- }
- }
- }
- }
- scope 6 {
- debug c => _13; // in scope 6 at $DIR/retag.rs:+11:9: +11:10
- let _15: &i32; // in scope 6 at $DIR/retag.rs:+15:9: +15:11
- scope 7 {
- debug _w => _15; // in scope 7 at $DIR/retag.rs:+15:9: +15:11
- let _25: *const i32; // in scope 7 at $DIR/retag.rs:+21:9: +21:11
- let mut _28: &i32; // in scope 7 at $DIR/retag.rs:+18:21: +18:23
- scope 8 {
- debug _w => _25; // in scope 8 at $DIR/retag.rs:+21:9: +21:11
- }
- }
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/retag.rs:+1:9: +1:14
- _1 = const 0_i32; // scope 0 at $DIR/retag.rs:+1:17: +1:18
- StorageLive(_2); // scope 1 at $DIR/retag.rs:+2:5: +8:6
- StorageLive(_3); // scope 1 at $DIR/retag.rs:+3:13: +3:14
- StorageLive(_4); // scope 1 at $DIR/retag.rs:+3:17: +3:36
- StorageLive(_5); // scope 1 at $DIR/retag.rs:+3:17: +3:24
- _5 = Test(const 0_i32); // scope 1 at $DIR/retag.rs:+3:17: +3:24
- _4 = &_5; // scope 1 at $DIR/retag.rs:+3:17: +3:36
- StorageLive(_6); // scope 1 at $DIR/retag.rs:+3:29: +3:35
- StorageLive(_7); // scope 1 at $DIR/retag.rs:+3:29: +3:35
- _7 = &mut _1; // scope 1 at $DIR/retag.rs:+3:29: +3:35
- _6 = &mut (*_7); // scope 1 at $DIR/retag.rs:+3:29: +3:35
- _3 = Test::foo(move _4, move _6) -> [return: bb1, unwind: bb8]; // scope 1 at $DIR/retag.rs:+3:17: +3:36
- // mir::Constant
- // + span: $DIR/retag.rs:33:25: 33:28
- // + literal: Const { ty: for<'a, 'x> fn(&'a Test, &'x mut i32) -> &'x mut i32 {Test::foo}, val: Value(<ZST>) }
- }
-
- bb1: {
- Retag(_3); // scope 1 at $DIR/retag.rs:+3:17: +3:36
- StorageDead(_6); // scope 1 at $DIR/retag.rs:+3:35: +3:36
- StorageDead(_4); // scope 1 at $DIR/retag.rs:+3:35: +3:36
- StorageDead(_7); // scope 1 at $DIR/retag.rs:+3:36: +3:37
- drop(_5) -> [return: bb2, unwind: bb9]; // scope 1 at $DIR/retag.rs:+3:36: +3:37
- }
-
- bb2: {
- StorageDead(_5); // scope 1 at $DIR/retag.rs:+3:36: +3:37
- StorageLive(_8); // scope 2 at $DIR/retag.rs:+4:13: +4:14
- StorageLive(_9); // scope 2 at $DIR/retag.rs:+4:19: +4:20
- _9 = move _3; // scope 2 at $DIR/retag.rs:+4:19: +4:20
- Retag(_9); // scope 2 at $DIR/retag.rs:+4:19: +4:20
- _8 = &mut (*_9); // scope 2 at $DIR/retag.rs:+4:19: +4:20
- StorageDead(_9); // scope 2 at $DIR/retag.rs:+4:22: +4:23
- StorageLive(_10); // scope 3 at $DIR/retag.rs:+5:13: +5:14
- _10 = move _8; // scope 3 at $DIR/retag.rs:+5:17: +5:18
- Retag(_10); // scope 3 at $DIR/retag.rs:+5:17: +5:18
- StorageLive(_11); // scope 4 at $DIR/retag.rs:+7:13: +7:15
- StorageLive(_12); // scope 4 at $DIR/retag.rs:+7:18: +7:29
- _12 = &raw mut (*_10); // scope 4 at $DIR/retag.rs:+7:18: +7:19
- _11 = _12; // scope 4 at $DIR/retag.rs:+7:18: +7:29
- StorageDead(_12); // scope 4 at $DIR/retag.rs:+7:29: +7:30
- _2 = const (); // scope 1 at $DIR/retag.rs:+2:5: +8:6
- StorageDead(_11); // scope 4 at $DIR/retag.rs:+8:5: +8:6
- StorageDead(_10); // scope 3 at $DIR/retag.rs:+8:5: +8:6
- StorageDead(_8); // scope 2 at $DIR/retag.rs:+8:5: +8:6
- StorageDead(_3); // scope 1 at $DIR/retag.rs:+8:5: +8:6
- StorageDead(_2); // scope 1 at $DIR/retag.rs:+8:5: +8:6
- StorageLive(_13); // scope 1 at $DIR/retag.rs:+11:9: +11:10
- StorageLive(_14); // scope 1 at $DIR/retag.rs:+11:31: +14:6
- _14 = [closure@main::{closure#0}]; // scope 1 at $DIR/retag.rs:+11:31: +14:6
- // closure
- // + def_id: DefId(0:14 ~ retag[7654]::main::{closure#0})
- // + substs: [
- // i8,
- // for<'a> extern "rust-call" fn((&'a i32,)) -> &'a i32,
- // (),
- // ]
- Retag(_14); // scope 1 at $DIR/retag.rs:+11:31: +14:6
- _13 = move _14 as for<'a> fn(&'a i32) -> &'a i32 (Pointer(ClosureFnPointer(Normal))); // scope 1 at $DIR/retag.rs:+11:31: +14:6
- StorageDead(_14); // scope 1 at $DIR/retag.rs:+11:47: +11:48
- StorageLive(_15); // scope 6 at $DIR/retag.rs:+15:9: +15:11
- StorageLive(_16); // scope 6 at $DIR/retag.rs:+15:14: +15:15
- _16 = _13; // scope 6 at $DIR/retag.rs:+15:14: +15:15
- StorageLive(_17); // scope 6 at $DIR/retag.rs:+15:16: +15:18
- StorageLive(_18); // scope 6 at $DIR/retag.rs:+15:16: +15:18
- _18 = &_1; // scope 6 at $DIR/retag.rs:+15:16: +15:18
- _17 = &(*_18); // scope 6 at $DIR/retag.rs:+15:16: +15:18
- _15 = move _16(move _17) -> bb3; // scope 6 at $DIR/retag.rs:+15:14: +15:19
- }
-
- bb3: {
- Retag(_15); // scope 6 at $DIR/retag.rs:+15:14: +15:19
- StorageDead(_17); // scope 6 at $DIR/retag.rs:+15:18: +15:19
- StorageDead(_16); // scope 6 at $DIR/retag.rs:+15:18: +15:19
- StorageDead(_18); // scope 6 at $DIR/retag.rs:+15:19: +15:20
- StorageLive(_19); // scope 7 at $DIR/retag.rs:+18:5: +18:24
- StorageLive(_20); // scope 7 at $DIR/retag.rs:+18:5: +18:24
- StorageLive(_21); // scope 7 at $DIR/retag.rs:+18:5: +18:12
- _21 = Test(const 0_i32); // scope 7 at $DIR/retag.rs:+18:5: +18:12
- _20 = &_21; // scope 7 at $DIR/retag.rs:+18:5: +18:24
- StorageLive(_22); // scope 7 at $DIR/retag.rs:+18:21: +18:23
- StorageLive(_23); // scope 7 at $DIR/retag.rs:+18:21: +18:23
- _28 = const _; // scope 7 at $DIR/retag.rs:+18:21: +18:23
- // mir::Constant
- // + span: $DIR/retag.rs:48:21: 48:23
- // + literal: Const { ty: &i32, val: Unevaluated(main, [], Some(promoted[0])) }
- Retag(_28); // scope 7 at $DIR/retag.rs:+18:21: +18:23
- _23 = &(*_28); // scope 7 at $DIR/retag.rs:+18:21: +18:23
- _22 = &(*_23); // scope 7 at $DIR/retag.rs:+18:21: +18:23
- _19 = Test::foo_shr(move _20, move _22) -> [return: bb4, unwind: bb7]; // scope 7 at $DIR/retag.rs:+18:5: +18:24
- // mir::Constant
- // + span: $DIR/retag.rs:48:13: 48:20
- // + literal: Const { ty: for<'a, 'x> fn(&'a Test, &'x i32) -> &'x i32 {Test::foo_shr}, val: Value(<ZST>) }
- }
-
- bb4: {
- Retag(_19); // scope 7 at $DIR/retag.rs:+18:5: +18:24
- StorageDead(_22); // scope 7 at $DIR/retag.rs:+18:23: +18:24
- StorageDead(_20); // scope 7 at $DIR/retag.rs:+18:23: +18:24
- StorageDead(_23); // scope 7 at $DIR/retag.rs:+18:24: +18:25
- drop(_21) -> [return: bb5, unwind: bb9]; // scope 7 at $DIR/retag.rs:+18:24: +18:25
- }
-
- bb5: {
- StorageDead(_21); // scope 7 at $DIR/retag.rs:+18:24: +18:25
- StorageDead(_19); // scope 7 at $DIR/retag.rs:+18:24: +18:25
- StorageLive(_25); // scope 7 at $DIR/retag.rs:+21:9: +21:11
- StorageLive(_26); // scope 7 at $DIR/retag.rs:+21:14: +21:28
- _26 = &raw const (*_15); // scope 7 at $DIR/retag.rs:+21:14: +21:16
- _25 = _26; // scope 7 at $DIR/retag.rs:+21:14: +21:28
- StorageDead(_26); // scope 7 at $DIR/retag.rs:+21:28: +21:29
- StorageLive(_27); // scope 8 at $DIR/retag.rs:+23:5: +23:18
- _27 = array_casts() -> bb6; // scope 8 at $DIR/retag.rs:+23:5: +23:18
- // mir::Constant
- // + span: $DIR/retag.rs:53:5: 53:16
- // + literal: Const { ty: fn() {array_casts}, val: Value(<ZST>) }
- }
-
- bb6: {
- StorageDead(_27); // scope 8 at $DIR/retag.rs:+23:18: +23:19
- _0 = const (); // scope 0 at $DIR/retag.rs:+0:11: +24:2
- StorageDead(_25); // scope 7 at $DIR/retag.rs:+24:1: +24:2
- StorageDead(_15); // scope 6 at $DIR/retag.rs:+24:1: +24:2
- StorageDead(_13); // scope 1 at $DIR/retag.rs:+24:1: +24:2
- StorageDead(_1); // scope 0 at $DIR/retag.rs:+24:1: +24:2
- return; // scope 0 at $DIR/retag.rs:+24:2: +24:2
- }
-
- bb7 (cleanup): {
- drop(_21) -> [return: bb9, unwind terminate]; // scope 7 at $DIR/retag.rs:+18:24: +18:25
- }
-
- bb8 (cleanup): {
- drop(_5) -> [return: bb9, unwind terminate]; // scope 1 at $DIR/retag.rs:+3:36: +3:37
- }
-
- bb9 (cleanup): {
- resume; // scope 0 at $DIR/retag.rs:+0:1: +24:2
- }
-}
diff --git a/tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir b/tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir
new file mode 100644
index 000000000..fb37bec10
--- /dev/null
+++ b/tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir
@@ -0,0 +1,168 @@
+// MIR for `main` after SimplifyCfg-elaborate-drops
+
+fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+ let _2: ();
+ let mut _4: &Test;
+ let _5: Test;
+ let mut _6: &mut i32;
+ let mut _7: &mut i32;
+ let mut _9: &mut i32;
+ let mut _12: *mut i32;
+ let mut _14: [closure@main::{closure#0}];
+ let mut _16: for<'a> fn(&'a i32) -> &'a i32;
+ let mut _17: &i32;
+ let _18: &i32;
+ let _19: &i32;
+ let mut _20: &Test;
+ let _21: Test;
+ let mut _22: &i32;
+ let _23: &i32;
+ let _24: i32;
+ let mut _26: *const i32;
+ let _27: ();
+ scope 1 {
+ debug x => _1;
+ let _3: &mut i32;
+ let _13: for<'a> fn(&'a i32) -> &'a i32;
+ scope 2 {
+ debug v => _3;
+ let _8: &mut i32;
+ scope 3 {
+ debug w => _8;
+ let _10: &mut i32;
+ scope 4 {
+ debug w => _10;
+ let _11: *mut i32;
+ scope 5 {
+ debug _w => _11;
+ }
+ }
+ }
+ }
+ scope 6 {
+ debug c => _13;
+ let _15: &i32;
+ scope 7 {
+ debug _w => _15;
+ let _25: *const i32;
+ let mut _28: &i32;
+ scope 8 {
+ debug _w => _25;
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 0_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = Test(const 0_i32);
+ _4 = &_5;
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &mut _1;
+ _6 = &mut (*_7);
+ _3 = Test::foo(move _4, move _6) -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ Retag(_3);
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_7);
+ drop(_5) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ StorageDead(_5);
+ StorageLive(_8);
+ StorageLive(_9);
+ _9 = move _3;
+ Retag(_9);
+ _8 = &mut (*_9);
+ StorageDead(_9);
+ StorageLive(_10);
+ _10 = move _8;
+ Retag(_10);
+ StorageLive(_11);
+ StorageLive(_12);
+ _12 = &raw mut (*_10);
+ _11 = _12;
+ StorageDead(_12);
+ _2 = const ();
+ StorageDead(_11);
+ StorageDead(_10);
+ StorageDead(_8);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageLive(_13);
+ StorageLive(_14);
+ _14 = [closure@main::{closure#0}];
+ Retag(_14);
+ _13 = move _14 as for<'a> fn(&'a i32) -> &'a i32 (PointerCoercion(ClosureFnPointer(Normal)));
+ StorageDead(_14);
+ StorageLive(_15);
+ StorageLive(_16);
+ _16 = _13;
+ StorageLive(_17);
+ StorageLive(_18);
+ _18 = &_1;
+ _17 = &(*_18);
+ _15 = move _16(move _17) -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ Retag(_15);
+ StorageDead(_17);
+ StorageDead(_16);
+ StorageDead(_18);
+ StorageLive(_19);
+ StorageLive(_20);
+ StorageLive(_21);
+ _21 = Test(const 0_i32);
+ _20 = &_21;
+ StorageLive(_22);
+ StorageLive(_23);
+ _28 = const _;
+ Retag(_28);
+ _23 = &(*_28);
+ _22 = &(*_23);
+ _19 = Test::foo_shr(move _20, move _22) -> [return: bb4, unwind unreachable];
+ }
+
+ bb4: {
+ Retag(_19);
+ StorageDead(_22);
+ StorageDead(_20);
+ StorageDead(_23);
+ drop(_21) -> [return: bb5, unwind unreachable];
+ }
+
+ bb5: {
+ StorageDead(_21);
+ StorageDead(_19);
+ StorageLive(_25);
+ StorageLive(_26);
+ _26 = &raw const (*_15);
+ _25 = _26;
+ StorageDead(_26);
+ StorageLive(_27);
+ _27 = array_casts() -> [return: bb6, unwind unreachable];
+ }
+
+ bb6: {
+ StorageDead(_27);
+ _0 = const ();
+ StorageDead(_25);
+ StorageDead(_15);
+ StorageDead(_13);
+ StorageDead(_1);
+ return;
+ }
+}
diff --git a/tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir b/tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
new file mode 100644
index 000000000..508f96409
--- /dev/null
+++ b/tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
@@ -0,0 +1,180 @@
+// MIR for `main` after SimplifyCfg-elaborate-drops
+
+fn main() -> () {
+ let mut _0: ();
+ let mut _1: i32;
+ let _2: ();
+ let mut _4: &Test;
+ let _5: Test;
+ let mut _6: &mut i32;
+ let mut _7: &mut i32;
+ let mut _9: &mut i32;
+ let mut _12: *mut i32;
+ let mut _14: [closure@main::{closure#0}];
+ let mut _16: for<'a> fn(&'a i32) -> &'a i32;
+ let mut _17: &i32;
+ let _18: &i32;
+ let _19: &i32;
+ let mut _20: &Test;
+ let _21: Test;
+ let mut _22: &i32;
+ let _23: &i32;
+ let _24: i32;
+ let mut _26: *const i32;
+ let _27: ();
+ scope 1 {
+ debug x => _1;
+ let _3: &mut i32;
+ let _13: for<'a> fn(&'a i32) -> &'a i32;
+ scope 2 {
+ debug v => _3;
+ let _8: &mut i32;
+ scope 3 {
+ debug w => _8;
+ let _10: &mut i32;
+ scope 4 {
+ debug w => _10;
+ let _11: *mut i32;
+ scope 5 {
+ debug _w => _11;
+ }
+ }
+ }
+ }
+ scope 6 {
+ debug c => _13;
+ let _15: &i32;
+ scope 7 {
+ debug _w => _15;
+ let _25: *const i32;
+ let mut _28: &i32;
+ scope 8 {
+ debug _w => _25;
+ }
+ }
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const 0_i32;
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = Test(const 0_i32);
+ _4 = &_5;
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = &mut _1;
+ _6 = &mut (*_7);
+ _3 = Test::foo(move _4, move _6) -> [return: bb1, unwind: bb8];
+ }
+
+ bb1: {
+ Retag(_3);
+ StorageDead(_6);
+ StorageDead(_4);
+ StorageDead(_7);
+ drop(_5) -> [return: bb2, unwind: bb9];
+ }
+
+ bb2: {
+ StorageDead(_5);
+ StorageLive(_8);
+ StorageLive(_9);
+ _9 = move _3;
+ Retag(_9);
+ _8 = &mut (*_9);
+ StorageDead(_9);
+ StorageLive(_10);
+ _10 = move _8;
+ Retag(_10);
+ StorageLive(_11);
+ StorageLive(_12);
+ _12 = &raw mut (*_10);
+ _11 = _12;
+ StorageDead(_12);
+ _2 = const ();
+ StorageDead(_11);
+ StorageDead(_10);
+ StorageDead(_8);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageLive(_13);
+ StorageLive(_14);
+ _14 = [closure@main::{closure#0}];
+ Retag(_14);
+ _13 = move _14 as for<'a> fn(&'a i32) -> &'a i32 (PointerCoercion(ClosureFnPointer(Normal)));
+ StorageDead(_14);
+ StorageLive(_15);
+ StorageLive(_16);
+ _16 = _13;
+ StorageLive(_17);
+ StorageLive(_18);
+ _18 = &_1;
+ _17 = &(*_18);
+ _15 = move _16(move _17) -> [return: bb3, unwind continue];
+ }
+
+ bb3: {
+ Retag(_15);
+ StorageDead(_17);
+ StorageDead(_16);
+ StorageDead(_18);
+ StorageLive(_19);
+ StorageLive(_20);
+ StorageLive(_21);
+ _21 = Test(const 0_i32);
+ _20 = &_21;
+ StorageLive(_22);
+ StorageLive(_23);
+ _28 = const _;
+ Retag(_28);
+ _23 = &(*_28);
+ _22 = &(*_23);
+ _19 = Test::foo_shr(move _20, move _22) -> [return: bb4, unwind: bb7];
+ }
+
+ bb4: {
+ Retag(_19);
+ StorageDead(_22);
+ StorageDead(_20);
+ StorageDead(_23);
+ drop(_21) -> [return: bb5, unwind: bb9];
+ }
+
+ bb5: {
+ StorageDead(_21);
+ StorageDead(_19);
+ StorageLive(_25);
+ StorageLive(_26);
+ _26 = &raw const (*_15);
+ _25 = _26;
+ StorageDead(_26);
+ StorageLive(_27);
+ _27 = array_casts() -> [return: bb6, unwind continue];
+ }
+
+ bb6: {
+ StorageDead(_27);
+ _0 = const ();
+ StorageDead(_25);
+ StorageDead(_15);
+ StorageDead(_13);
+ StorageDead(_1);
+ return;
+ }
+
+ bb7 (cleanup): {
+ drop(_21) -> [return: bb9, unwind terminate];
+ }
+
+ bb8 (cleanup): {
+ drop(_5) -> [return: bb9, unwind terminate];
+ }
+
+ bb9 (cleanup): {
+ resume;
+ }
+}
diff --git a/tests/mir-opt/retag.rs b/tests/mir-opt/retag.rs
index 86deb0e7c..e0696de4d 100644
--- a/tests/mir-opt/retag.rs
+++ b/tests/mir-opt/retag.rs
@@ -1,5 +1,5 @@
// unit-test: AddRetag
-// ignore-wasm32-bare compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// ignore-tidy-linelength
// compile-flags: -Z mir-emit-retag -Z mir-opt-level=0 -Z span_free_formats
diff --git a/tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.mir b/tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.mir
deleted file mode 100644
index 4b50205fa..000000000
--- a/tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.mir
+++ /dev/null
@@ -1,18 +0,0 @@
-// MIR for `<impl at $DIR/retag.rs:12:1: 12:10>::foo` after SimplifyCfg-elaborate-drops
-
-fn <impl at $DIR/retag.rs:12:1: 12:10>::foo(_1: &Test, _2: &mut i32) -> &mut i32 {
- debug self => _1; // in scope 0 at $DIR/retag.rs:+0:16: +0:21
- debug x => _2; // in scope 0 at $DIR/retag.rs:+0:23: +0:24
- let mut _0: &mut i32; // return place in scope 0 at $DIR/retag.rs:+0:42: +0:53
- let mut _3: &mut i32; // in scope 0 at $DIR/retag.rs:+1:9: +1:10
-
- bb0: {
- Retag([fn entry] _1); // scope 0 at $DIR/retag.rs:+0:16: +0:21
- Retag([fn entry] _2); // scope 0 at $DIR/retag.rs:+0:23: +0:24
- StorageLive(_3); // scope 0 at $DIR/retag.rs:+1:9: +1:10
- _3 = &mut (*_2); // scope 0 at $DIR/retag.rs:+1:9: +1:10
- _0 = &mut (*_3); // scope 0 at $DIR/retag.rs:+1:9: +1:10
- StorageDead(_3); // scope 0 at $DIR/retag.rs:+2:5: +2:6
- return; // scope 0 at $DIR/retag.rs:+2:6: +2:6
- }
-}
diff --git a/tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.panic-abort.mir b/tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.panic-abort.mir
new file mode 100644
index 000000000..d72477440
--- /dev/null
+++ b/tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.panic-abort.mir
@@ -0,0 +1,18 @@
+// MIR for `<impl at $DIR/retag.rs:12:1: 12:10>::foo` after SimplifyCfg-elaborate-drops
+
+fn <impl at $DIR/retag.rs:12:1: 12:10>::foo(_1: &Test, _2: &mut i32) -> &mut i32 {
+ debug self => _1;
+ debug x => _2;
+ let mut _0: &mut i32;
+ let mut _3: &mut i32;
+
+ bb0: {
+ Retag([fn entry] _1);
+ Retag([fn entry] _2);
+ StorageLive(_3);
+ _3 = &mut (*_2);
+ _0 = &mut (*_3);
+ StorageDead(_3);
+ return;
+ }
+}
diff --git a/tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.panic-unwind.mir b/tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
new file mode 100644
index 000000000..d72477440
--- /dev/null
+++ b/tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
@@ -0,0 +1,18 @@
+// MIR for `<impl at $DIR/retag.rs:12:1: 12:10>::foo` after SimplifyCfg-elaborate-drops
+
+fn <impl at $DIR/retag.rs:12:1: 12:10>::foo(_1: &Test, _2: &mut i32) -> &mut i32 {
+ debug self => _1;
+ debug x => _2;
+ let mut _0: &mut i32;
+ let mut _3: &mut i32;
+
+ bb0: {
+ Retag([fn entry] _1);
+ Retag([fn entry] _2);
+ StorageLive(_3);
+ _3 = &mut (*_2);
+ _0 = &mut (*_3);
+ StorageDead(_3);
+ return;
+ }
+}
diff --git a/tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.mir b/tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.mir
deleted file mode 100644
index f32a84e4c..000000000
--- a/tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.mir
+++ /dev/null
@@ -1,15 +0,0 @@
-// MIR for `<impl at $DIR/retag.rs:12:1: 12:10>::foo_shr` after SimplifyCfg-elaborate-drops
-
-fn <impl at $DIR/retag.rs:12:1: 12:10>::foo_shr(_1: &Test, _2: &i32) -> &i32 {
- debug self => _1; // in scope 0 at $DIR/retag.rs:+0:20: +0:25
- debug x => _2; // in scope 0 at $DIR/retag.rs:+0:27: +0:28
- let mut _0: &i32; // return place in scope 0 at $DIR/retag.rs:+0:42: +0:49
-
- bb0: {
- Retag([fn entry] _1); // scope 0 at $DIR/retag.rs:+0:20: +0:25
- Retag([fn entry] _2); // scope 0 at $DIR/retag.rs:+0:27: +0:28
- _0 = _2; // scope 0 at $DIR/retag.rs:+1:9: +1:10
- Retag(_0); // scope 0 at $DIR/retag.rs:+1:9: +1:10
- return; // scope 0 at $DIR/retag.rs:+2:6: +2:6
- }
-}
diff --git a/tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.panic-abort.mir b/tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.panic-abort.mir
new file mode 100644
index 000000000..de3eb0d52
--- /dev/null
+++ b/tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.panic-abort.mir
@@ -0,0 +1,15 @@
+// MIR for `<impl at $DIR/retag.rs:12:1: 12:10>::foo_shr` after SimplifyCfg-elaborate-drops
+
+fn <impl at $DIR/retag.rs:12:1: 12:10>::foo_shr(_1: &Test, _2: &i32) -> &i32 {
+ debug self => _1;
+ debug x => _2;
+ let mut _0: &i32;
+
+ bb0: {
+ Retag([fn entry] _1);
+ Retag([fn entry] _2);
+ _0 = _2;
+ Retag(_0);
+ return;
+ }
+}
diff --git a/tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.panic-unwind.mir b/tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
new file mode 100644
index 000000000..de3eb0d52
--- /dev/null
+++ b/tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.panic-unwind.mir
@@ -0,0 +1,15 @@
+// MIR for `<impl at $DIR/retag.rs:12:1: 12:10>::foo_shr` after SimplifyCfg-elaborate-drops
+
+fn <impl at $DIR/retag.rs:12:1: 12:10>::foo_shr(_1: &Test, _2: &i32) -> &i32 {
+ debug self => _1;
+ debug x => _2;
+ let mut _0: &i32;
+
+ bb0: {
+ Retag([fn entry] _1);
+ Retag([fn entry] _2);
+ _0 = _2;
+ Retag(_0);
+ return;
+ }
+}
diff --git a/tests/mir-opt/separate_const_switch.identity.SeparateConstSwitch.diff b/tests/mir-opt/separate_const_switch.identity.SeparateConstSwitch.diff
index bdf1de468..ca1528b6a 100644
--- a/tests/mir-opt/separate_const_switch.identity.SeparateConstSwitch.diff
+++ b/tests/mir-opt/separate_const_switch.identity.SeparateConstSwitch.diff
@@ -2,121 +2,101 @@
+ // MIR for `identity` after SeparateConstSwitch
fn identity(_1: Result<i32, i32>) -> Result<i32, i32> {
- debug x => _1; // in scope 0 at $DIR/separate_const_switch.rs:+0:13: +0:14
- let mut _0: std::result::Result<i32, i32>; // return place in scope 0 at $DIR/separate_const_switch.rs:+0:37: +0:53
- let mut _2: i32; // in scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
- let mut _3: std::ops::ControlFlow<std::result::Result<std::convert::Infallible, i32>, i32>; // in scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
- let mut _4: std::result::Result<i32, i32>; // in scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:9
- let mut _5: isize; // in scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
- let _6: std::result::Result<std::convert::Infallible, i32>; // in scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
- let mut _7: !; // in scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
- let mut _8: std::result::Result<std::convert::Infallible, i32>; // in scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
- let _9: i32; // in scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
+ debug x => _1;
+ let mut _0: std::result::Result<i32, i32>;
+ let mut _2: i32;
+ let mut _3: std::ops::ControlFlow<std::result::Result<std::convert::Infallible, i32>, i32>;
+ let mut _4: std::result::Result<i32, i32>;
+ let mut _5: isize;
+ let _6: std::result::Result<std::convert::Infallible, i32>;
+ let mut _7: std::result::Result<std::convert::Infallible, i32>;
+ let _8: i32;
scope 1 {
- debug residual => _6; // in scope 1 at $DIR/separate_const_switch.rs:+1:9: +1:10
+ debug residual => _6;
scope 2 {
- scope 8 (inlined #[track_caller] <Result<i32, i32> as FromResidual<Result<Infallible, i32>>>::from_residual) { // at $DIR/separate_const_switch.rs:25:8: 25:10
- debug residual => _8; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
- let _14: i32; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
- let mut _15: i32; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
+ scope 8 (inlined #[track_caller] <Result<i32, i32> as FromResidual<Result<Infallible, i32>>>::from_residual) {
+ debug residual => _6;
+ let _13: i32;
+ let mut _14: i32;
scope 9 {
- debug e => _14; // in scope 9 at $SRC_DIR/core/src/result.rs:LL:COL
- scope 10 (inlined <i32 as From<i32>>::from) { // at $SRC_DIR/core/src/result.rs:LL:COL
- debug t => _14; // in scope 10 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
+ debug e => _13;
+ scope 10 (inlined <i32 as From<i32>>::from) {
+ debug t => _13;
}
}
}
}
}
scope 3 {
- debug val => _9; // in scope 3 at $DIR/separate_const_switch.rs:+1:8: +1:10
+ debug val => _8;
scope 4 {
}
}
- scope 5 (inlined <Result<i32, i32> as Try>::branch) { // at $DIR/separate_const_switch.rs:25:8: 25:10
- debug self => _4; // in scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
- let mut _10: isize; // in scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
- let _11: i32; // in scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
- let _12: i32; // in scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
- let mut _13: std::result::Result<std::convert::Infallible, i32>; // in scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
+ scope 5 (inlined <Result<i32, i32> as Try>::branch) {
+ debug self => _1;
+ let mut _9: isize;
+ let _10: i32;
+ let _11: i32;
+ let mut _12: std::result::Result<std::convert::Infallible, i32>;
scope 6 {
- debug v => _11; // in scope 6 at $SRC_DIR/core/src/result.rs:LL:COL
+ debug v => _10;
}
scope 7 {
- debug e => _12; // in scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
+ debug e => _11;
}
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
- StorageLive(_3); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
- StorageLive(_4); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:9
- _4 = _1; // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:9
- StorageLive(_11); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
- StorageLive(_12); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
- _10 = discriminant(_4); // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
- switchInt(move _10) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
+ StorageLive(_3);
+ StorageLive(_10);
+ StorageLive(_11);
+ _9 = discriminant(_1);
+ switchInt(move _9) -> [0: bb7, 1: bb5, otherwise: bb6];
}
bb1: {
- StorageDead(_12); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
- StorageDead(_11); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
- StorageDead(_4); // scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
- _5 = discriminant(_3); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
- switchInt(move _5) -> [0: bb2, 1: bb4, otherwise: bb3]; // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
+ StorageDead(_11);
+ StorageDead(_10);
+ _5 = discriminant(_3);
+ switchInt(move _5) -> [0: bb2, 1: bb4, otherwise: bb3];
}
bb2: {
- StorageLive(_9); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
- _9 = ((_3 as Continue).0: i32); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
- _2 = _9; // scope 4 at $DIR/separate_const_switch.rs:+1:8: +1:10
- StorageDead(_9); // scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
- _0 = Result::<i32, i32>::Ok(move _2); // scope 0 at $DIR/separate_const_switch.rs:+1:5: +1:11
- StorageDead(_2); // scope 0 at $DIR/separate_const_switch.rs:+1:10: +1:11
- StorageDead(_3); // scope 0 at $DIR/separate_const_switch.rs:+2:1: +2:2
- return; // scope 0 at $DIR/separate_const_switch.rs:+2:2: +2:2
+ _8 = ((_3 as Continue).0: i32);
+ _0 = Result::<i32, i32>::Ok(_8);
+ StorageDead(_3);
+ return;
}
bb3: {
- unreachable; // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
+ unreachable;
}
bb4: {
- StorageLive(_6); // scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
- _6 = ((_3 as Break).0: std::result::Result<std::convert::Infallible, i32>); // scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
- StorageLive(_8); // scope 2 at $DIR/separate_const_switch.rs:+1:9: +1:10
- _8 = _6; // scope 2 at $DIR/separate_const_switch.rs:+1:9: +1:10
- StorageLive(_14); // scope 2 at $DIR/separate_const_switch.rs:+1:8: +1:10
- _14 = move ((_8 as Err).0: i32); // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
- StorageLive(_15); // scope 9 at $SRC_DIR/core/src/result.rs:LL:COL
- _15 = move _14; // scope 10 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
- _0 = Result::<i32, i32>::Err(move _15); // scope 9 at $SRC_DIR/core/src/result.rs:LL:COL
- StorageDead(_15); // scope 9 at $SRC_DIR/core/src/result.rs:LL:COL
- StorageDead(_14); // scope 2 at $DIR/separate_const_switch.rs:+1:8: +1:10
- StorageDead(_8); // scope 2 at $DIR/separate_const_switch.rs:+1:9: +1:10
- StorageDead(_6); // scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
- StorageDead(_2); // scope 0 at $DIR/separate_const_switch.rs:+1:10: +1:11
- StorageDead(_3); // scope 0 at $DIR/separate_const_switch.rs:+2:1: +2:2
- return; // scope 0 at $DIR/separate_const_switch.rs:+2:2: +2:2
+ _6 = ((_3 as Break).0: std::result::Result<std::convert::Infallible, i32>);
+ _13 = ((_6 as Err).0: i32);
+ _0 = Result::<i32, i32>::Err(move _13);
+ StorageDead(_3);
+ return;
}
bb5: {
- _12 = move ((_4 as Err).0: i32); // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
- StorageLive(_13); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- _13 = Result::<Infallible, i32>::Err(move _12); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- _3 = ControlFlow::<Result<Infallible, i32>, i32>::Break(move _13); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- StorageDead(_13); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
- goto -> bb1; // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
+ _11 = ((_1 as Err).0: i32);
+ StorageLive(_12);
+ _12 = Result::<Infallible, i32>::Err(move _11);
+ _3 = ControlFlow::<Result<Infallible, i32>, i32>::Break(move _12);
+ StorageDead(_12);
+ goto -> bb1;
}
bb6: {
- unreachable; // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
+ unreachable;
}
bb7: {
- _11 = move ((_4 as Ok).0: i32); // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
- _3 = ControlFlow::<Result<Infallible, i32>, i32>::Continue(move _11); // scope 6 at $SRC_DIR/core/src/result.rs:LL:COL
- goto -> bb1; // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
+ _10 = ((_1 as Ok).0: i32);
+ _3 = ControlFlow::<Result<Infallible, i32>, i32>::Continue(move _10);
+ goto -> bb1;
}
}
diff --git a/tests/mir-opt/separate_const_switch.rs b/tests/mir-opt/separate_const_switch.rs
index c809e5629..d333d4b6b 100644
--- a/tests/mir-opt/separate_const_switch.rs
+++ b/tests/mir-opt/separate_const_switch.rs
@@ -1,6 +1,8 @@
#![feature(control_flow_enum)]
#![feature(try_trait_v2)]
+// compile-flags: -Zunsound-mir-opts
+
use std::ops::ControlFlow;
// EMIT_MIR separate_const_switch.too_complex.SeparateConstSwitch.diff
diff --git a/tests/mir-opt/separate_const_switch.too_complex.SeparateConstSwitch.diff b/tests/mir-opt/separate_const_switch.too_complex.SeparateConstSwitch.diff
index b5e0a66d8..e2bf33f7f 100644
--- a/tests/mir-opt/separate_const_switch.too_complex.SeparateConstSwitch.diff
+++ b/tests/mir-opt/separate_const_switch.too_complex.SeparateConstSwitch.diff
@@ -2,90 +2,75 @@
+ // MIR for `too_complex` after SeparateConstSwitch
fn too_complex(_1: Result<i32, usize>) -> Option<i32> {
- debug x => _1; // in scope 0 at $DIR/separate_const_switch.rs:+0:16: +0:17
- let mut _0: std::option::Option<i32>; // return place in scope 0 at $DIR/separate_const_switch.rs:+0:42: +0:53
- let mut _2: std::ops::ControlFlow<usize, i32>; // in scope 0 at $DIR/separate_const_switch.rs:+5:11: +10:6
- let mut _3: isize; // in scope 0 at $DIR/separate_const_switch.rs:+7:13: +7:18
- let _4: i32; // in scope 0 at $DIR/separate_const_switch.rs:+7:16: +7:17
- let mut _5: i32; // in scope 0 at $DIR/separate_const_switch.rs:+7:44: +7:45
- let _6: usize; // in scope 0 at $DIR/separate_const_switch.rs:+8:17: +8:18
- let mut _7: usize; // in scope 0 at $DIR/separate_const_switch.rs:+8:42: +8:43
- let mut _8: isize; // in scope 0 at $DIR/separate_const_switch.rs:+11:9: +11:33
- let _9: i32; // in scope 0 at $DIR/separate_const_switch.rs:+11:31: +11:32
- let mut _10: i32; // in scope 0 at $DIR/separate_const_switch.rs:+11:42: +11:43
- let _11: usize; // in scope 0 at $DIR/separate_const_switch.rs:+12:28: +12:29
+ debug x => _1;
+ let mut _0: std::option::Option<i32>;
+ let mut _2: std::ops::ControlFlow<usize, i32>;
+ let mut _3: isize;
+ let _4: i32;
+ let mut _5: i32;
+ let _6: usize;
+ let mut _7: usize;
+ let mut _8: isize;
+ let _9: i32;
+ let mut _10: i32;
+ let _11: usize;
scope 1 {
- debug v => _4; // in scope 1 at $DIR/separate_const_switch.rs:+7:16: +7:17
+ debug v => _4;
}
scope 2 {
- debug r => _6; // in scope 2 at $DIR/separate_const_switch.rs:+8:17: +8:18
+ debug r => _6;
}
scope 3 {
- debug v => _9; // in scope 3 at $DIR/separate_const_switch.rs:+11:31: +11:32
+ debug v => _9;
}
scope 4 {
- debug r => _11; // in scope 4 at $DIR/separate_const_switch.rs:+12:28: +12:29
+ debug r => _11;
}
bb0: {
- StorageLive(_2); // scope 0 at $DIR/separate_const_switch.rs:+5:11: +10:6
- _3 = discriminant(_1); // scope 0 at $DIR/separate_const_switch.rs:+6:15: +6:16
- switchInt(move _3) -> [0: bb3, 1: bb1, otherwise: bb2]; // scope 0 at $DIR/separate_const_switch.rs:+6:9: +6:16
+ StorageLive(_2);
+ _3 = discriminant(_1);
+ switchInt(move _3) -> [0: bb3, 1: bb1, otherwise: bb2];
}
bb1: {
- StorageLive(_6); // scope 0 at $DIR/separate_const_switch.rs:+8:17: +8:18
- _6 = ((_1 as Err).0: usize); // scope 0 at $DIR/separate_const_switch.rs:+8:17: +8:18
- StorageLive(_7); // scope 2 at $DIR/separate_const_switch.rs:+8:42: +8:43
- _7 = _6; // scope 2 at $DIR/separate_const_switch.rs:+8:42: +8:43
- _2 = ControlFlow::<usize, i32>::Break(move _7); // scope 2 at $DIR/separate_const_switch.rs:+8:23: +8:44
- StorageDead(_7); // scope 2 at $DIR/separate_const_switch.rs:+8:43: +8:44
- StorageDead(_6); // scope 0 at $DIR/separate_const_switch.rs:+8:43: +8:44
- goto -> bb4; // scope 0 at $DIR/separate_const_switch.rs:+8:43: +8:44
+ _6 = ((_1 as Err).0: usize);
+ _2 = ControlFlow::<usize, i32>::Break(_6);
+ goto -> bb4;
}
bb2: {
- unreachable; // scope 0 at $DIR/separate_const_switch.rs:+6:15: +6:16
+ unreachable;
}
bb3: {
- StorageLive(_4); // scope 0 at $DIR/separate_const_switch.rs:+7:16: +7:17
- _4 = ((_1 as Ok).0: i32); // scope 0 at $DIR/separate_const_switch.rs:+7:16: +7:17
- StorageLive(_5); // scope 1 at $DIR/separate_const_switch.rs:+7:44: +7:45
- _5 = _4; // scope 1 at $DIR/separate_const_switch.rs:+7:44: +7:45
- _2 = ControlFlow::<usize, i32>::Continue(move _5); // scope 1 at $DIR/separate_const_switch.rs:+7:22: +7:46
- StorageDead(_5); // scope 1 at $DIR/separate_const_switch.rs:+7:45: +7:46
- StorageDead(_4); // scope 0 at $DIR/separate_const_switch.rs:+7:45: +7:46
- goto -> bb4; // scope 0 at $DIR/separate_const_switch.rs:+7:45: +7:46
+ _4 = ((_1 as Ok).0: i32);
+ _2 = ControlFlow::<usize, i32>::Continue(_4);
+ goto -> bb4;
}
bb4: {
- _8 = discriminant(_2); // scope 0 at $DIR/separate_const_switch.rs:+5:11: +10:6
- switchInt(move _8) -> [0: bb6, 1: bb5, otherwise: bb2]; // scope 0 at $DIR/separate_const_switch.rs:+5:5: +10:6
+ _8 = discriminant(_2);
+ switchInt(move _8) -> [0: bb6, 1: bb5, otherwise: bb2];
}
bb5: {
- StorageLive(_11); // scope 0 at $DIR/separate_const_switch.rs:+12:28: +12:29
- _11 = ((_2 as Break).0: usize); // scope 0 at $DIR/separate_const_switch.rs:+12:28: +12:29
- _0 = Option::<i32>::None; // scope 4 at $DIR/separate_const_switch.rs:+12:34: +12:38
- StorageDead(_11); // scope 0 at $DIR/separate_const_switch.rs:+12:37: +12:38
- goto -> bb7; // scope 0 at $DIR/separate_const_switch.rs:+12:37: +12:38
+ StorageLive(_11);
+ _11 = ((_2 as Break).0: usize);
+ _0 = Option::<i32>::None;
+ StorageDead(_11);
+ goto -> bb7;
}
bb6: {
- StorageLive(_9); // scope 0 at $DIR/separate_const_switch.rs:+11:31: +11:32
- _9 = ((_2 as Continue).0: i32); // scope 0 at $DIR/separate_const_switch.rs:+11:31: +11:32
- StorageLive(_10); // scope 3 at $DIR/separate_const_switch.rs:+11:42: +11:43
- _10 = _9; // scope 3 at $DIR/separate_const_switch.rs:+11:42: +11:43
- _0 = Option::<i32>::Some(move _10); // scope 3 at $DIR/separate_const_switch.rs:+11:37: +11:44
- StorageDead(_10); // scope 3 at $DIR/separate_const_switch.rs:+11:43: +11:44
- StorageDead(_9); // scope 0 at $DIR/separate_const_switch.rs:+11:43: +11:44
- goto -> bb7; // scope 0 at $DIR/separate_const_switch.rs:+11:43: +11:44
+ _9 = ((_2 as Continue).0: i32);
+ _0 = Option::<i32>::Some(_9);
+ goto -> bb7;
}
bb7: {
- StorageDead(_2); // scope 0 at $DIR/separate_const_switch.rs:+14:1: +14:2
- return; // scope 0 at $DIR/separate_const_switch.rs:+14:2: +14:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/simplify_cfg.main.SimplifyCfg-early-opt.diff b/tests/mir-opt/simplify_cfg.main.SimplifyCfg-early-opt.diff
index 8eb1aa1f3..f20ab869b 100644
--- a/tests/mir-opt/simplify_cfg.main.SimplifyCfg-early-opt.diff
+++ b/tests/mir-opt/simplify_cfg.main.SimplifyCfg-early-opt.diff
@@ -2,51 +2,47 @@
+ // MIR for `main` after SimplifyCfg-early-opt
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_cfg.rs:+0:11: +0:11
- let mut _1: (); // in scope 0 at $DIR/simplify_cfg.rs:+0:1: +6:2
- let mut _2: bool; // in scope 0 at $DIR/simplify_cfg.rs:+2:12: +2:17
- let mut _3: !; // in scope 0 at $DIR/simplify_cfg.rs:+2:18: +4:10
+ let mut _0: ();
+ let mut _1: ();
+ let mut _2: bool;
+ let mut _3: !;
bb0: {
- goto -> bb1; // scope 0 at $DIR/simplify_cfg.rs:+1:5: +5:6
+ goto -> bb1;
}
bb1: {
-- goto -> bb2; // scope 0 at $DIR/simplify_cfg.rs:+1:5: +5:6
-- }
--
-- bb2: {
- StorageLive(_2); // scope 0 at $DIR/simplify_cfg.rs:+2:12: +2:17
-- _2 = bar() -> [return: bb3, unwind: bb6]; // scope 0 at $DIR/simplify_cfg.rs:+2:12: +2:17
-+ _2 = bar() -> [return: bb2, unwind: bb5]; // scope 0 at $DIR/simplify_cfg.rs:+2:12: +2:17
- // mir::Constant
- // + span: $DIR/simplify_cfg.rs:9:12: 9:15
- // + literal: Const { ty: fn() -> bool {bar}, val: Value(<ZST>) }
+- goto -> bb2;
++ StorageLive(_2);
++ _2 = bar() -> [return: bb2, unwind: bb5];
}
-- bb3: {
-- switchInt(move _2) -> [0: bb5, otherwise: bb4]; // scope 0 at $DIR/simplify_cfg.rs:+2:12: +2:17
-+ bb2: {
-+ switchInt(move _2) -> [0: bb4, otherwise: bb3]; // scope 0 at $DIR/simplify_cfg.rs:+2:12: +2:17
+ bb2: {
+- StorageLive(_2);
+- _2 = bar() -> [return: bb3, unwind: bb6];
++ switchInt(move _2) -> [0: bb4, otherwise: bb3];
}
+ bb3: {
+- switchInt(move _2) -> [0: bb5, otherwise: bb4];
+- }
+-
- bb4: {
-+ bb3: {
- _0 = const (); // scope 0 at $DIR/simplify_cfg.rs:+3:13: +3:18
- StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:+4:9: +4:10
- return; // scope 0 at $DIR/simplify_cfg.rs:+6:2: +6:2
+ _0 = const ();
+ StorageDead(_2);
+ return;
}
- bb5: {
+ bb4: {
- _1 = const (); // scope 0 at $DIR/simplify_cfg.rs:+4:10: +4:10
- StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:+4:9: +4:10
- goto -> bb1; // scope 0 at $DIR/simplify_cfg.rs:+1:5: +5:6
+ _1 = const ();
+ StorageDead(_2);
+ goto -> bb1;
}
- bb6 (cleanup): {
+ bb5 (cleanup): {
- resume; // scope 0 at $DIR/simplify_cfg.rs:+0:1: +6:2
+ resume;
}
}
diff --git a/tests/mir-opt/simplify_cfg.main.SimplifyCfg-initial.diff b/tests/mir-opt/simplify_cfg.main.SimplifyCfg-initial.diff
index c61107d25..d106313f0 100644
--- a/tests/mir-opt/simplify_cfg.main.SimplifyCfg-initial.diff
+++ b/tests/mir-opt/simplify_cfg.main.SimplifyCfg-initial.diff
@@ -2,70 +2,67 @@
+ // MIR for `main` after SimplifyCfg-initial
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_cfg.rs:+0:11: +0:11
- let mut _1: (); // in scope 0 at $DIR/simplify_cfg.rs:+0:1: +6:2
- let mut _2: bool; // in scope 0 at $DIR/simplify_cfg.rs:+2:12: +2:17
- let mut _3: !; // in scope 0 at $DIR/simplify_cfg.rs:+2:18: +4:10
+ let mut _0: ();
+ let mut _1: ();
+ let mut _2: bool;
+ let mut _3: !;
bb0: {
- goto -> bb1; // scope 0 at $DIR/simplify_cfg.rs:+1:5: +5:6
+ goto -> bb1;
}
bb1: {
-- falseUnwind -> [real: bb2, unwind: bb11]; // scope 0 at $DIR/simplify_cfg.rs:+1:5: +5:6
-+ falseUnwind -> [real: bb2, unwind: bb6]; // scope 0 at $DIR/simplify_cfg.rs:+1:5: +5:6
+- falseUnwind -> [real: bb2, unwind: bb11];
++ falseUnwind -> [real: bb2, unwind: bb6];
}
bb2: {
- StorageLive(_2); // scope 0 at $DIR/simplify_cfg.rs:+2:12: +2:17
-- _2 = bar() -> [return: bb3, unwind: bb11]; // scope 0 at $DIR/simplify_cfg.rs:+2:12: +2:17
-+ _2 = bar() -> [return: bb3, unwind: bb6]; // scope 0 at $DIR/simplify_cfg.rs:+2:12: +2:17
- // mir::Constant
- // + span: $DIR/simplify_cfg.rs:9:12: 9:15
- // + literal: Const { ty: fn() -> bool {bar}, val: Value(<ZST>) }
+ StorageLive(_2);
+- _2 = bar() -> [return: bb3, unwind: bb11];
++ _2 = bar() -> [return: bb3, unwind: bb6];
}
bb3: {
- switchInt(move _2) -> [0: bb5, otherwise: bb4]; // scope 0 at $DIR/simplify_cfg.rs:+2:12: +2:17
+ switchInt(move _2) -> [0: bb5, otherwise: bb4];
}
bb4: {
- _0 = const (); // scope 0 at $DIR/simplify_cfg.rs:+3:13: +3:18
-- goto -> bb10; // scope 0 at $DIR/simplify_cfg.rs:+3:13: +3:18
-+ StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:+4:9: +4:10
-+ return; // scope 0 at $DIR/simplify_cfg.rs:+6:2: +6:2
+ _0 = const ();
+- goto -> bb10;
++ StorageDead(_2);
++ return;
}
bb5: {
-- goto -> bb8; // scope 0 at $DIR/simplify_cfg.rs:+2:12: +2:17
+- goto -> bb8;
- }
-
- bb6: {
-- unreachable; // scope 0 at $DIR/simplify_cfg.rs:+2:18: +4:10
+- unreachable;
- }
-
- bb7: {
-- goto -> bb9; // scope 0 at $DIR/simplify_cfg.rs:+2:9: +4:10
+- goto -> bb9;
- }
-
- bb8: {
- _1 = const (); // scope 0 at $DIR/simplify_cfg.rs:+4:10: +4:10
-- goto -> bb9; // scope 0 at $DIR/simplify_cfg.rs:+2:9: +4:10
+ _1 = const ();
+- goto -> bb9;
- }
-
- bb9: {
- StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:+4:9: +4:10
- goto -> bb1; // scope 0 at $DIR/simplify_cfg.rs:+1:5: +5:6
+ StorageDead(_2);
+ goto -> bb1;
}
- bb10: {
-- StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:+4:9: +4:10
-- return; // scope 0 at $DIR/simplify_cfg.rs:+6:2: +6:2
+- StorageDead(_2);
+- return;
- }
-
- bb11 (cleanup): {
+ bb6 (cleanup): {
- resume; // scope 0 at $DIR/simplify_cfg.rs:+0:1: +6:2
+ resume;
}
}
diff --git a/tests/mir-opt/simplify_duplicate_unreachable_blocks.assert_nonzero_nonmax.SimplifyCfg-after-uninhabited-enum-branching.diff b/tests/mir-opt/simplify_duplicate_unreachable_blocks.assert_nonzero_nonmax.SimplifyCfg-after-uninhabited-enum-branching.diff
index f7f50206a..35c0a4d45 100644
--- a/tests/mir-opt/simplify_duplicate_unreachable_blocks.assert_nonzero_nonmax.SimplifyCfg-after-uninhabited-enum-branching.diff
+++ b/tests/mir-opt/simplify_duplicate_unreachable_blocks.assert_nonzero_nonmax.SimplifyCfg-after-uninhabited-enum-branching.diff
@@ -2,24 +2,24 @@
+ // MIR for `assert_nonzero_nonmax` after SimplifyCfg-after-uninhabited-enum-branching
fn assert_nonzero_nonmax(_1: u8) -> u8 {
- let mut _0: u8; // return place in scope 0 at $DIR/simplify_duplicate_unreachable_blocks.rs:+0:47: +0:49
+ let mut _0: u8;
bb0: {
-- switchInt(_1) -> [0: bb1, 255: bb2, otherwise: bb3]; // scope 0 at $DIR/simplify_duplicate_unreachable_blocks.rs:+3:13: +7:14
-+ switchInt(_1) -> [0: bb1, 255: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify_duplicate_unreachable_blocks.rs:+3:13: +7:14
+- switchInt(_1) -> [0: bb1, 255: bb2, otherwise: bb3];
++ switchInt(_1) -> [0: bb1, 255: bb1, otherwise: bb2];
}
bb1: {
- unreachable; // scope 0 at $DIR/simplify_duplicate_unreachable_blocks.rs:+10:13: +10:26
+ unreachable;
}
bb2: {
-- unreachable; // scope 0 at $DIR/simplify_duplicate_unreachable_blocks.rs:+13:13: +13:26
+- unreachable;
- }
-
- bb3: {
- _0 = _1; // scope 0 at $DIR/simplify_duplicate_unreachable_blocks.rs:+16:13: +16:20
- return; // scope 0 at $DIR/simplify_duplicate_unreachable_blocks.rs:+17:13: +17:21
+ _0 = _1;
+ return;
}
}
diff --git a/tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.diff b/tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.diff
deleted file mode 100644
index b473d0fde..000000000
--- a/tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.diff
+++ /dev/null
@@ -1,36 +0,0 @@
-- // MIR for `main` before SimplifyConstCondition-after-const-prop
-+ // MIR for `main` after SimplifyConstCondition-after-const-prop
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_if.rs:+0:11: +0:11
- let mut _1: bool; // in scope 0 at $DIR/simplify_if.rs:+1:8: +1:13
- let _2: (); // in scope 0 at $DIR/simplify_if.rs:+2:9: +2:15
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/simplify_if.rs:+1:8: +1:13
- _1 = const false; // scope 0 at $DIR/simplify_if.rs:+1:8: +1:13
-- switchInt(const false) -> [0: bb3, otherwise: bb1]; // scope 0 at $DIR/simplify_if.rs:+1:8: +1:13
-+ goto -> bb3; // scope 0 at $DIR/simplify_if.rs:+1:8: +1:13
- }
-
- bb1: {
- _2 = noop() -> bb2; // scope 0 at $DIR/simplify_if.rs:+2:9: +2:15
- // mir::Constant
- // + span: $DIR/simplify_if.rs:8:9: 8:13
- // + literal: Const { ty: fn() {noop}, val: Value(<ZST>) }
- }
-
- bb2: {
- goto -> bb4; // scope 0 at $DIR/simplify_if.rs:+1:5: +3:6
- }
-
- bb3: {
- goto -> bb4; // scope 0 at $DIR/simplify_if.rs:+1:5: +3:6
- }
-
- bb4: {
- StorageDead(_1); // scope 0 at $DIR/simplify_if.rs:+3:5: +3:6
- return; // scope 0 at $DIR/simplify_if.rs:+4:2: +4:2
- }
- }
-
diff --git a/tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.panic-abort.diff b/tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.panic-abort.diff
new file mode 100644
index 000000000..d39571583
--- /dev/null
+++ b/tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.panic-abort.diff
@@ -0,0 +1,33 @@
+- // MIR for `main` before SimplifyConstCondition-after-const-prop
++ // MIR for `main` after SimplifyConstCondition-after-const-prop
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: bool;
+ let _2: ();
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const false;
+- switchInt(const false) -> [0: bb3, otherwise: bb1];
++ goto -> bb3;
+ }
+
+ bb1: {
+ _2 = noop() -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ goto -> bb4;
+ }
+
+ bb3: {
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.panic-unwind.diff b/tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.panic-unwind.diff
new file mode 100644
index 000000000..81903c64d
--- /dev/null
+++ b/tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.panic-unwind.diff
@@ -0,0 +1,33 @@
+- // MIR for `main` before SimplifyConstCondition-after-const-prop
++ // MIR for `main` after SimplifyConstCondition-after-const-prop
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: bool;
+ let _2: ();
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const false;
+- switchInt(const false) -> [0: bb3, otherwise: bb1];
++ goto -> bb3;
+ }
+
+ bb1: {
+ _2 = noop() -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ goto -> bb4;
+ }
+
+ bb3: {
+ goto -> bb4;
+ }
+
+ bb4: {
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/simplify_if.rs b/tests/mir-opt/simplify_if.rs
index b86f80a80..fff23b3ce 100644
--- a/tests/mir-opt/simplify_if.rs
+++ b/tests/mir-opt/simplify_if.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#[inline(never)]
fn noop() {}
diff --git a/tests/mir-opt/simplify_locals.c.SimplifyLocals-before-const-prop.diff b/tests/mir-opt/simplify_locals.c.SimplifyLocals-before-const-prop.diff
index 1be27e963..7cc5e335c 100644
--- a/tests/mir-opt/simplify_locals.c.SimplifyLocals-before-const-prop.diff
+++ b/tests/mir-opt/simplify_locals.c.SimplifyLocals-before-const-prop.diff
@@ -2,32 +2,32 @@
+ // MIR for `c` after SimplifyLocals-before-const-prop
fn c() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_locals.rs:+0:8: +0:8
- let _1: [u8; 10]; // in scope 0 at $DIR/simplify_locals.rs:+1:9: +1:14
-- let mut _2: &[u8]; // in scope 0 at $DIR/simplify_locals.rs:+3:20: +3:26
-- let mut _3: &[u8; 10]; // in scope 0 at $DIR/simplify_locals.rs:+3:20: +3:26
-- let _4: &[u8; 10]; // in scope 0 at $DIR/simplify_locals.rs:+3:20: +3:26
+ let mut _0: ();
+ let _1: [u8; 10];
+- let mut _2: &[u8];
+- let mut _3: &[u8; 10];
+- let _4: &[u8; 10];
scope 1 {
- debug bytes => _1; // in scope 1 at $DIR/simplify_locals.rs:+1:9: +1:14
+ debug bytes => _1;
scope 2 {
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/simplify_locals.rs:+1:9: +1:14
- _1 = [const 0_u8; 10]; // scope 0 at $DIR/simplify_locals.rs:+1:17: +1:26
-- StorageLive(_2); // scope 1 at $DIR/simplify_locals.rs:+3:20: +3:26
-- StorageLive(_3); // scope 1 at $DIR/simplify_locals.rs:+3:20: +3:26
-- StorageLive(_4); // scope 1 at $DIR/simplify_locals.rs:+3:20: +3:26
-- _4 = &_1; // scope 1 at $DIR/simplify_locals.rs:+3:20: +3:26
-- _3 = &(*_4); // scope 1 at $DIR/simplify_locals.rs:+3:20: +3:26
-- _2 = move _3 as &[u8] (Pointer(Unsize)); // scope 1 at $DIR/simplify_locals.rs:+3:20: +3:26
-- StorageDead(_3); // scope 1 at $DIR/simplify_locals.rs:+3:25: +3:26
-- StorageDead(_4); // scope 1 at $DIR/simplify_locals.rs:+3:26: +3:27
-- StorageDead(_2); // scope 1 at $DIR/simplify_locals.rs:+3:26: +3:27
- _0 = const (); // scope 0 at $DIR/simplify_locals.rs:+0:8: +4:2
- StorageDead(_1); // scope 0 at $DIR/simplify_locals.rs:+4:1: +4:2
- return; // scope 0 at $DIR/simplify_locals.rs:+4:2: +4:2
+ StorageLive(_1);
+ _1 = [const 0_u8; 10];
+- StorageLive(_2);
+- StorageLive(_3);
+- StorageLive(_4);
+- _4 = &_1;
+- _3 = &(*_4);
+- _2 = move _3 as &[u8] (PointerCoercion(Unsize));
+- StorageDead(_3);
+- StorageDead(_4);
+- StorageDead(_2);
+ _0 = const ();
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/simplify_locals.d1.SimplifyLocals-before-const-prop.diff b/tests/mir-opt/simplify_locals.d1.SimplifyLocals-before-const-prop.diff
index 946595e32..d66caeb04 100644
--- a/tests/mir-opt/simplify_locals.d1.SimplifyLocals-before-const-prop.diff
+++ b/tests/mir-opt/simplify_locals.d1.SimplifyLocals-before-const-prop.diff
@@ -2,17 +2,17 @@
+ // MIR for `d1` after SimplifyLocals-before-const-prop
fn d1() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_locals.rs:+0:9: +0:9
-- let mut _1: E; // in scope 0 at $DIR/simplify_locals.rs:+2:13: +2:17
+ let mut _0: ();
+- let mut _1: E;
scope 1 {
}
bb0: {
-- StorageLive(_1); // scope 0 at $DIR/simplify_locals.rs:+2:13: +2:17
-- _1 = E::A; // scope 0 at $DIR/simplify_locals.rs:+2:13: +2:17
-- StorageDead(_1); // scope 0 at $DIR/simplify_locals.rs:+2:17: +2:18
- _0 = const (); // scope 0 at $DIR/simplify_locals.rs:+0:9: +3:2
- return; // scope 0 at $DIR/simplify_locals.rs:+3:2: +3:2
+- StorageLive(_1);
+- _1 = E::A;
+- StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/simplify_locals.d2.SimplifyLocals-before-const-prop.diff b/tests/mir-opt/simplify_locals.d2.SimplifyLocals-before-const-prop.diff
index 6a5dc56e2..374c5895e 100644
--- a/tests/mir-opt/simplify_locals.d2.SimplifyLocals-before-const-prop.diff
+++ b/tests/mir-opt/simplify_locals.d2.SimplifyLocals-before-const-prop.diff
@@ -2,24 +2,24 @@
+ // MIR for `d2` after SimplifyLocals-before-const-prop
fn d2() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_locals.rs:+0:9: +0:9
-- let mut _1: E; // in scope 0 at $DIR/simplify_locals.rs:+2:22: +2:26
-- let mut _2: (i32, E); // in scope 0 at $DIR/simplify_locals.rs:+2:5: +2:17
-- let mut _3: E; // in scope 0 at $DIR/simplify_locals.rs:+2:11: +2:15
+ let mut _0: ();
+- let mut _1: E;
+- let mut _2: (i32, E);
+- let mut _3: E;
bb0: {
-- StorageLive(_1); // scope 0 at $DIR/simplify_locals.rs:+2:22: +2:26
-- _1 = E::B; // scope 0 at $DIR/simplify_locals.rs:+2:22: +2:26
-- StorageLive(_2); // scope 0 at $DIR/simplify_locals.rs:+2:5: +2:17
-- StorageLive(_3); // scope 0 at $DIR/simplify_locals.rs:+2:11: +2:15
-- _3 = E::A; // scope 0 at $DIR/simplify_locals.rs:+2:11: +2:15
-- _2 = (const 10_i32, move _3); // scope 0 at $DIR/simplify_locals.rs:+2:6: +2:16
-- StorageDead(_3); // scope 0 at $DIR/simplify_locals.rs:+2:15: +2:16
-- (_2.1: E) = move _1; // scope 0 at $DIR/simplify_locals.rs:+2:5: +2:26
-- StorageDead(_1); // scope 0 at $DIR/simplify_locals.rs:+2:25: +2:26
-- StorageDead(_2); // scope 0 at $DIR/simplify_locals.rs:+2:26: +2:27
- _0 = const (); // scope 0 at $DIR/simplify_locals.rs:+0:9: +3:2
- return; // scope 0 at $DIR/simplify_locals.rs:+3:2: +3:2
+- StorageLive(_1);
+- _1 = E::B;
+- StorageLive(_2);
+- StorageLive(_3);
+- _3 = E::A;
+- _2 = (const 10_i32, move _3);
+- StorageDead(_3);
+- (_2.1: E) = move _1;
+- StorageDead(_1);
+- StorageDead(_2);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/simplify_locals.expose_addr.SimplifyLocals-before-const-prop.diff b/tests/mir-opt/simplify_locals.expose_addr.SimplifyLocals-before-const-prop.diff
index 9ca1dbbd0..9ebee3df6 100644
--- a/tests/mir-opt/simplify_locals.expose_addr.SimplifyLocals-before-const-prop.diff
+++ b/tests/mir-opt/simplify_locals.expose_addr.SimplifyLocals-before-const-prop.diff
@@ -2,20 +2,20 @@
+ // MIR for `expose_addr` after SimplifyLocals-before-const-prop
fn expose_addr(_1: *const usize) -> () {
- debug p => _1; // in scope 0 at $DIR/simplify_locals.rs:+0:16: +0:17
- let mut _0: (); // return place in scope 0 at $DIR/simplify_locals.rs:+0:33: +0:33
- let _2: usize; // in scope 0 at $DIR/simplify_locals.rs:+2:5: +2:15
- let mut _3: *const usize; // in scope 0 at $DIR/simplify_locals.rs:+2:5: +2:6
+ debug p => _1;
+ let mut _0: ();
+ let _2: usize;
+ let mut _3: *const usize;
bb0: {
- StorageLive(_2); // scope 0 at $DIR/simplify_locals.rs:+2:5: +2:15
- StorageLive(_3); // scope 0 at $DIR/simplify_locals.rs:+2:5: +2:6
- _3 = _1; // scope 0 at $DIR/simplify_locals.rs:+2:5: +2:6
- _2 = move _3 as usize (PointerExposeAddress); // scope 0 at $DIR/simplify_locals.rs:+2:5: +2:15
- StorageDead(_3); // scope 0 at $DIR/simplify_locals.rs:+2:14: +2:15
- StorageDead(_2); // scope 0 at $DIR/simplify_locals.rs:+2:15: +2:16
- _0 = const (); // scope 0 at $DIR/simplify_locals.rs:+0:33: +3:2
- return; // scope 0 at $DIR/simplify_locals.rs:+3:2: +3:2
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = move _3 as usize (PointerExposeAddress);
+ StorageDead(_3);
+ StorageDead(_2);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/simplify_locals.r.SimplifyLocals-before-const-prop.diff b/tests/mir-opt/simplify_locals.r.SimplifyLocals-before-const-prop.diff
index 19dacb427..c9f7785a4 100644
--- a/tests/mir-opt/simplify_locals.r.SimplifyLocals-before-const-prop.diff
+++ b/tests/mir-opt/simplify_locals.r.SimplifyLocals-before-const-prop.diff
@@ -2,12 +2,12 @@
+ // MIR for `r` after SimplifyLocals-before-const-prop
fn r() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_locals.rs:+0:8: +0:8
- let mut _1: i32; // in scope 0 at $DIR/simplify_locals.rs:+1:9: +1:14
-- let mut _2: &i32; // in scope 0 at $DIR/simplify_locals.rs:+3:13: +3:15
-- let mut _3: &mut i32; // in scope 0 at $DIR/simplify_locals.rs:+4:13: +4:19
+ let mut _0: ();
+ let mut _1: i32;
+- let mut _2: &i32;
+- let mut _3: &mut i32;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/simplify_locals.rs:+1:9: +1:14
+ debug a => _1;
scope 2 {
scope 3 {
}
@@ -15,17 +15,17 @@
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/simplify_locals.rs:+1:9: +1:14
- _1 = const 1_i32; // scope 0 at $DIR/simplify_locals.rs:+1:17: +1:18
-- StorageLive(_2); // scope 1 at $DIR/simplify_locals.rs:+3:13: +3:15
-- _2 = &_1; // scope 1 at $DIR/simplify_locals.rs:+3:13: +3:15
-- StorageDead(_2); // scope 1 at $DIR/simplify_locals.rs:+3:15: +3:16
-- StorageLive(_3); // scope 2 at $DIR/simplify_locals.rs:+4:13: +4:19
-- _3 = &mut _1; // scope 2 at $DIR/simplify_locals.rs:+4:13: +4:19
-- StorageDead(_3); // scope 2 at $DIR/simplify_locals.rs:+4:19: +4:20
- _0 = const (); // scope 0 at $DIR/simplify_locals.rs:+0:8: +5:2
- StorageDead(_1); // scope 0 at $DIR/simplify_locals.rs:+5:1: +5:2
- return; // scope 0 at $DIR/simplify_locals.rs:+5:2: +5:2
+ StorageLive(_1);
+ _1 = const 1_i32;
+- StorageLive(_2);
+- _2 = &_1;
+- StorageDead(_2);
+- StorageLive(_3);
+- _3 = &mut _1;
+- StorageDead(_3);
+ _0 = const ();
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/simplify_locals.t1.SimplifyLocals-before-const-prop.diff b/tests/mir-opt/simplify_locals.t1.SimplifyLocals-before-const-prop.diff
index 1b2e1158e..a903e8d78 100644
--- a/tests/mir-opt/simplify_locals.t1.SimplifyLocals-before-const-prop.diff
+++ b/tests/mir-opt/simplify_locals.t1.SimplifyLocals-before-const-prop.diff
@@ -2,21 +2,21 @@
+ // MIR for `t1` after SimplifyLocals-before-const-prop
fn t1() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_locals.rs:+0:9: +0:9
-- let _1: u32; // in scope 0 at $DIR/simplify_locals.rs:+2:14: +2:15
-- let mut _2: *mut u32; // in scope 0 at $DIR/simplify_locals.rs:+2:14: +2:15
+ let mut _0: ();
+- let _1: u32;
+- let mut _2: *mut u32;
scope 1 {
}
bb0: {
-- StorageLive(_1); // scope 0 at $DIR/simplify_locals.rs:+2:5: +2:17
-- StorageLive(_2); // scope 1 at $DIR/simplify_locals.rs:+2:14: +2:15
-- _2 = &/*tls*/ mut X; // scope 1 at $DIR/simplify_locals.rs:+2:14: +2:15
-- _1 = (*_2); // scope 1 at $DIR/simplify_locals.rs:+2:14: +2:15
-- StorageDead(_2); // scope 0 at $DIR/simplify_locals.rs:+2:17: +2:18
-- StorageDead(_1); // scope 0 at $DIR/simplify_locals.rs:+2:17: +2:18
- _0 = const (); // scope 0 at $DIR/simplify_locals.rs:+0:9: +3:2
- return; // scope 0 at $DIR/simplify_locals.rs:+3:2: +3:2
+- StorageLive(_1);
+- StorageLive(_2);
+- _2 = &/*tls*/ mut X;
+- _1 = (*_2);
+- StorageDead(_2);
+- StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/simplify_locals.t2.SimplifyLocals-before-const-prop.diff b/tests/mir-opt/simplify_locals.t2.SimplifyLocals-before-const-prop.diff
index cf019357b..e72e71a13 100644
--- a/tests/mir-opt/simplify_locals.t2.SimplifyLocals-before-const-prop.diff
+++ b/tests/mir-opt/simplify_locals.t2.SimplifyLocals-before-const-prop.diff
@@ -2,21 +2,21 @@
+ // MIR for `t2` after SimplifyLocals-before-const-prop
fn t2() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_locals.rs:+0:9: +0:9
-- let _1: &mut u32; // in scope 0 at $DIR/simplify_locals.rs:+2:14: +2:20
-- let mut _2: *mut u32; // in scope 0 at $DIR/simplify_locals.rs:+2:19: +2:20
+ let mut _0: ();
+- let _1: &mut u32;
+- let mut _2: *mut u32;
scope 1 {
}
bb0: {
-- StorageLive(_1); // scope 0 at $DIR/simplify_locals.rs:+2:5: +2:22
-- StorageLive(_2); // scope 1 at $DIR/simplify_locals.rs:+2:19: +2:20
-- _2 = &/*tls*/ mut X; // scope 1 at $DIR/simplify_locals.rs:+2:19: +2:20
-- _1 = &mut (*_2); // scope 1 at $DIR/simplify_locals.rs:+2:14: +2:20
-- StorageDead(_2); // scope 0 at $DIR/simplify_locals.rs:+2:22: +2:23
-- StorageDead(_1); // scope 0 at $DIR/simplify_locals.rs:+2:22: +2:23
- _0 = const (); // scope 0 at $DIR/simplify_locals.rs:+0:9: +3:2
- return; // scope 0 at $DIR/simplify_locals.rs:+3:2: +3:2
+- StorageLive(_1);
+- StorageLive(_2);
+- _2 = &/*tls*/ mut X;
+- _1 = &mut (*_2);
+- StorageDead(_2);
+- StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/simplify_locals.t3.SimplifyLocals-before-const-prop.diff b/tests/mir-opt/simplify_locals.t3.SimplifyLocals-before-const-prop.diff
index 90ee21580..37c367c82 100644
--- a/tests/mir-opt/simplify_locals.t3.SimplifyLocals-before-const-prop.diff
+++ b/tests/mir-opt/simplify_locals.t3.SimplifyLocals-before-const-prop.diff
@@ -2,25 +2,25 @@
+ // MIR for `t3` after SimplifyLocals-before-const-prop
fn t3() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_locals.rs:+0:9: +0:9
-- let _1: u32; // in scope 0 at $DIR/simplify_locals.rs:+2:14: +2:21
-- let mut _2: &mut u32; // in scope 0 at $DIR/simplify_locals.rs:+2:15: +2:21
-- let mut _3: *mut u32; // in scope 0 at $DIR/simplify_locals.rs:+2:20: +2:21
+ let mut _0: ();
+- let _1: u32;
+- let mut _2: &mut u32;
+- let mut _3: *mut u32;
scope 1 {
}
bb0: {
-- StorageLive(_1); // scope 0 at $DIR/simplify_locals.rs:+2:5: +2:23
-- StorageLive(_2); // scope 1 at $DIR/simplify_locals.rs:+2:15: +2:21
-- StorageLive(_3); // scope 1 at $DIR/simplify_locals.rs:+2:20: +2:21
-- _3 = &/*tls*/ mut X; // scope 1 at $DIR/simplify_locals.rs:+2:20: +2:21
-- _2 = &mut (*_3); // scope 1 at $DIR/simplify_locals.rs:+2:15: +2:21
-- _1 = (*_2); // scope 1 at $DIR/simplify_locals.rs:+2:14: +2:21
-- StorageDead(_3); // scope 0 at $DIR/simplify_locals.rs:+2:23: +2:24
-- StorageDead(_2); // scope 0 at $DIR/simplify_locals.rs:+2:23: +2:24
-- StorageDead(_1); // scope 0 at $DIR/simplify_locals.rs:+2:23: +2:24
- _0 = const (); // scope 0 at $DIR/simplify_locals.rs:+0:9: +3:2
- return; // scope 0 at $DIR/simplify_locals.rs:+3:2: +3:2
+- StorageLive(_1);
+- StorageLive(_2);
+- StorageLive(_3);
+- _3 = &/*tls*/ mut X;
+- _2 = &mut (*_3);
+- _1 = (*_2);
+- StorageDead(_3);
+- StorageDead(_2);
+- StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/simplify_locals.t4.SimplifyLocals-before-const-prop.diff b/tests/mir-opt/simplify_locals.t4.SimplifyLocals-before-const-prop.diff
index 9add9a6c5..006e3c423 100644
--- a/tests/mir-opt/simplify_locals.t4.SimplifyLocals-before-const-prop.diff
+++ b/tests/mir-opt/simplify_locals.t4.SimplifyLocals-before-const-prop.diff
@@ -2,21 +2,21 @@
+ // MIR for `t4` after SimplifyLocals-before-const-prop
fn t4() -> u32 {
- let mut _0: u32; // return place in scope 0 at $DIR/simplify_locals.rs:+0:12: +0:15
- let mut _1: u32; // in scope 0 at $DIR/simplify_locals.rs:+2:14: +2:15
- let mut _2: *mut u32; // in scope 0 at $DIR/simplify_locals.rs:+2:14: +2:15
+ let mut _0: u32;
+ let mut _1: u32;
+ let mut _2: *mut u32;
scope 1 {
}
bb0: {
- StorageLive(_1); // scope 1 at $DIR/simplify_locals.rs:+2:14: +2:15
- StorageLive(_2); // scope 1 at $DIR/simplify_locals.rs:+2:14: +2:15
- _2 = &/*tls*/ mut X; // scope 1 at $DIR/simplify_locals.rs:+2:14: +2:15
- _1 = (*_2); // scope 1 at $DIR/simplify_locals.rs:+2:14: +2:15
- _0 = Add(move _1, const 1_u32); // scope 1 at $DIR/simplify_locals.rs:+2:14: +2:19
- StorageDead(_1); // scope 1 at $DIR/simplify_locals.rs:+2:18: +2:19
- StorageDead(_2); // scope 0 at $DIR/simplify_locals.rs:+3:1: +3:2
- return; // scope 0 at $DIR/simplify_locals.rs:+3:2: +3:2
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = &/*tls*/ mut X;
+ _1 = (*_2);
+ _0 = Add(move _1, const 1_u32);
+ StorageDead(_1);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.diff b/tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.diff
deleted file mode 100644
index f908e8dd0..000000000
--- a/tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.diff
+++ /dev/null
@@ -1,53 +0,0 @@
-- // MIR for `foo` before SimplifyLocals-final
-+ // MIR for `foo` after SimplifyLocals-final
-
- fn foo() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_locals_fixedpoint.rs:+0:13: +0:13
- let mut _1: (std::option::Option<u8>, std::option::Option<T>); // in scope 0 at $DIR/simplify_locals_fixedpoint.rs:+1:30: +1:69
- let mut _2: std::option::Option<u8>; // in scope 0 at $DIR/simplify_locals_fixedpoint.rs:+1:31: +1:49
- let mut _3: std::option::Option<T>; // in scope 0 at $DIR/simplify_locals_fixedpoint.rs:+1:51: +1:68
- let mut _4: isize; // in scope 0 at $DIR/simplify_locals_fixedpoint.rs:+1:22: +1:26
- let mut _5: isize; // in scope 0 at $DIR/simplify_locals_fixedpoint.rs:+1:13: +1:20
-- let mut _7: bool; // in scope 0 at $DIR/simplify_locals_fixedpoint.rs:+2:12: +2:20
-- let mut _8: u8; // in scope 0 at $DIR/simplify_locals_fixedpoint.rs:+2:12: +2:13
- scope 1 {
- debug a => _6; // in scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:18: +1:19
- let _6: u8; // in scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:18: +1:19
- }
-
- bb0: {
- StorageLive(_1); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:30: +1:69
- StorageLive(_2); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:31: +1:49
- _2 = Option::<u8>::None; // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:31: +1:49
- StorageLive(_3); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:51: +1:68
- _3 = Option::<T>::None; // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:51: +1:68
- _1 = (move _2, move _3); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:30: +1:69
- StorageDead(_3); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:68: +1:69
- StorageDead(_2); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:68: +1:69
- _5 = discriminant((_1.0: std::option::Option<u8>)); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:12: +1:27
- switchInt(move _5) -> [1: bb1, otherwise: bb3]; // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:12: +1:27
- }
-
- bb1: {
- _4 = discriminant((_1.1: std::option::Option<T>)); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:12: +1:27
- switchInt(move _4) -> [0: bb2, otherwise: bb3]; // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:12: +1:27
- }
-
- bb2: {
- _6 = (((_1.0: std::option::Option<u8>) as Some).0: u8); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:18: +1:19
-- StorageLive(_7); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+2:12: +2:20
-- _7 = Gt(_6, const 42_u8); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+2:12: +2:20
-- StorageDead(_7); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+4:9: +4:10
- goto -> bb3; // scope 0 at $DIR/simplify_locals_fixedpoint.rs:+1:5: +5:6
- }
-
- bb3: {
- drop(_1) -> bb4; // scope 0 at $DIR/simplify_locals_fixedpoint.rs:+6:1: +6:2
- }
-
- bb4: {
- StorageDead(_1); // scope 0 at $DIR/simplify_locals_fixedpoint.rs:+6:1: +6:2
- return; // scope 0 at $DIR/simplify_locals_fixedpoint.rs:+6:2: +6:2
- }
- }
-
diff --git a/tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.panic-abort.diff b/tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.panic-abort.diff
new file mode 100644
index 000000000..1566d7197
--- /dev/null
+++ b/tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.panic-abort.diff
@@ -0,0 +1,50 @@
+- // MIR for `foo` before SimplifyLocals-final
++ // MIR for `foo` after SimplifyLocals-final
+
+ fn foo() -> () {
+ let mut _0: ();
+ let mut _1: (std::option::Option<u8>, std::option::Option<T>);
+ let mut _2: std::option::Option<u8>;
+ let mut _3: std::option::Option<T>;
+ let mut _4: isize;
+ let mut _5: isize;
+ scope 1 {
+ debug a => _6;
+ let _6: u8;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = Option::<u8>::None;
+ StorageLive(_3);
+ _3 = Option::<T>::None;
+ _1 = (move _2, move _3);
+ StorageDead(_3);
+ StorageDead(_2);
+ _5 = discriminant((_1.0: std::option::Option<u8>));
+ switchInt(move _5) -> [1: bb1, otherwise: bb3];
+ }
+
+ bb1: {
+ _4 = discriminant((_1.1: std::option::Option<T>));
+ switchInt(move _4) -> [0: bb2, otherwise: bb3];
+ }
+
+ bb2: {
+ StorageLive(_6);
+ _6 = (((_1.0: std::option::Option<u8>) as Some).0: u8);
+ StorageDead(_6);
+ goto -> bb3;
+ }
+
+ bb3: {
+ drop(_1) -> [return: bb4, unwind unreachable];
+ }
+
+ bb4: {
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.panic-unwind.diff b/tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.panic-unwind.diff
new file mode 100644
index 000000000..ba5262b0e
--- /dev/null
+++ b/tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.panic-unwind.diff
@@ -0,0 +1,50 @@
+- // MIR for `foo` before SimplifyLocals-final
++ // MIR for `foo` after SimplifyLocals-final
+
+ fn foo() -> () {
+ let mut _0: ();
+ let mut _1: (std::option::Option<u8>, std::option::Option<T>);
+ let mut _2: std::option::Option<u8>;
+ let mut _3: std::option::Option<T>;
+ let mut _4: isize;
+ let mut _5: isize;
+ scope 1 {
+ debug a => _6;
+ let _6: u8;
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = Option::<u8>::None;
+ StorageLive(_3);
+ _3 = Option::<T>::None;
+ _1 = (move _2, move _3);
+ StorageDead(_3);
+ StorageDead(_2);
+ _5 = discriminant((_1.0: std::option::Option<u8>));
+ switchInt(move _5) -> [1: bb1, otherwise: bb3];
+ }
+
+ bb1: {
+ _4 = discriminant((_1.1: std::option::Option<T>));
+ switchInt(move _4) -> [0: bb2, otherwise: bb3];
+ }
+
+ bb2: {
+ StorageLive(_6);
+ _6 = (((_1.0: std::option::Option<u8>) as Some).0: u8);
+ StorageDead(_6);
+ goto -> bb3;
+ }
+
+ bb3: {
+ drop(_1) -> [return: bb4, unwind continue];
+ }
+
+ bb4: {
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/simplify_locals_fixedpoint.rs b/tests/mir-opt/simplify_locals_fixedpoint.rs
index 7c41e8b7c..4da18b7fe 100644
--- a/tests/mir-opt/simplify_locals_fixedpoint.rs
+++ b/tests/mir-opt/simplify_locals_fixedpoint.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// compile-flags: -Zmir-opt-level=1
fn foo<T>() {
diff --git a/tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.diff b/tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.diff
deleted file mode 100644
index ae2c774f2..000000000
--- a/tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.diff
+++ /dev/null
@@ -1,101 +0,0 @@
-- // MIR for `main` before SimplifyLocals-before-const-prop
-+ // MIR for `main` after SimplifyLocals-before-const-prop
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+0:11: +0:11
-- let mut _1: ((), ()); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:20: +1:28
-- let mut _2: (); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:21: +1:23
-- let mut _3: (); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:25: +1:27
-- let _4: (); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+2:5: +2:22
-- let mut _5: ((), ()); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
-- let mut _6: (); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+2:14: +2:16
-- let mut _7: (); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+2:18: +2:20
-- let _8: (); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+4:5: +4:35
-- let mut _9: u8; // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:34
-- let mut _10: u8; // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:30
-- let mut _11: Temp; // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
-+ let _1: (); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+2:5: +2:22
-+ let mut _2: ((), ()); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
-+ let mut _3: (); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+2:14: +2:16
-+ let mut _4: (); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+2:18: +2:20
-+ let _5: (); // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+4:5: +4:35
-+ let mut _6: u8; // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:34
-+ let mut _7: u8; // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:30
-+ let mut _8: Temp; // in scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
- scope 1 {
- }
-
- bb0: {
-- StorageLive(_1); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:20: +1:28
-- StorageLive(_2); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:21: +1:23
-- _2 = (); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:21: +1:23
-- StorageLive(_3); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:25: +1:27
-- _3 = (); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:25: +1:27
-- _1 = (move _2, move _3); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:20: +1:28
-- StorageDead(_3); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:27: +1:28
-- StorageDead(_2); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:27: +1:28
-- StorageDead(_1); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:28: +1:29
-- StorageLive(_4); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:5: +2:22
-- StorageLive(_5); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
-- StorageLive(_6); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:14: +2:16
-- _6 = (); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:14: +2:16
-- StorageLive(_7); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:18: +2:20
-- _7 = (); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:18: +2:20
-- _5 = (move _6, move _7); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
-- StorageDead(_7); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:20: +2:21
-- StorageDead(_6); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:20: +2:21
-- _4 = use_zst(move _5) -> bb1; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:5: +2:22
-+ StorageLive(_1); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:5: +2:22
-+ StorageLive(_2); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
-+ StorageLive(_3); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:14: +2:16
-+ _3 = (); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:14: +2:16
-+ StorageLive(_4); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:18: +2:20
-+ _4 = (); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:18: +2:20
-+ _2 = (move _3, move _4); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
-+ StorageDead(_4); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:20: +2:21
-+ StorageDead(_3); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:20: +2:21
-+ _1 = use_zst(move _2) -> bb1; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:5: +2:22
- // mir::Constant
- // + span: $DIR/simplify_locals_removes_unused_consts.rs:16:5: 16:12
- // + literal: Const { ty: fn(((), ())) {use_zst}, val: Value(<ZST>) }
- }
-
- bb1: {
-- StorageDead(_5); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:21: +2:22
-- StorageDead(_4); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:22: +2:23
-- StorageLive(_8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:5: +4:35
-- StorageLive(_9); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:34
-- StorageLive(_10); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:30
-- StorageLive(_11); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
-- _11 = Temp { x: const 40_u8 }; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
-- _10 = (_11.0: u8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:30
-- _9 = Add(move _10, const 2_u8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:34
-- StorageDead(_10); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:33: +4:34
-- _8 = use_u8(move _9) -> bb2; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:5: +4:35
-+ StorageDead(_2); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:21: +2:22
-+ StorageDead(_1); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:22: +2:23
-+ StorageLive(_5); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:5: +4:35
-+ StorageLive(_6); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:34
-+ StorageLive(_7); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:30
-+ StorageLive(_8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
-+ _8 = Temp { x: const 40_u8 }; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
-+ _7 = (_8.0: u8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:30
-+ _6 = Add(move _7, const 2_u8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:34
-+ StorageDead(_7); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:33: +4:34
-+ _5 = use_u8(move _6) -> bb2; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:5: +4:35
- // mir::Constant
- // + span: $DIR/simplify_locals_removes_unused_consts.rs:18:5: 18:11
- // + literal: Const { ty: fn(u8) {use_u8}, val: Value(<ZST>) }
- }
-
- bb2: {
-- StorageDead(_9); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:34: +4:35
-- StorageDead(_11); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:35: +4:36
-+ StorageDead(_6); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:34: +4:35
- StorageDead(_8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:35: +4:36
-+ StorageDead(_5); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:35: +4:36
- _0 = const (); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+0:11: +5:2
- return; // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.panic-abort.diff b/tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.panic-abort.diff
new file mode 100644
index 000000000..54d254ee3
--- /dev/null
+++ b/tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.panic-abort.diff
@@ -0,0 +1,86 @@
+- // MIR for `main` before SimplifyLocals-before-const-prop
++ // MIR for `main` after SimplifyLocals-before-const-prop
+
+ fn main() -> () {
+ let mut _0: ();
+- let mut _1: ((), ());
+- let mut _2: ();
++ let _1: ();
++ let mut _2: ((), ());
+ let mut _3: ();
+- let _4: ();
+- let mut _5: ((), ());
+- let mut _6: ();
+- let mut _7: ();
+- let _8: ();
+- let mut _9: u8;
+- let mut _10: u8;
+- let mut _11: Temp;
++ let mut _4: ();
++ let _5: ();
++ let mut _6: u8;
++ let mut _7: u8;
++ let mut _8: Temp;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = ();
+ StorageLive(_3);
+ _3 = ();
+- _1 = (move _2, move _3);
++ StorageLive(_4);
++ _4 = ();
++ _2 = (move _3, move _4);
++ StorageDead(_4);
+ StorageDead(_3);
++ _1 = use_zst(move _2) -> [return: bb1, unwind unreachable];
++ }
++
++ bb1: {
+ StorageDead(_2);
+ StorageDead(_1);
+- StorageLive(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+- _6 = ();
+ StorageLive(_7);
+- _7 = ();
+- _5 = (move _6, move _7);
++ StorageLive(_8);
++ _8 = Temp { x: const 40_u8 };
++ _7 = (_8.0: u8);
++ _6 = Add(move _7, const 2_u8);
+ StorageDead(_7);
+- StorageDead(_6);
+- _4 = use_zst(move _5) -> [return: bb1, unwind unreachable];
++ _5 = use_u8(move _6) -> [return: bb2, unwind unreachable];
+ }
+
+- bb1: {
+- StorageDead(_5);
+- StorageDead(_4);
+- StorageLive(_8);
+- StorageLive(_9);
+- StorageLive(_10);
+- StorageLive(_11);
+- _11 = Temp { x: const 40_u8 };
+- _10 = (_11.0: u8);
+- _9 = Add(move _10, const 2_u8);
+- StorageDead(_10);
+- _8 = use_u8(move _9) -> [return: bb2, unwind unreachable];
+- }
+-
+ bb2: {
+- StorageDead(_9);
+- StorageDead(_11);
++ StorageDead(_6);
+ StorageDead(_8);
++ StorageDead(_5);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.panic-unwind.diff b/tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.panic-unwind.diff
new file mode 100644
index 000000000..a5d9bbc49
--- /dev/null
+++ b/tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.panic-unwind.diff
@@ -0,0 +1,86 @@
+- // MIR for `main` before SimplifyLocals-before-const-prop
++ // MIR for `main` after SimplifyLocals-before-const-prop
+
+ fn main() -> () {
+ let mut _0: ();
+- let mut _1: ((), ());
+- let mut _2: ();
++ let _1: ();
++ let mut _2: ((), ());
+ let mut _3: ();
+- let _4: ();
+- let mut _5: ((), ());
+- let mut _6: ();
+- let mut _7: ();
+- let _8: ();
+- let mut _9: u8;
+- let mut _10: u8;
+- let mut _11: Temp;
++ let mut _4: ();
++ let _5: ();
++ let mut _6: u8;
++ let mut _7: u8;
++ let mut _8: Temp;
+ scope 1 {
+ }
+
+ bb0: {
+ StorageLive(_1);
+ StorageLive(_2);
+- _2 = ();
+ StorageLive(_3);
+ _3 = ();
+- _1 = (move _2, move _3);
++ StorageLive(_4);
++ _4 = ();
++ _2 = (move _3, move _4);
++ StorageDead(_4);
+ StorageDead(_3);
++ _1 = use_zst(move _2) -> [return: bb1, unwind continue];
++ }
++
++ bb1: {
+ StorageDead(_2);
+ StorageDead(_1);
+- StorageLive(_4);
+ StorageLive(_5);
+ StorageLive(_6);
+- _6 = ();
+ StorageLive(_7);
+- _7 = ();
+- _5 = (move _6, move _7);
++ StorageLive(_8);
++ _8 = Temp { x: const 40_u8 };
++ _7 = (_8.0: u8);
++ _6 = Add(move _7, const 2_u8);
+ StorageDead(_7);
+- StorageDead(_6);
+- _4 = use_zst(move _5) -> [return: bb1, unwind continue];
++ _5 = use_u8(move _6) -> [return: bb2, unwind continue];
+ }
+
+- bb1: {
+- StorageDead(_5);
+- StorageDead(_4);
+- StorageLive(_8);
+- StorageLive(_9);
+- StorageLive(_10);
+- StorageLive(_11);
+- _11 = Temp { x: const 40_u8 };
+- _10 = (_11.0: u8);
+- _9 = Add(move _10, const 2_u8);
+- StorageDead(_10);
+- _8 = use_u8(move _9) -> [return: bb2, unwind continue];
+- }
+-
+ bb2: {
+- StorageDead(_9);
+- StorageDead(_11);
++ StorageDead(_6);
+ StorageDead(_8);
++ StorageDead(_5);
+ _0 = const ();
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/simplify_locals_removes_unused_consts.rs b/tests/mir-opt/simplify_locals_removes_unused_consts.rs
index 983d8004e..1e404c3a4 100644
--- a/tests/mir-opt/simplify_locals_removes_unused_consts.rs
+++ b/tests/mir-opt/simplify_locals_removes_unused_consts.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: SimplifyLocals-before-const-prop
// compile-flags: -C overflow-checks=no
diff --git a/tests/mir-opt/simplify_locals_removes_unused_discriminant_reads.map.SimplifyLocals-before-const-prop.diff b/tests/mir-opt/simplify_locals_removes_unused_discriminant_reads.map.SimplifyLocals-before-const-prop.diff
index 3f9af31d8..9ff32b26b 100644
--- a/tests/mir-opt/simplify_locals_removes_unused_discriminant_reads.map.SimplifyLocals-before-const-prop.diff
+++ b/tests/mir-opt/simplify_locals_removes_unused_discriminant_reads.map.SimplifyLocals-before-const-prop.diff
@@ -2,48 +2,48 @@
+ // MIR for `map` after SimplifyLocals-before-const-prop
fn map(_1: Option<Box<()>>) -> Option<Box<()>> {
- debug x => _1; // in scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+0:8: +0:9
- let mut _0: std::option::Option<std::boxed::Box<()>>; // return place in scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+0:31: +0:46
- let mut _2: isize; // in scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+2:9: +2:13
- let _3: std::boxed::Box<()>; // in scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:14: +3:15
- let mut _4: std::boxed::Box<()>; // in scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:25: +3:26
-- let mut _5: bool; // in scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+5:1: +5:2
-- let mut _6: isize; // in scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+5:1: +5:2
-- let mut _7: isize; // in scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+5:1: +5:2
+ debug x => _1;
+ let mut _0: std::option::Option<std::boxed::Box<()>>;
+ let mut _2: isize;
+ let _3: std::boxed::Box<()>;
+ let mut _4: std::boxed::Box<()>;
+- let mut _5: bool;
+- let mut _6: isize;
+- let mut _7: isize;
scope 1 {
- debug x => _3; // in scope 1 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:14: +3:15
+ debug x => _3;
}
bb0: {
-- _5 = const false; // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+1:11: +1:12
-- _5 = const true; // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+1:11: +1:12
- _2 = discriminant(_1); // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+1:11: +1:12
- switchInt(move _2) -> [0: bb3, 1: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+1:5: +1:12
+- _5 = const false;
+- _5 = const true;
+ _2 = discriminant(_1);
+ switchInt(move _2) -> [0: bb3, 1: bb1, otherwise: bb2];
}
bb1: {
- StorageLive(_3); // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:14: +3:15
- _3 = move ((_1 as Some).0: std::boxed::Box<()>); // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:14: +3:15
- StorageLive(_4); // scope 1 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:25: +3:26
- _4 = move _3; // scope 1 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:25: +3:26
- _0 = Option::<Box<()>>::Some(move _4); // scope 1 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:20: +3:27
- StorageDead(_4); // scope 1 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:26: +3:27
- StorageDead(_3); // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:26: +3:27
- goto -> bb4; // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:26: +3:27
+ StorageLive(_3);
+ _3 = move ((_1 as Some).0: std::boxed::Box<()>);
+ StorageLive(_4);
+ _4 = move _3;
+ _0 = Option::<Box<()>>::Some(move _4);
+ StorageDead(_4);
+ StorageDead(_3);
+ goto -> bb4;
}
bb2: {
- unreachable; // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+1:11: +1:12
+ unreachable;
}
bb3: {
- _0 = Option::<Box<()>>::None; // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+2:17: +2:21
- goto -> bb4; // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+2:17: +2:21
+ _0 = Option::<Box<()>>::None;
+ goto -> bb4;
}
bb4: {
-- _6 = discriminant(_1); // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+5:1: +5:2
- return; // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+5:2: +5:2
+- _6 = discriminant(_1);
+ return;
}
}
diff --git a/tests/mir-opt/simplify_match.main.ConstProp.diff b/tests/mir-opt/simplify_match.main.ConstProp.diff
deleted file mode 100644
index d2b9ac3cc..000000000
--- a/tests/mir-opt/simplify_match.main.ConstProp.diff
+++ /dev/null
@@ -1,33 +0,0 @@
-- // MIR for `main` before ConstProp
-+ // MIR for `main` after ConstProp
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/simplify_match.rs:+0:11: +0:11
- let mut _1: bool; // in scope 0 at $DIR/simplify_match.rs:+1:11: +1:31
- let _2: bool; // in scope 0 at $DIR/simplify_match.rs:+1:17: +1:18
- scope 1 {
- debug x => _2; // in scope 1 at $DIR/simplify_match.rs:+1:17: +1:18
- }
-
- bb0: {
- _2 = const false; // scope 0 at $DIR/simplify_match.rs:+1:21: +1:26
-- switchInt(_2) -> [0: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify_match.rs:+1:5: +1:31
-+ switchInt(const false) -> [0: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify_match.rs:+1:5: +1:31
- }
-
- bb1: {
- goto -> bb3; // scope 0 at $DIR/simplify_match.rs:+3:18: +3:20
- }
-
- bb2: {
- _0 = noop() -> bb3; // scope 0 at $DIR/simplify_match.rs:+2:17: +2:23
- // mir::Constant
- // + span: $DIR/simplify_match.rs:8:17: 8:21
- // + literal: Const { ty: fn() {noop}, val: Value(<ZST>) }
- }
-
- bb3: {
- return; // scope 0 at $DIR/simplify_match.rs:+5:2: +5:2
- }
- }
-
diff --git a/tests/mir-opt/simplify_match.main.ConstProp.panic-abort.diff b/tests/mir-opt/simplify_match.main.ConstProp.panic-abort.diff
new file mode 100644
index 000000000..6025abb73
--- /dev/null
+++ b/tests/mir-opt/simplify_match.main.ConstProp.panic-abort.diff
@@ -0,0 +1,30 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: bool;
+ let _2: bool;
+ scope 1 {
+ debug x => _2;
+ }
+
+ bb0: {
+ _2 = const false;
+- switchInt(_2) -> [0: bb1, otherwise: bb2];
++ switchInt(const false) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ goto -> bb3;
+ }
+
+ bb2: {
+ _0 = noop() -> [return: bb3, unwind unreachable];
+ }
+
+ bb3: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/simplify_match.main.ConstProp.panic-unwind.diff b/tests/mir-opt/simplify_match.main.ConstProp.panic-unwind.diff
new file mode 100644
index 000000000..c881dec28
--- /dev/null
+++ b/tests/mir-opt/simplify_match.main.ConstProp.panic-unwind.diff
@@ -0,0 +1,30 @@
+- // MIR for `main` before ConstProp
++ // MIR for `main` after ConstProp
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: bool;
+ let _2: bool;
+ scope 1 {
+ debug x => _2;
+ }
+
+ bb0: {
+ _2 = const false;
+- switchInt(_2) -> [0: bb1, otherwise: bb2];
++ switchInt(const false) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb1: {
+ goto -> bb3;
+ }
+
+ bb2: {
+ _0 = noop() -> [return: bb3, unwind continue];
+ }
+
+ bb3: {
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/simplify_match.rs b/tests/mir-opt/simplify_match.rs
index 6a2a6f217..5d8e94b09 100644
--- a/tests/mir-opt/simplify_match.rs
+++ b/tests/mir-opt/simplify_match.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#[inline(never)]
fn noop() {}
diff --git a/tests/mir-opt/slice_drop_shim.core.ptr-drop_in_place.[String].AddMovesForPackedDrops.before.mir b/tests/mir-opt/slice_drop_shim.core.ptr-drop_in_place.[String].AddMovesForPackedDrops.before.mir
index 11115c96e..9bf69acd3 100644
--- a/tests/mir-opt/slice_drop_shim.core.ptr-drop_in_place.[String].AddMovesForPackedDrops.before.mir
+++ b/tests/mir-opt/slice_drop_shim.core.ptr-drop_in_place.[String].AddMovesForPackedDrops.before.mir
@@ -1,55 +1,55 @@
// MIR for `std::ptr::drop_in_place` before AddMovesForPackedDrops
fn std::ptr::drop_in_place(_1: *mut [String]) -> () {
- let mut _0: (); // return place in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- let mut _2: usize; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- let mut _3: usize; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- let mut _4: *mut std::string::String; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- let mut _5: bool; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- let mut _6: *mut std::string::String; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- let mut _7: bool; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ let mut _0: ();
+ let mut _2: usize;
+ let mut _3: usize;
+ let mut _4: *mut std::string::String;
+ let mut _5: bool;
+ let mut _6: *mut std::string::String;
+ let mut _7: bool;
bb0: {
- goto -> bb8; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ goto -> bb8;
}
bb1: {
- return; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ return;
}
bb2 (cleanup): {
- resume; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ resume;
}
bb3 (cleanup): {
- _4 = &raw mut (*_1)[_3]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- _3 = Add(move _3, const 1_usize); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- drop((*_4)) -> [return: bb4, unwind terminate]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ _4 = &raw mut (*_1)[_3];
+ _3 = Add(move _3, const 1_usize);
+ drop((*_4)) -> [return: bb4, unwind terminate];
}
bb4 (cleanup): {
- _5 = Eq(_3, _2); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- switchInt(move _5) -> [0: bb3, otherwise: bb2]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ _5 = Eq(_3, _2);
+ switchInt(move _5) -> [0: bb3, otherwise: bb2];
}
bb5: {
- _6 = &raw mut (*_1)[_3]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- _3 = Add(move _3, const 1_usize); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- drop((*_6)) -> [return: bb6, unwind: bb4]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ _6 = &raw mut (*_1)[_3];
+ _3 = Add(move _3, const 1_usize);
+ drop((*_6)) -> [return: bb6, unwind: bb4];
}
bb6: {
- _7 = Eq(_3, _2); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- switchInt(move _7) -> [0: bb5, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ _7 = Eq(_3, _2);
+ switchInt(move _7) -> [0: bb5, otherwise: bb1];
}
bb7: {
- _2 = Len((*_1)); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- _3 = const 0_usize; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- goto -> bb6; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ _2 = Len((*_1));
+ _3 = const 0_usize;
+ goto -> bb6;
}
bb8: {
- goto -> bb7; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ goto -> bb7;
}
}
diff --git a/tests/mir-opt/slice_filter.rs b/tests/mir-opt/slice_filter.rs
deleted file mode 100644
index be32f40f1..000000000
--- a/tests/mir-opt/slice_filter.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-fn main() {
- let input = vec![];
- let _variant_a_result = variant_a(&input);
- let _variant_b_result = variant_b(&input);
-}
-
-pub fn variant_a(input: &[(usize, usize, usize, usize)]) -> usize {
- input.iter().filter(|(a, b, c, d)| a <= c && d <= b || c <= a && b <= d).count()
-}
-
-pub fn variant_b(input: &[(usize, usize, usize, usize)]) -> usize {
- input.iter().filter(|&&(a, b, c, d)| a <= c && d <= b || c <= a && b <= d).count()
-}
-
-// EMIT_MIR slice_filter.variant_a-{closure#0}.ReferencePropagation.diff
-// EMIT_MIR slice_filter.variant_a-{closure#0}.CopyProp.diff
-// EMIT_MIR slice_filter.variant_a-{closure#0}.DestinationPropagation.diff
-// EMIT_MIR slice_filter.variant_b-{closure#0}.CopyProp.diff
-// EMIT_MIR slice_filter.variant_b-{closure#0}.ReferencePropagation.diff
-// EMIT_MIR slice_filter.variant_b-{closure#0}.DestinationPropagation.diff
diff --git a/tests/mir-opt/slice_filter.variant_a-{closure#0}.CopyProp.diff b/tests/mir-opt/slice_filter.variant_a-{closure#0}.CopyProp.diff
deleted file mode 100644
index 60e5056c7..000000000
--- a/tests/mir-opt/slice_filter.variant_a-{closure#0}.CopyProp.diff
+++ /dev/null
@@ -1,279 +0,0 @@
-- // MIR for `variant_a::{closure#0}` before CopyProp
-+ // MIR for `variant_a::{closure#0}` after CopyProp
-
- fn variant_a::{closure#0}(_1: &mut [closure@$DIR/slice_filter.rs:8:25: 8:39], _2: &&(usize, usize, usize, usize)) -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/slice_filter.rs:+0:40: +0:40
- let _3: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:27: +0:28
- let _4: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:30: +0:31
- let _5: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:33: +0:34
- let _6: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:36: +0:37
- let mut _7: bool; // in scope 0 at $DIR/slice_filter.rs:+0:40: +0:56
- let mut _8: bool; // in scope 0 at $DIR/slice_filter.rs:+0:40: +0:46
- let mut _9: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:40: +0:41
- let mut _10: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:45: +0:46
- let _11: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:45: +0:46
- let mut _12: bool; // in scope 0 at $DIR/slice_filter.rs:+0:50: +0:56
- let mut _13: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:50: +0:51
- let mut _14: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:55: +0:56
- let _15: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:55: +0:56
- let mut _16: bool; // in scope 0 at $DIR/slice_filter.rs:+0:60: +0:76
- let mut _17: bool; // in scope 0 at $DIR/slice_filter.rs:+0:60: +0:66
- let mut _18: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:60: +0:61
- let mut _19: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:65: +0:66
- let _20: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:65: +0:66
- let mut _21: bool; // in scope 0 at $DIR/slice_filter.rs:+0:70: +0:76
- let mut _22: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:70: +0:71
- let mut _23: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:75: +0:76
- let _24: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:75: +0:76
- let mut _25: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:38
- let mut _26: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:38
- let mut _27: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:38
- let mut _28: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:38
- let mut _31: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _32: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _37: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _38: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _43: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _44: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _49: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _50: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 1 {
- debug a => _3; // in scope 1 at $DIR/slice_filter.rs:+0:27: +0:28
- debug b => _4; // in scope 1 at $DIR/slice_filter.rs:+0:30: +0:31
- debug c => _5; // in scope 1 at $DIR/slice_filter.rs:+0:33: +0:34
- debug d => _6; // in scope 1 at $DIR/slice_filter.rs:+0:36: +0:37
- scope 2 (inlined cmp::impls::<impl PartialOrd for &usize>::le) { // at $DIR/slice_filter.rs:8:40: 8:46
- debug self => _9; // in scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug other => _10; // in scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _29: &usize; // in scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _30: &usize; // in scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 3 (inlined cmp::impls::<impl PartialOrd for usize>::le) { // at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug self => _31; // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug other => _32; // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug self => _29; // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug other => _30; // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _33: usize; // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _34: usize; // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- }
- }
- scope 4 (inlined cmp::impls::<impl PartialOrd for &usize>::le) { // at $DIR/slice_filter.rs:8:60: 8:66
- debug self => _18; // in scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug other => _19; // in scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _35: &usize; // in scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _36: &usize; // in scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 5 (inlined cmp::impls::<impl PartialOrd for usize>::le) { // at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug self => _37; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug other => _38; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug self => _35; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug other => _36; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _39: usize; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _40: usize; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- }
- }
- scope 6 (inlined cmp::impls::<impl PartialOrd for &usize>::le) { // at $DIR/slice_filter.rs:8:50: 8:56
- debug self => _13; // in scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug other => _14; // in scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _41: &usize; // in scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _42: &usize; // in scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 7 (inlined cmp::impls::<impl PartialOrd for usize>::le) { // at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug self => _43; // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug other => _44; // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug self => _41; // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug other => _42; // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _45: usize; // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _46: usize; // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- }
- }
- scope 8 (inlined cmp::impls::<impl PartialOrd for &usize>::le) { // at $DIR/slice_filter.rs:8:70: 8:76
- debug self => _22; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug other => _23; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _47: &usize; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _48: &usize; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::le) { // at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug self => _49; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug other => _50; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug self => _47; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug other => _48; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _51: usize; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _52: usize; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- }
- }
- }
-
- bb0: {
- StorageLive(_3); // scope 0 at $DIR/slice_filter.rs:+0:27: +0:28
- _25 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:27: +0:28
- _3 = &((*_25).0: usize); // scope 0 at $DIR/slice_filter.rs:+0:27: +0:28
- StorageLive(_4); // scope 0 at $DIR/slice_filter.rs:+0:30: +0:31
- _26 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:30: +0:31
- _4 = &((*_26).1: usize); // scope 0 at $DIR/slice_filter.rs:+0:30: +0:31
- StorageLive(_5); // scope 0 at $DIR/slice_filter.rs:+0:33: +0:34
- _27 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:33: +0:34
- _5 = &((*_27).2: usize); // scope 0 at $DIR/slice_filter.rs:+0:33: +0:34
- StorageLive(_6); // scope 0 at $DIR/slice_filter.rs:+0:36: +0:37
- _28 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:36: +0:37
- _6 = &((*_28).3: usize); // scope 0 at $DIR/slice_filter.rs:+0:36: +0:37
- StorageLive(_7); // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- StorageLive(_8); // scope 1 at $DIR/slice_filter.rs:+0:40: +0:46
- StorageLive(_9); // scope 1 at $DIR/slice_filter.rs:+0:40: +0:41
- _9 = &_3; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:41
- StorageLive(_10); // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
- StorageLive(_11); // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
- _11 = _5; // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
- _10 = &_11; // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
- _29 = deref_copy (*_9); // scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _30 = deref_copy (*_10); // scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageLive(_31); // scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _31 = _29; // scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageLive(_32); // scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _32 = _30; // scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_33); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _33 = (*_31); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _33 = (*_29); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_34); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _34 = (*_32); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _34 = (*_30); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _8 = Le(move _33, move _34); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_34); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_33); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageDead(_32); // scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageDead(_31); // scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_11); // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
- StorageDead(_10); // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
- StorageDead(_9); // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
- switchInt(move _8) -> [0: bb4, otherwise: bb5]; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- }
-
- bb1: {
- _0 = const true; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- goto -> bb3; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- }
-
- bb2: {
- StorageLive(_16); // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- StorageLive(_17); // scope 1 at $DIR/slice_filter.rs:+0:60: +0:66
- StorageLive(_18); // scope 1 at $DIR/slice_filter.rs:+0:60: +0:61
- _18 = &_5; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:61
- StorageLive(_19); // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
- StorageLive(_20); // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
- _20 = _3; // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
- _19 = &_20; // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
- _35 = deref_copy (*_18); // scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _36 = deref_copy (*_19); // scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageLive(_37); // scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _37 = _35; // scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageLive(_38); // scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _38 = _36; // scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_39); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _39 = (*_37); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _39 = (*_35); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_40); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _40 = (*_38); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _40 = (*_36); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _17 = Le(move _39, move _40); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_40); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_39); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageDead(_38); // scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageDead(_37); // scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_20); // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
- StorageDead(_19); // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
- StorageDead(_18); // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
- switchInt(move _17) -> [0: bb6, otherwise: bb7]; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- }
-
- bb3: {
- StorageDead(_16); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- StorageDead(_7); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- StorageDead(_6); // scope 0 at $DIR/slice_filter.rs:+0:75: +0:76
- StorageDead(_5); // scope 0 at $DIR/slice_filter.rs:+0:75: +0:76
- StorageDead(_4); // scope 0 at $DIR/slice_filter.rs:+0:75: +0:76
- StorageDead(_3); // scope 0 at $DIR/slice_filter.rs:+0:75: +0:76
- return; // scope 0 at $DIR/slice_filter.rs:+0:76: +0:76
- }
-
- bb4: {
- _7 = const false; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- StorageDead(_12); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- StorageDead(_8); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- goto -> bb2; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- }
-
- bb5: {
- StorageLive(_12); // scope 1 at $DIR/slice_filter.rs:+0:50: +0:56
- StorageLive(_13); // scope 1 at $DIR/slice_filter.rs:+0:50: +0:51
- _13 = &_6; // scope 1 at $DIR/slice_filter.rs:+0:50: +0:51
- StorageLive(_14); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- StorageLive(_15); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- _15 = _4; // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- _14 = &_15; // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- _41 = deref_copy (*_13); // scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _42 = deref_copy (*_14); // scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageLive(_43); // scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _43 = _41; // scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageLive(_44); // scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _44 = _42; // scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_45); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _45 = (*_43); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _45 = (*_41); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_46); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _46 = (*_44); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _46 = (*_42); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _12 = Le(move _45, move _46); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_46); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_45); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageDead(_44); // scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageDead(_43); // scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_15); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- StorageDead(_14); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- StorageDead(_13); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- _7 = move _12; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- StorageDead(_12); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- StorageDead(_8); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- switchInt(move _7) -> [0: bb2, otherwise: bb1]; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- }
-
- bb6: {
- _16 = const false; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- goto -> bb8; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- }
-
- bb7: {
- StorageLive(_21); // scope 1 at $DIR/slice_filter.rs:+0:70: +0:76
- StorageLive(_22); // scope 1 at $DIR/slice_filter.rs:+0:70: +0:71
- _22 = &_4; // scope 1 at $DIR/slice_filter.rs:+0:70: +0:71
- StorageLive(_23); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- StorageLive(_24); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- _24 = _6; // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- _23 = &_24; // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- _47 = deref_copy (*_22); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _48 = deref_copy (*_23); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageLive(_49); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _49 = _47; // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageLive(_50); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _50 = _48; // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_51); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _51 = (*_49); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _51 = (*_47); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_52); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _52 = (*_50); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _52 = (*_48); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _21 = Le(move _51, move _52); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_52); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_51); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageDead(_50); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageDead(_49); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_24); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- StorageDead(_23); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- StorageDead(_22); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- _16 = move _21; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- goto -> bb8; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- }
-
- bb8: {
- StorageDead(_21); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- StorageDead(_17); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- _0 = move _16; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- goto -> bb3; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- }
- }
-
diff --git a/tests/mir-opt/slice_filter.variant_a-{closure#0}.DestinationPropagation.diff b/tests/mir-opt/slice_filter.variant_a-{closure#0}.DestinationPropagation.diff
deleted file mode 100644
index afdcf5781..000000000
--- a/tests/mir-opt/slice_filter.variant_a-{closure#0}.DestinationPropagation.diff
+++ /dev/null
@@ -1,165 +0,0 @@
-- // MIR for `variant_a::{closure#0}` before DestinationPropagation
-+ // MIR for `variant_a::{closure#0}` after DestinationPropagation
-
- fn variant_a::{closure#0}(_1: &mut [closure@$DIR/slice_filter.rs:8:25: 8:39], _2: &&(usize, usize, usize, usize)) -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/slice_filter.rs:+0:40: +0:40
- let mut _3: bool; // in scope 0 at $DIR/slice_filter.rs:+0:40: +0:56
- let mut _4: bool; // in scope 0 at $DIR/slice_filter.rs:+0:40: +0:46
- let mut _5: bool; // in scope 0 at $DIR/slice_filter.rs:+0:50: +0:56
- let mut _6: bool; // in scope 0 at $DIR/slice_filter.rs:+0:60: +0:76
- let mut _7: bool; // in scope 0 at $DIR/slice_filter.rs:+0:60: +0:66
- let mut _8: bool; // in scope 0 at $DIR/slice_filter.rs:+0:70: +0:76
- let mut _9: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:38
- let mut _10: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:38
- let mut _11: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:38
- let mut _12: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:38
- scope 1 {
- debug a => &((*_9).0: usize); // in scope 1 at $DIR/slice_filter.rs:+0:27: +0:28
- debug b => &((*_10).1: usize); // in scope 1 at $DIR/slice_filter.rs:+0:30: +0:31
- debug c => &((*_11).2: usize); // in scope 1 at $DIR/slice_filter.rs:+0:33: +0:34
- debug d => &((*_12).3: usize); // in scope 1 at $DIR/slice_filter.rs:+0:36: +0:37
- scope 2 (inlined cmp::impls::<impl PartialOrd for &usize>::le) { // at $DIR/slice_filter.rs:8:40: 8:46
- debug self => &&((*_9).0: usize); // in scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug other => &&((*_11).2: usize); // in scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 3 (inlined cmp::impls::<impl PartialOrd for usize>::le) { // at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug self => &((*_9).0: usize); // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug other => &((*_11).2: usize); // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _13: usize; // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _14: usize; // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- }
- }
- scope 4 (inlined cmp::impls::<impl PartialOrd for &usize>::le) { // at $DIR/slice_filter.rs:8:60: 8:66
- debug self => &&((*_11).2: usize); // in scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug other => &&((*_9).0: usize); // in scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 5 (inlined cmp::impls::<impl PartialOrd for usize>::le) { // at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug self => &((*_11).2: usize); // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug other => &((*_9).0: usize); // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _15: usize; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _16: usize; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- }
- }
- scope 6 (inlined cmp::impls::<impl PartialOrd for &usize>::le) { // at $DIR/slice_filter.rs:8:50: 8:56
- debug self => &&((*_12).3: usize); // in scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug other => &&((*_10).1: usize); // in scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 7 (inlined cmp::impls::<impl PartialOrd for usize>::le) { // at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug self => &((*_12).3: usize); // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug other => &((*_10).1: usize); // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _17: usize; // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _18: usize; // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- }
- }
- scope 8 (inlined cmp::impls::<impl PartialOrd for &usize>::le) { // at $DIR/slice_filter.rs:8:70: 8:76
- debug self => &&((*_10).1: usize); // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug other => &&((*_12).3: usize); // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::le) { // at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug self => &((*_10).1: usize); // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- debug other => &((*_12).3: usize); // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _19: usize; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _20: usize; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- }
- }
- }
-
- bb0: {
- _9 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:27: +0:28
- _10 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:30: +0:31
- _11 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:33: +0:34
- _12 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:36: +0:37
-- StorageLive(_3); // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- StorageLive(_4); // scope 1 at $DIR/slice_filter.rs:+0:40: +0:46
- StorageLive(_13); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _13 = ((*_9).0: usize); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_14); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _14 = ((*_11).2: usize); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _4 = Le(move _13, move _14); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_14); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_13); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- switchInt(move _4) -> [0: bb4, otherwise: bb5]; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- }
-
- bb1: {
- _0 = const true; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- goto -> bb3; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- }
-
- bb2: {
-- StorageLive(_6); // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- StorageLive(_7); // scope 1 at $DIR/slice_filter.rs:+0:60: +0:66
- StorageLive(_15); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _15 = ((*_11).2: usize); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_16); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _16 = ((*_9).0: usize); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _7 = Le(move _15, move _16); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_16); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_15); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- switchInt(move _7) -> [0: bb6, otherwise: bb7]; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- }
-
- bb3: {
-- StorageDead(_6); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
-- StorageDead(_3); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- return; // scope 0 at $DIR/slice_filter.rs:+0:76: +0:76
- }
-
- bb4: {
-- StorageDead(_5); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- StorageDead(_4); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- goto -> bb2; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- }
-
- bb5: {
-- StorageLive(_5); // scope 1 at $DIR/slice_filter.rs:+0:50: +0:56
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:50: +0:56
- StorageLive(_17); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _17 = ((*_12).3: usize); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_18); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _18 = ((*_10).1: usize); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _5 = Le(move _17, move _18); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_18); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_17); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _3 = move _5; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
-- StorageDead(_5); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- StorageDead(_4); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
-- switchInt(move _3) -> [0: bb2, otherwise: bb1]; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
-+ switchInt(move _5) -> [0: bb2, otherwise: bb1]; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- }
-
- bb6: {
-- _6 = const false; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
-+ _0 = const false; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- goto -> bb8; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- }
-
- bb7: {
-- StorageLive(_8); // scope 1 at $DIR/slice_filter.rs:+0:70: +0:76
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:70: +0:76
- StorageLive(_19); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _19 = ((*_10).1: usize); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_20); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _20 = ((*_12).3: usize); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _8 = Le(move _19, move _20); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _0 = Le(move _19, move _20); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_20); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_19); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _6 = move _8; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- goto -> bb8; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- }
-
- bb8: {
-- StorageDead(_8); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- StorageDead(_7); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
-- _0 = move _6; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- goto -> bb3; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- }
- }
-
diff --git a/tests/mir-opt/slice_filter.variant_a-{closure#0}.ReferencePropagation.diff b/tests/mir-opt/slice_filter.variant_a-{closure#0}.ReferencePropagation.diff
deleted file mode 100644
index 2534eeef4..000000000
--- a/tests/mir-opt/slice_filter.variant_a-{closure#0}.ReferencePropagation.diff
+++ /dev/null
@@ -1,267 +0,0 @@
-- // MIR for `variant_a::{closure#0}` before ReferencePropagation
-+ // MIR for `variant_a::{closure#0}` after ReferencePropagation
-
- fn variant_a::{closure#0}(_1: &mut [closure@$DIR/slice_filter.rs:8:25: 8:39], _2: &&(usize, usize, usize, usize)) -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/slice_filter.rs:+0:40: +0:40
- let _3: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:27: +0:28
- let _4: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:30: +0:31
- let _5: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:33: +0:34
- let _6: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:36: +0:37
- let mut _7: bool; // in scope 0 at $DIR/slice_filter.rs:+0:40: +0:56
- let mut _8: bool; // in scope 0 at $DIR/slice_filter.rs:+0:40: +0:46
- let mut _9: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:40: +0:41
- let mut _10: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:45: +0:46
- let _11: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:45: +0:46
- let mut _12: bool; // in scope 0 at $DIR/slice_filter.rs:+0:50: +0:56
- let mut _13: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:50: +0:51
- let mut _14: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:55: +0:56
- let _15: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:55: +0:56
- let mut _16: bool; // in scope 0 at $DIR/slice_filter.rs:+0:60: +0:76
- let mut _17: bool; // in scope 0 at $DIR/slice_filter.rs:+0:60: +0:66
- let mut _18: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:60: +0:61
- let mut _19: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:65: +0:66
- let _20: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:65: +0:66
- let mut _21: bool; // in scope 0 at $DIR/slice_filter.rs:+0:70: +0:76
- let mut _22: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:70: +0:71
- let mut _23: &&usize; // in scope 0 at $DIR/slice_filter.rs:+0:75: +0:76
- let _24: &usize; // in scope 0 at $DIR/slice_filter.rs:+0:75: +0:76
- let mut _25: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:38
- let mut _26: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:38
- let mut _27: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:38
- let mut _28: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:38
- let mut _31: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _32: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _37: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _38: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _43: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _44: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _49: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _50: &usize; // in scope 0 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 1 {
-- debug a => _3; // in scope 1 at $DIR/slice_filter.rs:+0:27: +0:28
-- debug b => _4; // in scope 1 at $DIR/slice_filter.rs:+0:30: +0:31
-- debug c => _5; // in scope 1 at $DIR/slice_filter.rs:+0:33: +0:34
-- debug d => _6; // in scope 1 at $DIR/slice_filter.rs:+0:36: +0:37
-+ debug a => &((*_25).0: usize); // in scope 1 at $DIR/slice_filter.rs:+0:27: +0:28
-+ debug b => &((*_26).1: usize); // in scope 1 at $DIR/slice_filter.rs:+0:30: +0:31
-+ debug c => &((*_27).2: usize); // in scope 1 at $DIR/slice_filter.rs:+0:33: +0:34
-+ debug d => &((*_28).3: usize); // in scope 1 at $DIR/slice_filter.rs:+0:36: +0:37
- scope 2 (inlined cmp::impls::<impl PartialOrd for &usize>::le) { // at $DIR/slice_filter.rs:8:40: 8:46
-- debug self => _9; // in scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug other => _10; // in scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug self => &&((*_25).0: usize); // in scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug other => &&((*_27).2: usize); // in scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _29: &usize; // in scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _30: &usize; // in scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 3 (inlined cmp::impls::<impl PartialOrd for usize>::le) { // at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug self => _29; // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug other => _30; // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug self => &((*_25).0: usize); // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug other => &((*_27).2: usize); // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _33: usize; // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _34: usize; // in scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- }
- }
- scope 4 (inlined cmp::impls::<impl PartialOrd for &usize>::le) { // at $DIR/slice_filter.rs:8:60: 8:66
-- debug self => _18; // in scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug other => _19; // in scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug self => &&((*_27).2: usize); // in scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug other => &&((*_25).0: usize); // in scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _35: &usize; // in scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _36: &usize; // in scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 5 (inlined cmp::impls::<impl PartialOrd for usize>::le) { // at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug self => _35; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug other => _36; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug self => &((*_27).2: usize); // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug other => &((*_25).0: usize); // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _39: usize; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _40: usize; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- }
- }
- scope 6 (inlined cmp::impls::<impl PartialOrd for &usize>::le) { // at $DIR/slice_filter.rs:8:50: 8:56
-- debug self => _13; // in scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug other => _14; // in scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug self => &&((*_28).3: usize); // in scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug other => &&((*_26).1: usize); // in scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _41: &usize; // in scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _42: &usize; // in scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 7 (inlined cmp::impls::<impl PartialOrd for usize>::le) { // at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug self => _41; // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug other => _42; // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug self => &((*_28).3: usize); // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug other => &((*_26).1: usize); // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _45: usize; // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _46: usize; // in scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- }
- }
- scope 8 (inlined cmp::impls::<impl PartialOrd for &usize>::le) { // at $DIR/slice_filter.rs:8:70: 8:76
-- debug self => _22; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug other => _23; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug self => &&((*_26).1: usize); // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug other => &&((*_28).3: usize); // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _47: &usize; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _48: &usize; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::le) { // at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug self => _47; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- debug other => _48; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug self => &((*_26).1: usize); // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ debug other => &((*_28).3: usize); // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _51: usize; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- let mut _52: usize; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- }
- }
- }
-
- bb0: {
-- StorageLive(_3); // scope 0 at $DIR/slice_filter.rs:+0:27: +0:28
- _25 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:27: +0:28
-- _3 = &((*_25).0: usize); // scope 0 at $DIR/slice_filter.rs:+0:27: +0:28
-- StorageLive(_4); // scope 0 at $DIR/slice_filter.rs:+0:30: +0:31
- _26 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:30: +0:31
-- _4 = &((*_26).1: usize); // scope 0 at $DIR/slice_filter.rs:+0:30: +0:31
-- StorageLive(_5); // scope 0 at $DIR/slice_filter.rs:+0:33: +0:34
- _27 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:33: +0:34
-- _5 = &((*_27).2: usize); // scope 0 at $DIR/slice_filter.rs:+0:33: +0:34
-- StorageLive(_6); // scope 0 at $DIR/slice_filter.rs:+0:36: +0:37
- _28 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:36: +0:37
-- _6 = &((*_28).3: usize); // scope 0 at $DIR/slice_filter.rs:+0:36: +0:37
- StorageLive(_7); // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- StorageLive(_8); // scope 1 at $DIR/slice_filter.rs:+0:40: +0:46
-- StorageLive(_9); // scope 1 at $DIR/slice_filter.rs:+0:40: +0:41
-- _9 = &_3; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:41
-- StorageLive(_10); // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
-- StorageLive(_11); // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
-- _11 = _5; // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
-- _10 = &_11; // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
-- _29 = deref_copy (*_9); // scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _30 = deref_copy (*_10); // scope 2 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_33); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _33 = (*_29); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _33 = ((*_25).0: usize); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_34); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _34 = (*_30); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _34 = ((*_27).2: usize); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _8 = Le(move _33, move _34); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_34); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_33); // scope 3 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageDead(_11); // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
-- StorageDead(_10); // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
-- StorageDead(_9); // scope 1 at $DIR/slice_filter.rs:+0:45: +0:46
- switchInt(move _8) -> [0: bb4, otherwise: bb5]; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- }
-
- bb1: {
- _0 = const true; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- goto -> bb3; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- }
-
- bb2: {
- StorageLive(_16); // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- StorageLive(_17); // scope 1 at $DIR/slice_filter.rs:+0:60: +0:66
-- StorageLive(_18); // scope 1 at $DIR/slice_filter.rs:+0:60: +0:61
-- _18 = &_5; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:61
-- StorageLive(_19); // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
-- StorageLive(_20); // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
-- _20 = _3; // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
-- _19 = &_20; // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
-- _35 = deref_copy (*_18); // scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _36 = deref_copy (*_19); // scope 4 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_39); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _39 = (*_35); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _39 = ((*_27).2: usize); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_40); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _40 = (*_36); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _40 = ((*_25).0: usize); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _17 = Le(move _39, move _40); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_40); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_39); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageDead(_20); // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
-- StorageDead(_19); // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
-- StorageDead(_18); // scope 1 at $DIR/slice_filter.rs:+0:65: +0:66
- switchInt(move _17) -> [0: bb6, otherwise: bb7]; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- }
-
- bb3: {
- StorageDead(_16); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- StorageDead(_7); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
-- StorageDead(_6); // scope 0 at $DIR/slice_filter.rs:+0:75: +0:76
-- StorageDead(_5); // scope 0 at $DIR/slice_filter.rs:+0:75: +0:76
-- StorageDead(_4); // scope 0 at $DIR/slice_filter.rs:+0:75: +0:76
-- StorageDead(_3); // scope 0 at $DIR/slice_filter.rs:+0:75: +0:76
- return; // scope 0 at $DIR/slice_filter.rs:+0:76: +0:76
- }
-
- bb4: {
- _7 = const false; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- StorageDead(_12); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- StorageDead(_8); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- goto -> bb2; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- }
-
- bb5: {
- StorageLive(_12); // scope 1 at $DIR/slice_filter.rs:+0:50: +0:56
-- StorageLive(_13); // scope 1 at $DIR/slice_filter.rs:+0:50: +0:51
-- _13 = &_6; // scope 1 at $DIR/slice_filter.rs:+0:50: +0:51
-- StorageLive(_14); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
-- StorageLive(_15); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
-- _15 = _4; // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
-- _14 = &_15; // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
-- _41 = deref_copy (*_13); // scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _42 = deref_copy (*_14); // scope 6 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_45); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _45 = (*_41); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _45 = ((*_28).3: usize); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_46); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _46 = (*_42); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _46 = ((*_26).1: usize); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _12 = Le(move _45, move _46); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_46); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_45); // scope 7 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageDead(_15); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
-- StorageDead(_14); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
-- StorageDead(_13); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- _7 = move _12; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:56
- StorageDead(_12); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- StorageDead(_8); // scope 1 at $DIR/slice_filter.rs:+0:55: +0:56
- switchInt(move _7) -> [0: bb2, otherwise: bb1]; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- }
-
- bb6: {
- _16 = const false; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- goto -> bb8; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- }
-
- bb7: {
- StorageLive(_21); // scope 1 at $DIR/slice_filter.rs:+0:70: +0:76
-- StorageLive(_22); // scope 1 at $DIR/slice_filter.rs:+0:70: +0:71
-- _22 = &_4; // scope 1 at $DIR/slice_filter.rs:+0:70: +0:71
-- StorageLive(_23); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
-- StorageLive(_24); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
-- _24 = _6; // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
-- _23 = &_24; // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
-- _47 = deref_copy (*_22); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _48 = deref_copy (*_23); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_51); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _51 = (*_47); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _51 = ((*_26).1: usize); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageLive(_52); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- _52 = (*_48); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-+ _52 = ((*_28).3: usize); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- _21 = Le(move _51, move _52); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_52); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
- StorageDead(_51); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
-- StorageDead(_24); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
-- StorageDead(_23); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
-- StorageDead(_22); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- _16 = move _21; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- goto -> bb8; // scope 1 at $DIR/slice_filter.rs:+0:60: +0:76
- }
-
- bb8: {
- StorageDead(_21); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- StorageDead(_17); // scope 1 at $DIR/slice_filter.rs:+0:75: +0:76
- _0 = move _16; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- goto -> bb3; // scope 1 at $DIR/slice_filter.rs:+0:40: +0:76
- }
- }
-
diff --git a/tests/mir-opt/slice_filter.variant_b-{closure#0}.CopyProp.diff b/tests/mir-opt/slice_filter.variant_b-{closure#0}.CopyProp.diff
deleted file mode 100644
index 5e4bdbdfa..000000000
--- a/tests/mir-opt/slice_filter.variant_b-{closure#0}.CopyProp.diff
+++ /dev/null
@@ -1,139 +0,0 @@
-- // MIR for `variant_b::{closure#0}` before CopyProp
-+ // MIR for `variant_b::{closure#0}` after CopyProp
-
- fn variant_b::{closure#0}(_1: &mut [closure@$DIR/slice_filter.rs:12:25: 12:41], _2: &&(usize, usize, usize, usize)) -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/slice_filter.rs:+0:42: +0:42
- let _3: usize; // in scope 0 at $DIR/slice_filter.rs:+0:29: +0:30
- let _4: usize; // in scope 0 at $DIR/slice_filter.rs:+0:32: +0:33
- let _5: usize; // in scope 0 at $DIR/slice_filter.rs:+0:35: +0:36
- let _6: usize; // in scope 0 at $DIR/slice_filter.rs:+0:38: +0:39
- let mut _7: bool; // in scope 0 at $DIR/slice_filter.rs:+0:42: +0:58
- let mut _8: bool; // in scope 0 at $DIR/slice_filter.rs:+0:42: +0:48
- let mut _9: usize; // in scope 0 at $DIR/slice_filter.rs:+0:42: +0:43
- let mut _10: usize; // in scope 0 at $DIR/slice_filter.rs:+0:47: +0:48
- let mut _11: bool; // in scope 0 at $DIR/slice_filter.rs:+0:52: +0:58
- let mut _12: usize; // in scope 0 at $DIR/slice_filter.rs:+0:52: +0:53
- let mut _13: usize; // in scope 0 at $DIR/slice_filter.rs:+0:57: +0:58
- let mut _14: bool; // in scope 0 at $DIR/slice_filter.rs:+0:62: +0:78
- let mut _15: bool; // in scope 0 at $DIR/slice_filter.rs:+0:62: +0:68
- let mut _16: usize; // in scope 0 at $DIR/slice_filter.rs:+0:62: +0:63
- let mut _17: usize; // in scope 0 at $DIR/slice_filter.rs:+0:67: +0:68
- let mut _18: bool; // in scope 0 at $DIR/slice_filter.rs:+0:72: +0:78
- let mut _19: usize; // in scope 0 at $DIR/slice_filter.rs:+0:72: +0:73
- let mut _20: usize; // in scope 0 at $DIR/slice_filter.rs:+0:77: +0:78
- let mut _21: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:40
- let mut _22: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:40
- let mut _23: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:40
- let mut _24: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:40
- scope 1 {
- debug a => _3; // in scope 1 at $DIR/slice_filter.rs:+0:29: +0:30
- debug b => _4; // in scope 1 at $DIR/slice_filter.rs:+0:32: +0:33
- debug c => _5; // in scope 1 at $DIR/slice_filter.rs:+0:35: +0:36
- debug d => _6; // in scope 1 at $DIR/slice_filter.rs:+0:38: +0:39
- }
-
- bb0: {
-- StorageLive(_3); // scope 0 at $DIR/slice_filter.rs:+0:29: +0:30
- _21 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:29: +0:30
- _3 = ((*_21).0: usize); // scope 0 at $DIR/slice_filter.rs:+0:29: +0:30
-- StorageLive(_4); // scope 0 at $DIR/slice_filter.rs:+0:32: +0:33
- _22 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:32: +0:33
- _4 = ((*_22).1: usize); // scope 0 at $DIR/slice_filter.rs:+0:32: +0:33
-- StorageLive(_5); // scope 0 at $DIR/slice_filter.rs:+0:35: +0:36
- _23 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:35: +0:36
- _5 = ((*_23).2: usize); // scope 0 at $DIR/slice_filter.rs:+0:35: +0:36
-- StorageLive(_6); // scope 0 at $DIR/slice_filter.rs:+0:38: +0:39
- _24 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:38: +0:39
- _6 = ((*_24).3: usize); // scope 0 at $DIR/slice_filter.rs:+0:38: +0:39
- StorageLive(_7); // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- StorageLive(_8); // scope 1 at $DIR/slice_filter.rs:+0:42: +0:48
-- StorageLive(_9); // scope 1 at $DIR/slice_filter.rs:+0:42: +0:43
-- _9 = _3; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:43
-- StorageLive(_10); // scope 1 at $DIR/slice_filter.rs:+0:47: +0:48
-- _10 = _5; // scope 1 at $DIR/slice_filter.rs:+0:47: +0:48
-- _8 = Le(move _9, move _10); // scope 1 at $DIR/slice_filter.rs:+0:42: +0:48
-- StorageDead(_10); // scope 1 at $DIR/slice_filter.rs:+0:47: +0:48
-- StorageDead(_9); // scope 1 at $DIR/slice_filter.rs:+0:47: +0:48
-+ _8 = Le(_3, _5); // scope 1 at $DIR/slice_filter.rs:+0:42: +0:48
- switchInt(move _8) -> [0: bb4, otherwise: bb5]; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- }
-
- bb1: {
- _0 = const true; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- goto -> bb3; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- }
-
- bb2: {
- StorageLive(_14); // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- StorageLive(_15); // scope 1 at $DIR/slice_filter.rs:+0:62: +0:68
-- StorageLive(_16); // scope 1 at $DIR/slice_filter.rs:+0:62: +0:63
-- _16 = _5; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:63
-- StorageLive(_17); // scope 1 at $DIR/slice_filter.rs:+0:67: +0:68
-- _17 = _3; // scope 1 at $DIR/slice_filter.rs:+0:67: +0:68
-- _15 = Le(move _16, move _17); // scope 1 at $DIR/slice_filter.rs:+0:62: +0:68
-- StorageDead(_17); // scope 1 at $DIR/slice_filter.rs:+0:67: +0:68
-- StorageDead(_16); // scope 1 at $DIR/slice_filter.rs:+0:67: +0:68
-+ _15 = Le(_5, _3); // scope 1 at $DIR/slice_filter.rs:+0:62: +0:68
- switchInt(move _15) -> [0: bb6, otherwise: bb7]; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- }
-
- bb3: {
- StorageDead(_14); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
- StorageDead(_7); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
-- StorageDead(_6); // scope 0 at $DIR/slice_filter.rs:+0:77: +0:78
-- StorageDead(_5); // scope 0 at $DIR/slice_filter.rs:+0:77: +0:78
-- StorageDead(_4); // scope 0 at $DIR/slice_filter.rs:+0:77: +0:78
-- StorageDead(_3); // scope 0 at $DIR/slice_filter.rs:+0:77: +0:78
- return; // scope 0 at $DIR/slice_filter.rs:+0:78: +0:78
- }
-
- bb4: {
- _7 = const false; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- StorageDead(_11); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
- StorageDead(_8); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
- goto -> bb2; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- }
-
- bb5: {
- StorageLive(_11); // scope 1 at $DIR/slice_filter.rs:+0:52: +0:58
-- StorageLive(_12); // scope 1 at $DIR/slice_filter.rs:+0:52: +0:53
-- _12 = _6; // scope 1 at $DIR/slice_filter.rs:+0:52: +0:53
-- StorageLive(_13); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
-- _13 = _4; // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
-- _11 = Le(move _12, move _13); // scope 1 at $DIR/slice_filter.rs:+0:52: +0:58
-- StorageDead(_13); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
-- StorageDead(_12); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
-+ _11 = Le(_6, _4); // scope 1 at $DIR/slice_filter.rs:+0:52: +0:58
- _7 = move _11; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- StorageDead(_11); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
- StorageDead(_8); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
- switchInt(move _7) -> [0: bb2, otherwise: bb1]; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- }
-
- bb6: {
- _14 = const false; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- goto -> bb8; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- }
-
- bb7: {
- StorageLive(_18); // scope 1 at $DIR/slice_filter.rs:+0:72: +0:78
-- StorageLive(_19); // scope 1 at $DIR/slice_filter.rs:+0:72: +0:73
-- _19 = _4; // scope 1 at $DIR/slice_filter.rs:+0:72: +0:73
-- StorageLive(_20); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
-- _20 = _6; // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
-- _18 = Le(move _19, move _20); // scope 1 at $DIR/slice_filter.rs:+0:72: +0:78
-- StorageDead(_20); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
-- StorageDead(_19); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
-+ _18 = Le(_4, _6); // scope 1 at $DIR/slice_filter.rs:+0:72: +0:78
- _14 = move _18; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- goto -> bb8; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- }
-
- bb8: {
- StorageDead(_18); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
- StorageDead(_15); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
- _0 = move _14; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- goto -> bb3; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- }
- }
-
diff --git a/tests/mir-opt/slice_filter.variant_b-{closure#0}.DestinationPropagation.diff b/tests/mir-opt/slice_filter.variant_b-{closure#0}.DestinationPropagation.diff
deleted file mode 100644
index 45af6600c..000000000
--- a/tests/mir-opt/slice_filter.variant_b-{closure#0}.DestinationPropagation.diff
+++ /dev/null
@@ -1,109 +0,0 @@
-- // MIR for `variant_b::{closure#0}` before DestinationPropagation
-+ // MIR for `variant_b::{closure#0}` after DestinationPropagation
-
- fn variant_b::{closure#0}(_1: &mut [closure@$DIR/slice_filter.rs:12:25: 12:41], _2: &&(usize, usize, usize, usize)) -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/slice_filter.rs:+0:42: +0:42
- let _3: usize; // in scope 0 at $DIR/slice_filter.rs:+0:29: +0:30
- let _4: usize; // in scope 0 at $DIR/slice_filter.rs:+0:32: +0:33
- let _5: usize; // in scope 0 at $DIR/slice_filter.rs:+0:35: +0:36
- let _6: usize; // in scope 0 at $DIR/slice_filter.rs:+0:38: +0:39
- let mut _7: bool; // in scope 0 at $DIR/slice_filter.rs:+0:42: +0:58
- let mut _8: bool; // in scope 0 at $DIR/slice_filter.rs:+0:42: +0:48
- let mut _9: bool; // in scope 0 at $DIR/slice_filter.rs:+0:52: +0:58
- let mut _10: bool; // in scope 0 at $DIR/slice_filter.rs:+0:62: +0:78
- let mut _11: bool; // in scope 0 at $DIR/slice_filter.rs:+0:62: +0:68
- let mut _12: bool; // in scope 0 at $DIR/slice_filter.rs:+0:72: +0:78
- let mut _13: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:40
- let mut _14: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:40
- let mut _15: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:40
- let mut _16: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:40
- scope 1 {
- debug a => _3; // in scope 1 at $DIR/slice_filter.rs:+0:29: +0:30
- debug b => _4; // in scope 1 at $DIR/slice_filter.rs:+0:32: +0:33
- debug c => _5; // in scope 1 at $DIR/slice_filter.rs:+0:35: +0:36
- debug d => _6; // in scope 1 at $DIR/slice_filter.rs:+0:38: +0:39
- }
-
- bb0: {
- _13 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:29: +0:30
- _3 = ((*_13).0: usize); // scope 0 at $DIR/slice_filter.rs:+0:29: +0:30
- _14 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:32: +0:33
- _4 = ((*_14).1: usize); // scope 0 at $DIR/slice_filter.rs:+0:32: +0:33
- _15 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:35: +0:36
- _5 = ((*_15).2: usize); // scope 0 at $DIR/slice_filter.rs:+0:35: +0:36
- _16 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:38: +0:39
- _6 = ((*_16).3: usize); // scope 0 at $DIR/slice_filter.rs:+0:38: +0:39
-- StorageLive(_7); // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- StorageLive(_8); // scope 1 at $DIR/slice_filter.rs:+0:42: +0:48
- _8 = Le(_3, _5); // scope 1 at $DIR/slice_filter.rs:+0:42: +0:48
- switchInt(move _8) -> [0: bb4, otherwise: bb5]; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- }
-
- bb1: {
- _0 = const true; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- goto -> bb3; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- }
-
- bb2: {
-- StorageLive(_10); // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- StorageLive(_11); // scope 1 at $DIR/slice_filter.rs:+0:62: +0:68
- _11 = Le(_5, _3); // scope 1 at $DIR/slice_filter.rs:+0:62: +0:68
- switchInt(move _11) -> [0: bb6, otherwise: bb7]; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- }
-
- bb3: {
-- StorageDead(_10); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
-- StorageDead(_7); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
- return; // scope 0 at $DIR/slice_filter.rs:+0:78: +0:78
- }
-
- bb4: {
-- StorageDead(_9); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
- StorageDead(_8); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
- goto -> bb2; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- }
-
- bb5: {
-- StorageLive(_9); // scope 1 at $DIR/slice_filter.rs:+0:52: +0:58
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:52: +0:58
- _9 = Le(_6, _4); // scope 1 at $DIR/slice_filter.rs:+0:52: +0:58
-- _7 = move _9; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
-- StorageDead(_9); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
- StorageDead(_8); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
-- switchInt(move _7) -> [0: bb2, otherwise: bb1]; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
-+ switchInt(move _9) -> [0: bb2, otherwise: bb1]; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- }
-
- bb6: {
-- _10 = const false; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
-+ _0 = const false; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- goto -> bb8; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- }
-
- bb7: {
-- StorageLive(_12); // scope 1 at $DIR/slice_filter.rs:+0:72: +0:78
-- _12 = Le(_4, _6); // scope 1 at $DIR/slice_filter.rs:+0:72: +0:78
-- _10 = move _12; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:72: +0:78
-+ _0 = Le(_4, _6); // scope 1 at $DIR/slice_filter.rs:+0:72: +0:78
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- goto -> bb8; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- }
-
- bb8: {
-- StorageDead(_12); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
- StorageDead(_11); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
-- _0 = move _10; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
-+ nop; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- goto -> bb3; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- }
- }
-
diff --git a/tests/mir-opt/slice_filter.variant_b-{closure#0}.ReferencePropagation.diff b/tests/mir-opt/slice_filter.variant_b-{closure#0}.ReferencePropagation.diff
deleted file mode 100644
index d1241c6b0..000000000
--- a/tests/mir-opt/slice_filter.variant_b-{closure#0}.ReferencePropagation.diff
+++ /dev/null
@@ -1,103 +0,0 @@
-- // MIR for `variant_b::{closure#0}` before ReferencePropagation
-+ // MIR for `variant_b::{closure#0}` after ReferencePropagation
-
- fn variant_b::{closure#0}(_1: &mut [closure@$DIR/slice_filter.rs:12:25: 12:41], _2: &&(usize, usize, usize, usize)) -> bool {
- let mut _0: bool; // return place in scope 0 at $DIR/slice_filter.rs:+0:42: +0:42
- let _3: usize; // in scope 0 at $DIR/slice_filter.rs:+0:29: +0:30
- let _4: usize; // in scope 0 at $DIR/slice_filter.rs:+0:32: +0:33
- let _5: usize; // in scope 0 at $DIR/slice_filter.rs:+0:35: +0:36
- let _6: usize; // in scope 0 at $DIR/slice_filter.rs:+0:38: +0:39
- let mut _7: bool; // in scope 0 at $DIR/slice_filter.rs:+0:42: +0:58
- let mut _8: bool; // in scope 0 at $DIR/slice_filter.rs:+0:42: +0:48
- let mut _9: usize; // in scope 0 at $DIR/slice_filter.rs:+0:42: +0:43
- let mut _10: usize; // in scope 0 at $DIR/slice_filter.rs:+0:47: +0:48
- let mut _11: bool; // in scope 0 at $DIR/slice_filter.rs:+0:52: +0:58
- let mut _12: usize; // in scope 0 at $DIR/slice_filter.rs:+0:52: +0:53
- let mut _13: usize; // in scope 0 at $DIR/slice_filter.rs:+0:57: +0:58
- let mut _14: bool; // in scope 0 at $DIR/slice_filter.rs:+0:62: +0:78
- let mut _15: bool; // in scope 0 at $DIR/slice_filter.rs:+0:62: +0:68
- let mut _16: usize; // in scope 0 at $DIR/slice_filter.rs:+0:62: +0:63
- let mut _17: usize; // in scope 0 at $DIR/slice_filter.rs:+0:67: +0:68
- let mut _18: bool; // in scope 0 at $DIR/slice_filter.rs:+0:72: +0:78
- let mut _19: usize; // in scope 0 at $DIR/slice_filter.rs:+0:72: +0:73
- let mut _20: usize; // in scope 0 at $DIR/slice_filter.rs:+0:77: +0:78
- let mut _21: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:40
- let mut _22: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:40
- let mut _23: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:40
- let mut _24: &(usize, usize, usize, usize); // in scope 0 at $DIR/slice_filter.rs:+0:26: +0:40
- scope 1 {
- debug a => _3; // in scope 1 at $DIR/slice_filter.rs:+0:29: +0:30
- debug b => _4; // in scope 1 at $DIR/slice_filter.rs:+0:32: +0:33
- debug c => _5; // in scope 1 at $DIR/slice_filter.rs:+0:35: +0:36
- debug d => _6; // in scope 1 at $DIR/slice_filter.rs:+0:38: +0:39
- }
-
- bb0: {
- _21 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:29: +0:30
- _3 = ((*_21).0: usize); // scope 0 at $DIR/slice_filter.rs:+0:29: +0:30
- _22 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:32: +0:33
- _4 = ((*_22).1: usize); // scope 0 at $DIR/slice_filter.rs:+0:32: +0:33
- _23 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:35: +0:36
- _5 = ((*_23).2: usize); // scope 0 at $DIR/slice_filter.rs:+0:35: +0:36
- _24 = deref_copy (*_2); // scope 0 at $DIR/slice_filter.rs:+0:38: +0:39
- _6 = ((*_24).3: usize); // scope 0 at $DIR/slice_filter.rs:+0:38: +0:39
- StorageLive(_7); // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- StorageLive(_8); // scope 1 at $DIR/slice_filter.rs:+0:42: +0:48
- _8 = Le(_3, _5); // scope 1 at $DIR/slice_filter.rs:+0:42: +0:48
- switchInt(move _8) -> [0: bb4, otherwise: bb5]; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- }
-
- bb1: {
- _0 = const true; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- goto -> bb3; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- }
-
- bb2: {
- StorageLive(_14); // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- StorageLive(_15); // scope 1 at $DIR/slice_filter.rs:+0:62: +0:68
- _15 = Le(_5, _3); // scope 1 at $DIR/slice_filter.rs:+0:62: +0:68
- switchInt(move _15) -> [0: bb6, otherwise: bb7]; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- }
-
- bb3: {
- StorageDead(_14); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
- StorageDead(_7); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
- return; // scope 0 at $DIR/slice_filter.rs:+0:78: +0:78
- }
-
- bb4: {
- _7 = const false; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- StorageDead(_11); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
- StorageDead(_8); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
- goto -> bb2; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- }
-
- bb5: {
- StorageLive(_11); // scope 1 at $DIR/slice_filter.rs:+0:52: +0:58
- _11 = Le(_6, _4); // scope 1 at $DIR/slice_filter.rs:+0:52: +0:58
- _7 = move _11; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:58
- StorageDead(_11); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
- StorageDead(_8); // scope 1 at $DIR/slice_filter.rs:+0:57: +0:58
- switchInt(move _7) -> [0: bb2, otherwise: bb1]; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- }
-
- bb6: {
- _14 = const false; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- goto -> bb8; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- }
-
- bb7: {
- StorageLive(_18); // scope 1 at $DIR/slice_filter.rs:+0:72: +0:78
- _18 = Le(_4, _6); // scope 1 at $DIR/slice_filter.rs:+0:72: +0:78
- _14 = move _18; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- goto -> bb8; // scope 1 at $DIR/slice_filter.rs:+0:62: +0:78
- }
-
- bb8: {
- StorageDead(_18); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
- StorageDead(_15); // scope 1 at $DIR/slice_filter.rs:+0:77: +0:78
- _0 = move _14; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- goto -> bb3; // scope 1 at $DIR/slice_filter.rs:+0:42: +0:78
- }
- }
-
diff --git a/tests/mir-opt/spanview_block.main.built.after.html b/tests/mir-opt/spanview_block.main.built.after.html
index b962d80c5..56f4e4f93 100644
--- a/tests/mir-opt/spanview_block.main.built.after.html
+++ b/tests/mir-opt/spanview_block.main.built.after.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
-<html>
+<html lang="en">
<head>
+<meta charset="utf-8">
<title>spanview_block.main.built.after</title>
<style>
.line {
diff --git a/tests/mir-opt/spanview_statement.main.built.after.html b/tests/mir-opt/spanview_statement.main.built.after.html
index 43bff7d09..91af08d80 100644
--- a/tests/mir-opt/spanview_statement.main.built.after.html
+++ b/tests/mir-opt/spanview_statement.main.built.after.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
-<html>
+<html lang="en">
<head>
+<meta charset="utf-8">
<title>spanview_statement.main.built.after</title>
<style>
.line {
diff --git a/tests/mir-opt/spanview_terminator.main.built.after.html b/tests/mir-opt/spanview_terminator.main.built.after.html
index aa7e44c15..1f42faedd 100644
--- a/tests/mir-opt/spanview_terminator.main.built.after.html
+++ b/tests/mir-opt/spanview_terminator.main.built.after.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
-<html>
+<html lang="en">
<head>
+<meta charset="utf-8">
<title>spanview_terminator.main.built.after</title>
<style>
.line {
diff --git a/tests/mir-opt/sroa/lifetimes.foo.ScalarReplacementOfAggregates.diff b/tests/mir-opt/sroa/lifetimes.foo.ScalarReplacementOfAggregates.diff
index 9bda5f575..bb14b909a 100644
--- a/tests/mir-opt/sroa/lifetimes.foo.ScalarReplacementOfAggregates.diff
+++ b/tests/mir-opt/sroa/lifetimes.foo.ScalarReplacementOfAggregates.diff
@@ -2,213 +2,191 @@
+ // MIR for `foo` after ScalarReplacementOfAggregates
fn foo() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/lifetimes.rs:+0:18: +0:18
- let _1: Foo<T>; // in scope 0 at $DIR/lifetimes.rs:+1:9: +1:12
- let mut _2: std::result::Result<std::boxed::Box<dyn std::fmt::Display>, <T as Err>::Err>; // in scope 0 at $DIR/lifetimes.rs:+2:12: +2:31
- let mut _3: std::boxed::Box<dyn std::fmt::Display>; // in scope 0 at $DIR/lifetimes.rs:+2:15: +2:30
- let mut _4: std::boxed::Box<u32>; // in scope 0 at $DIR/lifetimes.rs:+2:15: +2:30
- let mut _7: isize; // in scope 0 at $DIR/lifetimes.rs:+9:12: +9:17
- let _9: (); // in scope 0 at $SRC_DIR/std/src/macros.rs:LL:COL
- let _10: (); // in scope 0 at $SRC_DIR/std/src/macros.rs:LL:COL
- let mut _11: std::fmt::Arguments<'_>; // in scope 0 at $SRC_DIR/std/src/macros.rs:LL:COL
- let mut _12: &[&str]; // in scope 0 at $DIR/lifetimes.rs:+10:19: +10:28
- let mut _13: &[&str; 3]; // in scope 0 at $DIR/lifetimes.rs:+10:19: +10:28
- let _14: &[&str; 3]; // in scope 0 at $DIR/lifetimes.rs:+10:19: +10:28
- let _15: [&str; 3]; // in scope 0 at $DIR/lifetimes.rs:+10:19: +10:28
- let mut _16: &[core::fmt::rt::Argument<'_>]; // in scope 0 at $SRC_DIR/std/src/macros.rs:LL:COL
- let mut _17: &[core::fmt::rt::Argument<'_>; 2]; // in scope 0 at $SRC_DIR/std/src/macros.rs:LL:COL
- let _18: &[core::fmt::rt::Argument<'_>; 2]; // in scope 0 at $SRC_DIR/std/src/macros.rs:LL:COL
- let _19: [core::fmt::rt::Argument<'_>; 2]; // in scope 0 at $SRC_DIR/std/src/macros.rs:LL:COL
- let mut _20: core::fmt::rt::Argument<'_>; // in scope 0 at $DIR/lifetimes.rs:+10:20: +10:23
- let mut _21: &std::boxed::Box<dyn std::fmt::Display>; // in scope 0 at $DIR/lifetimes.rs:+10:20: +10:23
- let _22: &std::boxed::Box<dyn std::fmt::Display>; // in scope 0 at $DIR/lifetimes.rs:+10:20: +10:23
- let mut _23: core::fmt::rt::Argument<'_>; // in scope 0 at $DIR/lifetimes.rs:+10:24: +10:27
- let mut _24: &u32; // in scope 0 at $DIR/lifetimes.rs:+10:24: +10:27
- let _25: &u32; // in scope 0 at $DIR/lifetimes.rs:+10:24: +10:27
- let mut _27: bool; // in scope 0 at $DIR/lifetimes.rs:+12:1: +12:2
- let mut _28: isize; // in scope 0 at $DIR/lifetimes.rs:+12:1: +12:2
- let mut _29: isize; // in scope 0 at $DIR/lifetimes.rs:+12:1: +12:2
- let mut _30: isize; // in scope 0 at $DIR/lifetimes.rs:+12:1: +12:2
-+ let _31: std::result::Result<std::boxed::Box<dyn std::fmt::Display>, <T as Err>::Err>; // in scope 0 at $DIR/lifetimes.rs:+1:9: +1:12
-+ let _32: u32; // in scope 0 at $DIR/lifetimes.rs:+1:9: +1:12
+ let mut _0: ();
+ let _1: Foo<T>;
+ let mut _2: std::result::Result<std::boxed::Box<dyn std::fmt::Display>, <T as Err>::Err>;
+ let mut _3: std::boxed::Box<dyn std::fmt::Display>;
+ let mut _4: std::boxed::Box<u32>;
+ let mut _7: isize;
+ let _9: ();
+ let _10: ();
+ let mut _11: std::fmt::Arguments<'_>;
+ let mut _12: &[&str];
+ let mut _13: &[&str; 3];
+ let _14: &[&str; 3];
+ let _15: [&str; 3];
+ let mut _16: &[core::fmt::rt::Argument<'_>];
+ let mut _17: &[core::fmt::rt::Argument<'_>; 2];
+ let _18: &[core::fmt::rt::Argument<'_>; 2];
+ let _19: [core::fmt::rt::Argument<'_>; 2];
+ let mut _20: core::fmt::rt::Argument<'_>;
+ let mut _21: &std::boxed::Box<dyn std::fmt::Display>;
+ let _22: &std::boxed::Box<dyn std::fmt::Display>;
+ let mut _23: core::fmt::rt::Argument<'_>;
+ let mut _24: &u32;
+ let _25: &u32;
+ let mut _27: bool;
+ let mut _28: isize;
+ let mut _29: isize;
+ let mut _30: isize;
++ let _31: std::result::Result<std::boxed::Box<dyn std::fmt::Display>, <T as Err>::Err>;
++ let _32: u32;
scope 1 {
-- debug foo => _1; // in scope 1 at $DIR/lifetimes.rs:+1:9: +1:12
-+ debug foo => Foo<T>{ .0 => _31, .1 => _32, }; // in scope 1 at $DIR/lifetimes.rs:+1:9: +1:12
- let _5: std::result::Result<std::boxed::Box<dyn std::fmt::Display>, <T as Err>::Err>; // in scope 1 at $DIR/lifetimes.rs:+6:9: +6:10
+- debug foo => _1;
++ debug foo => Foo<T>{ .0 => _31, .1 => _32, };
+ let _5: std::result::Result<std::boxed::Box<dyn std::fmt::Display>, <T as Err>::Err>;
scope 2 {
- debug x => _5; // in scope 2 at $DIR/lifetimes.rs:+6:9: +6:10
- let _6: u32; // in scope 2 at $DIR/lifetimes.rs:+7:9: +7:10
+ debug x => _5;
+ let _6: u32;
scope 3 {
- debug y => _6; // in scope 3 at $DIR/lifetimes.rs:+7:9: +7:10
+ debug y => _6;
scope 4 {
- debug x => _8; // in scope 4 at $DIR/lifetimes.rs:+9:15: +9:16
- let _8: std::boxed::Box<dyn std::fmt::Display>; // in scope 4 at $DIR/lifetimes.rs:+9:15: +9:16
- let mut _26: &[&str; 3]; // in scope 4 at $DIR/lifetimes.rs:+10:19: +10:28
+ debug x => _8;
+ let _8: std::boxed::Box<dyn std::fmt::Display>;
+ let mut _26: &[&str; 3];
}
}
}
}
bb0: {
- _27 = const false; // scope 0 at $DIR/lifetimes.rs:+1:9: +1:12
-- StorageLive(_1); // scope 0 at $DIR/lifetimes.rs:+1:9: +1:12
-+ StorageLive(_31); // scope 0 at $DIR/lifetimes.rs:+1:9: +1:12
-+ StorageLive(_32); // scope 0 at $DIR/lifetimes.rs:+1:9: +1:12
-+ nop; // scope 0 at $DIR/lifetimes.rs:+1:9: +1:12
- StorageLive(_2); // scope 0 at $DIR/lifetimes.rs:+2:12: +2:31
- StorageLive(_3); // scope 0 at $DIR/lifetimes.rs:+2:15: +2:30
- StorageLive(_4); // scope 0 at $DIR/lifetimes.rs:+2:15: +2:30
- _4 = Box::<u32>::new(const 5_u32) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lifetimes.rs:+2:15: +2:30
- // mir::Constant
- // + span: $DIR/lifetimes.rs:19:15: 19:23
- // + user_ty: UserType(1)
- // + literal: Const { ty: fn(u32) -> Box<u32> {Box::<u32>::new}, val: Value(<ZST>) }
+ _27 = const false;
+- StorageLive(_1);
++ StorageLive(_31);
++ StorageLive(_32);
++ nop;
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = Box::<u32>::new(const 5_u32) -> [return: bb1, unwind unreachable];
}
bb1: {
- _3 = move _4 as std::boxed::Box<dyn std::fmt::Display> (Pointer(Unsize)); // scope 0 at $DIR/lifetimes.rs:+2:15: +2:30
- StorageDead(_4); // scope 0 at $DIR/lifetimes.rs:+2:29: +2:30
- _2 = Result::<Box<dyn std::fmt::Display>, <T as Err>::Err>::Ok(move _3); // scope 0 at $DIR/lifetimes.rs:+2:12: +2:31
- StorageDead(_3); // scope 0 at $DIR/lifetimes.rs:+2:30: +2:31
-- _1 = Foo::<T> { x: move _2, y: const 7_u32 }; // scope 0 at $DIR/lifetimes.rs:+1:23: +4:6
-+ _31 = move _2; // scope 0 at $DIR/lifetimes.rs:+1:23: +4:6
-+ _32 = const 7_u32; // scope 0 at $DIR/lifetimes.rs:+1:23: +4:6
-+ nop; // scope 0 at $DIR/lifetimes.rs:+1:23: +4:6
- StorageDead(_2); // scope 0 at $DIR/lifetimes.rs:+4:5: +4:6
- StorageLive(_5); // scope 1 at $DIR/lifetimes.rs:+6:9: +6:10
- _27 = const true; // scope 1 at $DIR/lifetimes.rs:+6:13: +6:18
-- _5 = move (_1.0: std::result::Result<std::boxed::Box<dyn std::fmt::Display>, <T as Err>::Err>); // scope 1 at $DIR/lifetimes.rs:+6:13: +6:18
-+ _5 = move _31; // scope 1 at $DIR/lifetimes.rs:+6:13: +6:18
- StorageLive(_6); // scope 2 at $DIR/lifetimes.rs:+7:9: +7:10
-- _6 = (_1.1: u32); // scope 2 at $DIR/lifetimes.rs:+7:13: +7:18
-+ _6 = _32; // scope 2 at $DIR/lifetimes.rs:+7:13: +7:18
- _7 = discriminant(_5); // scope 4 at $DIR/lifetimes.rs:+9:12: +9:17
- switchInt(move _7) -> [0: bb2, otherwise: bb7]; // scope 4 at $DIR/lifetimes.rs:+9:12: +9:17
+ _3 = move _4 as std::boxed::Box<dyn std::fmt::Display> (PointerCoercion(Unsize));
+ StorageDead(_4);
+ _2 = Result::<Box<dyn std::fmt::Display>, <T as Err>::Err>::Ok(move _3);
+ StorageDead(_3);
+- _1 = Foo::<T> { x: move _2, y: const 7_u32 };
++ _31 = move _2;
++ _32 = const 7_u32;
++ nop;
+ StorageDead(_2);
+ StorageLive(_5);
+ _27 = const true;
+- _5 = move (_1.0: std::result::Result<std::boxed::Box<dyn std::fmt::Display>, <T as Err>::Err>);
++ _5 = move _31;
+ StorageLive(_6);
+- _6 = (_1.1: u32);
++ _6 = _32;
+ _7 = discriminant(_5);
+ switchInt(move _7) -> [0: bb2, otherwise: bb7];
}
bb2: {
- StorageLive(_8); // scope 4 at $DIR/lifetimes.rs:+9:15: +9:16
- _27 = const false; // scope 4 at $DIR/lifetimes.rs:+9:15: +9:16
- _8 = move ((_5 as Ok).0: std::boxed::Box<dyn std::fmt::Display>); // scope 4 at $DIR/lifetimes.rs:+9:15: +9:16
- StorageLive(_9); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageLive(_10); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageLive(_11); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageLive(_12); // scope 4 at $DIR/lifetimes.rs:+10:19: +10:28
- StorageLive(_13); // scope 4 at $DIR/lifetimes.rs:+10:19: +10:28
- StorageLive(_14); // scope 4 at $DIR/lifetimes.rs:+10:19: +10:28
- _26 = const _; // scope 4 at $DIR/lifetimes.rs:+10:19: +10:28
- // mir::Constant
- // + span: $DIR/lifetimes.rs:27:19: 27:28
- // + literal: Const { ty: &[&str; 3], val: Unevaluated(foo, [T], Some(promoted[0])) }
- _14 = &(*_26); // scope 4 at $DIR/lifetimes.rs:+10:19: +10:28
- _13 = &(*_14); // scope 4 at $DIR/lifetimes.rs:+10:19: +10:28
- _12 = move _13 as &[&str] (Pointer(Unsize)); // scope 4 at $DIR/lifetimes.rs:+10:19: +10:28
- StorageDead(_13); // scope 4 at $DIR/lifetimes.rs:+10:27: +10:28
- StorageLive(_16); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageLive(_17); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageLive(_18); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageLive(_19); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageLive(_20); // scope 4 at $DIR/lifetimes.rs:+10:20: +10:23
- StorageLive(_21); // scope 4 at $DIR/lifetimes.rs:+10:20: +10:23
- StorageLive(_22); // scope 4 at $DIR/lifetimes.rs:+10:20: +10:23
- _22 = &_8; // scope 4 at $DIR/lifetimes.rs:+10:20: +10:23
- _21 = &(*_22); // scope 4 at $DIR/lifetimes.rs:+10:20: +10:23
- _20 = core::fmt::rt::Argument::<'_>::new_display::<Box<dyn std::fmt::Display>>(move _21) -> [return: bb3, unwind unreachable]; // scope 4 at $DIR/lifetimes.rs:+10:20: +10:23
- // mir::Constant
- // + span: $DIR/lifetimes.rs:27:20: 27:23
- // + user_ty: UserType(4)
- // + literal: Const { ty: for<'b> fn(&'b Box<dyn std::fmt::Display>) -> core::fmt::rt::Argument<'b> {core::fmt::rt::Argument::<'_>::new_display::<Box<dyn std::fmt::Display>>}, val: Value(<ZST>) }
+ StorageLive(_8);
+ _27 = const false;
+ _8 = move ((_5 as Ok).0: std::boxed::Box<dyn std::fmt::Display>);
+ StorageLive(_9);
+ StorageLive(_10);
+ StorageLive(_11);
+ StorageLive(_12);
+ StorageLive(_13);
+ StorageLive(_14);
+ _26 = const _;
+ _14 = &(*_26);
+ _13 = &(*_14);
+ _12 = move _13 as &[&str] (PointerCoercion(Unsize));
+ StorageDead(_13);
+ StorageLive(_16);
+ StorageLive(_17);
+ StorageLive(_18);
+ StorageLive(_19);
+ StorageLive(_20);
+ StorageLive(_21);
+ StorageLive(_22);
+ _22 = &_8;
+ _21 = &(*_22);
+ _20 = core::fmt::rt::Argument::<'_>::new_display::<Box<dyn std::fmt::Display>>(move _21) -> [return: bb3, unwind unreachable];
}
bb3: {
- StorageDead(_21); // scope 4 at $DIR/lifetimes.rs:+10:22: +10:23
- StorageLive(_23); // scope 4 at $DIR/lifetimes.rs:+10:24: +10:27
- StorageLive(_24); // scope 4 at $DIR/lifetimes.rs:+10:24: +10:27
- StorageLive(_25); // scope 4 at $DIR/lifetimes.rs:+10:24: +10:27
- _25 = &_6; // scope 4 at $DIR/lifetimes.rs:+10:24: +10:27
- _24 = &(*_25); // scope 4 at $DIR/lifetimes.rs:+10:24: +10:27
- _23 = core::fmt::rt::Argument::<'_>::new_display::<u32>(move _24) -> [return: bb4, unwind unreachable]; // scope 4 at $DIR/lifetimes.rs:+10:24: +10:27
- // mir::Constant
- // + span: $DIR/lifetimes.rs:27:24: 27:27
- // + user_ty: UserType(5)
- // + literal: Const { ty: for<'b> fn(&'b u32) -> core::fmt::rt::Argument<'b> {core::fmt::rt::Argument::<'_>::new_display::<u32>}, val: Value(<ZST>) }
+ StorageDead(_21);
+ StorageLive(_23);
+ StorageLive(_24);
+ StorageLive(_25);
+ _25 = &_6;
+ _24 = &(*_25);
+ _23 = core::fmt::rt::Argument::<'_>::new_display::<u32>(move _24) -> [return: bb4, unwind unreachable];
}
bb4: {
- StorageDead(_24); // scope 4 at $DIR/lifetimes.rs:+10:26: +10:27
- _19 = [move _20, move _23]; // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageDead(_23); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageDead(_20); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- _18 = &_19; // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- _17 = &(*_18); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- _16 = move _17 as &[core::fmt::rt::Argument<'_>] (Pointer(Unsize)); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageDead(_17); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- _11 = Arguments::<'_>::new_v1(move _12, move _16) -> [return: bb5, unwind unreachable]; // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/std/src/macros.rs:LL:COL
- // + user_ty: UserType(3)
- // + literal: Const { ty: fn(&[&'static str], &[core::fmt::rt::Argument<'_>]) -> Arguments<'_> {Arguments::<'_>::new_v1}, val: Value(<ZST>) }
+ StorageDead(_24);
+ _19 = [move _20, move _23];
+ StorageDead(_23);
+ StorageDead(_20);
+ _18 = &_19;
+ _17 = &(*_18);
+ _16 = move _17 as &[core::fmt::rt::Argument<'_>] (PointerCoercion(Unsize));
+ StorageDead(_17);
+ _11 = Arguments::<'_>::new_v1(move _12, move _16) -> [return: bb5, unwind unreachable];
}
bb5: {
- StorageDead(_16); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageDead(_12); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- _10 = _eprint(move _11) -> [return: bb6, unwind unreachable]; // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- // mir::Constant
- // + span: $SRC_DIR/std/src/macros.rs:LL:COL
- // + literal: Const { ty: for<'a> fn(Arguments<'a>) {_eprint}, val: Value(<ZST>) }
+ StorageDead(_16);
+ StorageDead(_12);
+ _10 = _eprint(move _11) -> [return: bb6, unwind unreachable];
}
bb6: {
- StorageDead(_11); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageDead(_25); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageDead(_22); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageDead(_19); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageDead(_18); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageDead(_14); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageDead(_10); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- _9 = const (); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- StorageDead(_9); // scope 4 at $SRC_DIR/std/src/macros.rs:LL:COL
- _0 = const (); // scope 4 at $DIR/lifetimes.rs:+9:22: +11:6
- drop(_8) -> [return: bb8, unwind unreachable]; // scope 3 at $DIR/lifetimes.rs:+11:5: +11:6
+ StorageDead(_11);
+ StorageDead(_25);
+ StorageDead(_22);
+ StorageDead(_19);
+ StorageDead(_18);
+ StorageDead(_14);
+ StorageDead(_10);
+ _9 = const ();
+ StorageDead(_9);
+ _0 = const ();
+ drop(_8) -> [return: bb8, unwind unreachable];
}
bb7: {
- _0 = const (); // scope 3 at $DIR/lifetimes.rs:+11:6: +11:6
- goto -> bb9; // scope 3 at $DIR/lifetimes.rs:+9:5: +11:6
+ _0 = const ();
+ goto -> bb9;
}
bb8: {
- StorageDead(_8); // scope 3 at $DIR/lifetimes.rs:+11:5: +11:6
- goto -> bb9; // scope 3 at $DIR/lifetimes.rs:+9:5: +11:6
+ StorageDead(_8);
+ goto -> bb9;
}
bb9: {
- StorageDead(_6); // scope 2 at $DIR/lifetimes.rs:+12:1: +12:2
- _28 = discriminant(_5); // scope 1 at $DIR/lifetimes.rs:+12:1: +12:2
- switchInt(move _28) -> [0: bb11, otherwise: bb13]; // scope 1 at $DIR/lifetimes.rs:+12:1: +12:2
+ StorageDead(_6);
+ _28 = discriminant(_5);
+ switchInt(move _28) -> [0: bb11, otherwise: bb13];
}
bb10: {
- _27 = const false; // scope 1 at $DIR/lifetimes.rs:+12:1: +12:2
- StorageDead(_5); // scope 1 at $DIR/lifetimes.rs:+12:1: +12:2
-- StorageDead(_1); // scope 0 at $DIR/lifetimes.rs:+12:1: +12:2
-+ StorageDead(_31); // scope 0 at $DIR/lifetimes.rs:+12:1: +12:2
-+ StorageDead(_32); // scope 0 at $DIR/lifetimes.rs:+12:1: +12:2
-+ nop; // scope 0 at $DIR/lifetimes.rs:+12:1: +12:2
- return; // scope 0 at $DIR/lifetimes.rs:+12:2: +12:2
+ _27 = const false;
+ StorageDead(_5);
+- StorageDead(_1);
++ StorageDead(_31);
++ StorageDead(_32);
++ nop;
+ return;
}
bb11: {
- switchInt(_27) -> [0: bb10, otherwise: bb12]; // scope 1 at $DIR/lifetimes.rs:+12:1: +12:2
+ switchInt(_27) -> [0: bb10, otherwise: bb12];
}
bb12: {
- drop(((_5 as Ok).0: std::boxed::Box<dyn std::fmt::Display>)) -> [return: bb10, unwind unreachable]; // scope 1 at $DIR/lifetimes.rs:+12:1: +12:2
+ drop(((_5 as Ok).0: std::boxed::Box<dyn std::fmt::Display>)) -> [return: bb10, unwind unreachable];
}
bb13: {
- drop(_5) -> [return: bb10, unwind unreachable]; // scope 1 at $DIR/lifetimes.rs:+12:1: +12:2
+ drop(_5) -> [return: bb10, unwind unreachable];
}
}
diff --git a/tests/mir-opt/sroa/structs.constant.ScalarReplacementOfAggregates.diff b/tests/mir-opt/sroa/structs.constant.ScalarReplacementOfAggregates.diff
index 647681f0e..7ee043169 100644
--- a/tests/mir-opt/sroa/structs.constant.ScalarReplacementOfAggregates.diff
+++ b/tests/mir-opt/sroa/structs.constant.ScalarReplacementOfAggregates.diff
@@ -2,45 +2,45 @@
+ // MIR for `constant` after ScalarReplacementOfAggregates
fn constant() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/structs.rs:+0:15: +0:15
- let _1: (usize, u8); // in scope 0 at $DIR/structs.rs:+2:9: +2:10
-+ let _4: usize; // in scope 0 at $DIR/structs.rs:+2:9: +2:10
-+ let _5: u8; // in scope 0 at $DIR/structs.rs:+2:9: +2:10
+ let mut _0: ();
+ let _1: (usize, u8);
++ let _4: usize;
++ let _5: u8;
scope 1 {
-- debug y => _1; // in scope 1 at $DIR/structs.rs:+2:9: +2:10
-+ debug y => (usize, u8){ .0 => _4, .1 => _5, }; // in scope 1 at $DIR/structs.rs:+2:9: +2:10
- let _2: usize; // in scope 1 at $DIR/structs.rs:+3:9: +3:10
+- debug y => _1;
++ debug y => (usize, u8){ .0 => _4, .1 => _5, };
+ let _2: usize;
scope 2 {
- debug t => _2; // in scope 2 at $DIR/structs.rs:+3:9: +3:10
- let _3: u8; // in scope 2 at $DIR/structs.rs:+4:9: +4:10
+ debug t => _2;
+ let _3: u8;
scope 3 {
- debug u => _3; // in scope 3 at $DIR/structs.rs:+4:9: +4:10
+ debug u => _3;
}
}
}
bb0: {
-- StorageLive(_1); // scope 0 at $DIR/structs.rs:+2:9: +2:10
-+ StorageLive(_4); // scope 0 at $DIR/structs.rs:+2:9: +2:10
-+ StorageLive(_5); // scope 0 at $DIR/structs.rs:+2:9: +2:10
-+ nop; // scope 0 at $DIR/structs.rs:+2:9: +2:10
- _1 = const _; // scope 0 at $DIR/structs.rs:+2:13: +2:14
-+ _4 = move (_1.0: usize); // scope 1 at $DIR/structs.rs:+3:9: +3:10
-+ _5 = move (_1.1: u8); // scope 1 at $DIR/structs.rs:+3:9: +3:10
- StorageLive(_2); // scope 1 at $DIR/structs.rs:+3:9: +3:10
-- _2 = (_1.0: usize); // scope 1 at $DIR/structs.rs:+3:13: +3:16
-+ _2 = _4; // scope 1 at $DIR/structs.rs:+3:13: +3:16
- StorageLive(_3); // scope 2 at $DIR/structs.rs:+4:9: +4:10
-- _3 = (_1.1: u8); // scope 2 at $DIR/structs.rs:+4:13: +4:16
-+ _3 = _5; // scope 2 at $DIR/structs.rs:+4:13: +4:16
- _0 = const (); // scope 0 at $DIR/structs.rs:+0:15: +5:2
- StorageDead(_3); // scope 2 at $DIR/structs.rs:+5:1: +5:2
- StorageDead(_2); // scope 1 at $DIR/structs.rs:+5:1: +5:2
-- StorageDead(_1); // scope 0 at $DIR/structs.rs:+5:1: +5:2
-+ StorageDead(_4); // scope 0 at $DIR/structs.rs:+5:1: +5:2
-+ StorageDead(_5); // scope 0 at $DIR/structs.rs:+5:1: +5:2
-+ nop; // scope 0 at $DIR/structs.rs:+5:1: +5:2
- return; // scope 0 at $DIR/structs.rs:+5:2: +5:2
+- StorageLive(_1);
++ StorageLive(_4);
++ StorageLive(_5);
++ nop;
+ _1 = const _;
++ _4 = move (_1.0: usize);
++ _5 = move (_1.1: u8);
+ StorageLive(_2);
+- _2 = (_1.0: usize);
++ _2 = _4;
+ StorageLive(_3);
+- _3 = (_1.1: u8);
++ _3 = _5;
+ _0 = const ();
+ StorageDead(_3);
+ StorageDead(_2);
+- StorageDead(_1);
++ StorageDead(_4);
++ StorageDead(_5);
++ nop;
+ return;
}
}
diff --git a/tests/mir-opt/sroa/structs.copies.ScalarReplacementOfAggregates.diff b/tests/mir-opt/sroa/structs.copies.ScalarReplacementOfAggregates.diff
index b0b0da886..0a1de891a 100644
--- a/tests/mir-opt/sroa/structs.copies.ScalarReplacementOfAggregates.diff
+++ b/tests/mir-opt/sroa/structs.copies.ScalarReplacementOfAggregates.diff
@@ -2,33 +2,33 @@
+ // MIR for `copies` after ScalarReplacementOfAggregates
fn copies(_1: Foo) -> () {
- debug x => _1; // in scope 0 at $DIR/structs.rs:+0:11: +0:12
- let mut _0: (); // return place in scope 0 at $DIR/structs.rs:+0:19: +0:19
- let _2: Foo; // in scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ let _11: u8; // in scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ let _12: (); // in scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ let _13: &str; // in scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ let _14: std::option::Option<isize>; // in scope 0 at $DIR/structs.rs:+1:9: +1:10
+ debug x => _1;
+ let mut _0: ();
+ let _2: Foo;
++ let _11: u8;
++ let _12: ();
++ let _13: &str;
++ let _14: std::option::Option<isize>;
scope 1 {
-- debug y => _2; // in scope 1 at $DIR/structs.rs:+1:9: +1:10
-+ debug y => Foo{ .0 => _11, .1 => _12, .2 => _13, .3 => _14, }; // in scope 1 at $DIR/structs.rs:+1:9: +1:10
- let _3: u8; // in scope 1 at $DIR/structs.rs:+2:9: +2:10
+- debug y => _2;
++ debug y => Foo{ .0 => _11, .1 => _12, .2 => _13, .3 => _14, };
+ let _3: u8;
scope 2 {
- debug t => _3; // in scope 2 at $DIR/structs.rs:+2:9: +2:10
- let _4: &str; // in scope 2 at $DIR/structs.rs:+3:9: +3:10
+ debug t => _3;
+ let _4: &str;
scope 3 {
- debug u => _4; // in scope 3 at $DIR/structs.rs:+3:9: +3:10
- let _5: Foo; // in scope 3 at $DIR/structs.rs:+4:9: +4:10
-+ let _7: u8; // in scope 3 at $DIR/structs.rs:+4:9: +4:10
-+ let _8: (); // in scope 3 at $DIR/structs.rs:+4:9: +4:10
-+ let _9: &str; // in scope 3 at $DIR/structs.rs:+4:9: +4:10
-+ let _10: std::option::Option<isize>; // in scope 3 at $DIR/structs.rs:+4:9: +4:10
+ debug u => _4;
+ let _5: Foo;
++ let _7: u8;
++ let _8: ();
++ let _9: &str;
++ let _10: std::option::Option<isize>;
scope 4 {
-- debug z => _5; // in scope 4 at $DIR/structs.rs:+4:9: +4:10
-+ debug z => Foo{ .0 => _7, .1 => _8, .2 => _9, .3 => _10, }; // in scope 4 at $DIR/structs.rs:+4:9: +4:10
- let _6: (); // in scope 4 at $DIR/structs.rs:+5:9: +5:10
+- debug z => _5;
++ debug z => Foo{ .0 => _7, .1 => _8, .2 => _9, .3 => _10, };
+ let _6: ();
scope 5 {
- debug a => _6; // in scope 5 at $DIR/structs.rs:+5:9: +5:10
+ debug a => _6;
}
}
}
@@ -36,56 +36,56 @@
}
bb0: {
-- StorageLive(_2); // scope 0 at $DIR/structs.rs:+1:9: +1:10
-- _2 = _1; // scope 0 at $DIR/structs.rs:+1:13: +1:14
-+ StorageLive(_11); // scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ StorageLive(_12); // scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ StorageLive(_13); // scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ StorageLive(_14); // scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ nop; // scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ _11 = (_1.0: u8); // scope 0 at $DIR/structs.rs:+1:13: +1:14
-+ _12 = (_1.1: ()); // scope 0 at $DIR/structs.rs:+1:13: +1:14
-+ _13 = (_1.2: &str); // scope 0 at $DIR/structs.rs:+1:13: +1:14
-+ _14 = (_1.3: std::option::Option<isize>); // scope 0 at $DIR/structs.rs:+1:13: +1:14
-+ nop; // scope 0 at $DIR/structs.rs:+1:13: +1:14
- StorageLive(_3); // scope 1 at $DIR/structs.rs:+2:9: +2:10
-- _3 = (_2.0: u8); // scope 1 at $DIR/structs.rs:+2:13: +2:16
-+ _3 = _11; // scope 1 at $DIR/structs.rs:+2:13: +2:16
- StorageLive(_4); // scope 2 at $DIR/structs.rs:+3:9: +3:10
-- _4 = (_2.2: &str); // scope 2 at $DIR/structs.rs:+3:13: +3:16
-- StorageLive(_5); // scope 3 at $DIR/structs.rs:+4:9: +4:10
-- _5 = _2; // scope 3 at $DIR/structs.rs:+4:13: +4:14
-+ _4 = _13; // scope 2 at $DIR/structs.rs:+3:13: +3:16
-+ StorageLive(_7); // scope 3 at $DIR/structs.rs:+4:9: +4:10
-+ StorageLive(_8); // scope 3 at $DIR/structs.rs:+4:9: +4:10
-+ StorageLive(_9); // scope 3 at $DIR/structs.rs:+4:9: +4:10
-+ StorageLive(_10); // scope 3 at $DIR/structs.rs:+4:9: +4:10
-+ nop; // scope 3 at $DIR/structs.rs:+4:9: +4:10
-+ _7 = _11; // scope 3 at $DIR/structs.rs:+4:13: +4:14
-+ _8 = _12; // scope 3 at $DIR/structs.rs:+4:13: +4:14
-+ _9 = _13; // scope 3 at $DIR/structs.rs:+4:13: +4:14
-+ _10 = _14; // scope 3 at $DIR/structs.rs:+4:13: +4:14
-+ nop; // scope 3 at $DIR/structs.rs:+4:13: +4:14
- StorageLive(_6); // scope 4 at $DIR/structs.rs:+5:9: +5:10
-- _6 = (_5.1: ()); // scope 4 at $DIR/structs.rs:+5:13: +5:16
-+ _6 = _8; // scope 4 at $DIR/structs.rs:+5:13: +5:16
- _0 = const (); // scope 0 at $DIR/structs.rs:+0:19: +6:2
- StorageDead(_6); // scope 4 at $DIR/structs.rs:+6:1: +6:2
-- StorageDead(_5); // scope 3 at $DIR/structs.rs:+6:1: +6:2
-+ StorageDead(_7); // scope 3 at $DIR/structs.rs:+6:1: +6:2
-+ StorageDead(_8); // scope 3 at $DIR/structs.rs:+6:1: +6:2
-+ StorageDead(_9); // scope 3 at $DIR/structs.rs:+6:1: +6:2
-+ StorageDead(_10); // scope 3 at $DIR/structs.rs:+6:1: +6:2
-+ nop; // scope 3 at $DIR/structs.rs:+6:1: +6:2
- StorageDead(_4); // scope 2 at $DIR/structs.rs:+6:1: +6:2
- StorageDead(_3); // scope 1 at $DIR/structs.rs:+6:1: +6:2
-- StorageDead(_2); // scope 0 at $DIR/structs.rs:+6:1: +6:2
-+ StorageDead(_11); // scope 0 at $DIR/structs.rs:+6:1: +6:2
-+ StorageDead(_12); // scope 0 at $DIR/structs.rs:+6:1: +6:2
-+ StorageDead(_13); // scope 0 at $DIR/structs.rs:+6:1: +6:2
-+ StorageDead(_14); // scope 0 at $DIR/structs.rs:+6:1: +6:2
-+ nop; // scope 0 at $DIR/structs.rs:+6:1: +6:2
- return; // scope 0 at $DIR/structs.rs:+6:2: +6:2
+- StorageLive(_2);
+- _2 = _1;
++ StorageLive(_11);
++ StorageLive(_12);
++ StorageLive(_13);
++ StorageLive(_14);
++ nop;
++ _11 = (_1.0: u8);
++ _12 = (_1.1: ());
++ _13 = (_1.2: &str);
++ _14 = (_1.3: std::option::Option<isize>);
++ nop;
+ StorageLive(_3);
+- _3 = (_2.0: u8);
++ _3 = _11;
+ StorageLive(_4);
+- _4 = (_2.2: &str);
+- StorageLive(_5);
+- _5 = _2;
++ _4 = _13;
++ StorageLive(_7);
++ StorageLive(_8);
++ StorageLive(_9);
++ StorageLive(_10);
++ nop;
++ _7 = _11;
++ _8 = _12;
++ _9 = _13;
++ _10 = _14;
++ nop;
+ StorageLive(_6);
+- _6 = (_5.1: ());
++ _6 = _8;
+ _0 = const ();
+ StorageDead(_6);
+- StorageDead(_5);
++ StorageDead(_7);
++ StorageDead(_8);
++ StorageDead(_9);
++ StorageDead(_10);
++ nop;
+ StorageDead(_4);
+ StorageDead(_3);
+- StorageDead(_2);
++ StorageDead(_11);
++ StorageDead(_12);
++ StorageDead(_13);
++ StorageDead(_14);
++ nop;
+ return;
}
}
diff --git a/tests/mir-opt/sroa/structs.dropping.ScalarReplacementOfAggregates.diff b/tests/mir-opt/sroa/structs.dropping.ScalarReplacementOfAggregates.diff
index d378c260a..bc38a219e 100644
--- a/tests/mir-opt/sroa/structs.dropping.ScalarReplacementOfAggregates.diff
+++ b/tests/mir-opt/sroa/structs.dropping.ScalarReplacementOfAggregates.diff
@@ -2,43 +2,43 @@
+ // MIR for `dropping` after ScalarReplacementOfAggregates
fn dropping() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/structs.rs:+0:19: +0:19
- let _1: Tag; // in scope 0 at $DIR/structs.rs:+1:5: +1:32
- let mut _2: S; // in scope 0 at $DIR/structs.rs:+1:5: +1:30
- let mut _3: Tag; // in scope 0 at $DIR/structs.rs:+1:7: +1:13
- let mut _4: Tag; // in scope 0 at $DIR/structs.rs:+1:15: +1:21
- let mut _5: Tag; // in scope 0 at $DIR/structs.rs:+1:23: +1:29
+ let mut _0: ();
+ let _1: Tag;
+ let mut _2: S;
+ let mut _3: Tag;
+ let mut _4: Tag;
+ let mut _5: Tag;
bb0: {
- StorageLive(_1); // scope 0 at $DIR/structs.rs:+1:5: +1:32
- StorageLive(_2); // scope 0 at $DIR/structs.rs:+1:5: +1:30
- StorageLive(_3); // scope 0 at $DIR/structs.rs:+1:7: +1:13
- _3 = Tag(const 0_usize); // scope 0 at $DIR/structs.rs:+1:7: +1:13
- StorageLive(_4); // scope 0 at $DIR/structs.rs:+1:15: +1:21
- _4 = Tag(const 1_usize); // scope 0 at $DIR/structs.rs:+1:15: +1:21
- StorageLive(_5); // scope 0 at $DIR/structs.rs:+1:23: +1:29
- _5 = Tag(const 2_usize); // scope 0 at $DIR/structs.rs:+1:23: +1:29
- _2 = S(move _3, move _4, move _5); // scope 0 at $DIR/structs.rs:+1:5: +1:30
- StorageDead(_5); // scope 0 at $DIR/structs.rs:+1:29: +1:30
- StorageDead(_4); // scope 0 at $DIR/structs.rs:+1:29: +1:30
- StorageDead(_3); // scope 0 at $DIR/structs.rs:+1:29: +1:30
- _1 = move (_2.1: Tag); // scope 0 at $DIR/structs.rs:+1:5: +1:32
- drop(_1) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/structs.rs:+1:32: +1:33
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = Tag(const 0_usize);
+ StorageLive(_4);
+ _4 = Tag(const 1_usize);
+ StorageLive(_5);
+ _5 = Tag(const 2_usize);
+ _2 = S(move _3, move _4, move _5);
+ StorageDead(_5);
+ StorageDead(_4);
+ StorageDead(_3);
+ _1 = move (_2.1: Tag);
+ drop(_1) -> [return: bb1, unwind unreachable];
}
bb1: {
- drop((_2.0: Tag)) -> [return: bb3, unwind unreachable]; // scope 0 at $DIR/structs.rs:+1:32: +1:33
+ drop((_2.0: Tag)) -> [return: bb3, unwind unreachable];
}
bb2: {
- StorageDead(_2); // scope 0 at $DIR/structs.rs:+1:32: +1:33
- StorageDead(_1); // scope 0 at $DIR/structs.rs:+1:32: +1:33
- _0 = const (); // scope 0 at $DIR/structs.rs:+0:19: +2:2
- return; // scope 0 at $DIR/structs.rs:+2:2: +2:2
+ StorageDead(_2);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
bb3: {
- drop((_2.2: Tag)) -> [return: bb2, unwind unreachable]; // scope 0 at $DIR/structs.rs:+1:32: +1:33
+ drop((_2.2: Tag)) -> [return: bb2, unwind unreachable];
}
}
diff --git a/tests/mir-opt/sroa/structs.enums.ScalarReplacementOfAggregates.diff b/tests/mir-opt/sroa/structs.enums.ScalarReplacementOfAggregates.diff
index ff1e30c2d..b5e39e632 100644
--- a/tests/mir-opt/sroa/structs.enums.ScalarReplacementOfAggregates.diff
+++ b/tests/mir-opt/sroa/structs.enums.ScalarReplacementOfAggregates.diff
@@ -2,42 +2,42 @@
+ // MIR for `enums` after ScalarReplacementOfAggregates
fn enums(_1: usize) -> usize {
- debug a => _1; // in scope 0 at $DIR/structs.rs:+0:14: +0:15
- let mut _0: usize; // return place in scope 0 at $DIR/structs.rs:+0:27: +0:32
- let mut _2: std::option::Option<usize>; // in scope 0 at $DIR/structs.rs:+1:22: +1:29
- let mut _3: usize; // in scope 0 at $DIR/structs.rs:+1:27: +1:28
- let mut _4: isize; // in scope 0 at $DIR/structs.rs:+1:12: +1:19
+ debug a => _1;
+ let mut _0: usize;
+ let mut _2: std::option::Option<usize>;
+ let mut _3: usize;
+ let mut _4: isize;
scope 1 {
- debug a => _5; // in scope 1 at $DIR/structs.rs:+1:17: +1:18
- let _5: usize; // in scope 1 at $DIR/structs.rs:+1:17: +1:18
+ debug a => _5;
+ let _5: usize;
}
bb0: {
- StorageLive(_2); // scope 1 at $DIR/structs.rs:+1:22: +1:29
- StorageLive(_3); // scope 1 at $DIR/structs.rs:+1:27: +1:28
- _3 = _1; // scope 1 at $DIR/structs.rs:+1:27: +1:28
- _2 = Option::<usize>::Some(move _3); // scope 1 at $DIR/structs.rs:+1:22: +1:29
- StorageDead(_3); // scope 1 at $DIR/structs.rs:+1:28: +1:29
- _4 = discriminant(_2); // scope 1 at $DIR/structs.rs:+1:12: +1:19
- switchInt(move _4) -> [1: bb1, otherwise: bb2]; // scope 1 at $DIR/structs.rs:+1:12: +1:19
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = Option::<usize>::Some(move _3);
+ StorageDead(_3);
+ _4 = discriminant(_2);
+ switchInt(move _4) -> [1: bb1, otherwise: bb2];
}
bb1: {
- StorageLive(_5); // scope 1 at $DIR/structs.rs:+1:17: +1:18
- _5 = ((_2 as Some).0: usize); // scope 1 at $DIR/structs.rs:+1:17: +1:18
- _0 = _5; // scope 1 at $DIR/structs.rs:+1:32: +1:33
- StorageDead(_5); // scope 0 at $DIR/structs.rs:+1:34: +1:35
- goto -> bb3; // scope 0 at $DIR/structs.rs:+1:5: +1:46
+ StorageLive(_5);
+ _5 = ((_2 as Some).0: usize);
+ _0 = _5;
+ StorageDead(_5);
+ goto -> bb3;
}
bb2: {
- _0 = const 0_usize; // scope 0 at $DIR/structs.rs:+1:43: +1:44
- goto -> bb3; // scope 0 at $DIR/structs.rs:+1:5: +1:46
+ _0 = const 0_usize;
+ goto -> bb3;
}
bb3: {
- StorageDead(_2); // scope 0 at $DIR/structs.rs:+2:1: +2:2
- return; // scope 0 at $DIR/structs.rs:+2:2: +2:2
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/sroa/structs.escaping.ScalarReplacementOfAggregates.diff b/tests/mir-opt/sroa/structs.escaping.ScalarReplacementOfAggregates.diff
index 3074fcbdf..6443c6486 100644
--- a/tests/mir-opt/sroa/structs.escaping.ScalarReplacementOfAggregates.diff
+++ b/tests/mir-opt/sroa/structs.escaping.ScalarReplacementOfAggregates.diff
@@ -2,43 +2,37 @@
+ // MIR for `escaping` after ScalarReplacementOfAggregates
fn escaping() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/structs.rs:+0:19: +0:19
- let _1: (); // in scope 0 at $DIR/structs.rs:+1:5: +1:42
- let mut _2: *const u32; // in scope 0 at $DIR/structs.rs:+1:7: +1:41
- let _3: &u32; // in scope 0 at $DIR/structs.rs:+1:7: +1:41
- let _4: Escaping; // in scope 0 at $DIR/structs.rs:+1:8: +1:39
- let mut _5: u32; // in scope 0 at $DIR/structs.rs:+1:34: +1:37
+ let mut _0: ();
+ let _1: ();
+ let mut _2: *const u32;
+ let _3: &u32;
+ let _4: Escaping;
+ let mut _5: u32;
bb0: {
- StorageLive(_1); // scope 0 at $DIR/structs.rs:+1:5: +1:42
- StorageLive(_2); // scope 0 at $DIR/structs.rs:+1:7: +1:41
- StorageLive(_3); // scope 0 at $DIR/structs.rs:+1:7: +1:41
- StorageLive(_4); // scope 0 at $DIR/structs.rs:+1:8: +1:39
- StorageLive(_5); // scope 0 at $DIR/structs.rs:+1:34: +1:37
- _5 = g() -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/structs.rs:+1:34: +1:37
- // mir::Constant
- // + span: $DIR/structs.rs:78:34: 78:35
- // + literal: Const { ty: fn() -> u32 {g}, val: Value(<ZST>) }
+ StorageLive(_1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = g() -> [return: bb1, unwind unreachable];
}
bb1: {
- _4 = Escaping { a: const 1_u32, b: const 2_u32, c: move _5 }; // scope 0 at $DIR/structs.rs:+1:8: +1:39
- StorageDead(_5); // scope 0 at $DIR/structs.rs:+1:38: +1:39
- _3 = &(_4.0: u32); // scope 0 at $DIR/structs.rs:+1:7: +1:41
- _2 = &raw const (*_3); // scope 0 at $DIR/structs.rs:+1:7: +1:41
- _1 = f(move _2) -> [return: bb2, unwind unreachable]; // scope 0 at $DIR/structs.rs:+1:5: +1:42
- // mir::Constant
- // + span: $DIR/structs.rs:78:5: 78:6
- // + literal: Const { ty: fn(*const u32) {f}, val: Value(<ZST>) }
+ _4 = Escaping { a: const 1_u32, b: const 2_u32, c: move _5 };
+ StorageDead(_5);
+ _3 = &(_4.0: u32);
+ _2 = &raw const (*_3);
+ _1 = f(move _2) -> [return: bb2, unwind unreachable];
}
bb2: {
- StorageDead(_2); // scope 0 at $DIR/structs.rs:+1:41: +1:42
- StorageDead(_4); // scope 0 at $DIR/structs.rs:+1:42: +1:43
- StorageDead(_3); // scope 0 at $DIR/structs.rs:+1:42: +1:43
- StorageDead(_1); // scope 0 at $DIR/structs.rs:+1:42: +1:43
- _0 = const (); // scope 0 at $DIR/structs.rs:+0:19: +2:2
- return; // scope 0 at $DIR/structs.rs:+2:2: +2:2
+ StorageDead(_2);
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_1);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/sroa/structs.flat.ScalarReplacementOfAggregates.diff b/tests/mir-opt/sroa/structs.flat.ScalarReplacementOfAggregates.diff
index 1aa11d17b..a84048365 100644
--- a/tests/mir-opt/sroa/structs.flat.ScalarReplacementOfAggregates.diff
+++ b/tests/mir-opt/sroa/structs.flat.ScalarReplacementOfAggregates.diff
@@ -2,23 +2,23 @@
+ // MIR for `flat` after ScalarReplacementOfAggregates
fn flat() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/structs.rs:+0:15: +0:15
- let _1: u8; // in scope 0 at $DIR/structs.rs:+1:15: +1:16
- let _2: (); // in scope 0 at $DIR/structs.rs:+1:18: +1:19
- let _3: &str; // in scope 0 at $DIR/structs.rs:+1:21: +1:22
- let _4: std::option::Option<isize>; // in scope 0 at $DIR/structs.rs:+1:24: +1:25
- let mut _5: Foo; // in scope 0 at $DIR/structs.rs:+1:30: +1:70
- let mut _6: (); // in scope 0 at $DIR/structs.rs:+1:45: +1:47
- let mut _7: std::option::Option<isize>; // in scope 0 at $DIR/structs.rs:+1:60: +1:68
-+ let mut _8: u8; // in scope 0 at $DIR/structs.rs:+1:30: +1:70
-+ let mut _9: (); // in scope 0 at $DIR/structs.rs:+1:30: +1:70
-+ let mut _10: &str; // in scope 0 at $DIR/structs.rs:+1:30: +1:70
-+ let mut _11: std::option::Option<isize>; // in scope 0 at $DIR/structs.rs:+1:30: +1:70
+ let mut _0: ();
+ let _1: u8;
+ let _2: ();
+ let _3: &str;
+ let _4: std::option::Option<isize>;
+ let mut _5: Foo;
+ let mut _6: ();
+ let mut _7: std::option::Option<isize>;
++ let mut _8: u8;
++ let mut _9: ();
++ let mut _10: &str;
++ let mut _11: std::option::Option<isize>;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/structs.rs:+1:15: +1:16
- debug b => _2; // in scope 1 at $DIR/structs.rs:+1:18: +1:19
- debug c => _3; // in scope 1 at $DIR/structs.rs:+1:21: +1:22
- debug d => _4; // in scope 1 at $DIR/structs.rs:+1:24: +1:25
+ debug a => _1;
+ debug b => _2;
+ debug c => _3;
+ debug d => _4;
scope 2 {
scope 3 {
scope 4 {
@@ -30,51 +30,48 @@
}
bb0: {
-- StorageLive(_5); // scope 0 at $DIR/structs.rs:+1:30: +1:70
-+ StorageLive(_8); // scope 0 at $DIR/structs.rs:+1:30: +1:70
-+ StorageLive(_9); // scope 0 at $DIR/structs.rs:+1:30: +1:70
-+ StorageLive(_10); // scope 0 at $DIR/structs.rs:+1:30: +1:70
-+ StorageLive(_11); // scope 0 at $DIR/structs.rs:+1:30: +1:70
-+ nop; // scope 0 at $DIR/structs.rs:+1:30: +1:70
- StorageLive(_6); // scope 0 at $DIR/structs.rs:+1:45: +1:47
- _6 = (); // scope 0 at $DIR/structs.rs:+1:45: +1:47
- StorageLive(_7); // scope 0 at $DIR/structs.rs:+1:60: +1:68
- _7 = Option::<isize>::Some(const -4_isize); // scope 0 at $DIR/structs.rs:+1:60: +1:68
-- _5 = Foo { a: const 5_u8, b: move _6, c: const "a", d: move _7 }; // scope 0 at $DIR/structs.rs:+1:30: +1:70
-+ _8 = const 5_u8; // scope 0 at $DIR/structs.rs:+1:30: +1:70
-+ _9 = move _6; // scope 0 at $DIR/structs.rs:+1:30: +1:70
-+ _10 = const "a"; // scope 0 at $DIR/structs.rs:+1:30: +1:70
- // mir::Constant
- // + span: $DIR/structs.rs:53:52: 53:55
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
-+ _11 = move _7; // scope 0 at $DIR/structs.rs:+1:30: +1:70
-+ nop; // scope 0 at $DIR/structs.rs:+1:30: +1:70
- StorageDead(_7); // scope 0 at $DIR/structs.rs:+1:69: +1:70
- StorageDead(_6); // scope 0 at $DIR/structs.rs:+1:69: +1:70
- StorageLive(_1); // scope 0 at $DIR/structs.rs:+1:15: +1:16
-- _1 = (_5.0: u8); // scope 0 at $DIR/structs.rs:+1:15: +1:16
-+ _1 = _8; // scope 0 at $DIR/structs.rs:+1:15: +1:16
- StorageLive(_2); // scope 0 at $DIR/structs.rs:+1:18: +1:19
-- _2 = (_5.1: ()); // scope 0 at $DIR/structs.rs:+1:18: +1:19
-+ _2 = _9; // scope 0 at $DIR/structs.rs:+1:18: +1:19
- StorageLive(_3); // scope 0 at $DIR/structs.rs:+1:21: +1:22
-- _3 = (_5.2: &str); // scope 0 at $DIR/structs.rs:+1:21: +1:22
-+ _3 = _10; // scope 0 at $DIR/structs.rs:+1:21: +1:22
- StorageLive(_4); // scope 0 at $DIR/structs.rs:+1:24: +1:25
-- _4 = (_5.3: std::option::Option<isize>); // scope 0 at $DIR/structs.rs:+1:24: +1:25
-- StorageDead(_5); // scope 0 at $DIR/structs.rs:+1:70: +1:71
-+ _4 = _11; // scope 0 at $DIR/structs.rs:+1:24: +1:25
-+ StorageDead(_8); // scope 0 at $DIR/structs.rs:+1:70: +1:71
-+ StorageDead(_9); // scope 0 at $DIR/structs.rs:+1:70: +1:71
-+ StorageDead(_10); // scope 0 at $DIR/structs.rs:+1:70: +1:71
-+ StorageDead(_11); // scope 0 at $DIR/structs.rs:+1:70: +1:71
-+ nop; // scope 0 at $DIR/structs.rs:+1:70: +1:71
- _0 = const (); // scope 0 at $DIR/structs.rs:+0:15: +6:2
- StorageDead(_4); // scope 0 at $DIR/structs.rs:+6:1: +6:2
- StorageDead(_3); // scope 0 at $DIR/structs.rs:+6:1: +6:2
- StorageDead(_2); // scope 0 at $DIR/structs.rs:+6:1: +6:2
- StorageDead(_1); // scope 0 at $DIR/structs.rs:+6:1: +6:2
- return; // scope 0 at $DIR/structs.rs:+6:2: +6:2
+- StorageLive(_5);
++ StorageLive(_8);
++ StorageLive(_9);
++ StorageLive(_10);
++ StorageLive(_11);
++ nop;
+ StorageLive(_6);
+ _6 = ();
+ StorageLive(_7);
+ _7 = Option::<isize>::Some(const -4_isize);
+- _5 = Foo { a: const 5_u8, b: move _6, c: const "a", d: move _7 };
++ _8 = const 5_u8;
++ _9 = move _6;
++ _10 = const "a";
++ _11 = move _7;
++ nop;
+ StorageDead(_7);
+ StorageDead(_6);
+ StorageLive(_1);
+- _1 = (_5.0: u8);
++ _1 = _8;
+ StorageLive(_2);
+- _2 = (_5.1: ());
++ _2 = _9;
+ StorageLive(_3);
+- _3 = (_5.2: &str);
++ _3 = _10;
+ StorageLive(_4);
+- _4 = (_5.3: std::option::Option<isize>);
+- StorageDead(_5);
++ _4 = _11;
++ StorageDead(_8);
++ StorageDead(_9);
++ StorageDead(_10);
++ StorageDead(_11);
++ nop;
+ _0 = const ();
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/sroa/structs.ref_copies.ScalarReplacementOfAggregates.diff b/tests/mir-opt/sroa/structs.ref_copies.ScalarReplacementOfAggregates.diff
index 7b09ac182..d7c57c293 100644
--- a/tests/mir-opt/sroa/structs.ref_copies.ScalarReplacementOfAggregates.diff
+++ b/tests/mir-opt/sroa/structs.ref_copies.ScalarReplacementOfAggregates.diff
@@ -2,55 +2,55 @@
+ // MIR for `ref_copies` after ScalarReplacementOfAggregates
fn ref_copies(_1: &Foo) -> () {
- debug x => _1; // in scope 0 at $DIR/structs.rs:+0:15: +0:16
- let mut _0: (); // return place in scope 0 at $DIR/structs.rs:+0:24: +0:24
- let _2: Foo; // in scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ let _5: u8; // in scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ let _6: (); // in scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ let _7: &str; // in scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ let _8: std::option::Option<isize>; // in scope 0 at $DIR/structs.rs:+1:9: +1:10
+ debug x => _1;
+ let mut _0: ();
+ let _2: Foo;
++ let _5: u8;
++ let _6: ();
++ let _7: &str;
++ let _8: std::option::Option<isize>;
scope 1 {
-- debug y => _2; // in scope 1 at $DIR/structs.rs:+1:9: +1:10
-+ debug y => Foo{ .0 => _5, .1 => _6, .2 => _7, .3 => _8, }; // in scope 1 at $DIR/structs.rs:+1:9: +1:10
- let _3: u8; // in scope 1 at $DIR/structs.rs:+2:9: +2:10
+- debug y => _2;
++ debug y => Foo{ .0 => _5, .1 => _6, .2 => _7, .3 => _8, };
+ let _3: u8;
scope 2 {
- debug t => _3; // in scope 2 at $DIR/structs.rs:+2:9: +2:10
- let _4: &str; // in scope 2 at $DIR/structs.rs:+3:9: +3:10
+ debug t => _3;
+ let _4: &str;
scope 3 {
- debug u => _4; // in scope 3 at $DIR/structs.rs:+3:9: +3:10
+ debug u => _4;
}
}
}
bb0: {
-- StorageLive(_2); // scope 0 at $DIR/structs.rs:+1:9: +1:10
-- _2 = (*_1); // scope 0 at $DIR/structs.rs:+1:13: +1:15
-+ StorageLive(_5); // scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ StorageLive(_6); // scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ StorageLive(_7); // scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ StorageLive(_8); // scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ nop; // scope 0 at $DIR/structs.rs:+1:9: +1:10
-+ _5 = ((*_1).0: u8); // scope 0 at $DIR/structs.rs:+1:13: +1:15
-+ _6 = ((*_1).1: ()); // scope 0 at $DIR/structs.rs:+1:13: +1:15
-+ _7 = ((*_1).2: &str); // scope 0 at $DIR/structs.rs:+1:13: +1:15
-+ _8 = ((*_1).3: std::option::Option<isize>); // scope 0 at $DIR/structs.rs:+1:13: +1:15
-+ nop; // scope 0 at $DIR/structs.rs:+1:13: +1:15
- StorageLive(_3); // scope 1 at $DIR/structs.rs:+2:9: +2:10
-- _3 = (_2.0: u8); // scope 1 at $DIR/structs.rs:+2:13: +2:16
-+ _3 = _5; // scope 1 at $DIR/structs.rs:+2:13: +2:16
- StorageLive(_4); // scope 2 at $DIR/structs.rs:+3:9: +3:10
-- _4 = (_2.2: &str); // scope 2 at $DIR/structs.rs:+3:13: +3:16
-+ _4 = _7; // scope 2 at $DIR/structs.rs:+3:13: +3:16
- _0 = const (); // scope 0 at $DIR/structs.rs:+0:24: +4:2
- StorageDead(_4); // scope 2 at $DIR/structs.rs:+4:1: +4:2
- StorageDead(_3); // scope 1 at $DIR/structs.rs:+4:1: +4:2
-- StorageDead(_2); // scope 0 at $DIR/structs.rs:+4:1: +4:2
-+ StorageDead(_5); // scope 0 at $DIR/structs.rs:+4:1: +4:2
-+ StorageDead(_6); // scope 0 at $DIR/structs.rs:+4:1: +4:2
-+ StorageDead(_7); // scope 0 at $DIR/structs.rs:+4:1: +4:2
-+ StorageDead(_8); // scope 0 at $DIR/structs.rs:+4:1: +4:2
-+ nop; // scope 0 at $DIR/structs.rs:+4:1: +4:2
- return; // scope 0 at $DIR/structs.rs:+4:2: +4:2
+- StorageLive(_2);
+- _2 = (*_1);
++ StorageLive(_5);
++ StorageLive(_6);
++ StorageLive(_7);
++ StorageLive(_8);
++ nop;
++ _5 = ((*_1).0: u8);
++ _6 = ((*_1).1: ());
++ _7 = ((*_1).2: &str);
++ _8 = ((*_1).3: std::option::Option<isize>);
++ nop;
+ StorageLive(_3);
+- _3 = (_2.0: u8);
++ _3 = _5;
+ StorageLive(_4);
+- _4 = (_2.2: &str);
++ _4 = _7;
+ _0 = const ();
+ StorageDead(_4);
+ StorageDead(_3);
+- StorageDead(_2);
++ StorageDead(_5);
++ StorageDead(_6);
++ StorageDead(_7);
++ StorageDead(_8);
++ nop;
+ return;
}
}
diff --git a/tests/mir-opt/sroa/structs.structs.ScalarReplacementOfAggregates.diff b/tests/mir-opt/sroa/structs.structs.ScalarReplacementOfAggregates.diff
index c94e4b137..bf5c3e3bd 100644
--- a/tests/mir-opt/sroa/structs.structs.ScalarReplacementOfAggregates.diff
+++ b/tests/mir-opt/sroa/structs.structs.ScalarReplacementOfAggregates.diff
@@ -2,32 +2,32 @@
+ // MIR for `structs` after ScalarReplacementOfAggregates
fn structs(_1: f32) -> f32 {
- debug a => _1; // in scope 0 at $DIR/structs.rs:+0:16: +0:17
- let mut _0: f32; // return place in scope 0 at $DIR/structs.rs:+0:27: +0:30
- let mut _2: structs::U; // in scope 0 at $DIR/structs.rs:+6:5: +6:21
- let mut _3: f32; // in scope 0 at $DIR/structs.rs:+6:18: +6:19
-+ let mut _4: usize; // in scope 0 at $DIR/structs.rs:+6:5: +6:21
-+ let mut _5: f32; // in scope 0 at $DIR/structs.rs:+6:5: +6:21
+ debug a => _1;
+ let mut _0: f32;
+ let mut _2: structs::U;
+ let mut _3: f32;
++ let mut _4: usize;
++ let mut _5: f32;
bb0: {
-- StorageLive(_2); // scope 0 at $DIR/structs.rs:+6:5: +6:21
-+ StorageLive(_4); // scope 0 at $DIR/structs.rs:+6:5: +6:21
-+ StorageLive(_5); // scope 0 at $DIR/structs.rs:+6:5: +6:21
-+ nop; // scope 0 at $DIR/structs.rs:+6:5: +6:21
- StorageLive(_3); // scope 0 at $DIR/structs.rs:+6:18: +6:19
- _3 = _1; // scope 0 at $DIR/structs.rs:+6:18: +6:19
-- _2 = U { _foo: const 0_usize, a: move _3 }; // scope 0 at $DIR/structs.rs:+6:5: +6:21
-+ _4 = const 0_usize; // scope 0 at $DIR/structs.rs:+6:5: +6:21
-+ _5 = move _3; // scope 0 at $DIR/structs.rs:+6:5: +6:21
-+ nop; // scope 0 at $DIR/structs.rs:+6:5: +6:21
- StorageDead(_3); // scope 0 at $DIR/structs.rs:+6:20: +6:21
-- _0 = (_2.1: f32); // scope 0 at $DIR/structs.rs:+6:5: +6:23
-- StorageDead(_2); // scope 0 at $DIR/structs.rs:+7:1: +7:2
-+ _0 = _5; // scope 0 at $DIR/structs.rs:+6:5: +6:23
-+ StorageDead(_4); // scope 0 at $DIR/structs.rs:+7:1: +7:2
-+ StorageDead(_5); // scope 0 at $DIR/structs.rs:+7:1: +7:2
-+ nop; // scope 0 at $DIR/structs.rs:+7:1: +7:2
- return; // scope 0 at $DIR/structs.rs:+7:2: +7:2
+- StorageLive(_2);
++ StorageLive(_4);
++ StorageLive(_5);
++ nop;
+ StorageLive(_3);
+ _3 = _1;
+- _2 = U { _foo: const 0_usize, a: move _3 };
++ _4 = const 0_usize;
++ _5 = move _3;
++ nop;
+ StorageDead(_3);
+- _0 = (_2.1: f32);
+- StorageDead(_2);
++ _0 = _5;
++ StorageDead(_4);
++ StorageDead(_5);
++ nop;
+ return;
}
}
diff --git a/tests/mir-opt/sroa/structs.unions.ScalarReplacementOfAggregates.diff b/tests/mir-opt/sroa/structs.unions.ScalarReplacementOfAggregates.diff
index 5aa054589..6c99d3efd 100644
--- a/tests/mir-opt/sroa/structs.unions.ScalarReplacementOfAggregates.diff
+++ b/tests/mir-opt/sroa/structs.unions.ScalarReplacementOfAggregates.diff
@@ -2,22 +2,22 @@
+ // MIR for `unions` after ScalarReplacementOfAggregates
fn unions(_1: f32) -> u32 {
- debug a => _1; // in scope 0 at $DIR/structs.rs:+0:15: +0:16
- let mut _0: u32; // return place in scope 0 at $DIR/structs.rs:+0:26: +0:29
- let mut _2: unions::Repr; // in scope 0 at $DIR/structs.rs:+5:14: +5:27
- let mut _3: f32; // in scope 0 at $DIR/structs.rs:+5:24: +5:25
+ debug a => _1;
+ let mut _0: u32;
+ let mut _2: unions::Repr;
+ let mut _3: f32;
scope 1 {
}
bb0: {
- StorageLive(_2); // scope 1 at $DIR/structs.rs:+5:14: +5:27
- StorageLive(_3); // scope 1 at $DIR/structs.rs:+5:24: +5:25
- _3 = _1; // scope 1 at $DIR/structs.rs:+5:24: +5:25
- _2 = Repr { f: move _3 }; // scope 1 at $DIR/structs.rs:+5:14: +5:27
- StorageDead(_3); // scope 1 at $DIR/structs.rs:+5:26: +5:27
- _0 = (_2.1: u32); // scope 1 at $DIR/structs.rs:+5:14: +5:29
- StorageDead(_2); // scope 0 at $DIR/structs.rs:+6:1: +6:2
- return; // scope 0 at $DIR/structs.rs:+6:2: +6:2
+ StorageLive(_2);
+ StorageLive(_3);
+ _3 = _1;
+ _2 = Repr { f: move _3 };
+ StorageDead(_3);
+ _0 = (_2.1: u32);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/storage_ranges.main.nll.0.mir b/tests/mir-opt/storage_ranges.main.nll.0.mir
index 5bb1a7bf0..13732daa7 100644
--- a/tests/mir-opt/storage_ranges.main.nll.0.mir
+++ b/tests/mir-opt/storage_ranges.main.nll.0.mir
@@ -18,46 +18,46 @@
| '?2: '?3 due to Assignment at Single(bb0[10]) ($DIR/storage_ranges.rs:6:17: 6:25 (#0)
|
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/storage_ranges.rs:+0:11: +0:11
- let _1: i32; // in scope 0 at $DIR/storage_ranges.rs:+1:9: +1:10
- let _2: (); // in scope 0 at $DIR/storage_ranges.rs:+2:5: +4:6
- let _4: std::option::Option<i32>; // in scope 0 at $DIR/storage_ranges.rs:+3:18: +3:25
- let mut _5: i32; // in scope 0 at $DIR/storage_ranges.rs:+3:23: +3:24
+ let mut _0: ();
+ let _1: i32;
+ let _2: ();
+ let _4: std::option::Option<i32>;
+ let mut _5: i32;
scope 1 {
- debug a => _1; // in scope 1 at $DIR/storage_ranges.rs:+1:9: +1:10
- let _3: &std::option::Option<i32>; // in scope 1 at $DIR/storage_ranges.rs:+3:13: +3:14
- let _6: i32; // in scope 1 at $DIR/storage_ranges.rs:+5:9: +5:10
+ debug a => _1;
+ let _3: &std::option::Option<i32>;
+ let _6: i32;
scope 2 {
- debug b => _3; // in scope 2 at $DIR/storage_ranges.rs:+3:13: +3:14
+ debug b => _3;
}
scope 3 {
- debug c => _6; // in scope 3 at $DIR/storage_ranges.rs:+5:9: +5:10
+ debug c => _6;
}
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/storage_ranges.rs:+1:9: +1:10
- _1 = const 0_i32; // scope 0 at $DIR/storage_ranges.rs:+1:13: +1:14
- FakeRead(ForLet(None), _1); // scope 0 at $DIR/storage_ranges.rs:+1:9: +1:10
- StorageLive(_2); // scope 1 at $DIR/storage_ranges.rs:+2:5: +4:6
- StorageLive(_3); // scope 1 at $DIR/storage_ranges.rs:+3:13: +3:14
- StorageLive(_4); // scope 1 at $DIR/storage_ranges.rs:+3:18: +3:25
- StorageLive(_5); // scope 1 at $DIR/storage_ranges.rs:+3:23: +3:24
- _5 = _1; // scope 1 at $DIR/storage_ranges.rs:+3:23: +3:24
- _4 = Option::<i32>::Some(move _5); // scope 1 at $DIR/storage_ranges.rs:+3:18: +3:25
- StorageDead(_5); // scope 1 at $DIR/storage_ranges.rs:+3:24: +3:25
- _3 = &_4; // scope 1 at $DIR/storage_ranges.rs:+3:17: +3:25
- FakeRead(ForLet(None), _3); // scope 1 at $DIR/storage_ranges.rs:+3:13: +3:14
- _2 = const (); // scope 1 at $DIR/storage_ranges.rs:+2:5: +4:6
- StorageDead(_4); // scope 1 at $DIR/storage_ranges.rs:+4:5: +4:6
- StorageDead(_3); // scope 1 at $DIR/storage_ranges.rs:+4:5: +4:6
- StorageDead(_2); // scope 1 at $DIR/storage_ranges.rs:+4:5: +4:6
- StorageLive(_6); // scope 1 at $DIR/storage_ranges.rs:+5:9: +5:10
- _6 = const 1_i32; // scope 1 at $DIR/storage_ranges.rs:+5:13: +5:14
- FakeRead(ForLet(None), _6); // scope 1 at $DIR/storage_ranges.rs:+5:9: +5:10
- _0 = const (); // scope 0 at $DIR/storage_ranges.rs:+0:11: +6:2
- StorageDead(_6); // scope 1 at $DIR/storage_ranges.rs:+6:1: +6:2
- StorageDead(_1); // scope 0 at $DIR/storage_ranges.rs:+6:1: +6:2
- return; // scope 0 at $DIR/storage_ranges.rs:+6:2: +6:2
+ StorageLive(_1);
+ _1 = const 0_i32;
+ FakeRead(ForLet(None), _1);
+ StorageLive(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ StorageLive(_5);
+ _5 = _1;
+ _4 = Option::<i32>::Some(move _5);
+ StorageDead(_5);
+ _3 = &_4;
+ FakeRead(ForLet(None), _3);
+ _2 = const ();
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageDead(_2);
+ StorageLive(_6);
+ _6 = const 1_i32;
+ FakeRead(ForLet(None), _6);
+ _0 = const ();
+ StorageDead(_6);
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/switch_to_self.rs b/tests/mir-opt/switch_to_self.rs
new file mode 100644
index 000000000..6678e4b3b
--- /dev/null
+++ b/tests/mir-opt/switch_to_self.rs
@@ -0,0 +1,21 @@
+// Test that MatchBranchSimplification doesn't ICE on a SwitchInt where
+// one of the targets is the block that the SwitchInt terminates.
+#![crate_type = "lib"]
+#![feature(core_intrinsics, custom_mir)]
+use std::intrinsics::mir::*;
+
+// EMIT_MIR switch_to_self.test.MatchBranchSimplification.diff
+#[custom_mir(dialect = "runtime", phase = "post-cleanup")]
+pub fn test(x: bool) {
+ mir!(
+ {
+ Goto(bb0)
+ }
+ bb0 = {
+ match x { false => bb0, _ => bb1 }
+ }
+ bb1 = {
+ match x { false => bb0, _ => bb1 }
+ }
+ )
+}
diff --git a/tests/mir-opt/switch_to_self.test.MatchBranchSimplification.diff b/tests/mir-opt/switch_to_self.test.MatchBranchSimplification.diff
new file mode 100644
index 000000000..c0b599e06
--- /dev/null
+++ b/tests/mir-opt/switch_to_self.test.MatchBranchSimplification.diff
@@ -0,0 +1,19 @@
+- // MIR for `test` before MatchBranchSimplification
++ // MIR for `test` after MatchBranchSimplification
+
+ fn test(_1: bool) -> () {
+ let mut _0: ();
+
+ bb0: {
+ goto -> bb1;
+ }
+
+ bb1: {
+ switchInt(_1) -> [0: bb1, otherwise: bb2];
+ }
+
+ bb2: {
+ switchInt(_1) -> [0: bb1, otherwise: bb2];
+ }
+ }
+
diff --git a/tests/mir-opt/tls_access.main.PreCodegen.after.mir b/tests/mir-opt/tls_access.main.PreCodegen.after.mir
index 09453b8ba..43c7051f0 100644
--- a/tests/mir-opt/tls_access.main.PreCodegen.after.mir
+++ b/tests/mir-opt/tls_access.main.PreCodegen.after.mir
@@ -1,28 +1,28 @@
// MIR for `main` after PreCodegen
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/tls_access.rs:+0:11: +0:11
- let _2: *mut u8; // in scope 0 at $DIR/tls_access.rs:+2:18: +2:21
- let mut _3: *mut u8; // in scope 0 at $DIR/tls_access.rs:+3:9: +3:12
+ let mut _0: ();
+ let _1: *mut u8;
+ let mut _3: *mut u8;
scope 1 {
- let _1: &u8; // in scope 1 at $DIR/tls_access.rs:+2:13: +2:14
+ let _2: &u8;
scope 2 {
- debug a => _1; // in scope 2 at $DIR/tls_access.rs:+2:13: +2:14
+ debug a => _2;
}
}
bb0: {
- StorageLive(_1); // scope 1 at $DIR/tls_access.rs:+2:13: +2:14
- StorageLive(_2); // scope 1 at $DIR/tls_access.rs:+2:18: +2:21
- _2 = &/*tls*/ mut FOO; // scope 1 at $DIR/tls_access.rs:+2:18: +2:21
- _1 = &(*_2); // scope 1 at $DIR/tls_access.rs:+2:17: +2:21
- StorageLive(_3); // scope 2 at $DIR/tls_access.rs:+3:9: +3:12
- _3 = &/*tls*/ mut FOO; // scope 2 at $DIR/tls_access.rs:+3:9: +3:12
- (*_3) = const 42_u8; // scope 2 at $DIR/tls_access.rs:+3:9: +3:17
- StorageDead(_3); // scope 2 at $DIR/tls_access.rs:+3:17: +3:18
- _0 = const (); // scope 1 at $DIR/tls_access.rs:+1:5: +4:6
- StorageDead(_2); // scope 1 at $DIR/tls_access.rs:+4:5: +4:6
- StorageDead(_1); // scope 1 at $DIR/tls_access.rs:+4:5: +4:6
- return; // scope 0 at $DIR/tls_access.rs:+5:2: +5:2
+ StorageLive(_2);
+ StorageLive(_1);
+ _1 = &/*tls*/ mut FOO;
+ _2 = &(*_1);
+ StorageLive(_3);
+ _3 = &/*tls*/ mut FOO;
+ (*_3) = const 42_u8;
+ StorageDead(_3);
+ _0 = const ();
+ StorageDead(_1);
+ StorageDead(_2);
+ return;
}
}
diff --git a/tests/mir-opt/uninhabited_enum.process_never.SimplifyLocals-final.after.mir b/tests/mir-opt/uninhabited_enum.process_never.SimplifyLocals-final.after.mir
index b4fb330f3..89f7016fe 100644
--- a/tests/mir-opt/uninhabited_enum.process_never.SimplifyLocals-final.after.mir
+++ b/tests/mir-opt/uninhabited_enum.process_never.SimplifyLocals-final.after.mir
@@ -1,16 +1,16 @@
// MIR for `process_never` after SimplifyLocals-final
fn process_never(_1: *const !) -> () {
- debug input => _1; // in scope 0 at $DIR/uninhabited_enum.rs:+0:22: +0:27
- let mut _0: (); // return place in scope 0 at $DIR/uninhabited_enum.rs:+0:39: +0:39
- let _2: &!; // in scope 0 at $DIR/uninhabited_enum.rs:+1:8: +1:14
+ debug input => _1;
+ let mut _0: ();
+ let _2: &!;
scope 1 {
- debug _input => _2; // in scope 1 at $DIR/uninhabited_enum.rs:+1:8: +1:14
+ debug _input => _2;
}
scope 2 {
}
bb0: {
- unreachable; // scope 0 at $DIR/uninhabited_enum.rs:+0:39: +2:2
+ unreachable;
}
}
diff --git a/tests/mir-opt/uninhabited_enum.process_void.SimplifyLocals-final.after.mir b/tests/mir-opt/uninhabited_enum.process_void.SimplifyLocals-final.after.mir
index 4b2a16b50..51905f982 100644
--- a/tests/mir-opt/uninhabited_enum.process_void.SimplifyLocals-final.after.mir
+++ b/tests/mir-opt/uninhabited_enum.process_void.SimplifyLocals-final.after.mir
@@ -1,15 +1,15 @@
// MIR for `process_void` after SimplifyLocals-final
fn process_void(_1: *const Void) -> () {
- debug input => _1; // in scope 0 at $DIR/uninhabited_enum.rs:+0:21: +0:26
- let mut _0: (); // return place in scope 0 at $DIR/uninhabited_enum.rs:+0:41: +0:41
+ debug input => _1;
+ let mut _0: ();
scope 1 {
- debug _input => _1; // in scope 1 at $DIR/uninhabited_enum.rs:+1:8: +1:14
+ debug _input => _1;
}
scope 2 {
}
bb0: {
- return; // scope 0 at $DIR/uninhabited_enum.rs:+4:2: +4:2
+ return;
}
}
diff --git a/tests/mir-opt/uninhabited_enum_branching.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir b/tests/mir-opt/uninhabited_enum_branching.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
index a0b556640..474f43104 100644
--- a/tests/mir-opt/uninhabited_enum_branching.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
+++ b/tests/mir-opt/uninhabited_enum_branching.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
@@ -1,69 +1,60 @@
// MIR for `main` after SimplifyCfg-after-uninhabited-enum-branching
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/uninhabited_enum_branching.rs:+0:11: +0:11
- let _1: &str; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+1:5: +5:6
- let mut _2: Test1; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+1:11: +1:19
- let mut _3: isize; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+2:9: +2:20
- let _4: &str; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+3:24: +3:34
- let _5: &str; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+4:21: +4:24
- let _6: &str; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+7:5: +10:6
- let mut _7: Test2; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+7:11: +7:19
- let mut _8: isize; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+8:9: +8:17
- let _9: &str; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+9:21: +9:24
+ let mut _0: ();
+ let _1: &str;
+ let mut _2: Test1;
+ let mut _3: isize;
+ let _4: &str;
+ let _5: &str;
+ let _6: &str;
+ let mut _7: Test2;
+ let mut _8: isize;
+ let _9: &str;
bb0: {
- StorageLive(_1); // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:5: +5:6
- StorageLive(_2); // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:11: +1:19
- _2 = Test1::C; // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:11: +1:19
- _3 = discriminant(_2); // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:11: +1:19
- switchInt(move _3) -> [2: bb1, otherwise: bb2]; // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:5: +1:19
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = Test1::C;
+ _3 = discriminant(_2);
+ switchInt(move _3) -> [2: bb1, otherwise: bb2];
}
bb1: {
- StorageLive(_5); // scope 0 at $DIR/uninhabited_enum_branching.rs:+4:21: +4:24
- _5 = const "C"; // scope 0 at $DIR/uninhabited_enum_branching.rs:+4:21: +4:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching.rs:23:21: 23:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _1 = &(*_5); // scope 0 at $DIR/uninhabited_enum_branching.rs:+4:21: +4:24
- StorageDead(_5); // scope 0 at $DIR/uninhabited_enum_branching.rs:+4:23: +4:24
- StorageDead(_2); // scope 0 at $DIR/uninhabited_enum_branching.rs:+5:6: +5:7
- StorageDead(_1); // scope 0 at $DIR/uninhabited_enum_branching.rs:+5:6: +5:7
- StorageLive(_6); // scope 0 at $DIR/uninhabited_enum_branching.rs:+7:5: +10:6
- StorageLive(_7); // scope 0 at $DIR/uninhabited_enum_branching.rs:+7:11: +7:19
- _7 = Test2::D; // scope 0 at $DIR/uninhabited_enum_branching.rs:+7:11: +7:19
- _8 = discriminant(_7); // scope 0 at $DIR/uninhabited_enum_branching.rs:+7:11: +7:19
- switchInt(move _8) -> [4: bb4, 5: bb3, otherwise: bb2]; // scope 0 at $DIR/uninhabited_enum_branching.rs:+7:5: +7:19
+ StorageLive(_5);
+ _5 = const "C";
+ _1 = &(*_5);
+ StorageDead(_5);
+ StorageDead(_2);
+ StorageDead(_1);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = Test2::D;
+ _8 = discriminant(_7);
+ switchInt(move _8) -> [4: bb4, 5: bb3, otherwise: bb2];
}
bb2: {
- unreachable; // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:11: +1:19
+ unreachable;
}
bb3: {
- StorageLive(_9); // scope 0 at $DIR/uninhabited_enum_branching.rs:+9:21: +9:24
- _9 = const "E"; // scope 0 at $DIR/uninhabited_enum_branching.rs:+9:21: +9:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching.rs:28:21: 28:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _6 = &(*_9); // scope 0 at $DIR/uninhabited_enum_branching.rs:+9:21: +9:24
- StorageDead(_9); // scope 0 at $DIR/uninhabited_enum_branching.rs:+9:23: +9:24
- goto -> bb5; // scope 0 at $DIR/uninhabited_enum_branching.rs:+9:23: +9:24
+ StorageLive(_9);
+ _9 = const "E";
+ _6 = &(*_9);
+ StorageDead(_9);
+ goto -> bb5;
}
bb4: {
- _6 = const "D"; // scope 0 at $DIR/uninhabited_enum_branching.rs:+8:21: +8:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching.rs:27:21: 27:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- goto -> bb5; // scope 0 at $DIR/uninhabited_enum_branching.rs:+8:21: +8:24
+ _6 = const "D";
+ goto -> bb5;
}
bb5: {
- StorageDead(_7); // scope 0 at $DIR/uninhabited_enum_branching.rs:+10:6: +10:7
- StorageDead(_6); // scope 0 at $DIR/uninhabited_enum_branching.rs:+10:6: +10:7
- _0 = const (); // scope 0 at $DIR/uninhabited_enum_branching.rs:+0:11: +11:2
- return; // scope 0 at $DIR/uninhabited_enum_branching.rs:+11:2: +11:2
+ StorageDead(_7);
+ StorageDead(_6);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/uninhabited_enum_branching.main.UninhabitedEnumBranching.diff b/tests/mir-opt/uninhabited_enum_branching.main.UninhabitedEnumBranching.diff
index 58d6e4281..9db95abec 100644
--- a/tests/mir-opt/uninhabited_enum_branching.main.UninhabitedEnumBranching.diff
+++ b/tests/mir-opt/uninhabited_enum_branching.main.UninhabitedEnumBranching.diff
@@ -2,94 +2,79 @@
+ // MIR for `main` after UninhabitedEnumBranching
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/uninhabited_enum_branching.rs:+0:11: +0:11
- let _1: &str; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+1:5: +5:6
- let mut _2: Test1; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+1:11: +1:19
- let mut _3: isize; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+2:9: +2:20
- let _4: &str; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+3:24: +3:34
- let _5: &str; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+4:21: +4:24
- let _6: &str; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+7:5: +10:6
- let mut _7: Test2; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+7:11: +7:19
- let mut _8: isize; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+8:9: +8:17
- let _9: &str; // in scope 0 at $DIR/uninhabited_enum_branching.rs:+9:21: +9:24
+ let mut _0: ();
+ let _1: &str;
+ let mut _2: Test1;
+ let mut _3: isize;
+ let _4: &str;
+ let _5: &str;
+ let _6: &str;
+ let mut _7: Test2;
+ let mut _8: isize;
+ let _9: &str;
bb0: {
- StorageLive(_1); // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:5: +5:6
- StorageLive(_2); // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:11: +1:19
- _2 = Test1::C; // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:11: +1:19
- _3 = discriminant(_2); // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:11: +1:19
-- switchInt(move _3) -> [0: bb3, 1: bb4, 2: bb1, otherwise: bb2]; // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:5: +1:19
-+ switchInt(move _3) -> [2: bb1, otherwise: bb2]; // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:5: +1:19
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = Test1::C;
+ _3 = discriminant(_2);
+- switchInt(move _3) -> [0: bb3, 1: bb4, 2: bb1, otherwise: bb2];
++ switchInt(move _3) -> [2: bb1, otherwise: bb2];
}
bb1: {
- StorageLive(_5); // scope 0 at $DIR/uninhabited_enum_branching.rs:+4:21: +4:24
- _5 = const "C"; // scope 0 at $DIR/uninhabited_enum_branching.rs:+4:21: +4:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching.rs:23:21: 23:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _1 = &(*_5); // scope 0 at $DIR/uninhabited_enum_branching.rs:+4:21: +4:24
- StorageDead(_5); // scope 0 at $DIR/uninhabited_enum_branching.rs:+4:23: +4:24
- goto -> bb5; // scope 0 at $DIR/uninhabited_enum_branching.rs:+4:23: +4:24
+ StorageLive(_5);
+ _5 = const "C";
+ _1 = &(*_5);
+ StorageDead(_5);
+ goto -> bb5;
}
bb2: {
- unreachable; // scope 0 at $DIR/uninhabited_enum_branching.rs:+1:11: +1:19
+ unreachable;
}
bb3: {
- _1 = const "A(Empty)"; // scope 0 at $DIR/uninhabited_enum_branching.rs:+2:24: +2:34
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching.rs:21:24: 21:34
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- goto -> bb5; // scope 0 at $DIR/uninhabited_enum_branching.rs:+2:24: +2:34
+ _1 = const "A(Empty)";
+ goto -> bb5;
}
bb4: {
- StorageLive(_4); // scope 0 at $DIR/uninhabited_enum_branching.rs:+3:24: +3:34
- _4 = const "B(Empty)"; // scope 0 at $DIR/uninhabited_enum_branching.rs:+3:24: +3:34
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching.rs:22:24: 22:34
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _1 = &(*_4); // scope 0 at $DIR/uninhabited_enum_branching.rs:+3:24: +3:34
- StorageDead(_4); // scope 0 at $DIR/uninhabited_enum_branching.rs:+3:33: +3:34
- goto -> bb5; // scope 0 at $DIR/uninhabited_enum_branching.rs:+3:33: +3:34
+ StorageLive(_4);
+ _4 = const "B(Empty)";
+ _1 = &(*_4);
+ StorageDead(_4);
+ goto -> bb5;
}
bb5: {
- StorageDead(_2); // scope 0 at $DIR/uninhabited_enum_branching.rs:+5:6: +5:7
- StorageDead(_1); // scope 0 at $DIR/uninhabited_enum_branching.rs:+5:6: +5:7
- StorageLive(_6); // scope 0 at $DIR/uninhabited_enum_branching.rs:+7:5: +10:6
- StorageLive(_7); // scope 0 at $DIR/uninhabited_enum_branching.rs:+7:11: +7:19
- _7 = Test2::D; // scope 0 at $DIR/uninhabited_enum_branching.rs:+7:11: +7:19
- _8 = discriminant(_7); // scope 0 at $DIR/uninhabited_enum_branching.rs:+7:11: +7:19
- switchInt(move _8) -> [4: bb7, 5: bb6, otherwise: bb2]; // scope 0 at $DIR/uninhabited_enum_branching.rs:+7:5: +7:19
+ StorageDead(_2);
+ StorageDead(_1);
+ StorageLive(_6);
+ StorageLive(_7);
+ _7 = Test2::D;
+ _8 = discriminant(_7);
+ switchInt(move _8) -> [4: bb7, 5: bb6, otherwise: bb2];
}
bb6: {
- StorageLive(_9); // scope 0 at $DIR/uninhabited_enum_branching.rs:+9:21: +9:24
- _9 = const "E"; // scope 0 at $DIR/uninhabited_enum_branching.rs:+9:21: +9:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching.rs:28:21: 28:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _6 = &(*_9); // scope 0 at $DIR/uninhabited_enum_branching.rs:+9:21: +9:24
- StorageDead(_9); // scope 0 at $DIR/uninhabited_enum_branching.rs:+9:23: +9:24
- goto -> bb8; // scope 0 at $DIR/uninhabited_enum_branching.rs:+9:23: +9:24
+ StorageLive(_9);
+ _9 = const "E";
+ _6 = &(*_9);
+ StorageDead(_9);
+ goto -> bb8;
}
bb7: {
- _6 = const "D"; // scope 0 at $DIR/uninhabited_enum_branching.rs:+8:21: +8:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching.rs:27:21: 27:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- goto -> bb8; // scope 0 at $DIR/uninhabited_enum_branching.rs:+8:21: +8:24
+ _6 = const "D";
+ goto -> bb8;
}
bb8: {
- StorageDead(_7); // scope 0 at $DIR/uninhabited_enum_branching.rs:+10:6: +10:7
- StorageDead(_6); // scope 0 at $DIR/uninhabited_enum_branching.rs:+10:6: +10:7
- _0 = const (); // scope 0 at $DIR/uninhabited_enum_branching.rs:+0:11: +11:2
- return; // scope 0 at $DIR/uninhabited_enum_branching.rs:+11:2: +11:2
+ StorageDead(_7);
+ StorageDead(_6);
+ _0 = const ();
+ return;
}
}
diff --git a/tests/mir-opt/uninhabited_enum_branching2.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir b/tests/mir-opt/uninhabited_enum_branching2.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
index 0368b5f18..9c0c5d189 100644
--- a/tests/mir-opt/uninhabited_enum_branching2.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
+++ b/tests/mir-opt/uninhabited_enum_branching2.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
@@ -1,97 +1,85 @@
// MIR for `main` after SimplifyCfg-after-uninhabited-enum-branching
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/uninhabited_enum_branching2.rs:+0:11: +0:11
- let _1: Plop; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:9: +1:13
- let mut _2: Test1; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:38: +1:46
- let _3: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+3:5: +8:6
- let mut _4: &Test1; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+3:11: +3:22
- let mut _5: isize; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+4:9: +4:20
- let _6: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+5:24: +5:34
- let _7: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+6:21: +6:24
- let _8: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+7:21: +7:24
- let _9: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+10:5: +15:6
- let mut _10: isize; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+11:9: +11:20
- let _11: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+12:24: +12:34
- let _12: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+13:21: +13:24
- let _13: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+14:21: +14:24
+ let mut _0: ();
+ let _1: Plop;
+ let mut _2: Test1;
+ let _3: &str;
+ let mut _4: &Test1;
+ let mut _5: isize;
+ let _6: &str;
+ let _7: &str;
+ let _8: &str;
+ let _9: &str;
+ let mut _10: isize;
+ let _11: &str;
+ let _12: &str;
+ let _13: &str;
scope 1 {
- debug plop => _1; // in scope 1 at $DIR/uninhabited_enum_branching2.rs:+1:9: +1:13
+ debug plop => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:9: +1:13
- StorageLive(_2); // scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:38: +1:46
- _2 = Test1::C; // scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:38: +1:46
- _1 = Plop { xx: const 51_u32, test1: move _2 }; // scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:16: +1:48
- StorageDead(_2); // scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:47: +1:48
- StorageLive(_3); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:5: +8:6
- StorageLive(_4); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:11: +3:22
- _4 = &(_1.1: Test1); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:11: +3:22
- _5 = discriminant((*_4)); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:11: +3:22
- switchInt(move _5) -> [2: bb3, 3: bb1, otherwise: bb2]; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:5: +3:22
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = Test1::C;
+ _1 = Plop { xx: const 51_u32, test1: move _2 };
+ StorageDead(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &(_1.1: Test1);
+ _5 = discriminant((*_4));
+ switchInt(move _5) -> [2: bb3, 3: bb1, otherwise: bb2];
}
bb1: {
- StorageLive(_8); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+7:21: +7:24
- _8 = const "D"; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+7:21: +7:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching2.rs:25:21: 25:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _3 = &(*_8); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+7:21: +7:24
- StorageDead(_8); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+7:23: +7:24
- goto -> bb4; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+7:23: +7:24
+ StorageLive(_8);
+ _8 = const "D";
+ _3 = &(*_8);
+ StorageDead(_8);
+ goto -> bb4;
}
bb2: {
- unreachable; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:11: +3:22
+ unreachable;
}
bb3: {
- StorageLive(_7); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+6:21: +6:24
- _7 = const "C"; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+6:21: +6:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching2.rs:24:21: 24:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _3 = &(*_7); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+6:21: +6:24
- StorageDead(_7); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+6:23: +6:24
- goto -> bb4; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+6:23: +6:24
+ StorageLive(_7);
+ _7 = const "C";
+ _3 = &(*_7);
+ StorageDead(_7);
+ goto -> bb4;
}
bb4: {
- StorageDead(_4); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+8:6: +8:7
- StorageDead(_3); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+8:6: +8:7
- StorageLive(_9); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+10:5: +15:6
- _10 = discriminant((_1.1: Test1)); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+10:11: +10:21
- switchInt(move _10) -> [2: bb6, 3: bb5, otherwise: bb2]; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+10:5: +10:21
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageLive(_9);
+ _10 = discriminant((_1.1: Test1));
+ switchInt(move _10) -> [2: bb6, 3: bb5, otherwise: bb2];
}
bb5: {
- StorageLive(_13); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+14:21: +14:24
- _13 = const "D"; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+14:21: +14:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching2.rs:32:21: 32:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _9 = &(*_13); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+14:21: +14:24
- StorageDead(_13); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+14:23: +14:24
- goto -> bb7; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+14:23: +14:24
+ StorageLive(_13);
+ _13 = const "D";
+ _9 = &(*_13);
+ StorageDead(_13);
+ goto -> bb7;
}
bb6: {
- StorageLive(_12); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+13:21: +13:24
- _12 = const "C"; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+13:21: +13:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching2.rs:31:21: 31:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _9 = &(*_12); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+13:21: +13:24
- StorageDead(_12); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+13:23: +13:24
- goto -> bb7; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+13:23: +13:24
+ StorageLive(_12);
+ _12 = const "C";
+ _9 = &(*_12);
+ StorageDead(_12);
+ goto -> bb7;
}
bb7: {
- StorageDead(_9); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+15:6: +15:7
- _0 = const (); // scope 0 at $DIR/uninhabited_enum_branching2.rs:+0:11: +16:2
- StorageDead(_1); // scope 0 at $DIR/uninhabited_enum_branching2.rs:+16:1: +16:2
- return; // scope 0 at $DIR/uninhabited_enum_branching2.rs:+16:2: +16:2
+ StorageDead(_9);
+ _0 = const ();
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/uninhabited_enum_branching2.main.UninhabitedEnumBranching.diff b/tests/mir-opt/uninhabited_enum_branching2.main.UninhabitedEnumBranching.diff
index 73353941f..12ce6505a 100644
--- a/tests/mir-opt/uninhabited_enum_branching2.main.UninhabitedEnumBranching.diff
+++ b/tests/mir-opt/uninhabited_enum_branching2.main.UninhabitedEnumBranching.diff
@@ -2,138 +2,114 @@
+ // MIR for `main` after UninhabitedEnumBranching
fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/uninhabited_enum_branching2.rs:+0:11: +0:11
- let _1: Plop; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:9: +1:13
- let mut _2: Test1; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:38: +1:46
- let _3: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+3:5: +8:6
- let mut _4: &Test1; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+3:11: +3:22
- let mut _5: isize; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+4:9: +4:20
- let _6: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+5:24: +5:34
- let _7: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+6:21: +6:24
- let _8: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+7:21: +7:24
- let _9: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+10:5: +15:6
- let mut _10: isize; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+11:9: +11:20
- let _11: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+12:24: +12:34
- let _12: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+13:21: +13:24
- let _13: &str; // in scope 0 at $DIR/uninhabited_enum_branching2.rs:+14:21: +14:24
+ let mut _0: ();
+ let _1: Plop;
+ let mut _2: Test1;
+ let _3: &str;
+ let mut _4: &Test1;
+ let mut _5: isize;
+ let _6: &str;
+ let _7: &str;
+ let _8: &str;
+ let _9: &str;
+ let mut _10: isize;
+ let _11: &str;
+ let _12: &str;
+ let _13: &str;
scope 1 {
- debug plop => _1; // in scope 1 at $DIR/uninhabited_enum_branching2.rs:+1:9: +1:13
+ debug plop => _1;
}
bb0: {
- StorageLive(_1); // scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:9: +1:13
- StorageLive(_2); // scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:38: +1:46
- _2 = Test1::C; // scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:38: +1:46
- _1 = Plop { xx: const 51_u32, test1: move _2 }; // scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:16: +1:48
- StorageDead(_2); // scope 0 at $DIR/uninhabited_enum_branching2.rs:+1:47: +1:48
- StorageLive(_3); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:5: +8:6
- StorageLive(_4); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:11: +3:22
- _4 = &(_1.1: Test1); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:11: +3:22
- _5 = discriminant((*_4)); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:11: +3:22
-- switchInt(move _5) -> [0: bb3, 1: bb4, 2: bb5, 3: bb1, otherwise: bb2]; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:5: +3:22
-+ switchInt(move _5) -> [2: bb5, 3: bb1, otherwise: bb2]; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:5: +3:22
+ StorageLive(_1);
+ StorageLive(_2);
+ _2 = Test1::C;
+ _1 = Plop { xx: const 51_u32, test1: move _2 };
+ StorageDead(_2);
+ StorageLive(_3);
+ StorageLive(_4);
+ _4 = &(_1.1: Test1);
+ _5 = discriminant((*_4));
+- switchInt(move _5) -> [0: bb3, 1: bb4, 2: bb5, 3: bb1, otherwise: bb2];
++ switchInt(move _5) -> [2: bb5, 3: bb1, otherwise: bb2];
}
bb1: {
- StorageLive(_8); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+7:21: +7:24
- _8 = const "D"; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+7:21: +7:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching2.rs:25:21: 25:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _3 = &(*_8); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+7:21: +7:24
- StorageDead(_8); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+7:23: +7:24
- goto -> bb6; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+7:23: +7:24
+ StorageLive(_8);
+ _8 = const "D";
+ _3 = &(*_8);
+ StorageDead(_8);
+ goto -> bb6;
}
bb2: {
- unreachable; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+3:11: +3:22
+ unreachable;
}
bb3: {
- _3 = const "A(Empty)"; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+4:24: +4:34
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching2.rs:22:24: 22:34
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- goto -> bb6; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+4:24: +4:34
+ _3 = const "A(Empty)";
+ goto -> bb6;
}
bb4: {
- StorageLive(_6); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+5:24: +5:34
- _6 = const "B(Empty)"; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+5:24: +5:34
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching2.rs:23:24: 23:34
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _3 = &(*_6); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+5:24: +5:34
- StorageDead(_6); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+5:33: +5:34
- goto -> bb6; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+5:33: +5:34
+ StorageLive(_6);
+ _6 = const "B(Empty)";
+ _3 = &(*_6);
+ StorageDead(_6);
+ goto -> bb6;
}
bb5: {
- StorageLive(_7); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+6:21: +6:24
- _7 = const "C"; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+6:21: +6:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching2.rs:24:21: 24:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _3 = &(*_7); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+6:21: +6:24
- StorageDead(_7); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+6:23: +6:24
- goto -> bb6; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+6:23: +6:24
+ StorageLive(_7);
+ _7 = const "C";
+ _3 = &(*_7);
+ StorageDead(_7);
+ goto -> bb6;
}
bb6: {
- StorageDead(_4); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+8:6: +8:7
- StorageDead(_3); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+8:6: +8:7
- StorageLive(_9); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+10:5: +15:6
- _10 = discriminant((_1.1: Test1)); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+10:11: +10:21
-- switchInt(move _10) -> [0: bb8, 1: bb9, 2: bb10, 3: bb7, otherwise: bb2]; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+10:5: +10:21
-+ switchInt(move _10) -> [2: bb10, 3: bb7, otherwise: bb2]; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+10:5: +10:21
+ StorageDead(_4);
+ StorageDead(_3);
+ StorageLive(_9);
+ _10 = discriminant((_1.1: Test1));
+- switchInt(move _10) -> [0: bb8, 1: bb9, 2: bb10, 3: bb7, otherwise: bb2];
++ switchInt(move _10) -> [2: bb10, 3: bb7, otherwise: bb2];
}
bb7: {
- StorageLive(_13); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+14:21: +14:24
- _13 = const "D"; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+14:21: +14:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching2.rs:32:21: 32:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _9 = &(*_13); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+14:21: +14:24
- StorageDead(_13); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+14:23: +14:24
- goto -> bb11; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+14:23: +14:24
+ StorageLive(_13);
+ _13 = const "D";
+ _9 = &(*_13);
+ StorageDead(_13);
+ goto -> bb11;
}
bb8: {
- _9 = const "A(Empty)"; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+11:24: +11:34
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching2.rs:29:24: 29:34
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- goto -> bb11; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+11:24: +11:34
+ _9 = const "A(Empty)";
+ goto -> bb11;
}
bb9: {
- StorageLive(_11); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+12:24: +12:34
- _11 = const "B(Empty)"; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+12:24: +12:34
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching2.rs:30:24: 30:34
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _9 = &(*_11); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+12:24: +12:34
- StorageDead(_11); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+12:33: +12:34
- goto -> bb11; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+12:33: +12:34
+ StorageLive(_11);
+ _11 = const "B(Empty)";
+ _9 = &(*_11);
+ StorageDead(_11);
+ goto -> bb11;
}
bb10: {
- StorageLive(_12); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+13:21: +13:24
- _12 = const "C"; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+13:21: +13:24
- // mir::Constant
- // + span: $DIR/uninhabited_enum_branching2.rs:31:21: 31:24
- // + literal: Const { ty: &str, val: Value(Slice(..)) }
- _9 = &(*_12); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+13:21: +13:24
- StorageDead(_12); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+13:23: +13:24
- goto -> bb11; // scope 1 at $DIR/uninhabited_enum_branching2.rs:+13:23: +13:24
+ StorageLive(_12);
+ _12 = const "C";
+ _9 = &(*_12);
+ StorageDead(_12);
+ goto -> bb11;
}
bb11: {
- StorageDead(_9); // scope 1 at $DIR/uninhabited_enum_branching2.rs:+15:6: +15:7
- _0 = const (); // scope 0 at $DIR/uninhabited_enum_branching2.rs:+0:11: +16:2
- StorageDead(_1); // scope 0 at $DIR/uninhabited_enum_branching2.rs:+16:1: +16:2
- return; // scope 0 at $DIR/uninhabited_enum_branching2.rs:+16:2: +16:2
+ StorageDead(_9);
+ _0 = const ();
+ StorageDead(_1);
+ return;
}
}
diff --git a/tests/mir-opt/uninhabited_fallthrough_elimination.eliminate_fallthrough.UninhabitedEnumBranching.diff b/tests/mir-opt/uninhabited_fallthrough_elimination.eliminate_fallthrough.UninhabitedEnumBranching.diff
index 58e085dd0..daff4f9c8 100644
--- a/tests/mir-opt/uninhabited_fallthrough_elimination.eliminate_fallthrough.UninhabitedEnumBranching.diff
+++ b/tests/mir-opt/uninhabited_fallthrough_elimination.eliminate_fallthrough.UninhabitedEnumBranching.diff
@@ -2,37 +2,37 @@
+ // MIR for `eliminate_fallthrough` after UninhabitedEnumBranching
fn eliminate_fallthrough(_1: S) -> u32 {
- debug s => _1; // in scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+0:26: +0:27
- let mut _0: u32; // return place in scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+0:35: +0:38
- let mut _2: isize; // in scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+2:9: +2:10
+ debug s => _1;
+ let mut _0: u32;
+ let mut _2: isize;
bb0: {
- _2 = discriminant(_1); // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+1:11: +1:12
-- switchInt(move _2) -> [1: bb3, 2: bb2, otherwise: bb1]; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+1:5: +1:12
-+ switchInt(move _2) -> [1: bb3, 2: bb2, otherwise: bb5]; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+1:5: +1:12
+ _2 = discriminant(_1);
+- switchInt(move _2) -> [1: bb3, 2: bb2, otherwise: bb1];
++ switchInt(move _2) -> [1: bb3, 2: bb2, otherwise: bb5];
}
bb1: {
- _0 = const 3_u32; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+4:14: +4:15
- goto -> bb4; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+4:14: +4:15
+ _0 = const 3_u32;
+ goto -> bb4;
}
bb2: {
- _0 = const 1_u32; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+2:14: +2:15
- goto -> bb4; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+2:14: +2:15
+ _0 = const 1_u32;
+ goto -> bb4;
}
bb3: {
- _0 = const 2_u32; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+3:14: +3:15
- goto -> bb4; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+3:14: +3:15
+ _0 = const 2_u32;
+ goto -> bb4;
}
bb4: {
- return; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+6:2: +6:2
+ return;
+ }
+
+ bb5: {
-+ unreachable; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+4:14: +4:15
++ unreachable;
}
}
diff --git a/tests/mir-opt/uninhabited_fallthrough_elimination.keep_fallthrough.UninhabitedEnumBranching.diff b/tests/mir-opt/uninhabited_fallthrough_elimination.keep_fallthrough.UninhabitedEnumBranching.diff
index e765851eb..498e1e20f 100644
--- a/tests/mir-opt/uninhabited_fallthrough_elimination.keep_fallthrough.UninhabitedEnumBranching.diff
+++ b/tests/mir-opt/uninhabited_fallthrough_elimination.keep_fallthrough.UninhabitedEnumBranching.diff
@@ -2,33 +2,33 @@
+ // MIR for `keep_fallthrough` after UninhabitedEnumBranching
fn keep_fallthrough(_1: S) -> u32 {
- debug s => _1; // in scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+0:21: +0:22
- let mut _0: u32; // return place in scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+0:30: +0:33
- let mut _2: isize; // in scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+2:9: +2:13
+ debug s => _1;
+ let mut _0: u32;
+ let mut _2: isize;
bb0: {
- _2 = discriminant(_1); // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+1:11: +1:12
-- switchInt(move _2) -> [0: bb2, 1: bb3, otherwise: bb1]; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+1:5: +1:12
-+ switchInt(move _2) -> [1: bb3, otherwise: bb1]; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+1:5: +1:12
+ _2 = discriminant(_1);
+- switchInt(move _2) -> [0: bb2, 1: bb3, otherwise: bb1];
++ switchInt(move _2) -> [1: bb3, otherwise: bb1];
}
bb1: {
- _0 = const 3_u32; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+4:14: +4:15
- goto -> bb4; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+4:14: +4:15
+ _0 = const 3_u32;
+ goto -> bb4;
}
bb2: {
- _0 = const 1_u32; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+2:17: +2:18
- goto -> bb4; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+2:17: +2:18
+ _0 = const 1_u32;
+ goto -> bb4;
}
bb3: {
- _0 = const 2_u32; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+3:14: +3:15
- goto -> bb4; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+3:14: +3:15
+ _0 = const 2_u32;
+ goto -> bb4;
}
bb4: {
- return; // scope 0 at $DIR/uninhabited_fallthrough_elimination.rs:+6:2: +6:2
+ return;
}
}
diff --git a/tests/mir-opt/unreachable.main.UnreachablePropagation.diff b/tests/mir-opt/unreachable.main.UnreachablePropagation.diff
deleted file mode 100644
index 323b61346..000000000
--- a/tests/mir-opt/unreachable.main.UnreachablePropagation.diff
+++ /dev/null
@@ -1,70 +0,0 @@
-- // MIR for `main` before UnreachablePropagation
-+ // MIR for `main` after UnreachablePropagation
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/unreachable.rs:+0:11: +0:11
- let mut _1: std::option::Option<Empty>; // in scope 0 at $DIR/unreachable.rs:+1:23: +1:30
- let mut _2: isize; // in scope 0 at $DIR/unreachable.rs:+1:12: +1:20
- let _5: (); // in scope 0 at $DIR/unreachable.rs:+4:9: +8:10
- let mut _6: bool; // in scope 0 at $DIR/unreachable.rs:+4:12: +4:16
- let mut _7: !; // in scope 0 at $DIR/unreachable.rs:+10:9: +10:21
- scope 1 {
- debug _x => _3; // in scope 1 at $DIR/unreachable.rs:+1:17: +1:19
- let _3: Empty; // in scope 1 at $DIR/unreachable.rs:+1:17: +1:19
- let mut _4: i32; // in scope 1 at $DIR/unreachable.rs:+2:13: +2:19
- scope 2 {
- debug _y => _4; // in scope 2 at $DIR/unreachable.rs:+2:13: +2:19
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 1 at $DIR/unreachable.rs:+1:23: +1:30
- _1 = empty() -> bb1; // scope 1 at $DIR/unreachable.rs:+1:23: +1:30
- // mir::Constant
- // + span: $DIR/unreachable.rs:10:23: 10:28
- // + literal: Const { ty: fn() -> Option<Empty> {empty}, val: Value(<ZST>) }
- }
-
- bb1: {
- _2 = discriminant(_1); // scope 1 at $DIR/unreachable.rs:+1:12: +1:20
-- switchInt(move _2) -> [1: bb2, otherwise: bb6]; // scope 1 at $DIR/unreachable.rs:+1:12: +1:20
-+ switchInt(move _2) -> [1: bb2, otherwise: bb3]; // scope 1 at $DIR/unreachable.rs:+1:12: +1:20
- }
-
- bb2: {
-- StorageLive(_3); // scope 1 at $DIR/unreachable.rs:+1:17: +1:19
-- _3 = move ((_1 as Some).0: Empty); // scope 1 at $DIR/unreachable.rs:+1:17: +1:19
-- StorageLive(_4); // scope 1 at $DIR/unreachable.rs:+2:13: +2:19
-- StorageLive(_5); // scope 2 at $DIR/unreachable.rs:+4:9: +8:10
-- StorageLive(_6); // scope 2 at $DIR/unreachable.rs:+4:12: +4:16
-- _6 = const true; // scope 2 at $DIR/unreachable.rs:+4:12: +4:16
-- switchInt(move _6) -> [0: bb4, otherwise: bb3]; // scope 2 at $DIR/unreachable.rs:+4:12: +4:16
-+ unreachable; // scope 2 at $DIR/unreachable.rs:+4:12: +4:16
- }
-
- bb3: {
-- _4 = const 21_i32; // scope 2 at $DIR/unreachable.rs:+5:13: +5:20
-- _5 = const (); // scope 2 at $DIR/unreachable.rs:+4:17: +6:10
-- goto -> bb5; // scope 2 at $DIR/unreachable.rs:+4:9: +8:10
-- }
--
-- bb4: {
-- _4 = const 42_i32; // scope 2 at $DIR/unreachable.rs:+7:13: +7:20
-- _5 = const (); // scope 2 at $DIR/unreachable.rs:+6:16: +8:10
-- goto -> bb5; // scope 2 at $DIR/unreachable.rs:+4:9: +8:10
-- }
--
-- bb5: {
-- StorageDead(_6); // scope 2 at $DIR/unreachable.rs:+8:9: +8:10
-- StorageDead(_5); // scope 2 at $DIR/unreachable.rs:+8:9: +8:10
-- StorageLive(_7); // scope 2 at $DIR/unreachable.rs:+10:9: +10:21
-- unreachable; // scope 2 at $DIR/unreachable.rs:+10:15: +10:17
-- }
--
-- bb6: {
- _0 = const (); // scope 0 at $DIR/unreachable.rs:+11:6: +11:6
- StorageDead(_1); // scope 0 at $DIR/unreachable.rs:+12:1: +12:2
- return; // scope 0 at $DIR/unreachable.rs:+12:2: +12:2
- }
- }
-
diff --git a/tests/mir-opt/unreachable.main.UnreachablePropagation.panic-abort.diff b/tests/mir-opt/unreachable.main.UnreachablePropagation.panic-abort.diff
new file mode 100644
index 000000000..eb5a0c39b
--- /dev/null
+++ b/tests/mir-opt/unreachable.main.UnreachablePropagation.panic-abort.diff
@@ -0,0 +1,67 @@
+- // MIR for `main` before UnreachablePropagation
++ // MIR for `main` after UnreachablePropagation
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: std::option::Option<Empty>;
+ let mut _2: isize;
+ let _5: ();
+ let mut _6: bool;
+ let mut _7: !;
+ scope 1 {
+ debug _x => _3;
+ let _3: Empty;
+ let mut _4: i32;
+ scope 2 {
+ debug _y => _4;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = empty() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _2 = discriminant(_1);
+- switchInt(move _2) -> [1: bb2, otherwise: bb6];
++ switchInt(move _2) -> [1: bb2, otherwise: bb3];
+ }
+
+ bb2: {
+- StorageLive(_3);
+- _3 = move ((_1 as Some).0: Empty);
+- StorageLive(_4);
+- StorageLive(_5);
+- StorageLive(_6);
+- _6 = const true;
+- switchInt(move _6) -> [0: bb4, otherwise: bb3];
+- }
+-
+- bb3: {
+- _4 = const 21_i32;
+- _5 = const ();
+- goto -> bb5;
+- }
+-
+- bb4: {
+- _4 = const 42_i32;
+- _5 = const ();
+- goto -> bb5;
+- }
+-
+- bb5: {
+- StorageDead(_6);
+- StorageDead(_5);
+- StorageLive(_7);
+ unreachable;
+ }
+
+- bb6: {
++ bb3: {
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/unreachable.main.UnreachablePropagation.panic-unwind.diff b/tests/mir-opt/unreachable.main.UnreachablePropagation.panic-unwind.diff
new file mode 100644
index 000000000..906dce981
--- /dev/null
+++ b/tests/mir-opt/unreachable.main.UnreachablePropagation.panic-unwind.diff
@@ -0,0 +1,67 @@
+- // MIR for `main` before UnreachablePropagation
++ // MIR for `main` after UnreachablePropagation
+
+ fn main() -> () {
+ let mut _0: ();
+ let mut _1: std::option::Option<Empty>;
+ let mut _2: isize;
+ let _5: ();
+ let mut _6: bool;
+ let mut _7: !;
+ scope 1 {
+ debug _x => _3;
+ let _3: Empty;
+ let mut _4: i32;
+ scope 2 {
+ debug _y => _4;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = empty() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ _2 = discriminant(_1);
+- switchInt(move _2) -> [1: bb2, otherwise: bb6];
++ switchInt(move _2) -> [1: bb2, otherwise: bb3];
+ }
+
+ bb2: {
+- StorageLive(_3);
+- _3 = move ((_1 as Some).0: Empty);
+- StorageLive(_4);
+- StorageLive(_5);
+- StorageLive(_6);
+- _6 = const true;
+- switchInt(move _6) -> [0: bb4, otherwise: bb3];
+- }
+-
+- bb3: {
+- _4 = const 21_i32;
+- _5 = const ();
+- goto -> bb5;
+- }
+-
+- bb4: {
+- _4 = const 42_i32;
+- _5 = const ();
+- goto -> bb5;
+- }
+-
+- bb5: {
+- StorageDead(_6);
+- StorageDead(_5);
+- StorageLive(_7);
+ unreachable;
+ }
+
+- bb6: {
++ bb3: {
+ _0 = const ();
+ StorageDead(_1);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/unreachable.rs b/tests/mir-opt/unreachable.rs
index 97093729d..23fad4737 100644
--- a/tests/mir-opt/unreachable.rs
+++ b/tests/mir-opt/unreachable.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
enum Empty {}
fn empty() -> Option<Empty> {
diff --git a/tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.diff b/tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.diff
deleted file mode 100644
index 94bc63361..000000000
--- a/tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.diff
+++ /dev/null
@@ -1,71 +0,0 @@
-- // MIR for `main` before UnreachablePropagation
-+ // MIR for `main` after UnreachablePropagation
-
- fn main() -> () {
- let mut _0: (); // return place in scope 0 at $DIR/unreachable_diverging.rs:+0:11: +0:11
- let _1: bool; // in scope 0 at $DIR/unreachable_diverging.rs:+1:9: +1:10
- let mut _2: std::option::Option<Empty>; // in scope 0 at $DIR/unreachable_diverging.rs:+2:25: +2:32
- let mut _3: isize; // in scope 0 at $DIR/unreachable_diverging.rs:+2:12: +2:22
- let _5: (); // in scope 0 at $DIR/unreachable_diverging.rs:+3:9: +5:10
- let mut _6: bool; // in scope 0 at $DIR/unreachable_diverging.rs:+3:12: +3:13
- let mut _7: !; // in scope 0 at $DIR/unreachable_diverging.rs:+6:9: +6:22
- scope 1 {
- debug x => _1; // in scope 1 at $DIR/unreachable_diverging.rs:+1:9: +1:10
- scope 2 {
- debug bomb => _4; // in scope 2 at $DIR/unreachable_diverging.rs:+2:17: +2:21
- let _4: Empty; // in scope 2 at $DIR/unreachable_diverging.rs:+2:17: +2:21
- }
- }
-
- bb0: {
- StorageLive(_1); // scope 0 at $DIR/unreachable_diverging.rs:+1:9: +1:10
- _1 = const true; // scope 0 at $DIR/unreachable_diverging.rs:+1:13: +1:17
- StorageLive(_2); // scope 2 at $DIR/unreachable_diverging.rs:+2:25: +2:32
- _2 = empty() -> bb1; // scope 2 at $DIR/unreachable_diverging.rs:+2:25: +2:32
- // mir::Constant
- // + span: $DIR/unreachable_diverging.rs:15:25: 15:30
- // + literal: Const { ty: fn() -> Option<Empty> {empty}, val: Value(<ZST>) }
- }
-
- bb1: {
- _3 = discriminant(_2); // scope 2 at $DIR/unreachable_diverging.rs:+2:12: +2:22
- switchInt(move _3) -> [1: bb2, otherwise: bb6]; // scope 2 at $DIR/unreachable_diverging.rs:+2:12: +2:22
- }
-
- bb2: {
- StorageLive(_4); // scope 2 at $DIR/unreachable_diverging.rs:+2:17: +2:21
- _4 = move ((_2 as Some).0: Empty); // scope 2 at $DIR/unreachable_diverging.rs:+2:17: +2:21
- StorageLive(_5); // scope 2 at $DIR/unreachable_diverging.rs:+3:9: +5:10
- StorageLive(_6); // scope 2 at $DIR/unreachable_diverging.rs:+3:12: +3:13
- _6 = _1; // scope 2 at $DIR/unreachable_diverging.rs:+3:12: +3:13
- switchInt(move _6) -> [0: bb4, otherwise: bb3]; // scope 2 at $DIR/unreachable_diverging.rs:+3:12: +3:13
- }
-
- bb3: {
- _5 = loop_forever() -> bb5; // scope 2 at $DIR/unreachable_diverging.rs:+4:13: +4:27
- // mir::Constant
- // + span: $DIR/unreachable_diverging.rs:17:13: 17:25
- // + literal: Const { ty: fn() {loop_forever}, val: Value(<ZST>) }
- }
-
- bb4: {
-- _5 = const (); // scope 2 at $DIR/unreachable_diverging.rs:+5:10: +5:10
-- goto -> bb5; // scope 2 at $DIR/unreachable_diverging.rs:+3:9: +5:10
-+ unreachable; // scope 2 at $DIR/unreachable_diverging.rs:+3:9: +5:10
- }
-
- bb5: {
-- StorageDead(_6); // scope 2 at $DIR/unreachable_diverging.rs:+5:9: +5:10
-- StorageDead(_5); // scope 2 at $DIR/unreachable_diverging.rs:+5:9: +5:10
-- StorageLive(_7); // scope 2 at $DIR/unreachable_diverging.rs:+6:9: +6:22
- unreachable; // scope 2 at $DIR/unreachable_diverging.rs:+6:15: +6:19
- }
-
- bb6: {
- _0 = const (); // scope 1 at $DIR/unreachable_diverging.rs:+7:6: +7:6
- StorageDead(_1); // scope 0 at $DIR/unreachable_diverging.rs:+8:1: +8:2
- StorageDead(_2); // scope 0 at $DIR/unreachable_diverging.rs:+8:1: +8:2
- return; // scope 0 at $DIR/unreachable_diverging.rs:+8:2: +8:2
- }
- }
-
diff --git a/tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.panic-abort.diff b/tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.panic-abort.diff
new file mode 100644
index 000000000..713757ce6
--- /dev/null
+++ b/tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.panic-abort.diff
@@ -0,0 +1,65 @@
+- // MIR for `main` before UnreachablePropagation
++ // MIR for `main` after UnreachablePropagation
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: bool;
+ let mut _2: std::option::Option<Empty>;
+ let mut _3: isize;
+ let _5: ();
+ let mut _6: bool;
+ let mut _7: !;
+ scope 1 {
+ debug x => _1;
+ scope 2 {
+ debug bomb => _4;
+ let _4: Empty;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const true;
+ StorageLive(_2);
+ _2 = empty() -> [return: bb1, unwind unreachable];
+ }
+
+ bb1: {
+ _3 = discriminant(_2);
+ switchInt(move _3) -> [1: bb2, otherwise: bb6];
+ }
+
+ bb2: {
+ StorageLive(_4);
+ _4 = move ((_2 as Some).0: Empty);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = _1;
+ switchInt(move _6) -> [0: bb4, otherwise: bb3];
+ }
+
+ bb3: {
+ _5 = loop_forever() -> [return: bb5, unwind unreachable];
+ }
+
+ bb4: {
+- _5 = const ();
+- goto -> bb5;
++ unreachable;
+ }
+
+ bb5: {
+- StorageDead(_6);
+- StorageDead(_5);
+- StorageLive(_7);
+ unreachable;
+ }
+
+ bb6: {
+ _0 = const ();
+ StorageDead(_1);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.panic-unwind.diff b/tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.panic-unwind.diff
new file mode 100644
index 000000000..a0479fb91
--- /dev/null
+++ b/tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.panic-unwind.diff
@@ -0,0 +1,65 @@
+- // MIR for `main` before UnreachablePropagation
++ // MIR for `main` after UnreachablePropagation
+
+ fn main() -> () {
+ let mut _0: ();
+ let _1: bool;
+ let mut _2: std::option::Option<Empty>;
+ let mut _3: isize;
+ let _5: ();
+ let mut _6: bool;
+ let mut _7: !;
+ scope 1 {
+ debug x => _1;
+ scope 2 {
+ debug bomb => _4;
+ let _4: Empty;
+ }
+ }
+
+ bb0: {
+ StorageLive(_1);
+ _1 = const true;
+ StorageLive(_2);
+ _2 = empty() -> [return: bb1, unwind continue];
+ }
+
+ bb1: {
+ _3 = discriminant(_2);
+ switchInt(move _3) -> [1: bb2, otherwise: bb6];
+ }
+
+ bb2: {
+ StorageLive(_4);
+ _4 = move ((_2 as Some).0: Empty);
+ StorageLive(_5);
+ StorageLive(_6);
+ _6 = _1;
+ switchInt(move _6) -> [0: bb4, otherwise: bb3];
+ }
+
+ bb3: {
+ _5 = loop_forever() -> [return: bb5, unwind continue];
+ }
+
+ bb4: {
+- _5 = const ();
+- goto -> bb5;
++ unreachable;
+ }
+
+ bb5: {
+- StorageDead(_6);
+- StorageDead(_5);
+- StorageLive(_7);
+ unreachable;
+ }
+
+ bb6: {
+ _0 = const ();
+ StorageDead(_1);
+ StorageDead(_2);
+ return;
+ }
+ }
+
diff --git a/tests/mir-opt/unreachable_diverging.rs b/tests/mir-opt/unreachable_diverging.rs
index 24e776148..b7d308b86 100644
--- a/tests/mir-opt/unreachable_diverging.rs
+++ b/tests/mir-opt/unreachable_diverging.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
pub enum Empty {}
fn empty() -> Option<Empty> {
diff --git a/tests/mir-opt/unusual_item_types.E-V-{constant#0}.built.after.mir b/tests/mir-opt/unusual_item_types.E-V-{constant#0}.built.after.mir
index 5257491f0..993e668b0 100644
--- a/tests/mir-opt/unusual_item_types.E-V-{constant#0}.built.after.mir
+++ b/tests/mir-opt/unusual_item_types.E-V-{constant#0}.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `E::V::{constant#0}` after built
E::V::{constant#0}: isize = {
- let mut _0: isize; // return place in scope 0 at $DIR/unusual_item_types.rs:+0:9: +0:10
+ let mut _0: isize;
bb0: {
- _0 = const 5_isize; // scope 0 at $DIR/unusual_item_types.rs:+0:9: +0:10
- return; // scope 0 at $DIR/unusual_item_types.rs:+0:9: +0:10
+ _0 = const 5_isize;
+ return;
}
}
diff --git a/tests/mir-opt/unusual_item_types.Test-X-{constructor#0}.built.after.mir b/tests/mir-opt/unusual_item_types.Test-X-{constructor#0}.built.after.mir
index 8b271135c..1e497b412 100644
--- a/tests/mir-opt/unusual_item_types.Test-X-{constructor#0}.built.after.mir
+++ b/tests/mir-opt/unusual_item_types.Test-X-{constructor#0}.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `Test::X` after built
fn Test::X(_1: usize) -> Test {
- let mut _0: Test; // return place in scope 0 at $DIR/unusual_item_types.rs:+0:5: +0:6
+ let mut _0: Test;
bb0: {
- _0 = Test::X(move _1); // scope 0 at $DIR/unusual_item_types.rs:+0:5: +0:6
- return; // scope 0 at $DIR/unusual_item_types.rs:+0:5: +0:6
+ _0 = Test::X(move _1);
+ return;
}
}
diff --git a/tests/mir-opt/unusual_item_types.core.ptr-drop_in_place.Vec_i32_.AddMovesForPackedDrops.before.mir b/tests/mir-opt/unusual_item_types.core.ptr-drop_in_place.Vec_i32_.AddMovesForPackedDrops.before.mir
index c27a93e91..ee90a5407 100644
--- a/tests/mir-opt/unusual_item_types.core.ptr-drop_in_place.Vec_i32_.AddMovesForPackedDrops.before.mir
+++ b/tests/mir-opt/unusual_item_types.core.ptr-drop_in_place.Vec_i32_.AddMovesForPackedDrops.before.mir
@@ -1,39 +1,36 @@
// MIR for `std::ptr::drop_in_place` before AddMovesForPackedDrops
fn std::ptr::drop_in_place(_1: *mut Vec<i32>) -> () {
- let mut _0: (); // return place in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- let mut _2: &mut std::vec::Vec<i32>; // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- let mut _3: (); // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ let mut _0: ();
+ let mut _2: &mut std::vec::Vec<i32>;
+ let mut _3: ();
bb0: {
- goto -> bb6; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ goto -> bb6;
}
bb1: {
- return; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ return;
}
bb2 (cleanup): {
- resume; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ resume;
}
bb3: {
- goto -> bb1; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ goto -> bb1;
}
bb4 (cleanup): {
- drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> [return: bb2, unwind terminate]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> [return: bb2, unwind terminate];
}
bb5: {
- drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> [return: bb3, unwind: bb2]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
+ drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> [return: bb3, unwind: bb2];
}
bb6: {
- _2 = &mut (*_1); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- _3 = <Vec<i32> as Drop>::drop(move _2) -> [return: bb5, unwind: bb4]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:+0:1: +0:56
- // mir::Constant
- // + span: $SRC_DIR/core/src/ptr/mod.rs:LL:COL
- // + literal: Const { ty: for<'a> fn(&'a mut Vec<i32>) {<Vec<i32> as Drop>::drop}, val: Value(<ZST>) }
+ _2 = &mut (*_1);
+ _3 = <Vec<i32> as Drop>::drop(move _2) -> [return: bb5, unwind: bb4];
}
}
diff --git a/tests/mir-opt/unusual_item_types.{impl#0}-ASSOCIATED_CONSTANT.built.after.mir b/tests/mir-opt/unusual_item_types.{impl#0}-ASSOCIATED_CONSTANT.built.after.mir
index 90444b481..e2edbfcd4 100644
--- a/tests/mir-opt/unusual_item_types.{impl#0}-ASSOCIATED_CONSTANT.built.after.mir
+++ b/tests/mir-opt/unusual_item_types.{impl#0}-ASSOCIATED_CONSTANT.built.after.mir
@@ -1,10 +1,10 @@
// MIR for `<impl at $DIR/unusual_item_types.rs:9:1: 9:7>::ASSOCIATED_CONSTANT` after built
const <impl at $DIR/unusual_item_types.rs:9:1: 9:7>::ASSOCIATED_CONSTANT: i32 = {
- let mut _0: i32; // return place in scope 0 at $DIR/unusual_item_types.rs:+0:32: +0:35
+ let mut _0: i32;
bb0: {
- _0 = const 2_i32; // scope 0 at $DIR/unusual_item_types.rs:+0:38: +0:39
- return; // scope 0 at $DIR/unusual_item_types.rs:+0:5: +0:40
+ _0 = const 2_i32;
+ return;
}
}
diff --git a/tests/mir-opt/while_storage.rs b/tests/mir-opt/while_storage.rs
index d10048dd9..d4fb54da5 100644
--- a/tests/mir-opt/while_storage.rs
+++ b/tests/mir-opt/while_storage.rs
@@ -1,4 +1,4 @@
-// ignore-wasm32 compiled with panic=abort by default
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Test that we correctly generate StorageDead statements for while loop
// conditions on all branches
diff --git a/tests/mir-opt/while_storage.while_loop.PreCodegen.after.mir b/tests/mir-opt/while_storage.while_loop.PreCodegen.after.mir
deleted file mode 100644
index 811789a60..000000000
--- a/tests/mir-opt/while_storage.while_loop.PreCodegen.after.mir
+++ /dev/null
@@ -1,52 +0,0 @@
-// MIR for `while_loop` after PreCodegen
-
-fn while_loop(_1: bool) -> () {
- debug c => _1; // in scope 0 at $DIR/while_storage.rs:+0:15: +0:16
- let mut _0: (); // return place in scope 0 at $DIR/while_storage.rs:+0:24: +0:24
- let mut _2: bool; // in scope 0 at $DIR/while_storage.rs:+1:11: +1:22
- let mut _3: bool; // in scope 0 at $DIR/while_storage.rs:+2:12: +2:23
-
- bb0: {
- goto -> bb1; // scope 0 at $DIR/while_storage.rs:+1:5: +5:6
- }
-
- bb1: {
- StorageLive(_2); // scope 0 at $DIR/while_storage.rs:+1:11: +1:22
- _2 = get_bool(_1) -> bb2; // scope 0 at $DIR/while_storage.rs:+1:11: +1:22
- // mir::Constant
- // + span: $DIR/while_storage.rs:11:11: 11:19
- // + literal: Const { ty: fn(bool) -> bool {get_bool}, val: Value(<ZST>) }
- }
-
- bb2: {
- switchInt(move _2) -> [0: bb7, otherwise: bb3]; // scope 0 at $DIR/while_storage.rs:+1:11: +1:22
- }
-
- bb3: {
- StorageLive(_3); // scope 0 at $DIR/while_storage.rs:+2:12: +2:23
- _3 = get_bool(_1) -> bb4; // scope 0 at $DIR/while_storage.rs:+2:12: +2:23
- // mir::Constant
- // + span: $DIR/while_storage.rs:12:12: 12:20
- // + literal: Const { ty: fn(bool) -> bool {get_bool}, val: Value(<ZST>) }
- }
-
- bb4: {
- switchInt(move _3) -> [0: bb6, otherwise: bb5]; // scope 0 at $DIR/while_storage.rs:+2:12: +2:23
- }
-
- bb5: {
- StorageDead(_3); // scope 0 at $DIR/while_storage.rs:+4:9: +4:10
- goto -> bb7; // scope 0 at no-location
- }
-
- bb6: {
- StorageDead(_3); // scope 0 at $DIR/while_storage.rs:+4:9: +4:10
- StorageDead(_2); // scope 0 at $DIR/while_storage.rs:+5:5: +5:6
- goto -> bb1; // scope 0 at $DIR/while_storage.rs:+1:5: +5:6
- }
-
- bb7: {
- StorageDead(_2); // scope 0 at $DIR/while_storage.rs:+5:5: +5:6
- return; // scope 0 at $DIR/while_storage.rs:+6:2: +6:2
- }
-}
diff --git a/tests/mir-opt/while_storage.while_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/while_storage.while_loop.PreCodegen.after.panic-abort.mir
new file mode 100644
index 000000000..c04fdeb63
--- /dev/null
+++ b/tests/mir-opt/while_storage.while_loop.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,46 @@
+// MIR for `while_loop` after PreCodegen
+
+fn while_loop(_1: bool) -> () {
+ debug c => _1;
+ let mut _0: ();
+ let mut _2: bool;
+ let mut _3: bool;
+
+ bb0: {
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageLive(_2);
+ _2 = get_bool(_1) -> [return: bb2, unwind unreachable];
+ }
+
+ bb2: {
+ switchInt(move _2) -> [0: bb7, otherwise: bb3];
+ }
+
+ bb3: {
+ StorageLive(_3);
+ _3 = get_bool(_1) -> [return: bb4, unwind unreachable];
+ }
+
+ bb4: {
+ switchInt(move _3) -> [0: bb5, otherwise: bb6];
+ }
+
+ bb5: {
+ StorageDead(_3);
+ StorageDead(_2);
+ goto -> bb1;
+ }
+
+ bb6: {
+ StorageDead(_3);
+ goto -> bb7;
+ }
+
+ bb7: {
+ StorageDead(_2);
+ return;
+ }
+}
diff --git a/tests/mir-opt/while_storage.while_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/while_storage.while_loop.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 000000000..7dc4f7ab1
--- /dev/null
+++ b/tests/mir-opt/while_storage.while_loop.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,46 @@
+// MIR for `while_loop` after PreCodegen
+
+fn while_loop(_1: bool) -> () {
+ debug c => _1;
+ let mut _0: ();
+ let mut _2: bool;
+ let mut _3: bool;
+
+ bb0: {
+ goto -> bb1;
+ }
+
+ bb1: {
+ StorageLive(_2);
+ _2 = get_bool(_1) -> [return: bb2, unwind continue];
+ }
+
+ bb2: {
+ switchInt(move _2) -> [0: bb7, otherwise: bb3];
+ }
+
+ bb3: {
+ StorageLive(_3);
+ _3 = get_bool(_1) -> [return: bb4, unwind continue];
+ }
+
+ bb4: {
+ switchInt(move _3) -> [0: bb5, otherwise: bb6];
+ }
+
+ bb5: {
+ StorageDead(_3);
+ StorageDead(_2);
+ goto -> bb1;
+ }
+
+ bb6: {
+ StorageDead(_3);
+ goto -> bb7;
+ }
+
+ bb7: {
+ StorageDead(_2);
+ return;
+ }
+}