From a0b8f38ab54ac451646aa00cd5e91b6c76f22a84 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 30 May 2024 05:57:19 +0200 Subject: Merging upstream version 1.72.1+dfsg1. Signed-off-by: Daniel Baumann --- tests/assembly/asm/mips-types.rs | 12 +- .../stack-protector-heuristics-effect.rs | 2 +- tests/codegen/array-codegen.rs | 35 + tests/codegen/array-map.rs | 11 - tests/codegen/autovectorize-f32x4.rs | 7 +- tests/codegen/box-maybe-uninit-llvm14.rs | 2 +- tests/codegen/box-maybe-uninit.rs | 4 +- tests/codegen/call-metadata.rs | 2 +- tests/codegen/const_scalar_pair.rs | 10 + tests/codegen/debug-column.rs | 4 +- tests/codegen/drop.rs | 1 + tests/codegen/enum-debug-niche-2.rs | 4 +- tests/codegen/enum-u128.rs | 27 + tests/codegen/external-no-mangle-statics.rs | 32 +- tests/codegen/intrinsics/transmute.rs | 75 +- .../codegen/issues/issue-105386-ub-in-debuginfo.rs | 7 +- tests/codegen/issues/issue-111603.rs | 12 + tests/codegen/issues/issue-114312.rs | 27 + tests/codegen/issues/issue-86106.rs | 4 +- tests/codegen/link_section.rs | 8 +- tests/codegen/mem-replace-simple-type.rs | 20 + tests/codegen/mir-inlined-line-numbers.rs | 2 +- tests/codegen/naked-nocoverage.rs | 2 +- tests/codegen/naked-noinline.rs | 4 +- tests/codegen/personality_lifetimes.rs | 1 + tests/codegen/ptr-read-metadata.rs | 16 +- ...er-cfi-emit-type-metadata-id-itanium-cxx-abi.rs | 20 +- tests/codegen/sanitizer-safestack-attr-check.rs | 11 + tests/codegen/slice-iter-fold.rs | 14 + tests/codegen/stack-protector.rs | 36 +- tests/codegen/swap-simd-types.rs | 9 + tests/codegen/swap-small-types.rs | 40 +- tests/codegen/tuple-layout-opt.rs | 12 +- tests/codegen/unchecked_shifts.rs | 4 + tests/codegen/union-abi.rs | 20 +- tests/codegen/unwind-abis/c-unwind-abi.rs | 1 + tests/codegen/unwind-abis/cdecl-unwind-abi.rs | 1 + .../unwind-abis/nounwind-on-stable-panic-unwind.rs | 1 + tests/codegen/unwind-abis/system-unwind-abi.rs | 1 + tests/codegen/unwind-extern-exports.rs | 1 + tests/codegen/unwind-extern-imports.rs | 1 + tests/codegen/vec-shrink-panik.rs | 9 +- .../const-generics/hash-tyvid-regression-1.rs | 14 +- .../const-generics/hash-tyvid-regression-2.rs | 16 +- .../issue-77708-3.rs | 13 +- tests/incremental/hashes/match_expressions.rs | 1 + tests/incremental/issue-101518.rs | 13 +- .../auxiliary/egui_inspect_derive.rs | 90 + .../issue-110457-same-span-closures/main.rs | 47 + ...dress_of_reborrow.SimplifyCfg-initial.after.mir | 482 ++--- ...f.borrow_and_cast.SimplifyCfg-initial.after.mir | 68 +- ...rary.main.SimplifyCfg-elaborate-drops.after.mir | 64 - ...mplifyCfg-elaborate-drops.after.panic-abort.mir | 61 + ...plifyCfg-elaborate-drops.after.panic-unwind.mir | 61 + tests/mir-opt/array_index_is_temporary.rs | 2 +- ..._panic_abort.main.AbortUnwindingCalls.after.mir | 16 +- .../basic_assignment.main.ElaborateDrops.diff | 90 +- ...c_assignment.main.SimplifyCfg-initial.after.mir | 86 +- tests/mir-opt/bool_compare.opt1.InstSimplify.diff | 34 +- tests/mir-opt/bool_compare.opt2.InstSimplify.diff | 34 +- tests/mir-opt/bool_compare.opt3.InstSimplify.diff | 34 +- tests/mir-opt/bool_compare.opt4.InstSimplify.diff | 34 +- .../box_expr.main.ElaborateDrops.before.mir | 80 - ...expr.main.ElaborateDrops.before.panic-abort.mir | 71 + ...xpr.main.ElaborateDrops.before.panic-unwind.mir | 71 + tests/mir-opt/box_expr.rs | 2 +- ...sync_await.a-{closure#0}.generator_resume.0.mir | 28 +- ...sync_await.b-{closure#0}.generator_resume.0.mir | 388 ++-- .../custom/aggregate_exprs.adt.built.after.mir | 18 +- .../custom/aggregate_exprs.array.built.after.mir | 16 +- .../custom/aggregate_exprs.tuple.built.after.mir | 6 +- .../arbitrary_let.arbitrary_let.built.after.mir | 18 +- .../building/custom/arrays.arrays.built.after.mir | 14 +- .../custom/as_cast.float_to_int.built.after.mir | 6 +- .../custom/as_cast.int_to_int.built.after.mir | 6 +- .../custom/as_cast.int_to_ptr.built.after.mir | 6 +- .../custom/composite_return.tuple.built.after.mir | 8 +- .../building/custom/consts.consts.built.after.mir | 27 +- .../building/custom/consts.statics.built.after.mir | 18 +- .../custom/enums.set_discr.built.after.mir | 8 +- .../custom/enums.set_discr_repr.built.after.mir | 6 +- .../custom/enums.switch_bool.built.after.mir | 12 +- .../custom/enums.switch_option.built.after.mir | 16 +- .../enums.switch_option_repr.built.after.mir | 16 +- .../building/custom/operators.f.built.after.mir | 46 +- .../projections.copy_for_deref.built.after.mir | 10 +- .../custom/projections.set.built.after.mir | 6 +- .../projections.simple_index.built.after.mir | 12 +- .../custom/projections.tuples.built.after.mir | 8 +- .../custom/projections.unions.built.after.mir | 6 +- .../custom/projections.unwrap.built.after.mir | 6 +- .../projections.unwrap_deref.built.after.mir | 6 +- .../custom/references.immut_ref.built.after.mir | 12 +- .../custom/references.mut_ref.built.after.mir | 12 +- .../custom/references.raw_pointer.built.after.mir | 6 +- .../references.raw_pointer_offset.built.after.mir | 6 +- .../custom/simple_assign.simple.built.after.mir | 20 +- .../simple_assign.simple_ref.built.after.mir | 6 +- .../terminators.assert_nonzero.built.after.mir | 8 +- .../custom/terminators.direct_call.built.after.mir | 9 +- .../custom/terminators.drop_first.built.after.mir | 8 +- .../custom/terminators.drop_second.built.after.mir | 6 +- .../terminators.indirect_call.built.after.mir | 6 +- .../mir-opt/building/enum_cast.bar.built.after.mir | 30 +- .../mir-opt/building/enum_cast.boo.built.after.mir | 30 +- .../building/enum_cast.droppy.built.after.mir | 82 +- .../mir-opt/building/enum_cast.far.built.after.mir | 30 +- .../mir-opt/building/enum_cast.foo.built.after.mir | 20 +- .../building/enum_cast.offsetty.built.after.mir | 38 +- .../building/enum_cast.signy.built.after.mir | 38 +- .../building/enum_cast.unsigny.built.after.mir | 20 +- .../building/issue_101867.main.built.after.mir | 72 +- tests/mir-opt/building/issue_110508.rs | 13 + .../issue_110508.{impl#0}-BAR.built.after.mir | 14 + .../issue_110508.{impl#0}-SELF_BAR.built.after.mir | 14 + .../building/issue_49232.main.built.after.mir | 77 +- ...h_false_edges.full_tested_match.built.after.mir | 125 +- ..._false_edges.full_tested_match2.built.after.mir | 125 +- .../match_false_edges.main.built.after.mir | 190 +- .../receiver_ptr_mutability.main.built.after.mir | 125 +- .../building/shifts.shift_signed.built.after.mir | 238 +-- .../building/shifts.shift_unsigned.built.after.mir | 214 +-- .../simple_match.match_bool.built.after.mir | 20 +- ...torage_live_dead_in_statics.XXX.built.after.mir | 389 ++-- ...y_move_out.move_out_by_subslice.built.after.mir | 116 +- ...rray_move_out.move_out_from_end.built.after.mir | 116 +- ...lice.main.SimplifyCfg-elaborate-drops.after.mir | 29 +- tests/mir-opt/casts.redundant.InstSimplify.diff | 30 +- tests/mir-opt/casts.redundant.PreCodegen.after.mir | 12 +- tests/mir-opt/casts.roundtrip.PreCodegen.after.mir | 16 +- .../combine_array_len.norm2.InstSimplify.diff | 77 - ...e_array_len.norm2.InstSimplify.panic-abort.diff | 77 + ..._array_len.norm2.InstSimplify.panic-unwind.diff | 77 + tests/mir-opt/combine_array_len.rs | 2 +- tests/mir-opt/combine_clone_of_primitives.rs | 2 +- ..._of_primitives.{impl#0}-clone.InstSimplify.diff | 82 - ...es.{impl#0}-clone.InstSimplify.panic-abort.diff | 65 + ...s.{impl#0}-clone.InstSimplify.panic-unwind.diff | 73 + ...ine_transmutes.adt_transmutes.InstSimplify.diff | 125 +- ...ransmutes.identity_transmutes.InstSimplify.diff | 44 +- ...transmutes.integer_transmutes.InstSimplify.diff | 30 +- ...const_allocation.main.ConstProp.after.32bit.mir | 25 +- ...const_allocation.main.ConstProp.after.64bit.mir | 25 +- ...onst_allocation2.main.ConstProp.after.32bit.mir | 25 +- ...onst_allocation2.main.ConstProp.after.64bit.mir | 25 +- ...onst_allocation3.main.ConstProp.after.32bit.mir | 25 +- ...onst_allocation3.main.ConstProp.after.64bit.mir | 25 +- .../const_debuginfo.main.ConstDebugInfo.diff | 131 +- .../const_goto.issue_77355_opt.ConstGoto.diff | 56 +- .../const_goto_const_eval_fail.f.ConstGoto.diff | 44 +- tests/mir-opt/const_goto_const_eval_fail.rs | 2 + ...nst_goto_storage.match_nested_if.ConstGoto.diff | 129 +- ...omoted[0].SimplifyCfg-elaborate-drops.after.mir | 21 +- ...t_promotion_extern_static.BAR.PromoteTemps.diff | 62 +- ...nst_promotion_extern_static.BOP.built.after.mir | 20 +- ...omoted[0].SimplifyCfg-elaborate-drops.after.mir | 21 +- ...t_promotion_extern_static.FOO.PromoteTemps.diff | 62 +- .../const_prop/address_of_pair.fn0.ConstProp.diff | 58 +- .../const_prop/aggregate.foo.ConstProp.diff | 55 - .../aggregate.foo.ConstProp.panic-abort.diff | 55 + .../aggregate.foo.ConstProp.panic-unwind.diff | 55 + .../const_prop/aggregate.foo.PreCodegen.after.mir | 49 - .../aggregate.foo.PreCodegen.after.panic-abort.mir | 49 + ...aggregate.foo.PreCodegen.after.panic-unwind.mir | 49 + .../const_prop/aggregate.main.ConstProp.diff | 44 - .../aggregate.main.ConstProp.panic-abort.diff | 41 + .../aggregate.main.ConstProp.panic-unwind.diff | 41 + .../const_prop/aggregate.main.PreCodegen.after.mir | 39 - ...aggregate.main.PreCodegen.after.panic-abort.mir | 36 + ...ggregate.main.PreCodegen.after.panic-unwind.mir | 36 + tests/mir-opt/const_prop/aggregate.rs | 2 +- .../array_index.main.ConstProp.32bit.diff | 39 - ...ray_index.main.ConstProp.32bit.panic-abort.diff | 39 + ...ay_index.main.ConstProp.32bit.panic-unwind.diff | 39 + .../array_index.main.ConstProp.64bit.diff | 39 - ...ray_index.main.ConstProp.64bit.panic-abort.diff | 39 + ...ay_index.main.ConstProp.64bit.panic-unwind.diff | 39 + tests/mir-opt/const_prop/array_index.rs | 2 +- .../bad_op_div_by_zero.main.ConstProp.diff | 53 - ..._op_div_by_zero.main.ConstProp.panic-abort.diff | 53 + ...op_div_by_zero.main.ConstProp.panic-unwind.diff | 53 + tests/mir-opt/const_prop/bad_op_div_by_zero.rs | 2 +- .../bad_op_mod_by_zero.main.ConstProp.diff | 53 - ..._op_mod_by_zero.main.ConstProp.panic-abort.diff | 53 + ...op_mod_by_zero.main.ConstProp.panic-unwind.diff | 53 + tests/mir-opt/const_prop/bad_op_mod_by_zero.rs | 2 +- ...unsafe_oob_for_slices.main.ConstProp.32bit.diff | 57 - ...or_slices.main.ConstProp.32bit.panic-abort.diff | 54 + ...r_slices.main.ConstProp.32bit.panic-unwind.diff | 54 + ...unsafe_oob_for_slices.main.ConstProp.64bit.diff | 57 - ...or_slices.main.ConstProp.64bit.panic-abort.diff | 54 + ...r_slices.main.ConstProp.64bit.panic-unwind.diff | 54 + .../const_prop/bad_op_unsafe_oob_for_slices.rs | 2 +- .../boolean_identities.test.ConstProp.diff | 36 +- tests/mir-opt/const_prop/boxes.main.ConstProp.diff | 60 - .../boxes.main.ConstProp.panic-abort.diff | 53 + .../boxes.main.ConstProp.panic-unwind.diff | 57 + tests/mir-opt/const_prop/boxes.rs | 2 +- tests/mir-opt/const_prop/cast.main.ConstProp.diff | 30 +- .../const_prop/checked_add.main.ConstProp.diff | 28 - .../checked_add.main.ConstProp.panic-abort.diff | 28 + .../checked_add.main.ConstProp.panic-unwind.diff | 28 + tests/mir-opt/const_prop/checked_add.rs | 2 +- ...const_prop_fails_gracefully.main.ConstProp.diff | 44 - ...ails_gracefully.main.ConstProp.panic-abort.diff | 38 + ...ils_gracefully.main.ConstProp.panic-unwind.diff | 38 + .../const_prop/const_prop_fails_gracefully.rs | 2 +- ...ontrol_flow_simplification.hello.ConstProp.diff | 31 - ...simplification.hello.ConstProp.panic-abort.diff | 25 + ...implification.hello.ConstProp.panic-unwind.diff | 25 + ...flow_simplification.hello.PreCodegen.before.mir | 9 - ...ication.hello.PreCodegen.before.panic-abort.mir | 9 + ...cation.hello.PreCodegen.before.panic-unwind.mir | 9 + .../const_prop/control_flow_simplification.rs | 2 +- .../discriminant.main.ConstProp.32bit.diff | 57 +- .../discriminant.main.ConstProp.64bit.diff | 57 +- .../const_prop/indirect.main.ConstProp.diff | 33 - .../indirect.main.ConstProp.panic-abort.diff | 33 + .../indirect.main.ConstProp.panic-unwind.diff | 33 + tests/mir-opt/const_prop/indirect.rs | 2 +- .../inherit_overflow.main.ConstProp.diff | 39 - ...nherit_overflow.main.ConstProp.panic-abort.diff | 39 + ...herit_overflow.main.ConstProp.panic-unwind.diff | 39 + tests/mir-opt/const_prop/inherit_overflow.rs | 2 +- .../invalid_constant.main.ConstProp.diff | 91 +- .../invalid_constant.main.RemoveZsts.diff | 106 +- .../const_prop/issue_66971.main.ConstProp.diff | 23 - .../issue_66971.main.ConstProp.panic-abort.diff | 20 + .../issue_66971.main.ConstProp.panic-unwind.diff | 20 + tests/mir-opt/const_prop/issue_66971.rs | 2 +- .../const_prop/issue_67019.main.ConstProp.diff | 28 - .../issue_67019.main.ConstProp.panic-abort.diff | 25 + .../issue_67019.main.ConstProp.panic-unwind.diff | 25 + tests/mir-opt/const_prop/issue_67019.rs | 2 +- .../large_array_index.main.ConstProp.32bit.diff | 39 - ...ray_index.main.ConstProp.32bit.panic-abort.diff | 39 + ...ay_index.main.ConstProp.32bit.panic-unwind.diff | 39 + .../large_array_index.main.ConstProp.64bit.diff | 39 - ...ray_index.main.ConstProp.64bit.panic-abort.diff | 39 + ...ay_index.main.ConstProp.64bit.panic-unwind.diff | 39 + tests/mir-opt/const_prop/large_array_index.rs | 2 +- .../const_prop/mult_by_zero.test.ConstProp.diff | 18 +- .../mutable_variable.main.ConstProp.diff | 30 +- .../mutable_variable_aggregate.main.ConstProp.diff | 32 +- ..._variable_aggregate_mut_ref.main.ConstProp.diff | 38 +- ...able_aggregate_partial_read.main.ConstProp.diff | 35 - ...te_partial_read.main.ConstProp.panic-abort.diff | 32 + ...e_partial_read.main.ConstProp.panic-unwind.diff | 32 + .../mutable_variable_aggregate_partial_read.rs | 2 +- .../mutable_variable_no_prop.main.ConstProp.diff | 55 +- ...able_variable_unprop_assign.main.ConstProp.diff | 53 - ...e_unprop_assign.main.ConstProp.panic-abort.diff | 50 + ..._unprop_assign.main.ConstProp.panic-unwind.diff | 50 + .../const_prop/mutable_variable_unprop_assign.rs | 2 +- .../const_prop/offset_of.concrete.ConstProp.diff | 44 - .../offset_of.concrete.ConstProp.panic-abort.diff | 72 + .../offset_of.concrete.ConstProp.panic-unwind.diff | 72 + .../const_prop/offset_of.generic.ConstProp.diff | 40 - .../offset_of.generic.ConstProp.panic-abort.diff | 68 + .../offset_of.generic.ConstProp.panic-unwind.diff | 68 + tests/mir-opt/const_prop/offset_of.rs | 1 + .../read_immutable_static.main.ConstProp.diff | 60 +- .../const_prop/ref_deref.main.ConstProp.diff | 31 +- .../ref_deref_project.main.ConstProp.diff | 31 +- .../const_prop/reify_fn_ptr.main.ConstProp.diff | 33 +- .../const_prop/repeat.main.ConstProp.32bit.diff | 44 - .../repeat.main.ConstProp.32bit.panic-abort.diff | 44 + .../repeat.main.ConstProp.32bit.panic-unwind.diff | 44 + .../const_prop/repeat.main.ConstProp.64bit.diff | 44 - .../repeat.main.ConstProp.64bit.panic-abort.diff | 44 + .../repeat.main.ConstProp.64bit.panic-unwind.diff | 44 + tests/mir-opt/const_prop/repeat.rs | 2 +- .../const_prop/return_place.add.ConstProp.diff | 21 - .../return_place.add.ConstProp.panic-abort.diff | 21 + .../return_place.add.ConstProp.panic-unwind.diff | 21 + .../return_place.add.PreCodegen.before.mir | 16 - ...urn_place.add.PreCodegen.before.panic-abort.mir | 16 + ...rn_place.add.PreCodegen.before.panic-unwind.mir | 16 + tests/mir-opt/const_prop/return_place.rs | 2 +- .../scalar_literal_propagation.main.ConstProp.diff | 34 - ...ral_propagation.main.ConstProp.panic-abort.diff | 31 + ...al_propagation.main.ConstProp.panic-unwind.diff | 31 + .../const_prop/scalar_literal_propagation.rs | 2 +- .../const_prop/slice_len.main.ConstProp.32bit.diff | 50 - ...slice_len.main.ConstProp.32bit.panic-abort.diff | 47 + ...lice_len.main.ConstProp.32bit.panic-unwind.diff | 47 + .../const_prop/slice_len.main.ConstProp.64bit.diff | 50 - ...slice_len.main.ConstProp.64bit.panic-abort.diff | 47 + ...lice_len.main.ConstProp.64bit.panic-unwind.diff | 47 + tests/mir-opt/const_prop/slice_len.rs | 2 +- .../const_prop/switch_int.main.ConstProp.diff | 34 - .../switch_int.main.ConstProp.panic-abort.diff | 28 + .../switch_int.main.ConstProp.panic-unwind.diff | 28 + ...in.SimplifyConstCondition-after-const-prop.diff | 34 - ...onstCondition-after-const-prop.panic-abort.diff | 28 + ...nstCondition-after-const-prop.panic-unwind.diff | 28 + tests/mir-opt/const_prop/switch_int.rs | 2 +- .../transmute.from_char.ConstProp.32bit.diff | 8 +- .../transmute.from_char.ConstProp.64bit.diff | 8 +- .../transmute.invalid_bool.ConstProp.32bit.diff | 8 +- .../transmute.invalid_bool.ConstProp.64bit.diff | 8 +- .../transmute.invalid_char.ConstProp.32bit.diff | 8 +- .../transmute.invalid_char.ConstProp.64bit.diff | 8 +- .../transmute.less_as_i8.ConstProp.32bit.diff | 21 +- .../transmute.less_as_i8.ConstProp.64bit.diff | 21 +- ...ute.undef_union_as_integer.ConstProp.32bit.diff | 22 +- ...ute.undef_union_as_integer.ConstProp.64bit.diff | 22 +- .../transmute.unreachable_box.ConstProp.32bit.diff | 17 +- .../transmute.unreachable_box.ConstProp.64bit.diff | 17 +- ...ansmute.unreachable_direct.ConstProp.32bit.diff | 18 +- ...ansmute.unreachable_direct.ConstProp.64bit.diff | 18 +- .../transmute.unreachable_mut.ConstProp.32bit.diff | 25 +- .../transmute.unreachable_mut.ConstProp.64bit.diff | 25 +- .../transmute.unreachable_ref.ConstProp.32bit.diff | 17 +- .../transmute.unreachable_ref.ConstProp.64bit.diff | 17 +- .../transmute.valid_char.ConstProp.32bit.diff | 8 +- .../transmute.valid_char.ConstProp.64bit.diff | 8 +- .../tuple_literal_propagation.main.ConstProp.diff | 35 - ...ral_propagation.main.ConstProp.panic-abort.diff | 32 + ...al_propagation.main.ConstProp.panic-unwind.diff | 32 + .../const_prop/tuple_literal_propagation.rs | 2 +- ...while_let_loops.change_loop_body.ConstProp.diff | 58 +- .../const_prop_miscompile.bar.ConstProp.diff | 52 +- .../const_prop_miscompile.foo.ConstProp.diff | 44 +- .../copy-prop/borrowed_local.f.CopyProp.diff | 33 - .../borrowed_local.f.CopyProp.panic-abort.diff | 27 + .../borrowed_local.f.CopyProp.panic-unwind.diff | 27 + tests/mir-opt/copy-prop/borrowed_local.rs | 2 +- tests/mir-opt/copy-prop/branch.foo.CopyProp.diff | 65 - .../copy-prop/branch.foo.CopyProp.panic-abort.diff | 56 + .../branch.foo.CopyProp.panic-unwind.diff | 56 + tests/mir-opt/copy-prop/branch.rs | 2 +- .../copy_propagation_arg.arg_src.CopyProp.diff | 23 - ...opagation_arg.arg_src.CopyProp.panic-abort.diff | 23 + ...pagation_arg.arg_src.CopyProp.panic-unwind.diff | 23 + .../copy_propagation_arg.bar.CopyProp.diff | 28 - ...y_propagation_arg.bar.CopyProp.panic-abort.diff | 25 + ..._propagation_arg.bar.CopyProp.panic-unwind.diff | 25 + .../copy_propagation_arg.baz.CopyProp.diff | 18 - ...y_propagation_arg.baz.CopyProp.panic-abort.diff | 18 + ..._propagation_arg.baz.CopyProp.panic-unwind.diff | 18 + .../copy_propagation_arg.foo.CopyProp.diff | 28 - ...y_propagation_arg.foo.CopyProp.panic-abort.diff | 25 + ..._propagation_arg.foo.CopyProp.panic-unwind.diff | 25 + tests/mir-opt/copy-prop/copy_propagation_arg.rs | 2 +- .../copy-prop/custom_move_arg.f.CopyProp.diff | 31 - .../custom_move_arg.f.CopyProp.panic-abort.diff | 25 + .../custom_move_arg.f.CopyProp.panic-unwind.diff | 25 + tests/mir-opt/copy-prop/custom_move_arg.rs | 2 +- tests/mir-opt/copy-prop/cycle.main.CopyProp.diff | 60 - .../copy-prop/cycle.main.CopyProp.panic-abort.diff | 54 + .../cycle.main.CopyProp.panic-unwind.diff | 54 + tests/mir-opt/copy-prop/cycle.rs | 2 +- .../dead_stores_79191.f.CopyProp.after.mir | 29 - ...d_stores_79191.f.CopyProp.after.panic-abort.mir | 26 + ..._stores_79191.f.CopyProp.after.panic-unwind.mir | 26 + tests/mir-opt/copy-prop/dead_stores_79191.rs | 2 +- .../dead_stores_better.f.CopyProp.after.mir | 29 - ..._stores_better.f.CopyProp.after.panic-abort.mir | 26 + ...stores_better.f.CopyProp.after.panic-unwind.mir | 26 + tests/mir-opt/copy-prop/dead_stores_better.rs | 2 +- .../copy-prop/issue_107511.main.CopyProp.diff | 138 -- .../issue_107511.main.CopyProp.panic-abort.diff | 129 ++ .../issue_107511.main.CopyProp.panic-unwind.diff | 129 ++ tests/mir-opt/copy-prop/issue_107511.rs | 2 +- tests/mir-opt/copy-prop/move_arg.f.CopyProp.diff | 40 - .../copy-prop/move_arg.f.CopyProp.panic-abort.diff | 37 + .../move_arg.f.CopyProp.panic-unwind.diff | 37 + tests/mir-opt/copy-prop/move_arg.rs | 2 +- .../copy-prop/move_projection.f.CopyProp.diff | 31 - .../move_projection.f.CopyProp.panic-abort.diff | 25 + .../move_projection.f.CopyProp.panic-unwind.diff | 25 + tests/mir-opt/copy-prop/move_projection.rs | 2 +- .../mutate_through_pointer.f.CopyProp.diff | 20 +- .../mir-opt/copy-prop/non_dominate.f.CopyProp.diff | 22 +- .../copy-prop/partial_init.main.CopyProp.diff | 8 +- .../copy-prop/reborrow.demiraw.CopyProp.diff | 56 - .../reborrow.demiraw.CopyProp.panic-abort.diff | 53 + .../reborrow.demiraw.CopyProp.panic-unwind.diff | 53 + .../mir-opt/copy-prop/reborrow.miraw.CopyProp.diff | 52 - .../reborrow.miraw.CopyProp.panic-abort.diff | 49 + .../reborrow.miraw.CopyProp.panic-unwind.diff | 49 + .../mir-opt/copy-prop/reborrow.remut.CopyProp.diff | 50 - .../reborrow.remut.CopyProp.panic-abort.diff | 47 + .../reborrow.remut.CopyProp.panic-unwind.diff | 47 + .../mir-opt/copy-prop/reborrow.reraw.CopyProp.diff | 50 - .../reborrow.reraw.CopyProp.panic-abort.diff | 47 + .../reborrow.reraw.CopyProp.panic-unwind.diff | 47 + tests/mir-opt/copy-prop/reborrow.rs | 2 +- .../cast.main.DataflowConstProp.diff | 48 +- .../checked.main.DataflowConstProp.diff | 80 - ...checked.main.DataflowConstProp.panic-abort.diff | 80 + ...hecked.main.DataflowConstProp.panic-unwind.diff | 80 + tests/mir-opt/dataflow-const-prop/checked.rs | 2 +- .../enum.multiple.DataflowConstProp.diff | 88 +- ...enum.mutate_discriminant.DataflowConstProp.diff | 22 +- .../enum.simple.DataflowConstProp.diff | 68 +- .../if.main.DataflowConstProp.diff | 150 +- .../inherit_overflow.main.DataflowConstProp.diff | 39 - ...verflow.main.DataflowConstProp.panic-abort.diff | 39 + ...erflow.main.DataflowConstProp.panic-unwind.diff | 39 + .../dataflow-const-prop/inherit_overflow.rs | 2 +- .../issue_81605.f.DataflowConstProp.diff | 34 +- .../ref_without_sb.main.DataflowConstProp.diff | 55 - ...hout_sb.main.DataflowConstProp.panic-abort.diff | 49 + ...out_sb.main.DataflowConstProp.panic-unwind.diff | 49 + .../mir-opt/dataflow-const-prop/ref_without_sb.rs | 2 +- .../repr_transparent.main.DataflowConstProp.diff | 58 +- .../self_assign.main.DataflowConstProp.diff | 66 +- .../self_assign_add.main.DataflowConstProp.diff | 24 +- .../sibling_ptr.main.DataflowConstProp.diff | 54 - ...ing_ptr.main.DataflowConstProp.panic-abort.diff | 51 + ...ng_ptr.main.DataflowConstProp.panic-unwind.diff | 51 + tests/mir-opt/dataflow-const-prop/sibling_ptr.rs | 2 +- .../struct.main.DataflowConstProp.diff | 72 +- .../terminator.main.DataflowConstProp.diff | 40 - ...minator.main.DataflowConstProp.panic-abort.diff | 37 + ...inator.main.DataflowConstProp.panic-unwind.diff | 37 + tests/mir-opt/dataflow-const-prop/terminator.rs | 2 +- .../tuple.main.DataflowConstProp.diff | 112 +- .../cycle.cycle.DeadStoreElimination.diff | 76 - ...cle.cycle.DeadStoreElimination.panic-abort.diff | 73 + ...le.cycle.DeadStoreElimination.panic-unwind.diff | 73 + tests/mir-opt/dead-store-elimination/cycle.rs | 2 +- .../place_mention.main.DeadStoreElimination.diff | 22 +- ...ndness.pointer_to_int.DeadStoreElimination.diff | 44 +- ...ance_soundness.retags.DeadStoreElimination.diff | 10 +- ...ks.is_line_doc_comment_2.DeduplicateBlocks.diff | 100 - ...oc_comment_2.DeduplicateBlocks.panic-abort.diff | 96 + ...c_comment_2.DeduplicateBlocks.panic-unwind.diff | 96 + tests/mir-opt/deduplicate_blocks.rs | 2 +- .../deref-patterns/string.foo.PreCodegen.after.mir | 67 +- .../mir-opt/derefer_complex_case.main.Derefer.diff | 105 -- ...efer_complex_case.main.Derefer.panic-abort.diff | 97 + ...fer_complex_case.main.Derefer.panic-unwind.diff | 93 + tests/mir-opt/derefer_complex_case.rs | 2 +- .../mir-opt/derefer_inline_test.main.Derefer.diff | 45 - ...refer_inline_test.main.Derefer.panic-abort.diff | 38 + ...efer_inline_test.main.Derefer.panic-unwind.diff | 38 + tests/mir-opt/derefer_inline_test.rs | 2 +- .../derefer_terminator_test.main.Derefer.diff | 92 - ...r_terminator_test.main.Derefer.panic-abort.diff | 90 + ..._terminator_test.main.Derefer.panic-unwind.diff | 86 + tests/mir-opt/derefer_terminator_test.rs | 2 +- tests/mir-opt/derefer_test.main.Derefer.diff | 66 +- .../derefer_test_multiple.main.Derefer.diff | 118 +- .../branch.foo.DestinationPropagation.diff | 75 - ...nch.foo.DestinationPropagation.panic-abort.diff | 66 + ...ch.foo.DestinationPropagation.panic-unwind.diff | 66 + tests/mir-opt/dest-prop/branch.rs | 2 +- ...agation_arg.arg_src.DestinationPropagation.diff | 26 - ...arg_src.DestinationPropagation.panic-abort.diff | 26 + ...rg_src.DestinationPropagation.panic-unwind.diff | 26 + ...propagation_arg.bar.DestinationPropagation.diff | 32 - ...arg.bar.DestinationPropagation.panic-abort.diff | 29 + ...rg.bar.DestinationPropagation.panic-unwind.diff | 29 + ...propagation_arg.baz.DestinationPropagation.diff | 22 - ...arg.baz.DestinationPropagation.panic-abort.diff | 22 + ...rg.baz.DestinationPropagation.panic-unwind.diff | 22 + ...propagation_arg.foo.DestinationPropagation.diff | 32 - ...arg.foo.DestinationPropagation.panic-abort.diff | 29 + ...rg.foo.DestinationPropagation.panic-unwind.diff | 29 + tests/mir-opt/dest-prop/copy_propagation_arg.rs | 2 +- .../cycle.main.DestinationPropagation.diff | 77 - ...le.main.DestinationPropagation.panic-abort.diff | 71 + ...e.main.DestinationPropagation.panic-unwind.diff | 71 + tests/mir-opt/dest-prop/cycle.rs | 2 +- ...stores_79191.f.DestinationPropagation.after.mir | 34 - ....f.DestinationPropagation.after.panic-abort.mir | 31 + ...f.DestinationPropagation.after.panic-unwind.mir | 31 + tests/mir-opt/dest-prop/dead_stores_79191.rs | 2 +- ...tores_better.f.DestinationPropagation.after.mir | 33 - ....f.DestinationPropagation.after.panic-abort.mir | 30 + ...f.DestinationPropagation.after.panic-unwind.mir | 30 + tests/mir-opt/dest-prop/dead_stores_better.rs | 2 +- .../simple.nrvo.DestinationPropagation.diff | 43 - ...le.nrvo.DestinationPropagation.panic-abort.diff | 43 + ...e.nrvo.DestinationPropagation.panic-unwind.diff | 43 + tests/mir-opt/dest-prop/simple.rs | 2 +- .../union.main.DestinationPropagation.diff | 35 - ...on.main.DestinationPropagation.panic-abort.diff | 32 + ...n.main.DestinationPropagation.panic-unwind.diff | 32 + tests/mir-opt/dest-prop/union.rs | 2 +- .../unreachable.f.DestinationPropagation.diff | 86 - ...hable.f.DestinationPropagation.panic-abort.diff | 80 + ...able.f.DestinationPropagation.panic-unwind.diff | 80 + tests/mir-opt/dest-prop/unreachable.rs | 2 +- .../dont_yeet_assert.generic.InstSimplify.diff | 18 +- ...otherwise_branch.opt1.EarlyOtherwiseBranch.diff | 98 +- ...otherwise_branch.opt2.EarlyOtherwiseBranch.diff | 110 +- ...otherwise_branch.opt3.EarlyOtherwiseBranch.diff | 98 +- ..._3_element_tuple.opt1.EarlyOtherwiseBranch.diff | 132 +- ..._branch_68867.try_sum.EarlyOtherwiseBranch.diff | 334 ++-- ...e_branch_noopt.noopt1.EarlyOtherwiseBranch.diff | 108 +- ...oundness.no_deref_ptr.EarlyOtherwiseBranch.diff | 42 +- ...soundness.no_downcast.EarlyOtherwiseBranch.diff | 30 +- tests/mir-opt/enum_opt.cand.EnumSizeOpt.32bit.diff | 114 +- tests/mir-opt/enum_opt.cand.EnumSizeOpt.64bit.diff | 114 +- .../enum_opt.invalid.EnumSizeOpt.32bit.diff | 34 +- .../enum_opt.invalid.EnumSizeOpt.64bit.diff | 34 +- .../mir-opt/enum_opt.trunc.EnumSizeOpt.32bit.diff | 52 +- .../mir-opt/enum_opt.trunc.EnumSizeOpt.64bit.diff | 52 +- tests/mir-opt/enum_opt.unin.EnumSizeOpt.32bit.diff | 114 +- tests/mir-opt/enum_opt.unin.EnumSizeOpt.64bit.diff | 114 +- tests/mir-opt/equal_true.opt.InstSimplify.diff | 34 +- ...al_or.match_tuple.SimplifyCfg-initial.after.mir | 88 +- ...ction-Fn-call.AddMovesForPackedDrops.before.mir | 8 +- ...arms.float_to_exponential_common.ConstProp.diff | 129 -- ...o_exponential_common.ConstProp.panic-abort.diff | 111 ++ ..._exponential_common.ConstProp.panic-unwind.diff | 111 ++ tests/mir-opt/funky_arms.rs | 2 +- ...p_cleanup.main-{closure#0}.generator_drop.0.mir | 91 - ...in-{closure#0}.generator_drop.0.panic-abort.mir | 82 + ...n-{closure#0}.generator_drop.0.panic-unwind.mir | 91 + tests/mir-opt/generator_drop_cleanup.rs | 2 +- ...wind.main-{closure#0}.StateTransform.before.mir | 124 -- ...losure#0}.StateTransform.before.panic-abort.mir | 83 + ...osure#0}.StateTransform.before.panic-unwind.mir | 118 ++ tests/mir-opt/generator_storage_dead_unwind.rs | 2 +- ...or_tiny.main-{closure#0}.generator_resume.0.mir | 79 +- ...t.dont_opt_bool.SimplifyComparisonIntegral.diff | 24 +- ...dont_opt_floats.SimplifyComparisonIntegral.diff | 32 +- ...move_comparison.SimplifyComparisonIntegral.diff | 76 +- ...on_int.opt_char.SimplifyComparisonIntegral.diff | 42 +- ...tion_int.opt_i8.SimplifyComparisonIntegral.diff | 42 +- ...pt_multiple_ifs.SimplifyComparisonIntegral.diff | 76 +- ...nt.opt_negative.SimplifyComparisonIntegral.diff | 42 +- ...ion_int.opt_u32.SimplifyComparisonIntegral.diff | 42 +- tests/mir-opt/inline/asm_unwind.main.Inline.diff | 45 - .../inline/asm_unwind.main.Inline.panic-abort.diff | 34 + .../asm_unwind.main.Inline.panic-unwind.diff | 42 + tests/mir-opt/inline/asm_unwind.rs | 5 +- .../caller_with_trivial_bound.foo.Inline.diff | 33 - ...with_trivial_bound.foo.Inline.panic-unwind.diff | 30 + tests/mir-opt/inline/caller_with_trivial_bound.rs | 2 +- tests/mir-opt/inline/cycle.f.Inline.diff | 43 - .../mir-opt/inline/cycle.f.Inline.panic-abort.diff | 32 + .../inline/cycle.f.Inline.panic-unwind.diff | 40 + tests/mir-opt/inline/cycle.g.Inline.diff | 58 - .../mir-opt/inline/cycle.g.Inline.panic-abort.diff | 44 + .../inline/cycle.g.Inline.panic-unwind.diff | 52 + tests/mir-opt/inline/cycle.main.Inline.diff | 58 - .../inline/cycle.main.Inline.panic-abort.diff | 54 + .../inline/cycle.main.Inline.panic-unwind.diff | 62 + tests/mir-opt/inline/cycle.rs | 3 +- .../mir-opt/inline/dyn_trait.get_query.Inline.diff | 54 - .../dyn_trait.get_query.Inline.panic-abort.diff | 45 + .../dyn_trait.get_query.Inline.panic-unwind.diff | 45 + .../mir-opt/inline/dyn_trait.mk_cycle.Inline.diff | 23 - .../dyn_trait.mk_cycle.Inline.panic-abort.diff | 20 + .../dyn_trait.mk_cycle.Inline.panic-unwind.diff | 20 + tests/mir-opt/inline/dyn_trait.rs | 2 +- .../inline/dyn_trait.try_execute_query.Inline.diff | 33 - ...trait.try_execute_query.Inline.panic-abort.diff | 28 + ...rait.try_execute_query.Inline.panic-unwind.diff | 28 + .../inline/exponential_runtime.main.Inline.diff | 75 - ...xponential_runtime.main.Inline.panic-abort.diff | 134 ++ ...ponential_runtime.main.Inline.panic-unwind.diff | 134 ++ tests/mir-opt/inline/exponential_runtime.rs | 2 +- .../inline/inline_any_operand.bar.Inline.after.mir | 49 +- .../inline/inline_closure.foo.Inline.after.mir | 82 +- ...inline_closure_borrows_arg.foo.Inline.after.mir | 84 +- .../inline_closure_captures.foo.Inline.after.mir | 108 +- ...e_compatibility.inlined_no_sanitize.Inline.diff | 24 - ...ity.inlined_no_sanitize.Inline.panic-abort.diff | 21 + ...ty.inlined_no_sanitize.Inline.panic-unwind.diff | 21 + ...ompatibility.inlined_target_feature.Inline.diff | 24 - ....inlined_target_feature.Inline.panic-abort.diff | 21 + ...inlined_target_feature.Inline.panic-unwind.diff | 21 + ...ompatibility.not_inlined_c_variadic.Inline.diff | 25 - ....not_inlined_c_variadic.Inline.panic-abort.diff | 22 + ...not_inlined_c_variadic.Inline.panic-unwind.diff | 22 + ...mpatibility.not_inlined_no_sanitize.Inline.diff | 22 - ...not_inlined_no_sanitize.Inline.panic-abort.diff | 19 + ...ot_inlined_no_sanitize.Inline.panic-unwind.diff | 19 + ...tibility.not_inlined_target_feature.Inline.diff | 22 - ..._inlined_target_feature.Inline.panic-abort.diff | 19 + ...inlined_target_feature.Inline.panic-unwind.diff | 19 + tests/mir-opt/inline/inline_compatibility.rs | 1 + tests/mir-opt/inline/inline_cycle.one.Inline.diff | 30 - .../inline_cycle.one.Inline.panic-abort.diff | 25 + .../inline_cycle.one.Inline.panic-unwind.diff | 25 + tests/mir-opt/inline/inline_cycle.rs | 2 +- tests/mir-opt/inline/inline_cycle.two.Inline.diff | 42 - .../inline_cycle.two.Inline.panic-abort.diff | 46 + .../inline_cycle.two.Inline.panic-unwind.diff | 46 + .../inline/inline_cycle_generic.main.Inline.diff | 29 - ...line_cycle_generic.main.Inline.panic-abort.diff | 26 + ...ine_cycle_generic.main.Inline.panic-unwind.diff | 26 + tests/mir-opt/inline/inline_cycle_generic.rs | 2 +- .../mir-opt/inline/inline_diverging.f.Inline.diff | 24 - .../inline_diverging.f.Inline.panic-abort.diff | 21 + .../inline_diverging.f.Inline.panic-unwind.diff | 21 + .../mir-opt/inline/inline_diverging.g.Inline.diff | 49 - .../inline_diverging.g.Inline.panic-abort.diff | 41 + .../inline_diverging.g.Inline.panic-unwind.diff | 41 + .../mir-opt/inline/inline_diverging.h.Inline.diff | 83 - .../inline_diverging.h.Inline.panic-abort.diff | 45 + .../inline_diverging.h.Inline.panic-unwind.diff | 46 + tests/mir-opt/inline/inline_diverging.rs | 3 +- .../inline/inline_generator.main.Inline.diff | 132 -- .../inline_generator.main.Inline.panic-abort.diff | 107 ++ .../inline_generator.main.Inline.panic-unwind.diff | 112 ++ tests/mir-opt/inline/inline_generator.rs | 7 +- .../inline_instruction_set.default.Inline.diff | 56 +- .../inline/inline_instruction_set.t32.Inline.diff | 56 +- .../inline/inline_into_box_place.main.Inline.diff | 81 - ...ine_into_box_place.main.Inline.panic-abort.diff | 205 +++ ...ne_into_box_place.main.Inline.panic-unwind.diff | 218 +++ tests/mir-opt/inline/inline_into_box_place.rs | 4 +- .../inline/inline_options.main.Inline.after.mir | 55 - ...nline_options.main.Inline.after.panic-abort.mir | 43 + ...line_options.main.Inline.after.panic-unwind.mir | 43 + tests/mir-opt/inline/inline_options.rs | 2 +- .../inline/inline_retag.bar.Inline.after.mir | 107 +- .../mir-opt/inline/inline_shims.clone.Inline.diff | 26 - .../inline_shims.clone.Inline.panic-abort.diff | 23 + .../inline_shims.clone.Inline.panic-unwind.diff | 23 + tests/mir-opt/inline/inline_shims.drop.Inline.diff | 56 - .../inline_shims.drop.Inline.panic-abort.diff | 64 + .../inline_shims.drop.Inline.panic-unwind.diff | 50 + tests/mir-opt/inline/inline_shims.rs | 2 +- .../inline/inline_specialization.main.Inline.diff | 28 - ...ine_specialization.main.Inline.panic-abort.diff | 25 + ...ne_specialization.main.Inline.panic-unwind.diff | 25 + tests/mir-opt/inline/inline_specialization.rs | 2 +- tests/mir-opt/inline/inline_trait_method.rs | 2 +- .../inline_trait_method.test.Inline.after.mir | 21 - ..._trait_method.test.Inline.after.panic-abort.mir | 18 + ...trait_method.test.Inline.after.panic-unwind.mir | 18 + tests/mir-opt/inline/inline_trait_method_2.rs | 2 +- .../inline_trait_method_2.test2.Inline.after.mir | 28 - ...ait_method_2.test2.Inline.after.panic-abort.mir | 25 + ...it_method_2.test2.Inline.after.panic-unwind.mir | 25 + .../mir-opt/inline/issue_106141.outer.Inline.diff | 55 - .../issue_106141.outer.Inline.panic-abort.diff | 47 + .../issue_106141.outer.Inline.panic-unwind.diff | 47 + tests/mir-opt/inline/issue_106141.rs | 2 +- ...e_58867_inline_as_ref_as_mut.a.Inline.after.mir | 36 +- ...e_58867_inline_as_ref_as_mut.b.Inline.after.mir | 44 +- ...e_58867_inline_as_ref_as_mut.c.Inline.after.mir | 28 +- ...e_58867_inline_as_ref_as_mut.d.Inline.after.mir | 36 +- ...7_inline_scopes_parenting.main.Inline.after.mir | 59 +- tests/mir-opt/inline/issue_78442.bar.Inline.diff | 68 - .../inline/issue_78442.bar.Inline.panic-abort.diff | 47 + .../issue_78442.bar.Inline.panic-unwind.diff | 62 + .../mir-opt/inline/issue_78442.bar.RevealAll.diff | 57 - .../issue_78442.bar.RevealAll.panic-abort.diff | 42 + .../issue_78442.bar.RevealAll.panic-unwind.diff | 50 + tests/mir-opt/inline/issue_78442.rs | 2 +- tests/mir-opt/inline/unchecked_shifts.rs | 14 +- ...ked_shl_unsigned_bigger.Inline.panic-abort.diff | 36 + ...ed_shl_unsigned_bigger.Inline.panic-unwind.diff | 36 + ...nsigned_bigger.PreCodegen.after.panic-abort.mir | 22 + ...signed_bigger.PreCodegen.after.panic-unwind.mir | 22 + ...ifts.unchecked_shl_unsigned_smaller.Inline.diff | 152 -- ...ed_shl_unsigned_smaller.Inline.panic-abort.diff | 45 + ...d_shl_unsigned_smaller.Inline.panic-unwind.diff | 45 + ...ecked_shl_unsigned_smaller.PreCodegen.after.mir | 138 -- ...signed_smaller.PreCodegen.after.panic-abort.mir | 31 + ...igned_smaller.PreCodegen.after.panic-unwind.mir | 31 + ...ecked_shr_signed_bigger.Inline.panic-abort.diff | 36 + ...cked_shr_signed_bigger.Inline.panic-unwind.diff | 36 + ..._signed_bigger.PreCodegen.after.panic-abort.mir | 22 + ...signed_bigger.PreCodegen.after.panic-unwind.mir | 22 + ...shifts.unchecked_shr_signed_smaller.Inline.diff | 152 -- ...cked_shr_signed_smaller.Inline.panic-abort.diff | 45 + ...ked_shr_signed_smaller.Inline.panic-unwind.diff | 45 + ...checked_shr_signed_smaller.PreCodegen.after.mir | 138 -- ...signed_smaller.PreCodegen.after.panic-abort.mir | 31 + ...igned_smaller.PreCodegen.after.panic-unwind.mir | 31 + .../inline/unsized_argument.caller.Inline.diff | 58 +- tests/mir-opt/inline/unwrap_unchecked.rs | 2 +- .../unwrap_unchecked.unwrap_unchecked.Inline.diff | 55 - ...hecked.unwrap_unchecked.Inline.panic-abort.diff | 48 + ...ecked.unwrap_unchecked.Inline.panic-unwind.diff | 52 + ...unchecked.unwrap_unchecked.PreCodegen.after.mir | 41 - ...wrap_unchecked.PreCodegen.after.panic-abort.mir | 41 + ...rap_unchecked.PreCodegen.after.panic-unwind.mir | 41 + ...instrument_coverage.bar.InstrumentCoverage.diff | 8 +- ...nstrument_coverage.main.InstrumentCoverage.diff | 45 +- ...te_switch_targets.assert_zero.InstSimplify.diff | 12 +- .../intrinsic_asserts.generic.InstSimplify.diff | 39 +- .../intrinsic_asserts.panics.InstSimplify.diff | 47 +- .../intrinsic_asserts.removable.InstSimplify.diff | 45 +- tests/mir-opt/issue_101973.inner.ConstProp.diff | 85 - .../issue_101973.inner.ConstProp.panic-abort.diff | 82 + .../issue_101973.inner.ConstProp.panic-unwind.diff | 82 + tests/mir-opt/issue_101973.rs | 2 +- ...e_intrinsics.main.AbortUnwindingCalls.after.mir | 25 - ....main.AbortUnwindingCalls.after.panic-abort.mir | 16 + ...main.AbortUnwindingCalls.after.panic-unwind.mir | 16 + .../mir-opt/issue_104451_unwindable_intrinsics.rs | 2 +- .../issue_38669.main.SimplifyCfg-initial.after.mir | 56 +- tests/mir-opt/issue_41110.main.ElaborateDrops.diff | 75 - ...ssue_41110.main.ElaborateDrops.panic-abort.diff | 69 + ...sue_41110.main.ElaborateDrops.panic-unwind.diff | 69 + tests/mir-opt/issue_41110.rs | 2 +- tests/mir-opt/issue_41110.test.ElaborateDrops.diff | 105 -- ...ssue_41110.test.ElaborateDrops.panic-abort.diff | 102 ++ ...sue_41110.test.ElaborateDrops.panic-unwind.diff | 102 ++ ...onstant#0}.SimplifyCfg-promote-consts.after.mir | 14 +- tests/mir-opt/issue_41888.main.ElaborateDrops.diff | 151 -- ...ssue_41888.main.ElaborateDrops.panic-abort.diff | 148 ++ ...sue_41888.main.ElaborateDrops.panic-unwind.diff | 148 ++ tests/mir-opt/issue_41888.rs | 2 +- tests/mir-opt/issue_62289.rs | 2 +- .../issue_62289.test.ElaborateDrops.before.mir | 122 -- ...2289.test.ElaborateDrops.before.panic-abort.mir | 113 ++ ...289.test.ElaborateDrops.before.panic-unwind.mir | 113 ++ tests/mir-opt/issue_72181.bar.built.after.mir | 16 +- tests/mir-opt/issue_72181.foo.built.after.mir | 28 +- tests/mir-opt/issue_72181.main.built.after.mir | 77 +- tests/mir-opt/issue_72181_1.f.built.after.mir | 10 +- tests/mir-opt/issue_72181_1.main.built.after.mir | 54 +- tests/mir-opt/issue_76432.rs | 2 +- ...ssue_76432.test.SimplifyComparisonIntegral.diff | 60 - ...est.SimplifyComparisonIntegral.panic-abort.diff | 54 + ...st.SimplifyComparisonIntegral.panic-unwind.diff | 54 + tests/mir-opt/issue_78192.f.InstSimplify.diff | 36 +- tests/mir-opt/issue_91633.bar.built.after.mir | 35 +- tests/mir-opt/issue_91633.foo.built.after.mir | 57 +- tests/mir-opt/issue_91633.fun.built.after.mir | 40 +- tests/mir-opt/issue_91633.hey.built.after.mir | 39 +- tests/mir-opt/issue_99325.main.built.after.mir | 409 ++--- .../issue_59352.num_to_digit.PreCodegen.after.mir | 84 - ...2.num_to_digit.PreCodegen.after.panic-abort.mir | 72 + ....num_to_digit.PreCodegen.after.panic-unwind.mir | 72 + tests/mir-opt/issues/issue_59352.rs | 2 +- .../issue_75439.foo.MatchBranchSimplification.diff | 72 +- ..._test.main.SimplifyCfg-promote-consts.after.mir | 56 +- ...er_array_len.array_bound.NormalizeArrayLen.diff | 64 - ....array_bound.NormalizeArrayLen.panic-abort.diff | 64 + ...array_bound.NormalizeArrayLen.panic-unwind.diff | 64 + ...rray_len.array_bound_mut.NormalizeArrayLen.diff | 77 - ...ay_bound_mut.NormalizeArrayLen.panic-abort.diff | 77 + ...y_bound_mut.NormalizeArrayLen.panic-unwind.diff | 77 + ...ower_array_len.array_len.NormalizeArrayLen.diff | 26 - ...en.array_len.NormalizeArrayLen.panic-abort.diff | 26 + ...n.array_len.NormalizeArrayLen.panic-unwind.diff | 26 + ...y_len.array_len_by_value.NormalizeArrayLen.diff | 26 - ...len_by_value.NormalizeArrayLen.panic-abort.diff | 26 + ...en_by_value.NormalizeArrayLen.panic-unwind.diff | 26 + ..._array_len.array_len_raw.NormalizeArrayLen.diff | 50 - ...rray_len_raw.NormalizeArrayLen.panic-abort.diff | 50 + ...ray_len_raw.NormalizeArrayLen.panic-unwind.diff | 50 + ...y_len.array_len_reborrow.NormalizeArrayLen.diff | 44 - ...len_reborrow.NormalizeArrayLen.panic-abort.diff | 44 + ...en_reborrow.NormalizeArrayLen.panic-unwind.diff | 44 + tests/mir-opt/lower_array_len.rs | 2 +- .../lower_intrinsics.align_of.LowerIntrinsics.diff | 20 - ...nsics.align_of.LowerIntrinsics.panic-abort.diff | 17 + ...sics.align_of.LowerIntrinsics.panic-unwind.diff | 17 + .../lower_intrinsics.assume.LowerIntrinsics.diff | 26 - ...rinsics.assume.LowerIntrinsics.panic-abort.diff | 23 + ...insics.assume.LowerIntrinsics.panic-unwind.diff | 23 + ...er_intrinsics.discriminant.LowerIntrinsics.diff | 119 -- ...s.discriminant.LowerIntrinsics.panic-abort.diff | 94 + ....discriminant.LowerIntrinsics.panic-unwind.diff | 98 + ...sics.f_copy_nonoverlapping.LowerIntrinsics.diff | 72 - ...nonoverlapping.LowerIntrinsics.panic-abort.diff | 69 + ...onoverlapping.LowerIntrinsics.panic-unwind.diff | 69 + .../lower_intrinsics.forget.LowerIntrinsics.diff | 29 - ...rinsics.forget.LowerIntrinsics.panic-abort.diff | 26 + ...insics.forget.LowerIntrinsics.panic-unwind.diff | 26 + ...lower_intrinsics.non_const.LowerIntrinsics.diff | 31 - ...sics.non_const.LowerIntrinsics.panic-abort.diff | 28 + ...ics.non_const.LowerIntrinsics.panic-unwind.diff | 28 + ..._intrinsics.option_payload.LowerIntrinsics.diff | 54 - ...option_payload.LowerIntrinsics.panic-abort.diff | 48 + ...ption_payload.LowerIntrinsics.panic-unwind.diff | 48 + ...ower_intrinsics.ptr_offset.LowerIntrinsics.diff | 30 - ...ics.ptr_offset.LowerIntrinsics.panic-abort.diff | 27 + ...cs.ptr_offset.LowerIntrinsics.panic-unwind.diff | 27 + ...cs.read_via_copy_primitive.LowerIntrinsics.diff | 27 - ...copy_primitive.LowerIntrinsics.panic-abort.diff | 24 + ...opy_primitive.LowerIntrinsics.panic-unwind.diff | 24 + ....read_via_copy_uninhabited.LowerIntrinsics.diff | 21 - ...py_uninhabited.LowerIntrinsics.panic-abort.diff | 18 + ...y_uninhabited.LowerIntrinsics.panic-unwind.diff | 18 + tests/mir-opt/lower_intrinsics.rs | 13 +- .../lower_intrinsics.size_of.LowerIntrinsics.diff | 20 - ...insics.size_of.LowerIntrinsics.panic-abort.diff | 17 + ...nsics.size_of.LowerIntrinsics.panic-unwind.diff | 17 + ...insics.transmute_inhabited.LowerIntrinsics.diff | 27 - ...mute_inhabited.LowerIntrinsics.panic-abort.diff | 24 + ...ute_inhabited.LowerIntrinsics.panic-unwind.diff | 24 + ...trinsics.transmute_ref_dst.LowerIntrinsics.diff | 27 - ...nsmute_ref_dst.LowerIntrinsics.panic-abort.diff | 24 + ...smute_ref_dst.LowerIntrinsics.panic-unwind.diff | 24 + ...ansmute_to_box_uninhabited.LowerIntrinsics.diff | 25 - ...ox_uninhabited.LowerIntrinsics.panic-abort.diff | 22 + ...x_uninhabited.LowerIntrinsics.panic-unwind.diff | 22 + ...ansmute_to_mut_uninhabited.LowerIntrinsics.diff | 25 - ...ut_uninhabited.LowerIntrinsics.panic-abort.diff | 22 + ...t_uninhabited.LowerIntrinsics.panic-unwind.diff | 22 + ...ansmute_to_ref_uninhabited.LowerIntrinsics.diff | 25 - ...ef_uninhabited.LowerIntrinsics.panic-abort.diff | 22 + ...f_uninhabited.LowerIntrinsics.panic-unwind.diff | 22 + ...sics.transmute_uninhabited.LowerIntrinsics.diff | 22 - ...te_uninhabited.LowerIntrinsics.panic-abort.diff | 19 + ...e_uninhabited.LowerIntrinsics.panic-unwind.diff | 19 + ...sics.unchecked.LowerIntrinsics.panic-abort.diff | 154 ++ ...ics.unchecked.LowerIntrinsics.panic-unwind.diff | 154 ++ ...wer_intrinsics.unreachable.LowerIntrinsics.diff | 21 - ...cs.unreachable.LowerIntrinsics.panic-abort.diff | 18 + ...s.unreachable.LowerIntrinsics.panic-unwind.diff | 18 + ...r_intrinsics.with_overflow.LowerIntrinsics.diff | 83 - ....with_overflow.LowerIntrinsics.panic-abort.diff | 74 + ...with_overflow.LowerIntrinsics.panic-unwind.diff | 74 + .../lower_intrinsics.wrapping.LowerIntrinsics.diff | 83 - ...nsics.wrapping.LowerIntrinsics.panic-abort.diff | 74 + ...sics.wrapping.LowerIntrinsics.panic-unwind.diff | 74 + ...sics.write_via_move_string.LowerIntrinsics.diff | 36 - ...ia_move_string.LowerIntrinsics.panic-abort.diff | 33 + ...a_move_string.LowerIntrinsics.panic-unwind.diff | 33 + .../lower_slice_len.bound.LowerSliceLenCalls.diff | 63 - ...e_len.bound.LowerSliceLenCalls.panic-abort.diff | 60 + ..._len.bound.LowerSliceLenCalls.panic-unwind.diff | 60 + tests/mir-opt/lower_slice_len.rs | 2 +- ...lifyCfg-initial.after-ElaborateDrops.after.diff | 272 --- ...lifyCfg-initial.after-ElaborateDrops.after.diff | 272 +++ ...lifyCfg-initial.after-ElaborateDrops.after.diff | 272 +++ tests/mir-opt/match_arm_scopes.rs | 2 +- .../match_test.main.SimplifyCfg-initial.after.mir | 106 +- ...uce_branches.bar.MatchBranchSimplification.diff | 116 +- ...uce_branches.foo.MatchBranchSimplification.diff | 70 +- ....match_nested_if.MatchBranchSimplification.diff | 132 +- ...exhaustive_match.MatchBranchSimplification.diff | 22 +- ...austive_match_i8.MatchBranchSimplification.diff | 22 +- ...terminators.test.MultipleReturnTerminators.diff | 6 +- .../nll/named_lifetimes_basic.use_x.nll.0.mir | 14 +- .../region_subtyping_basic.main.nll.0.32bit.mir | 108 +- .../region_subtyping_basic.main.nll.0.64bit.mir | 108 +- tests/mir-opt/no_drop_for_inactive_variant.rs | 2 +- ...nt.unwrap.SimplifyCfg-elaborate-drops.after.mir | 49 - ...mplifyCfg-elaborate-drops.after.panic-abort.mir | 38 + ...plifyCfg-elaborate-drops.after.panic-unwind.mir | 43 + ..._drop_after_call.main.ElaborateDrops.before.mir | 49 - ...call.main.ElaborateDrops.before.panic-abort.mir | 40 + ...all.main.ElaborateDrops.before.panic-unwind.mir | 40 + tests/mir-opt/no_spurious_drop_after_call.rs | 2 +- .../mir-opt/not_equal_false.opt.InstSimplify.diff | 34 +- ..._miscompile_111005.wrong.RenameReturnPlace.diff | 17 +- .../nrvo_simple.nrvo.RenameReturnPlace.diff | 43 - ..._simple.nrvo.RenameReturnPlace.panic-abort.diff | 42 + ...simple.nrvo.RenameReturnPlace.panic-unwind.diff | 42 + tests/mir-opt/nrvo_simple.rs | 2 +- ...gned.main.SimplifyCfg-elaborate-drops.after.mir | 55 - ...mplifyCfg-elaborate-drops.after.panic-abort.mir | 46 + ...plifyCfg-elaborate-drops.after.panic-unwind.mir | 55 + tests/mir-opt/packed_struct_drop_aligned.rs | 2 +- .../chained_comparison.bitand.PreCodegen.after.mir | 84 + .../chained_comparison.naive.PreCodegen.after.mir | 136 ++ ...ained_comparison.returning.PreCodegen.after.mir | 126 ++ tests/mir-opt/pre-codegen/chained_comparison.rs | 51 + .../checked_ops.checked_shl.PreCodegen.after.mir | 84 + tests/mir-opt/pre-codegen/checked_ops.rs | 17 + .../checked_ops.step_forward.PreCodegen.after.mir | 61 + ...ate_switch_targets.ub_if_b.PreCodegen.after.mir | 20 +- .../intrinsics.f_u64.PreCodegen.after.mir | 25 +- .../intrinsics.f_unit.PreCodegen.after.mir | 17 +- .../loops.filter_mapped.PreCodegen.after.mir | 93 + .../loops.int_range.PreCodegen.after.mir | 118 ++ .../pre-codegen/loops.mapped.PreCodegen.after.mir | 82 + tests/mir-opt/pre-codegen/loops.rs | 37 + .../loops.vec_move.PreCodegen.after.mir | 74 + ...mem_replace.manual_replace.PreCodegen.after.mir | 14 +- .../mem_replace.mem_replace.PreCodegen.after.mir | 66 +- ...timizes_into_variable.main.ConstProp.32bit.diff | 59 - ..._variable.main.ConstProp.32bit.panic-abort.diff | 59 + ...variable.main.ConstProp.32bit.panic-unwind.diff | 59 + ...timizes_into_variable.main.ConstProp.64bit.diff | 59 - ..._variable.main.ConstProp.64bit.panic-abort.diff | 59 + ...variable.main.ConstProp.64bit.panic-unwind.diff | 59 + ...s_into_variable.main.PreCodegen.after.32bit.mir | 18 - ...ble.main.PreCodegen.after.32bit.panic-abort.mir | 18 + ...le.main.PreCodegen.after.32bit.panic-unwind.mir | 18 + ...s_into_variable.main.PreCodegen.after.64bit.mir | 18 - ...ble.main.PreCodegen.after.64bit.panic-abort.mir | 18 + ...le.main.PreCodegen.after.64bit.panic-unwind.mir | 18 + ...e.main.ScalarReplacementOfAggregates.32bit.diff | 71 - ...rReplacementOfAggregates.32bit.panic-abort.diff | 71 + ...ReplacementOfAggregates.32bit.panic-unwind.diff | 71 + ...e.main.ScalarReplacementOfAggregates.64bit.diff | 71 - ...rReplacementOfAggregates.64bit.panic-abort.diff | 71 + ...ReplacementOfAggregates.64bit.panic-unwind.diff | 71 + ...iable.main.SimplifyLocals-final.after.32bit.mir | 18 - ...implifyLocals-final.after.32bit.panic-abort.mir | 18 + ...mplifyLocals-final.after.32bit.panic-unwind.mir | 18 + ...iable.main.SimplifyLocals-final.after.64bit.mir | 18 - ...implifyLocals-final.after.64bit.panic-abort.mir | 18 + ...mplifyLocals-final.after.64bit.panic-unwind.mir | 18 + .../mir-opt/pre-codegen/optimizes_into_variable.rs | 2 +- .../range_iter.forward_loop.PreCodegen.after.mir | 91 - ...r.forward_loop.PreCodegen.after.panic-abort.mir | 131 ++ ....forward_loop.PreCodegen.after.panic-unwind.mir | 139 ++ .../range_iter.inclusive_loop.PreCodegen.after.mir | 95 - ...inclusive_loop.PreCodegen.after.panic-abort.mir | 81 + ...nclusive_loop.PreCodegen.after.panic-unwind.mir | 89 + ....range_inclusive_iter_next.PreCodegen.after.mir | 20 - ...sive_iter_next.PreCodegen.after.panic-abort.mir | 17 + ...ive_iter_next.PreCodegen.after.panic-unwind.mir | 17 + ...range_iter.range_iter_next.PreCodegen.after.mir | 20 - ...ange_iter_next.PreCodegen.after.panic-abort.mir | 71 + ...nge_iter_next.PreCodegen.after.panic-unwind.mir | 71 + tests/mir-opt/pre-codegen/range_iter.rs | 1 + .../simple_option_map.ezmap.PreCodegen.after.mir | 66 +- tests/mir-opt/pre-codegen/slice_filter.rs | 15 + ...lter.variant_a-{closure#0}.PreCodegen.after.mir | 231 +++ ...lter.variant_b-{closure#0}.PreCodegen.after.mir | 95 + tests/mir-opt/pre-codegen/slice_index.rs | 1 + ..._index.slice_get_mut_usize.PreCodegen.after.mir | 105 -- ..._get_mut_usize.PreCodegen.after.panic-abort.mir | 102 ++ ...get_mut_usize.PreCodegen.after.panic-unwind.mir | 102 ++ ...ce_get_unchecked_mut_range.PreCodegen.after.mir | 134 -- ...cked_mut_range.PreCodegen.after.panic-abort.mir | 103 ++ ...ked_mut_range.PreCodegen.after.panic-unwind.mir | 103 ++ ...ce_index.slice_index_range.PreCodegen.after.mir | 26 - ...ce_index_range.PreCodegen.after.panic-abort.mir | 23 + ...e_index_range.PreCodegen.after.panic-unwind.mir | 23 + ...ce_index.slice_index_usize.PreCodegen.after.mir | 20 - ...ce_index_usize.PreCodegen.after.panic-abort.mir | 20 + ...e_index_usize.PreCodegen.after.panic-unwind.mir | 20 + ...numerated_loop.PreCodegen.after.panic-abort.mir | 197 ++ ...umerated_loop.PreCodegen.after.panic-unwind.mir | 205 +++ .../slice_iter.forward_loop.PreCodegen.after.mir | 203 --- ...r.forward_loop.PreCodegen.after.panic-abort.mir | 184 ++ ....forward_loop.PreCodegen.after.panic-unwind.mir | 192 ++ ...ter.range_loop.PreCodegen.after.panic-abort.mir | 147 ++ ...er.range_loop.PreCodegen.after.panic-unwind.mir | 155 ++ .../slice_iter.reverse_loop.PreCodegen.after.mir | 220 --- ...r.reverse_loop.PreCodegen.after.panic-abort.mir | 201 ++ ....reverse_loop.PreCodegen.after.panic-unwind.mir | 209 +++ tests/mir-opt/pre-codegen/slice_iter.rs | 16 + ...r.slice_iter_mut_next_back.PreCodegen.after.mir | 17 - ..._mut_next_back.PreCodegen.after.panic-abort.mir | 14 + ...mut_next_back.PreCodegen.after.panic-unwind.mir | 14 + ...slice_iter.slice_iter_next.PreCodegen.after.mir | 17 - ...lice_iter_next.PreCodegen.after.panic-abort.mir | 14 + ...ice_iter_next.PreCodegen.after.panic-unwind.mir | 14 + .../spans.outer.PreCodegen.after.panic-abort.mir | 19 + .../spans.outer.PreCodegen.after.panic-unwind.mir | 19 + tests/mir-opt/pre-codegen/spans.rs | 16 + .../try_identity.new.PreCodegen.after.mir | 68 +- .../try_identity.old.PreCodegen.after.mir | 34 +- ...erence_prop.debuginfo.ReferencePropagation.diff | 248 ++- ...prop.dominate_storage.ReferencePropagation.diff | 37 +- ...rence_prop.maybe_dead.ReferencePropagation.diff | 61 +- ...prop.multiple_storage.ReferencePropagation.diff | 27 +- ....mut_raw_then_mut_shr.ReferencePropagation.diff | 108 +- ...prop.read_through_raw.ReferencePropagation.diff | 28 +- ...reference_propagation.ReferencePropagation.diff | 698 ++++--- ...propagation_const_ptr.ReferencePropagation.diff | 751 ++++---- ...rence_propagation_mut.ReferencePropagation.diff | 692 ++++--- ...e_propagation_mut_ptr.ReferencePropagation.diff | 672 ++++--- ...op.unique_with_copies.ReferencePropagation.diff | 78 +- ...ke_borrows.match_guard.CleanupPostBorrowck.diff | 74 - ...atch_guard.CleanupPostBorrowck.panic-abort.diff | 74 + ...tch_guard.CleanupPostBorrowck.panic-unwind.diff | 74 + tests/mir-opt/remove_fake_borrows.rs | 2 +- ...ove_never_const.no_codegen.PreCodegen.after.mir | 4 +- ..._storage_markers.main.RemoveStorageMarkers.diff | 98 - ...kers.main.RemoveStorageMarkers.panic-abort.diff | 92 + ...ers.main.RemoveStorageMarkers.panic-unwind.diff | 92 + tests/mir-opt/remove_storage_markers.rs | 2 +- ...ops.cannot_opt_generic.RemoveUnneededDrops.diff | 31 - ...pt_generic.RemoveUnneededDrops.panic-abort.diff | 27 + ...t_generic.RemoveUnneededDrops.panic-unwind.diff | 31 + ...nneeded_drops.dont_opt.RemoveUnneededDrops.diff | 31 - ...s.dont_opt.RemoveUnneededDrops.panic-abort.diff | 27 + ....dont_opt.RemoveUnneededDrops.panic-unwind.diff | 31 + ...ove_unneeded_drops.opt.RemoveUnneededDrops.diff | 27 - ..._drops.opt.RemoveUnneededDrops.panic-abort.diff | 27 + ...drops.opt.RemoveUnneededDrops.panic-unwind.diff | 27 + ...drops.opt_generic_copy.RemoveUnneededDrops.diff | 27 - ...neric_copy.RemoveUnneededDrops.panic-abort.diff | 27 + ...eric_copy.RemoveUnneededDrops.panic-unwind.diff | 27 + tests/mir-opt/remove_unneeded_drops.rs | 2 +- .../remove_zsts.get_union.PreCodegen.after.mir | 6 +- .../mir-opt/remove_zsts.get_union.RemoveZsts.diff | 22 +- ...ray_casts.SimplifyCfg-elaborate-drops.after.mir | 188 -- ...mplifyCfg-elaborate-drops.after.panic-abort.mir | 176 ++ ...plifyCfg-elaborate-drops.after.panic-unwind.mir | 176 ++ ...p_in_place.Test.SimplifyCfg-make_shim.after.mir | 22 - ...est.SimplifyCfg-make_shim.after.panic-abort.mir | 23 + ...st.SimplifyCfg-make_shim.after.panic-unwind.mir | 19 + ...losure#0}.SimplifyCfg-elaborate-drops.after.mir | 21 - ...mplifyCfg-elaborate-drops.after.panic-abort.mir | 21 + ...plifyCfg-elaborate-drops.after.panic-unwind.mir | 21 + ...etag.main.SimplifyCfg-elaborate-drops.after.mir | 199 -- ...mplifyCfg-elaborate-drops.after.panic-abort.mir | 168 ++ ...plifyCfg-elaborate-drops.after.panic-unwind.mir | 180 ++ tests/mir-opt/retag.rs | 2 +- ...pl#0}-foo.SimplifyCfg-elaborate-drops.after.mir | 18 - ...mplifyCfg-elaborate-drops.after.panic-abort.mir | 18 + ...plifyCfg-elaborate-drops.after.panic-unwind.mir | 18 + ...}-foo_shr.SimplifyCfg-elaborate-drops.after.mir | 15 - ...mplifyCfg-elaborate-drops.after.panic-abort.mir | 15 + ...plifyCfg-elaborate-drops.after.panic-unwind.mir | 15 + ..._const_switch.identity.SeparateConstSwitch.diff | 130 +- tests/mir-opt/separate_const_switch.rs | 2 + ...nst_switch.too_complex.SeparateConstSwitch.diff | 91 +- .../simplify_cfg.main.SimplifyCfg-early-opt.diff | 50 +- .../simplify_cfg.main.SimplifyCfg-initial.diff | 53 +- ...mplifyCfg-after-uninhabited-enum-branching.diff | 14 +- ...in.SimplifyConstCondition-after-const-prop.diff | 36 - ...onstCondition-after-const-prop.panic-abort.diff | 33 + ...nstCondition-after-const-prop.panic-unwind.diff | 33 + tests/mir-opt/simplify_if.rs | 2 +- ..._locals.c.SimplifyLocals-before-const-prop.diff | 40 +- ...locals.d1.SimplifyLocals-before-const-prop.diff | 14 +- ...locals.d2.SimplifyLocals-before-const-prop.diff | 32 +- ...pose_addr.SimplifyLocals-before-const-prop.diff | 24 +- ..._locals.r.SimplifyLocals-before-const-prop.diff | 32 +- ...locals.t1.SimplifyLocals-before-const-prop.diff | 22 +- ...locals.t2.SimplifyLocals-before-const-prop.diff | 22 +- ...locals.t3.SimplifyLocals-before-const-prop.diff | 30 +- ...locals.t4.SimplifyLocals-before-const-prop.diff | 22 +- ...locals_fixedpoint.foo.SimplifyLocals-final.diff | 53 - ...point.foo.SimplifyLocals-final.panic-abort.diff | 50 + ...oint.foo.SimplifyLocals-final.panic-unwind.diff | 50 + tests/mir-opt/simplify_locals_fixedpoint.rs | 2 +- ...nsts.main.SimplifyLocals-before-const-prop.diff | 101 -- ...mplifyLocals-before-const-prop.panic-abort.diff | 86 + ...plifyLocals-before-const-prop.panic-unwind.diff | 86 + .../simplify_locals_removes_unused_consts.rs | 2 +- ...reads.map.SimplifyLocals-before-const-prop.diff | 52 +- tests/mir-opt/simplify_match.main.ConstProp.diff | 33 - .../simplify_match.main.ConstProp.panic-abort.diff | 30 + ...simplify_match.main.ConstProp.panic-unwind.diff | 30 + tests/mir-opt/simplify_match.rs | 2 +- ...lace.[String].AddMovesForPackedDrops.before.mir | 48 +- tests/mir-opt/slice_filter.rs | 20 - ...lice_filter.variant_a-{closure#0}.CopyProp.diff | 279 --- ...riant_a-{closure#0}.DestinationPropagation.diff | 165 -- ...variant_a-{closure#0}.ReferencePropagation.diff | 267 --- ...lice_filter.variant_b-{closure#0}.CopyProp.diff | 139 -- ...riant_b-{closure#0}.DestinationPropagation.diff | 109 -- ...variant_b-{closure#0}.ReferencePropagation.diff | 103 -- tests/mir-opt/spanview_block.main.built.after.html | 3 +- .../spanview_statement.main.built.after.html | 3 +- .../spanview_terminator.main.built.after.html | 3 +- ...ifetimes.foo.ScalarReplacementOfAggregates.diff | 294 ++- ...cts.constant.ScalarReplacementOfAggregates.diff | 62 +- ...ructs.copies.ScalarReplacementOfAggregates.diff | 144 +- ...cts.dropping.ScalarReplacementOfAggregates.diff | 52 +- ...tructs.enums.ScalarReplacementOfAggregates.diff | 46 +- ...cts.escaping.ScalarReplacementOfAggregates.diff | 52 +- ...structs.flat.ScalarReplacementOfAggregates.diff | 119 +- ...s.ref_copies.ScalarReplacementOfAggregates.diff | 82 +- ...ucts.structs.ScalarReplacementOfAggregates.diff | 48 +- ...ructs.unions.ScalarReplacementOfAggregates.diff | 24 +- tests/mir-opt/storage_ranges.main.nll.0.mir | 66 +- tests/mir-opt/switch_to_self.rs | 21 + ...tch_to_self.test.MatchBranchSimplification.diff | 19 + tests/mir-opt/tls_access.main.PreCodegen.after.mir | 34 +- ...um.process_never.SimplifyLocals-final.after.mir | 10 +- ...num.process_void.SimplifyLocals-final.after.mir | 8 +- ...yCfg-after-uninhabited-enum-branching.after.mir | 85 +- ...um_branching.main.UninhabitedEnumBranching.diff | 109 +- ...yCfg-after-uninhabited-enum-branching.after.mir | 122 +- ...m_branching2.main.UninhabitedEnumBranching.diff | 166 +- ...inate_fallthrough.UninhabitedEnumBranching.diff | 28 +- ....keep_fallthrough.UninhabitedEnumBranching.diff | 26 +- .../unreachable.main.UnreachablePropagation.diff | 70 - ...le.main.UnreachablePropagation.panic-abort.diff | 67 + ...e.main.UnreachablePropagation.panic-unwind.diff | 67 + tests/mir-opt/unreachable.rs | 2 +- ...able_diverging.main.UnreachablePropagation.diff | 71 - ...ng.main.UnreachablePropagation.panic-abort.diff | 65 + ...g.main.UnreachablePropagation.panic-unwind.diff | 65 + tests/mir-opt/unreachable_diverging.rs | 2 +- ...ual_item_types.E-V-{constant#0}.built.after.mir | 6 +- ...em_types.Test-X-{constructor#0}.built.after.mir | 6 +- ...lace.Vec_i32_.AddMovesForPackedDrops.before.mir | 25 +- ...es.{impl#0}-ASSOCIATED_CONSTANT.built.after.mir | 6 +- tests/mir-opt/while_storage.rs | 2 +- .../while_storage.while_loop.PreCodegen.after.mir | 52 - ...age.while_loop.PreCodegen.after.panic-abort.mir | 46 + ...ge.while_loop.PreCodegen.after.panic-unwind.mir | 46 + .../auxiliary/doctest_crate.rs | 9 + tests/run-coverage-rustdoc/doctest.coverage | 115 ++ tests/run-coverage-rustdoc/doctest.rs | 99 + tests/run-coverage/abort.coverage | 69 + tests/run-coverage/abort.rs | 66 + tests/run-coverage/assert.coverage | 34 + tests/run-coverage/assert.rs | 32 + tests/run-coverage/async.coverage | 139 ++ tests/run-coverage/async.rs | 128 ++ tests/run-coverage/async2.coverage | 116 ++ tests/run-coverage/async2.rs | 69 + .../auxiliary/inline_always_with_dead_code.rs | 22 + tests/run-coverage/auxiliary/unused_mod_helper.rs | 3 + tests/run-coverage/auxiliary/used_crate.rs | 100 + tests/run-coverage/auxiliary/used_inline_crate.rs | 90 + tests/run-coverage/closure.coverage | 222 +++ tests/run-coverage/closure.rs | 215 +++ tests/run-coverage/closure_macro.coverage | 42 + tests/run-coverage/closure_macro.rs | 40 + tests/run-coverage/closure_macro_async.coverage | 83 + tests/run-coverage/closure_macro_async.rs | 81 + tests/run-coverage/conditions.coverage | 94 + tests/run-coverage/conditions.rs | 87 + tests/run-coverage/continue.coverage | 70 + tests/run-coverage/continue.rs | 69 + tests/run-coverage/dead_code.coverage | 39 + tests/run-coverage/dead_code.rs | 37 + tests/run-coverage/drop_trait.coverage | 34 + tests/run-coverage/drop_trait.rs | 33 + tests/run-coverage/generator.coverage | 32 + tests/run-coverage/generator.rs | 30 + tests/run-coverage/generics.coverage | 71 + tests/run-coverage/generics.rs | 48 + tests/run-coverage/if.coverage | 30 + tests/run-coverage/if.rs | 28 + tests/run-coverage/if_else.coverage | 41 + tests/run-coverage/if_else.rs | 40 + tests/run-coverage/inline-dead.coverage | 28 + tests/run-coverage/inline-dead.rs | 27 + tests/run-coverage/inline.coverage | 54 + tests/run-coverage/inline.rs | 51 + tests/run-coverage/inner_items.coverage | 60 + tests/run-coverage/inner_items.rs | 57 + tests/run-coverage/issue-83601.coverage | 16 + tests/run-coverage/issue-83601.rs | 14 + tests/run-coverage/issue-84561.coverage | 189 ++ tests/run-coverage/issue-84561.rs | 182 ++ tests/run-coverage/issue-85461.coverage | 36 + tests/run-coverage/issue-85461.rs | 10 + tests/run-coverage/issue-93054.coverage | 29 + tests/run-coverage/issue-93054.rs | 28 + tests/run-coverage/lazy_boolean.coverage | 64 + tests/run-coverage/lazy_boolean.rs | 61 + tests/run-coverage/loop_break_value.coverage | 14 + tests/run-coverage/loop_break_value.rs | 13 + tests/run-coverage/loops_branches.coverage | 68 + tests/run-coverage/loops_branches.rs | 61 + tests/run-coverage/match_or_pattern.coverage | 50 + tests/run-coverage/match_or_pattern.rs | 45 + tests/run-coverage/nested_loops.coverage | 26 + tests/run-coverage/nested_loops.rs | 25 + tests/run-coverage/no_cov_crate.coverage | 87 + tests/run-coverage/no_cov_crate.rs | 86 + tests/run-coverage/overflow.coverage | 64 + tests/run-coverage/overflow.rs | 63 + tests/run-coverage/panic_unwind.coverage | 32 + tests/run-coverage/panic_unwind.rs | 31 + tests/run-coverage/partial_eq.coverage | 48 + tests/run-coverage/partial_eq.rs | 46 + tests/run-coverage/simple_loop.coverage | 37 + tests/run-coverage/simple_loop.rs | 35 + tests/run-coverage/simple_match.coverage | 45 + tests/run-coverage/simple_match.rs | 43 + tests/run-coverage/sort_groups.coverage | 49 + tests/run-coverage/sort_groups.rs | 23 + tests/run-coverage/test_harness.coverage | 11 + tests/run-coverage/test_harness.rs | 10 + tests/run-coverage/tight_inf_loop.coverage | 6 + tests/run-coverage/tight_inf_loop.rs | 5 + tests/run-coverage/try_error_result.coverage | 125 ++ tests/run-coverage/try_error_result.rs | 118 ++ tests/run-coverage/unused.coverage | 62 + tests/run-coverage/unused.rs | 39 + tests/run-coverage/unused_mod.coverage | 13 + tests/run-coverage/unused_mod.rs | 6 + tests/run-coverage/uses_crate.coverage | 170 ++ tests/run-coverage/uses_crate.rs | 19 + tests/run-coverage/uses_inline_crate.coverage | 164 ++ tests/run-coverage/uses_inline_crate.rs | 22 + tests/run-coverage/while.coverage | 6 + tests/run-coverage/while.rs | 5 + tests/run-coverage/while_early_ret.coverage | 43 + tests/run-coverage/while_early_ret.rs | 42 + tests/run-coverage/yield.coverage | 38 + tests/run-coverage/yield.rs | 37 + .../hotplug_codegen_backend/the_backend.rs | 20 +- tests/run-make-fulldeps/issue-19371/foo.rs | 15 +- tests/run-make-fulldeps/obtain-borrowck/driver.rs | 3 +- tests/run-make/const_fn_mir/dump.mir | 35 +- tests/run-make/coverage-llvmir/Makefile | 2 +- tests/run-make/coverage-reports/Makefile | 178 -- .../expected_show_coverage.abort.txt | 69 - .../expected_show_coverage.assert.txt | 34 - .../expected_show_coverage.async.txt | 139 -- .../expected_show_coverage.async2.txt | 116 -- .../expected_show_coverage.closure.txt | 222 --- .../expected_show_coverage.closure_macro.txt | 42 - .../expected_show_coverage.closure_macro_async.txt | 83 - .../expected_show_coverage.conditions.txt | 94 - .../expected_show_coverage.continue.txt | 70 - .../expected_show_coverage.dead_code.txt | 39 - .../expected_show_coverage.doctest.txt | 115 -- .../expected_show_coverage.drop_trait.txt | 34 - .../expected_show_coverage.generator.txt | 32 - .../expected_show_coverage.generics.txt | 71 - .../coverage-reports/expected_show_coverage.if.txt | 30 - .../expected_show_coverage.if_else.txt | 41 - .../expected_show_coverage.inline-dead.txt | 28 - .../expected_show_coverage.inline.txt | 54 - .../expected_show_coverage.inner_items.txt | 60 - .../expected_show_coverage.issue-83601.txt | 16 - .../expected_show_coverage.issue-84561.txt | 189 -- .../expected_show_coverage.issue-85461.txt | 36 - .../expected_show_coverage.issue-93054.txt | 29 - .../expected_show_coverage.lazy_boolean.txt | 64 - .../expected_show_coverage.loop_break_value.txt | 14 - .../expected_show_coverage.loops_branches.txt | 68 - .../expected_show_coverage.match_or_pattern.txt | 50 - .../expected_show_coverage.nested_loops.txt | 26 - .../expected_show_coverage.no_cov_crate.txt | 87 - .../expected_show_coverage.overflow.txt | 64 - .../expected_show_coverage.panic_unwind.txt | 32 - .../expected_show_coverage.partial_eq.txt | 48 - .../expected_show_coverage.simple_loop.txt | 37 - .../expected_show_coverage.simple_match.txt | 45 - .../expected_show_coverage.sort_groups.txt | 49 - .../expected_show_coverage.test_harness.txt | 11 - .../expected_show_coverage.tight_inf_loop.txt | 6 - .../expected_show_coverage.try_error_result.txt | 125 -- .../expected_show_coverage.unused.txt | 62 - .../expected_show_coverage.unused_mod.txt | 4 - .../expected_show_coverage.uses_crate.txt | 148 -- .../expected_show_coverage.uses_inline_crate.txt | 139 -- .../expected_show_coverage.while.txt | 6 - .../expected_show_coverage.while_early_ret.txt | 43 - .../expected_show_coverage.yield.txt | 38 - tests/run-make/coverage-reports/normalize_paths.py | 12 - tests/run-make/coverage-reports/sort_subviews.py | 50 - .../run-make/coverage/WARNING_KEEP_NAMES_SHORT.txt | 10 - tests/run-make/coverage/abort.rs | 66 - tests/run-make/coverage/assert.rs | 32 - tests/run-make/coverage/async.rs | 128 -- tests/run-make/coverage/async2.rs | 69 - tests/run-make/coverage/closure.rs | 215 --- tests/run-make/coverage/closure_macro.rs | 40 - tests/run-make/coverage/closure_macro_async.rs | 81 - tests/run-make/coverage/compiletest-ignore-dir | 3 - tests/run-make/coverage/conditions.rs | 87 - tests/run-make/coverage/continue.rs | 69 - tests/run-make/coverage/coverage_tools.mk | 6 - tests/run-make/coverage/dead_code.rs | 37 - tests/run-make/coverage/doctest.rs | 99 - tests/run-make/coverage/drop_trait.rs | 33 - tests/run-make/coverage/generator.rs | 30 - tests/run-make/coverage/generics.rs | 48 - tests/run-make/coverage/if.rs | 28 - tests/run-make/coverage/if_else.rs | 40 - tests/run-make/coverage/inline-dead.rs | 27 - tests/run-make/coverage/inline.rs | 51 - tests/run-make/coverage/inner_items.rs | 57 - tests/run-make/coverage/issue-83601.rs | 14 - tests/run-make/coverage/issue-84561.rs | 182 -- tests/run-make/coverage/issue-85461.rs | 10 - tests/run-make/coverage/issue-93054.rs | 28 - tests/run-make/coverage/lazy_boolean.rs | 61 - tests/run-make/coverage/lib/doctest_crate.rs | 9 - .../coverage/lib/inline_always_with_dead_code.rs | 22 - tests/run-make/coverage/lib/unused_mod_helper.rs | 3 - tests/run-make/coverage/lib/used_crate.rs | 100 - tests/run-make/coverage/lib/used_inline_crate.rs | 90 - tests/run-make/coverage/loop_break_value.rs | 13 - tests/run-make/coverage/loops_branches.rs | 61 - tests/run-make/coverage/match_or_pattern.rs | 45 - tests/run-make/coverage/nested_loops.rs | 25 - tests/run-make/coverage/no_cov_crate.rs | 86 - tests/run-make/coverage/overflow.rs | 63 - tests/run-make/coverage/panic_unwind.rs | 31 - tests/run-make/coverage/partial_eq.rs | 46 - tests/run-make/coverage/simple_loop.rs | 35 - tests/run-make/coverage/simple_match.rs | 43 - tests/run-make/coverage/sort_groups.rs | 23 - tests/run-make/coverage/test_harness.rs | 10 - tests/run-make/coverage/tight_inf_loop.rs | 5 - tests/run-make/coverage/try_error_result.rs | 118 -- tests/run-make/coverage/unused.rs | 39 - tests/run-make/coverage/unused_mod.rs | 6 - tests/run-make/coverage/uses_crate.rs | 15 - tests/run-make/coverage/uses_inline_crate.rs | 20 - tests/run-make/coverage/while.rs | 5 - tests/run-make/coverage/while_early_ret.rs | 42 - tests/run-make/coverage/yield.rs | 37 - tests/run-make/emit-to-stdout/Makefile | 51 + tests/run-make/emit-to-stdout/emit-link.stderr | 4 + tests/run-make/emit-to-stdout/emit-llvm-bc.stderr | 4 + tests/run-make/emit-to-stdout/emit-metadata.stderr | 4 + .../emit-to-stdout/emit-multiple-types.stderr | 4 + tests/run-make/emit-to-stdout/emit-obj.stderr | 4 + tests/run-make/emit-to-stdout/test.rs | 1 + tests/run-make/libtest-junit/validate_junit.py | 2 +- tests/run-make/optimization-remarks-dir/Makefile | 12 + tests/run-make/optimization-remarks-dir/foo.rs | 6 + tests/run-make/panic-abort-eh_frame/Makefile | 10 + tests/run-make/panic-abort-eh_frame/foo.rs | 10 + tests/run-make/rust-lld/Makefile | 8 + tests/run-make/rust-lld/main.rs | 4 + tests/run-make/rustdoc-map-file/validate_json.py | 2 +- tests/run-make/rustdoc-themes/foo.rs | 2 +- tests/run-make/sysroot-crates-are-unstable/test.py | 2 +- tests/run-make/target-specs/Makefile | 1 + .../run-make/target-specs/endianness-mismatch.json | 11 + .../x86_64-fortanix-unknown-sgx-lvi/print.checks | 8 +- .../x86_64-fortanix-unknown-sgx-lvi/script.sh | 9 + tests/rustdoc-gui/codeblock-tooltip.goml | 2 + .../docblock-code-block-line-number.goml | 6 +- tests/rustdoc-gui/fields.goml | 18 + tests/rustdoc-gui/headers-color.goml | 22 +- tests/rustdoc-gui/help-page.goml | 4 +- tests/rustdoc-gui/label-next-to-symbol.goml | 12 +- tests/rustdoc-gui/notable-trait.goml | 43 +- tests/rustdoc-gui/search-filter.goml | 18 +- tests/rustdoc-gui/search-reexport.goml | 10 +- tests/rustdoc-gui/search-result-color.goml | 43 +- tests/rustdoc-gui/search-result-display.goml | 46 +- tests/rustdoc-gui/search-result-keyword.goml | 7 +- .../search-tab-change-title-fn-sig.goml | 2 +- tests/rustdoc-gui/setting-go-to-only-result.goml | 9 +- tests/rustdoc-gui/settings.goml | 60 +- tests/rustdoc-gui/shortcuts.goml | 6 +- tests/rustdoc-gui/sidebar-mobile.goml | 12 +- tests/rustdoc-gui/sidebar-source-code.goml | 12 +- tests/rustdoc-gui/source-code-page.goml | 24 +- tests/rustdoc-gui/src/test_docs/lib.rs | 30 + tests/rustdoc-gui/target.goml | 8 +- tests/rustdoc-gui/theme-change.goml | 6 +- tests/rustdoc-gui/theme-in-history.goml | 6 +- tests/rustdoc-js-std/alias-1.js | 3 +- tests/rustdoc-js-std/alias-2.js | 3 +- tests/rustdoc-js-std/alias-3.js | 3 +- tests/rustdoc-js-std/alias-4.js | 3 +- tests/rustdoc-js-std/alias.js | 3 +- tests/rustdoc-js-std/asrawfd.js | 3 +- tests/rustdoc-js-std/basic.js | 3 +- tests/rustdoc-js-std/bufread-fill-buf.js | 13 + tests/rustdoc-js-std/deduplication.js | 3 +- tests/rustdoc-js-std/enum-option.js | 3 +- tests/rustdoc-js-std/filter-crate.js | 2 +- tests/rustdoc-js-std/fn-forget.js | 3 +- tests/rustdoc-js-std/from_u.js | 3 +- tests/rustdoc-js-std/keyword.js | 3 +- tests/rustdoc-js-std/macro-check.js | 3 +- tests/rustdoc-js-std/macro-print.js | 3 +- tests/rustdoc-js-std/never.js | 21 +- tests/rustdoc-js-std/option-type-signatures.js | 14 +- tests/rustdoc-js-std/osstring-to-string.js | 9 + tests/rustdoc-js-std/parser-errors.js | 292 ++- tests/rustdoc-js-std/parser-filter.js | 23 +- tests/rustdoc-js-std/parser-generics.js | 19 +- tests/rustdoc-js-std/parser-ident.js | 95 +- tests/rustdoc-js-std/parser-literal.js | 3 +- tests/rustdoc-js-std/parser-paths.js | 6 +- tests/rustdoc-js-std/parser-quote.js | 19 +- tests/rustdoc-js-std/parser-returned.js | 21 +- tests/rustdoc-js-std/parser-separators.js | 97 +- tests/rustdoc-js-std/parser-slice-array.js | 305 ++++ tests/rustdoc-js-std/parser-weird-queries.js | 56 +- tests/rustdoc-js-std/path-ordering.js | 5 +- tests/rustdoc-js-std/primitive.js | 17 +- tests/rustdoc-js-std/println-typo.js | 2 +- tests/rustdoc-js-std/quoted.js | 2 +- tests/rustdoc-js-std/reference-shrink.js | 3 +- tests/rustdoc-js-std/regex.js | 3 +- tests/rustdoc-js-std/return-specific-literal.js | 3 +- tests/rustdoc-js-std/return-specific.js | 3 +- tests/rustdoc-js-std/should-fail.js | 3 +- tests/rustdoc-js-std/string-from_ut.js | 3 +- tests/rustdoc-js-std/struct-vec.js | 3 +- tests/rustdoc-js-std/typed-query.js | 2 +- tests/rustdoc-js-std/vec-new.js | 30 +- tests/rustdoc-js/basic.js | 3 +- tests/rustdoc-js/doc-alias-filter-out.js | 3 +- tests/rustdoc-js/doc-alias-filter.js | 3 +- tests/rustdoc-js/doc-alias-whitespace.js | 5 +- tests/rustdoc-js/doc-alias.js | 69 +- tests/rustdoc-js/exact-match.js | 3 +- tests/rustdoc-js/foreign-type-path.js | 3 +- tests/rustdoc-js/generics-impl.js | 30 +- tests/rustdoc-js/generics-match-ambiguity.js | 91 + tests/rustdoc-js/generics-match-ambiguity.rs | 17 + tests/rustdoc-js/generics-multi-trait.js | 9 +- tests/rustdoc-js/generics-nested.js | 15 +- tests/rustdoc-js/generics-trait.js | 26 +- tests/rustdoc-js/generics.js | 30 +- tests/rustdoc-js/impl-trait.js | 18 +- tests/rustdoc-js/macro-search.js | 3 +- tests/rustdoc-js/module-substring.js | 3 +- tests/rustdoc-js/nested-unboxed.js | 68 + tests/rustdoc-js/nested-unboxed.rs | 5 + tests/rustdoc-js/never-search.js | 46 + tests/rustdoc-js/never-search.rs | 13 + tests/rustdoc-js/path-ordering.js | 3 +- tests/rustdoc-js/primitive.js | 13 +- tests/rustdoc-js/prototype.js | 4 +- tests/rustdoc-js/raw-pointer.js | 18 +- tests/rustdoc-js/reexport.js | 4 +- tests/rustdoc-js/search-bag-semantics.js | 7 +- tests/rustdoc-js/search-short-types.js | 3 +- tests/rustdoc-js/slice-array.js | 46 +- tests/rustdoc-js/slice-array.rs | 2 + tests/rustdoc-js/struct-like-variant.js | 3 +- tests/rustdoc-js/substring.js | 3 +- tests/rustdoc-js/summaries.js | 5 +- tests/rustdoc-js/where-clause.js | 7 +- tests/rustdoc/alias-reexport.rs | 16 + tests/rustdoc/alias-reexport2.rs | 16 + tests/rustdoc/anchors.no_type_anchor2.html | 2 +- tests/rustdoc/assoc-consts.rs | 1 - tests/rustdoc/auxiliary/alias-reexport.rs | 3 + tests/rustdoc/auxiliary/alias-reexport2.rs | 12 + .../decl-line-wrapping-empty-arg-list.decl.html | 2 + tests/rustdoc/decl-line-wrapping-empty-arg-list.rs | 12 + tests/rustdoc/double-hyphen-to-dash.rs | 9 + tests/rustdoc/files-creation-hidden.rs | 24 + tests/rustdoc/files-creation-private.rs | 22 + tests/rustdoc/generic-associated-types/gats.rs | 4 +- .../inline-private-with-intermediate-doc-hidden.rs | 23 + tests/rustdoc/inline_cross/assoc-const-equality.rs | 8 + .../inline_cross/assoc_item_trait_bounds.rs | 12 + .../inline_cross/auxiliary/assoc-const-equality.rs | 7 + .../auxiliary/assoc_item_trait_bounds.rs | 17 + tests/rustdoc/inline_cross/auxiliary/dyn_trait.rs | 79 +- tests/rustdoc/inline_cross/dyn_trait.rs | 140 +- tests/rustdoc/intra-doc/issue-108459.rs | 37 + tests/rustdoc/intra-doc/prim-precedence.rs | 2 +- tests/rustdoc/issue-109449-doc-hidden-reexports.rs | 143 ++ .../issue-111064-reexport-trait-from-hidden-2.rs | 14 +- tests/rustdoc/issue-111249-file-creation.rs | 40 + tests/rustdoc/issue-112515-impl-ty-alias.rs | 30 + tests/rustdoc/redirect.rs | 2 + tests/rustdoc/reexport-attr-merge.rs | 4 +- .../rustdoc/reexport-doc-hidden-inside-private.rs | 16 + tests/rustdoc/union-fields-html.rs | 11 + tests/rustdoc/visibility.rs | 25 + tests/rustdoc/where.SWhere_Echo_impl.html | 2 + tests/rustdoc/where.SWhere_Simd_item-decl.html | 2 +- tests/rustdoc/where.alpha_trait_decl.html | 3 + tests/rustdoc/where.bravo_trait_decl.html | 5 + tests/rustdoc/where.charlie_fn_decl.html | 2 + tests/rustdoc/where.golf_type_alias_decl.html | 2 + tests/rustdoc/where.rs | 5 + .../ui-fulldeps/missing-rustc-driver-error.stderr | 12 +- .../diagnostic-derive-doc-comment-field.stderr | 2 +- .../session-diagnostic/diagnostic-derive.rs | 4 +- .../session-diagnostic/diagnostic-derive.stderr | 8 +- tests/ui-fulldeps/session-diagnostic/example.ftl | 2 + .../session-diagnostic/invalid-variable.rs | 21 + .../session-diagnostic/subdiagnostic-derive.rs | 12 +- .../session-diagnostic/subdiagnostic-derive.stderr | 14 +- tests/ui-fulldeps/stable-mir/crate-info.rs | 39 + tests/ui/abi/foreign/foreign-fn-with-byval.rs | 2 +- tests/ui/abi/issue-94223.rs | 8 + tests/ui/argument-suggestions/issue-112507.rs | 12 + tests/ui/argument-suggestions/issue-112507.stderr | 27 + tests/ui/asm/aarch64/may_unwind.rs | 1 + tests/ui/asm/parse-error.rs | 144 ++ tests/ui/asm/parse-error.stderr | 412 +++++ tests/ui/asm/x86_64/parse-error.rs | 130 -- tests/ui/asm/x86_64/parse-error.stderr | 399 ---- tests/ui/asm/x86_64/x86_64_parse_error.rs | 21 + tests/ui/asm/x86_64/x86_64_parse_error.stderr | 44 + tests/ui/assign-assign.rs | 4 +- .../infer-placeholder-in-non-suggestable-pos.rs | 10 + ...infer-placeholder-in-non-suggestable-pos.stderr | 9 + tests/ui/associated-consts/issue-110933.rs | 20 + .../assoc-inherent-unstable.rs | 3 + .../assoc-inherent-unstable.stderr | 2 +- .../bugs/cycle-iat-inside-of-adt.rs | 4 + .../bugs/cycle-iat-inside-of-adt.stderr | 40 +- .../dont-select-if-disabled.rs | 17 + .../dont-select-if-disabled.stderr | 24 + .../issue-109071.no_gate.stderr | 41 + tests/ui/associated-inherent-types/issue-109071.rs | 19 + .../issue-109071.with_gate.stderr | 26 + .../associated-inherent-types/issue-109789.stderr | 4 +- .../ui/associated-inherent-types/issue-111404-0.rs | 14 + .../ui/associated-inherent-types/issue-111404-1.rs | 13 + .../issue-111404-1.stderr | 8 + .../associated-inherent-types/private-in-public.rs | 10 +- .../private-in-public.stderr | 49 +- .../associated-type-bounds/dyn-impl-trait-type.rs | 8 +- .../ui/associated-type-bounds/dyn-rpit-and-let.rs | 8 +- .../implied-in-supertrait.rs | 19 + .../bad-inputs-and-output.current.stderr | 48 + .../bad-inputs-and-output.next.stderr | 48 + .../return-type-notation/bad-inputs-and-output.rs | 2 + .../bad-inputs-and-output.stderr | 48 - .../return-type-notation/basic.current_with.stderr | 11 + .../basic.current_without.stderr | 29 + .../return-type-notation/basic.next_with.stderr | 11 + .../return-type-notation/basic.next_without.stderr | 29 + .../return-type-notation/basic.rs | 14 +- .../return-type-notation/equality.current.stderr | 17 + .../return-type-notation/equality.next.stderr | 17 + .../return-type-notation/equality.rs | 2 + .../return-type-notation/equality.stderr | 17 - tests/ui/associated-type-bounds/rpit.rs | 8 +- .../trait-alias-impl-trait.rs | 8 +- .../dont-suggest-cyclic-constraint.rs | 11 + .../dont-suggest-cyclic-constraint.stderr | 12 + .../associated-types/normalization-debruijn-3.rs | 4 +- tests/ui/async-await/deep-futures-are-freeze.rs | 179 ++ .../async-await/drop-track-bad-field-in-fru.stderr | 2 + tests/ui/async-await/drop-track-field-assign.rs | 2 +- tests/ui/async-await/field-assign.rs | 2 +- .../in-trait/async-associated-types2.rs | 30 - .../in-trait/async-lifetimes-and-bounds.rs | 2 + tests/ui/async-await/in-trait/async-lifetimes.rs | 2 + .../in-trait/missing-feature-flag.current.stderr | 30 + .../in-trait/missing-feature-flag.next.stderr | 30 + .../async-await/in-trait/missing-feature-flag.rs | 23 + .../in-trait/normalize-opaque-with-bound-vars.rs | 64 + .../return-not-existing-pair.current.stderr | 39 + .../in-trait/return-not-existing-pair.next.stderr | 39 + .../in-trait/return-not-existing-pair.rs | 19 + ...ot-existing-type-wrapping-rpitit.current.stderr | 9 + ...n-not-existing-type-wrapping-rpitit.next.stderr | 9 + .../return-not-existing-type-wrapping-rpitit.rs | 20 + ...ssue-64130-4-async-move.no_drop_tracking.stderr | 6 +- tests/ui/async-await/issue-64130-4-async-move.rs | 2 +- .../issue-70935-complex-spans.drop_tracking.stderr | 31 +- ...ue-70935-complex-spans.drop_tracking_mir.stderr | 31 +- ...sue-70935-complex-spans.no_drop_tracking.stderr | 16 +- tests/ui/async-await/issue-70935-complex-spans.rs | 17 +- tests/ui/async-await/issue-78115.rs | 19 + tests/ui/async-await/non-trivial-drop.rs | 2 +- .../issue-110963-early.current.stderr | 37 + .../issue-110963-early.next.stderr | 37 + .../return-type-notation/issue-110963-early.rs | 2 + .../return-type-notation/issue-110963-early.stderr | 37 - .../issue-110963-late.current.stderr | 11 + .../issue-110963-late.next.stderr | 11 + .../return-type-notation/issue-110963-late.rs | 2 + .../return-type-notation/issue-110963-late.stderr | 11 - .../rtn-implied-in-supertrait.rs | 28 + .../rtn-implied-in-supertrait.stderr | 11 + .../return-type-notation/rtn-in-impl-signature.rs | 13 + .../rtn-in-impl-signature.stderr | 18 + .../super-method-bound.current.stderr | 11 + .../super-method-bound.next.stderr | 11 + .../return-type-notation/super-method-bound.rs | 2 + .../return-type-notation/super-method-bound.stderr | 11 - .../supertrait-bound.current.stderr | 11 + .../supertrait-bound.next.stderr | 11 + .../return-type-notation/supertrait-bound.rs | 2 + .../return-type-notation/supertrait-bound.stderr | 11 - .../ty-or-ct-params.current.stderr | 29 + .../ty-or-ct-params.next.stderr | 29 + .../return-type-notation/ty-or-ct-params.rs | 22 + tests/ui/attributes/doc-test-literal.rs | 7 + tests/ui/attributes/doc-test-literal.stderr | 17 + tests/ui/auto-traits/issue-23080-2.current.stderr | 11 + tests/ui/auto-traits/issue-23080-2.next.stderr | 11 + tests/ui/auto-traits/issue-23080-2.rs | 3 + tests/ui/auto-traits/issue-23080-2.stderr | 11 - .../deref-ambiguity-becomes-nonambiguous.rs | 40 + .../deref-ambiguity-becomes-nonambiguous.stderr | 17 + tests/ui/binop/binop-mul-i32-f32.stderr | 4 +- tests/ui/binop/shift-various-bad-types.stderr | 48 +- ...k-thread-local-static-borrow-outlives-fn.stderr | 2 +- tests/ui/borrowck/issue-111554.rs | 28 + tests/ui/borrowck/issue-111554.stderr | 29 + tests/ui/cfg/auxiliary/cfg_false_lib.rs | 6 +- .../ui/cfg/auxiliary/cfg_false_lib_no_std_after.rs | 5 + .../cfg/auxiliary/cfg_false_lib_no_std_before.rs | 8 + tests/ui/cfg/auxiliary/cfged_out.rs | 22 + tests/ui/cfg/cfg-false-feature.rs | 6 +- tests/ui/cfg/cfg-false-feature.stderr | 17 +- tests/ui/cfg/cfg_false_no_std-1.rs | 10 + tests/ui/cfg/cfg_false_no_std-2.rs | 11 + tests/ui/cfg/cfg_false_no_std.rs | 3 +- tests/ui/cfg/cfg_stmt_expr.rs | 2 +- tests/ui/cfg/diagnostics-cross-crate.rs | 31 + tests/ui/cfg/diagnostics-cross-crate.stderr | 53 + tests/ui/cfg/diagnostics-not-a-def.rs | 12 + tests/ui/cfg/diagnostics-not-a-def.stderr | 9 + tests/ui/cfg/diagnostics-reexport.rs | 40 + tests/ui/cfg/diagnostics-reexport.stderr | 47 + tests/ui/cfg/diagnostics-same-crate.rs | 51 + tests/ui/cfg/diagnostics-same-crate.stderr | 47 + tests/ui/chalkify/arithmetic.rs | 20 - tests/ui/chalkify/assert.rs | 6 - tests/ui/chalkify/basic.rs | 12 - tests/ui/chalkify/bugs/async.rs | 25 - tests/ui/chalkify/bugs/async.stderr | 29 - tests/ui/chalkify/builtin-copy-clone.rs | 45 - tests/ui/chalkify/chalk_initial_program.rs | 16 - tests/ui/chalkify/chalk_initial_program.stderr | 18 - tests/ui/chalkify/closure.rs | 38 - tests/ui/chalkify/closure.stderr | 22 - tests/ui/chalkify/generic_impls.rs | 18 - tests/ui/chalkify/generic_impls.stderr | 29 - tests/ui/chalkify/impl_wf.rs | 26 - tests/ui/chalkify/impl_wf.stderr | 29 - tests/ui/chalkify/impl_wf_2.rs | 33 - tests/ui/chalkify/impl_wf_2.stderr | 16 - tests/ui/chalkify/inherent_impl.rs | 42 - tests/ui/chalkify/inherent_impl_min.rs | 27 - tests/ui/chalkify/lower_env1.rs | 14 - tests/ui/chalkify/lower_env2.rs | 16 - tests/ui/chalkify/lower_env3.rs | 16 - tests/ui/chalkify/lower_impl.rs | 17 - tests/ui/chalkify/lower_struct.rs | 8 - tests/ui/chalkify/lower_trait.rs | 11 - tests/ui/chalkify/lower_trait_higher_rank.rs | 9 - tests/ui/chalkify/lower_trait_where_clause.rs | 16 - tests/ui/chalkify/println.rs | 6 - tests/ui/chalkify/projection.rs | 25 - .../ui/chalkify/recursive_where_clause_on_type.rs | 30 - .../chalkify/recursive_where_clause_on_type.stderr | 14 - tests/ui/chalkify/super_trait.rs | 19 - tests/ui/chalkify/trait-objects.rs | 12 - tests/ui/chalkify/trait_implied_bound.rs | 18 - tests/ui/chalkify/type_implied_bound.rs | 29 - tests/ui/chalkify/type_inference.rs | 28 - tests/ui/chalkify/type_inference.stderr | 20 - tests/ui/chalkify/type_wf.rs | 25 - tests/ui/chalkify/type_wf.stderr | 16 - .../match/patterns-capture-analysis.rs | 25 + .../match/patterns-capture-analysis.stderr | 58 +- .../run_pass/disjoint-capture-in-same-closure.rs | 2 +- .../run_pass/lit-pattern-matching-with-methods.rs | 6 +- tests/ui/closures/cannot-call-unsized-via-ptr-2.rs | 11 + .../closures/cannot-call-unsized-via-ptr-2.stderr | 21 + tests/ui/closures/cannot-call-unsized-via-ptr.rs | 10 + .../ui/closures/cannot-call-unsized-via-ptr.stderr | 12 + tests/ui/closures/closure-move-sync.rs | 6 - tests/ui/closures/closure-move-sync.stderr | 20 +- tests/ui/closures/issue-111932.rs | 9 + tests/ui/closures/issue-111932.stderr | 26 + tests/ui/closures/issue-113087.rs | 11 + tests/ui/closures/issue-113087.stderr | 16 + .../issue-72408-nested-closures-exponential.rs | 1 + .../ui/codegen/subtyping-enforces-type-equality.rs | 48 + .../subtyping-enforces-type-equality.stderr | 1 + tests/ui/codegen/subtyping-impacts-selection-1.rs | 44 + tests/ui/codegen/subtyping-impacts-selection-2.rs | 12 + tests/ui/coercion/issue-3794.rs | 32 + .../coherence-inherited-subtyping.old.stderr | 14 - .../coherence-inherited-subtyping.re.stderr | 14 - .../ui/coherence/coherence-inherited-subtyping.rs | 2 - .../coherence/coherence-inherited-subtyping.stderr | 14 + tests/ui/coinduction/canonicalization-rerun.rs | 4 +- .../adt_const_params/const_param_ty_bad.stderr | 20 + .../adt_const_params/const_param_ty_good.rs | 4 +- .../const_param_ty_impl_no_structural_eq.rs | 2 + .../const_param_ty_impl_no_structural_eq.stderr | 23 +- .../adt_const_params/const_param_ty_impl_union.rs | 1 + .../const_param_ty_impl_union.stderr | 14 +- .../const-argument-if-length.full.stderr | 2 +- .../const-argument-if-length.min.stderr | 2 +- ...st-param-type-depends-on-type-param.full.stderr | 14 +- ...nst-param-type-depends-on-type-param.min.stderr | 14 +- .../const-param-type-depends-on-type-param.rs | 1 - .../const-param-with-additional-obligations.rs | 17 + .../const-param-with-additional-obligations.stderr | 11 + .../defaults/default-param-wf-concrete.next.stderr | 9 + .../defaults/default-param-wf-concrete.old.stderr | 9 + .../defaults/default-param-wf-concrete.rs | 3 + .../defaults/default-param-wf-concrete.stderr | 9 - tests/ui/const-generics/exhaustive-value.stderr | 14 +- .../float-generic.adt_const_params.stderr | 2 - .../forbid-non-structural_match-types.rs | 6 +- .../forbid-non-structural_match-types.stderr | 12 +- .../generic_arg_infer/in-signature.rs | 6 +- .../generic_arg_infer/in-signature.stderr | 6 +- .../generic_arg_infer/issue-91614.stderr | 4 +- .../array-size-in-generic-struct-param.full.stderr | 2 +- .../array-size-in-generic-struct-param.min.stderr | 4 +- .../array-size-in-generic-struct-param.rs | 4 + .../generic_const_exprs/eval-privacy.rs | 7 + .../generic_const_exprs/eval-privacy.stderr | 21 +- .../inline-const-in-const-generic-defaults.rs | 9 + .../generic_const_exprs/issue-109141.rs | 13 + .../generic_const_exprs/issue-109141.stderr | 26 + .../generic_const_exprs/issue-80742.stderr | 4 +- .../generic_const_exprs/issue-86710.rs | 2 +- .../generic_const_exprs/issue-96699.rs | 87 + tests/ui/const-generics/invalid-enum.rs | 4 +- tests/ui/const-generics/invalid-enum.stderr | 14 +- tests/ui/const-generics/issue-112505-overflow.rs | 7 + .../ui/const-generics/issue-112505-overflow.stderr | 12 + tests/ui/const-generics/issue-66451.rs | 6 +- tests/ui/const-generics/issue-66451.stderr | 2 +- tests/ui/const-generics/issue-80471.rs | 2 +- tests/ui/const-generics/issue-80471.stderr | 8 +- .../issues/issue-63322-forbid-dyn.full.stderr | 4 +- .../issues/issue-63322-forbid-dyn.rs | 2 +- .../ui/const-generics/issues/issue-67185-2.stderr | 12 +- .../const-generics/issues/issue-70273-assoc-fn.rs | 2 +- .../const-generics/issues/issue-71381.full.stderr | 17 +- tests/ui/const-generics/issues/issue-71381.rs | 10 +- .../const-generics/issues/issue-71611.full.stderr | 11 +- tests/ui/const-generics/issues/issue-71611.rs | 4 +- .../const-generics/issues/issue-74255.min.stderr | 2 +- tests/ui/const-generics/issues/issue-74255.rs | 4 + .../const-generics/issues/issue-74950.min.stderr | 10 +- tests/ui/const-generics/issues/issue-74950.rs | 3 + tests/ui/const-generics/issues/issue-87076.rs | 4 +- tests/ui/const-generics/issues/issue-97278.rs | 2 +- tests/ui/const-generics/issues/issue-97278.stderr | 8 +- tests/ui/const-generics/issues/issue-99641.rs | 4 +- tests/ui/const-generics/issues/issue-99641.stderr | 8 +- tests/ui/const-generics/overlapping_impls.rs | 5 +- .../std/const-generics-range.full.stderr | 39 + .../std/const-generics-range.min.stderr | 12 +- .../ui/const-generics/std/const-generics-range.rs | 3 +- tests/ui/const-generics/transmute-fail.stderr | 4 +- tests/ui/const-ptr/forbidden_slices.stderr | 10 +- tests/ui/consts/assoc_const_generic_impl.rs | 2 +- .../const-eval/const-eval-overflow-3b.stderr | 4 +- .../const-eval/const-eval-overflow-4b.stderr | 4 +- tests/ui/consts/const-eval/erroneous-const.rs | 2 +- tests/ui/consts/const-eval/erroneous-const.stderr | 6 +- tests/ui/consts/const-eval/erroneous-const2.rs | 2 +- tests/ui/consts/const-eval/erroneous-const2.stderr | 6 +- .../const-eval/heap/alloc_intrinsic_errors.stderr | 2 +- .../heap/alloc_intrinsic_nontransient_fail.rs | 4 +- .../heap/alloc_intrinsic_nontransient_fail.stderr | 4 +- .../const-eval/heap/alloc_intrinsic_untyped.rs | 4 +- .../const-eval/heap/alloc_intrinsic_untyped.stderr | 6 +- .../heap/dealloc_intrinsic_incorrect_layout.stderr | 2 +- tests/ui/consts/const-eval/infinite_loop.rs | 4 +- tests/ui/consts/const-eval/infinite_loop.stderr | 23 +- tests/ui/consts/const-eval/issue-52475.rs | 3 +- tests/ui/consts/const-eval/issue-52475.stderr | 22 +- tests/ui/consts/const-eval/issue-70723.rs | 2 +- tests/ui/consts/const-eval/issue-70723.stderr | 14 +- tests/ui/consts/const-eval/promoted_errors.rs | 2 +- tests/ui/consts/const-eval/raw-bytes.32bit.stderr | 14 +- tests/ui/consts/const-eval/raw-bytes.64bit.stderr | 14 +- .../const-eval/stable-metric/ctfe-fn-call.rs | 2 +- .../const-eval/stable-metric/ctfe-fn-call.stderr | 19 +- .../const-eval/stable-metric/ctfe-labelled-loop.rs | 5 +- .../stable-metric/ctfe-labelled-loop.stderr | 27 +- .../const-eval/stable-metric/ctfe-recursion.rs | 3 +- .../const-eval/stable-metric/ctfe-recursion.stderr | 24 +- .../stable-metric/ctfe-simple-loop.allow.stderr | 19 + .../const-eval/stable-metric/ctfe-simple-loop.rs | 12 +- .../stable-metric/ctfe-simple-loop.stderr | 24 - .../stable-metric/ctfe-simple-loop.warn.stderr | 62 + tests/ui/consts/const-eval/ub-enum.32bit.stderr | 4 +- tests/ui/consts/const-eval/ub-enum.64bit.stderr | 4 +- tests/ui/consts/const-eval/ub-uninhabit.stderr | 4 +- tests/ui/consts/const-eval/unwind-abort.rs | 2 +- .../validate_uninhabited_zsts.32bit.stderr | 2 +- .../validate_uninhabited_zsts.64bit.stderr | 2 +- .../const-len-underflow-separate-spans.next.stderr | 15 + .../const-len-underflow-separate-spans.old.stderr | 15 + .../consts/const-len-underflow-separate-spans.rs | 3 + .../const-len-underflow-separate-spans.stderr | 15 - tests/ui/consts/const_in_pattern/issue-73431.rs | 1 + .../const_limit/const_eval_limit_not_reached.rs | 20 - .../const_limit/const_eval_limit_overflow.rs | 15 - .../const_limit/const_eval_limit_overflow.stderr | 10 - .../consts/const_limit/const_eval_limit_reached.rs | 16 - .../const_limit/const_eval_limit_reached.stderr | 12 - .../const_limit/feature-gate-const_eval_limit.rs | 14 - .../feature-gate-const_eval_limit.stderr | 12 - tests/ui/consts/issue-16538.mir.stderr | 29 + tests/ui/consts/issue-16538.rs | 19 + tests/ui/consts/issue-16538.thir.stderr | 29 + tests/ui/consts/issue-28822.rs | 7 + tests/ui/consts/issue-29798.rs | 11 + tests/ui/consts/issue-64506.stderr | 2 +- tests/ui/consts/issue-83182.stderr | 4 +- tests/ui/consts/issue-miri-1910.stderr | 4 +- tests/ui/consts/large_const_alloc.rs | 4 +- tests/ui/consts/miri_unleashed/assoc_const.stderr | 2 +- .../ui/consts/miri_unleashed/raw_mutable_const.rs | 2 +- .../consts/miri_unleashed/raw_mutable_const.stderr | 4 +- tests/ui/consts/missing-larger-array-impl.rs | 9 + tests/ui/consts/missing-larger-array-impl.stderr | 20 + tests/ui/consts/missing_span_in_backtrace.stderr | 4 +- tests/ui/consts/offset_from_ub.stderr | 14 +- tests/ui/consts/raw-ptr-const.rs | 2 +- tests/ui/consts/raw-ptr-const.stderr | 4 +- tests/ui/consts/refs_check_const_eq-issue-88384.rs | 4 +- .../consts/refs_check_const_eq-issue-88384.stderr | 16 +- tests/ui/consts/timeout.rs | 25 + tests/ui/consts/timeout.stderr | 15 + tests/ui/consts/too_generic_eval_ice.stderr | 12 +- tests/ui/deriving/deriving-all-codegen.stdout | 15 + tests/ui/deriving/issue-103157.stderr | 10 +- .../issue-21659-show-relevant-trait-impls-2.stderr | 4 +- .../issue-39802-show-5-trait-impls.stderr | 4 +- .../issue-42599_available_fields_note.stderr | 2 +- ...unicode-confusable-in-float-literal-expt.stderr | 16 +- tests/ui/discrim/discrim-ill-typed.rs | 114 -- tests/ui/discrim/discrim-ill-typed.stderr | 91 - tests/ui/discrim/discrim-overflow-2.rs | 80 - tests/ui/discrim/discrim-overflow-2.stderr | 67 - tests/ui/discrim/discrim-overflow.rs | 99 - tests/ui/discrim/discrim-overflow.stderr | 67 - tests/ui/dst/dst-object-from-unsized-type.stderr | 4 +- tests/ui/duplicate/dupe-symbols-7.rs | 3 - tests/ui/duplicate/dupe-symbols-7.stderr | 2 +- tests/ui/dyn-star/box.rs | 4 +- tests/ui/dyn-star/param-env-infer.current.stderr | 18 - tests/ui/dyn-star/param-env-infer.next.stderr | 73 - tests/ui/dyn-star/param-env-infer.rs | 17 - .../dyn-star/param-env-region-infer.current.stderr | 9 + .../ui/dyn-star/param-env-region-infer.next.stderr | 29 + tests/ui/dyn-star/param-env-region-infer.rs | 22 + tests/ui/empty-allocation-rvalue-non-null.rs | 2 +- tests/ui/empty/empty-macro-use.stderr | 6 +- .../ui/enum-discriminant/discriminant-ill-typed.rs | 114 ++ .../discriminant-ill-typed.stderr | 91 + .../enum-discriminant/discriminant-overflow-2.rs | 80 + .../discriminant-overflow-2.stderr | 67 + .../ui/enum-discriminant/discriminant-overflow.rs | 99 + .../enum-discriminant/discriminant-overflow.stderr | 67 + tests/ui/enum-discriminant/issue-50689.rs | 9 + tests/ui/enum/suggest-default-attribute.stderr | 2 +- tests/ui/error-codes/E0283.stderr | 4 +- tests/ui/error-codes/E0445.rs | 11 + tests/ui/error-codes/E0445.stderr | 49 +- tests/ui/error-codes/E0560.stderr | 2 +- tests/ui/error-codes/E0637.stderr | 7 +- tests/ui/error-codes/E0790.stderr | 4 +- .../become-outside.array.stderr | 9 + .../become-outside.constant.stderr | 9 + tests/ui/explicit-tail-calls/become-outside.rs | 15 + .../ui/explicit-tail-calls/return-lifetime-sub.rs | 13 + tests/ui/explicit-tail-calls/return-mismatches.rs | 28 + .../explicit-tail-calls/return-mismatches.stderr | 27 + tests/ui/extern/extern-crate-visibility.stderr | 8 + ...e-112363-extern-item-where-clauses-debug-ice.rs | 10 + ...2363-extern-item-where-clauses-debug-ice.stderr | 47 + tests/ui/extern/issue-1251.rs | 16 + .../feature-gate-explicit_tail_calls.rs | 9 + .../feature-gate-explicit_tail_calls.stderr | 21 + .../feature-gate-generic_arg_infer.rs | 2 +- ...re-gate-return_type_notation.cfg_current.stderr | 27 + ...ature-gate-return_type_notation.cfg_next.stderr | 27 + ...ure-gate-return_type_notation.no_current.stderr | 13 + ...eature-gate-return_type_notation.no_next.stderr | 13 + .../feature-gate-return_type_notation.rs | 24 +- .../feature-gate-type_alias_impl_trait.rs | 7 +- .../feature-gate-type_privacy_lints.rs | 12 + .../feature-gate-type_privacy_lints.stderr | 93 + tests/ui/fmt/ifmt-unimpl.stderr | 16 +- tests/ui/for-loop-while/issue-1257.rs | 11 + tests/ui/for-loop-while/loop-break-value.rs | 10 +- tests/ui/for/issue-20605.current.stderr | 16 + tests/ui/for/issue-20605.next.stderr | 72 + tests/ui/for/issue-20605.rs | 20 + tests/ui/generator/layout-error.rs | 1 + tests/ui/generator/layout-error.stderr | 20 +- ...-bounds-not-checked-with-right-substitutions.rs | 29 + ...nds-not-checked-with-right-substitutions.stderr | 11 + .../ui/generic-associated-types/issue-88287.stderr | 2 +- tests/ui/generic-associated-types/issue-88595.rs | 1 - .../ui/generic-associated-types/issue-88595.stderr | 26 +- .../generic-associated-types/issue-90014-tait.rs | 23 + .../issue-90014-tait.stderr | 22 + .../generic-associated-types/issue-90014-tait2.rs | 46 + .../issue-90014-tait2.stderr | 12 + ...-incorrect-explicit-lifetime-name-needed.stderr | 7 +- .../post_monomorphization_error_backtrace.rs | 2 +- tests/ui/hashmap/hashmap-memory.rs | 1 + tests/ui/higher-lifetime-bounds.rs | 69 - tests/ui/higher-lifetime-bounds.stderr | 68 - tests/ui/higher-rank-trait-bounds/complex.rs | 28 - .../due-to-where-clause.rs | 13 - .../due-to-where-clause.stderr | 11 - .../higher-rank-trait-bounds/fn-ptr.classic.stderr | 19 - tests/ui/higher-rank-trait-bounds/fn-ptr.rs | 14 - .../hang-on-deeply-nested-dyn.rs | 16 - .../hang-on-deeply-nested-dyn.stderr | 22 - .../hrtb-binder-levels-in-object-types.rs | 29 - .../hrtb-cache-issue-54302.rs | 24 - .../hrtb-cache-issue-54302.stderr | 11 - .../hrtb-conflate-regions.rs | 31 - .../hrtb-conflate-regions.stderr | 20 - .../hrtb-debruijn-in-receiver.rs | 18 - .../hrtb-debruijn-in-receiver.stderr | 14 - .../hrtb-debruijn-object-types-in-closures.rs | 16 - .../hrtb-exists-forall-fn.rs | 18 - .../hrtb-exists-forall-fn.stderr | 12 - .../hrtb-exists-forall-trait-contravariant.rs | 36 - .../hrtb-exists-forall-trait-contravariant.stderr | 11 - .../hrtb-exists-forall-trait-covariant.rs | 37 - .../hrtb-exists-forall-trait-invariant.rs | 29 - .../hrtb-exists-forall-trait-invariant.stderr | 11 - .../hrtb-fn-like-trait-object.rs | 27 - .../higher-rank-trait-bounds/hrtb-fn-like-trait.rs | 27 - .../hrtb-higher-ranker-supertraits-transitive.rs | 50 - ...rtb-higher-ranker-supertraits-transitive.stderr | 23 - .../hrtb-higher-ranker-supertraits.rs | 48 - .../hrtb-higher-ranker-supertraits.stderr | 43 - .../hrtb-identity-fn-borrows.rs | 26 - .../hrtb-identity-fn-borrows.stderr | 14 - .../hrtb-just-for-static.rs | 35 - .../hrtb-just-for-static.stderr | 34 - .../hrtb-malformed-lifetime-generics.rs | 20 - .../hrtb-malformed-lifetime-generics.stderr | 62 - .../higher-rank-trait-bounds/hrtb-opt-in-copy.rs | 28 - tests/ui/higher-rank-trait-bounds/hrtb-parse.rs | 36 - .../hrtb-perfect-forwarding.polonius.stderr | 71 - .../hrtb-perfect-forwarding.rs | 56 - .../hrtb-perfect-forwarding.stderr | 79 - .../hrtb-precedence-of-plus-where-clause.rs | 25 - .../hrtb-precedence-of-plus.rs | 13 - .../hrtb-resolve-lifetime.rs | 14 - .../hrtb-trait-object-paren-notation.rs | 26 - .../hrtb-trait-object-passed-to-closure.rs | 25 - .../higher-rank-trait-bounds/hrtb-type-outlives.rs | 46 - .../hrtb-unboxed-closure-trait.rs | 11 - .../ui/higher-rank-trait-bounds/hrtb-wrong-kind.rs | 7 - .../hrtb-wrong-kind.stderr | 21 - tests/ui/higher-rank-trait-bounds/issue-100689.rs | 29 - tests/ui/higher-rank-trait-bounds/issue-102899.rs | 32 - tests/ui/higher-rank-trait-bounds/issue-30786.rs | 136 -- .../ui/higher-rank-trait-bounds/issue-30786.stderr | 46 - .../issue-36139-normalize-closure-sig.rs | 19 - tests/ui/higher-rank-trait-bounds/issue-39292.rs | 17 - tests/ui/higher-rank-trait-bounds/issue-42114.rs | 20 - tests/ui/higher-rank-trait-bounds/issue-43623.rs | 21 - tests/ui/higher-rank-trait-bounds/issue-46989.rs | 40 - .../ui/higher-rank-trait-bounds/issue-46989.stderr | 11 - tests/ui/higher-rank-trait-bounds/issue-57639.rs | 29 - tests/ui/higher-rank-trait-bounds/issue-58451.rs | 13 - .../ui/higher-rank-trait-bounds/issue-58451.stderr | 19 - tests/ui/higher-rank-trait-bounds/issue-59311.rs | 22 - .../ui/higher-rank-trait-bounds/issue-59311.stderr | 18 - tests/ui/higher-rank-trait-bounds/issue-60283.rs | 20 - .../issue-62203-hrtb-ice.rs | 54 - .../issue-62203-hrtb-ice.stderr | 66 - tests/ui/higher-rank-trait-bounds/issue-88446.rs | 35 - .../issue-88586-hr-self-outlives-in-trait-def.rs | 13 - tests/ui/higher-rank-trait-bounds/issue-90177.rs | 32 - tests/ui/higher-rank-trait-bounds/issue-95034.rs | 80 - .../issue-95230.new.stderr | 19 - tests/ui/higher-rank-trait-bounds/issue-95230.rs | 11 - .../normalize-under-binder/issue-44005.rs | 31 - .../normalize-under-binder/issue-56556.rs | 30 - .../normalize-under-binder/issue-62529-1.rs | 88 - .../normalize-under-binder/issue-62529-2.rs | 33 - .../normalize-under-binder/issue-62529-3.rs | 32 - .../normalize-under-binder/issue-62529-3.stderr | 19 - .../normalize-under-binder/issue-62529-4.rs | 39 - .../normalize-under-binder/issue-62529-5.rs | 27 - .../normalize-under-binder/issue-62529-6.rs | 77 - .../normalize-under-binder/issue-70120.rs | 31 - .../issue-71955.migrate.stderr | 79 - .../normalize-under-binder/issue-71955.rs | 51 - .../normalize-under-binder/issue-71955.stderr | 79 - .../normalize-under-binder/issue-74261.rs | 30 - .../normalize-under-binder/issue-76956.rs | 15 - .../normalize-under-binder/issue-80706.rs | 71 - .../normalize-under-binder/issue-80956.rs | 21 - .../normalize-under-binder/issue-81809.rs | 21 - .../normalize-under-binder/issue-85455.rs | 19 - .../normalize-under-binder/issue-85455.stderr | 25 - .../normalize-under-binder/issue-89118.rs | 32 - .../normalize-under-binder/issue-89118.stderr | 69 - .../normalize-under-binder/issue-89436.rs | 44 - .../normalize-under-binder/issue-90612.rs | 41 - .../normalize-under-binder/issue-90638.rs | 35 - .../normalize-under-binder/issue-90875.rs | 31 - .../normalize-under-binder/issue-90950.rs | 53 - .../normalize-under-binder/issue-90950.stderr | 21 - .../norm-before-method-resolution.rs | 23 - .../norm-before-method-resolution.stderr | 18 - tests/ui/higher-ranked/higher-lifetime-bounds.rs | 69 + .../ui/higher-ranked/higher-lifetime-bounds.stderr | 68 + tests/ui/higher-ranked/leak-check-in-selection.rs | 24 + ...subtype.bound_a_b_ret_a_vs_bound_a_ret_a.stderr | 17 + .../subtype/hr-subtype.bound_a_vs_free_x.stderr | 17 + .../hr-subtype.bound_inv_a_b_vs_bound_inv_a.stderr | 31 + .../hr-subtype.free_inv_x_vs_free_inv_y.stderr | 42 + .../subtype/hr-subtype.free_x_vs_free_y.stderr | 19 + tests/ui/higher-ranked/subtype/hr-subtype.rs | 111 ++ .../subtype/placeholder-pattern-fail.rs | 25 + .../subtype/placeholder-pattern-fail.stderr | 12 + .../higher-ranked/subtype/placeholder-pattern.rs | 18 + tests/ui/higher-ranked/subtype/return-static.rs | 13 + tests/ui/higher-ranked/trait-bounds/complex.rs | 28 + .../trait-bounds/due-to-where-clause.rs | 13 + .../trait-bounds/due-to-where-clause.stderr | 11 + .../trait-bounds/fn-ptr.classic.stderr | 19 + tests/ui/higher-ranked/trait-bounds/fn-ptr.rs | 14 + .../trait-bounds/future.classic.stderr | 6 + tests/ui/higher-ranked/trait-bounds/future.rs | 38 + .../trait-bounds/hang-on-deeply-nested-dyn.rs | 16 + .../trait-bounds/hang-on-deeply-nested-dyn.stderr | 22 + .../hrtb-binder-levels-in-object-types.rs | 29 + .../trait-bounds/hrtb-cache-issue-54302.rs | 24 + .../trait-bounds/hrtb-cache-issue-54302.stderr | 11 + .../trait-bounds/hrtb-conflate-regions.rs | 31 + .../trait-bounds/hrtb-conflate-regions.stderr | 20 + .../trait-bounds/hrtb-debruijn-in-receiver.rs | 18 + .../trait-bounds/hrtb-debruijn-in-receiver.stderr | 14 + .../hrtb-debruijn-object-types-in-closures.rs | 16 + .../trait-bounds/hrtb-exists-forall-fn.rs | 18 + .../trait-bounds/hrtb-exists-forall-fn.stderr | 12 + .../hrtb-exists-forall-trait-contravariant.rs | 36 + .../hrtb-exists-forall-trait-contravariant.stderr | 11 + .../hrtb-exists-forall-trait-covariant.rs | 37 + .../hrtb-exists-forall-trait-invariant.rs | 29 + .../hrtb-exists-forall-trait-invariant.stderr | 11 + .../trait-bounds/hrtb-fn-like-trait-object.rs | 27 + .../trait-bounds/hrtb-fn-like-trait.rs | 27 + .../hrtb-higher-ranker-supertraits-transitive.rs | 50 + ...rtb-higher-ranker-supertraits-transitive.stderr | 23 + .../trait-bounds/hrtb-higher-ranker-supertraits.rs | 48 + .../hrtb-higher-ranker-supertraits.stderr | 43 + .../trait-bounds/hrtb-identity-fn-borrows.rs | 26 + .../trait-bounds/hrtb-identity-fn-borrows.stderr | 14 + .../trait-bounds/hrtb-just-for-static.rs | 35 + .../trait-bounds/hrtb-just-for-static.stderr | 34 + .../hrtb-malformed-lifetime-generics.rs | 20 + .../hrtb-malformed-lifetime-generics.stderr | 62 + .../higher-ranked/trait-bounds/hrtb-opt-in-copy.rs | 28 + tests/ui/higher-ranked/trait-bounds/hrtb-parse.rs | 36 + .../hrtb-perfect-forwarding.polonius.stderr | 71 + .../trait-bounds/hrtb-perfect-forwarding.rs | 56 + .../trait-bounds/hrtb-perfect-forwarding.stderr | 79 + .../hrtb-precedence-of-plus-where-clause.rs | 25 + .../trait-bounds/hrtb-precedence-of-plus.rs | 13 + .../trait-bounds/hrtb-resolve-lifetime.rs | 14 + .../hrtb-trait-object-paren-notation.rs | 26 + .../hrtb-trait-object-passed-to-closure.rs | 25 + .../trait-bounds/hrtb-type-outlives.rs | 46 + .../trait-bounds/hrtb-unboxed-closure-trait.rs | 11 + .../higher-ranked/trait-bounds/hrtb-wrong-kind.rs | 7 + .../trait-bounds/hrtb-wrong-kind.stderr | 21 + .../ui/higher-ranked/trait-bounds/issue-100689.rs | 29 + .../ui/higher-ranked/trait-bounds/issue-102899.rs | 32 + tests/ui/higher-ranked/trait-bounds/issue-30786.rs | 136 ++ .../higher-ranked/trait-bounds/issue-30786.stderr | 46 + .../issue-36139-normalize-closure-sig.rs | 19 + tests/ui/higher-ranked/trait-bounds/issue-39292.rs | 17 + tests/ui/higher-ranked/trait-bounds/issue-42114.rs | 20 + tests/ui/higher-ranked/trait-bounds/issue-43623.rs | 21 + tests/ui/higher-ranked/trait-bounds/issue-46989.rs | 40 + .../higher-ranked/trait-bounds/issue-46989.stderr | 11 + tests/ui/higher-ranked/trait-bounds/issue-57639.rs | 29 + tests/ui/higher-ranked/trait-bounds/issue-58451.rs | 13 + .../higher-ranked/trait-bounds/issue-58451.stderr | 19 + tests/ui/higher-ranked/trait-bounds/issue-59311.rs | 22 + .../higher-ranked/trait-bounds/issue-59311.stderr | 18 + tests/ui/higher-ranked/trait-bounds/issue-60283.rs | 20 + .../trait-bounds/issue-62203-hrtb-ice.rs | 54 + .../trait-bounds/issue-62203-hrtb-ice.stderr | 66 + tests/ui/higher-ranked/trait-bounds/issue-88446.rs | 35 + .../issue-88586-hr-self-outlives-in-trait-def.rs | 13 + tests/ui/higher-ranked/trait-bounds/issue-90177.rs | 32 + tests/ui/higher-ranked/trait-bounds/issue-95034.rs | 80 + .../trait-bounds/issue-95230.next.stderr | 19 + tests/ui/higher-ranked/trait-bounds/issue-95230.rs | 11 + .../normalize-under-binder/issue-44005.rs | 31 + .../normalize-under-binder/issue-56556.rs | 30 + .../normalize-under-binder/issue-62529-1.rs | 88 + .../normalize-under-binder/issue-62529-2.rs | 33 + .../normalize-under-binder/issue-62529-3.rs | 32 + .../normalize-under-binder/issue-62529-3.stderr | 19 + .../normalize-under-binder/issue-62529-4.rs | 39 + .../normalize-under-binder/issue-62529-5.rs | 27 + .../normalize-under-binder/issue-62529-6.rs | 77 + .../normalize-under-binder/issue-70120.rs | 31 + .../issue-71955.migrate.stderr | 79 + .../normalize-under-binder/issue-71955.rs | 51 + .../normalize-under-binder/issue-71955.stderr | 79 + .../normalize-under-binder/issue-74261.rs | 30 + .../normalize-under-binder/issue-76956.rs | 15 + .../normalize-under-binder/issue-80706.rs | 71 + .../normalize-under-binder/issue-80956.rs | 21 + .../normalize-under-binder/issue-81809.rs | 21 + .../normalize-under-binder/issue-85455.rs | 19 + .../normalize-under-binder/issue-85455.stderr | 25 + .../normalize-under-binder/issue-89118.rs | 32 + .../normalize-under-binder/issue-89118.stderr | 69 + .../normalize-under-binder/issue-89436.rs | 44 + .../normalize-under-binder/issue-90612.rs | 41 + .../normalize-under-binder/issue-90638.rs | 35 + .../normalize-under-binder/issue-90875.rs | 31 + .../normalize-under-binder/issue-90950.rs | 53 + .../normalize-under-binder/issue-90950.stderr | 21 + .../norm-before-method-resolution.rs | 23 + .../norm-before-method-resolution.stderr | 18 + ...subtype.bound_a_b_ret_a_vs_bound_a_ret_a.stderr | 17 - .../hr-subtype/hr-subtype.bound_a_vs_free_x.stderr | 17 - .../hr-subtype.bound_inv_a_b_vs_bound_inv_a.stderr | 31 - .../hr-subtype.free_inv_x_vs_free_inv_y.stderr | 42 - .../hr-subtype/hr-subtype.free_x_vs_free_y.stderr | 19 - tests/ui/hr-subtype/hr-subtype.rs | 111 -- tests/ui/hr-subtype/placeholder-pattern-fail.rs | 25 - .../ui/hr-subtype/placeholder-pattern-fail.stderr | 12 - tests/ui/hr-subtype/placeholder-pattern.rs | 18 - tests/ui/hr-subtype/return-static.rs | 13 - tests/ui/hygiene/no_implicit_prelude-2018.stderr | 6 +- tests/ui/impl-trait/auto-trait-leak.rs | 6 +- tests/ui/impl-trait/auto-trait-leak.stderr | 151 +- tests/ui/impl-trait/autoderef.rs | 2 + .../coherence-treats-tait-ambig.current.stderr | 13 + .../coherence-treats-tait-ambig.next.stderr | 13 + tests/ui/impl-trait/coherence-treats-tait-ambig.rs | 19 + .../impl-trait/deduce-signature-from-supertrait.rs | 4 +- tests/ui/impl-trait/defined-by-trait-resolution.rs | 12 + .../dont-suggest-box-on-empty-else-arm.rs | 9 + .../dont-suggest-box-on-empty-else-arm.stderr | 16 + tests/ui/impl-trait/equality.stderr | 4 +- .../impl-trait/in-assoc-type-unconstrained.stderr | 4 +- tests/ui/impl-trait/in-assoc-type.rs | 3 + tests/ui/impl-trait/in-assoc-type.stderr | 6 +- tests/ui/impl-trait/in-trait/foreign.rs | 4 + .../impl-trait/in-trait/issue-102140.next.stderr | 6 +- .../in-trait/method-signature-matches.lt.stderr | 21 + .../method-signature-matches.mismatch.stderr | 20 + .../method-signature-matches.mismatch_async.stderr | 20 + .../in-trait/method-signature-matches.rs | 21 +- .../in-trait/method-signature-matches.stderr | 74 - .../method-signature-matches.too_few.stderr | 12 + .../method-signature-matches.too_many.stderr | 12 + .../return-dont-satisfy-bounds.current.stderr | 16 + .../return-dont-satisfy-bounds.next.stderr | 16 + .../in-trait/return-dont-satisfy-bounds.rs | 19 + .../in-trait/signature-mismatch.current.stderr | 65 +- .../in-trait/signature-mismatch.next.stderr | 65 +- tests/ui/impl-trait/in-trait/signature-mismatch.rs | 55 +- .../impl-trait/in-trait/suggest-missing-item.fixed | 25 + .../ui/impl-trait/in-trait/suggest-missing-item.rs | 21 + .../in-trait/suggest-missing-item.stderr | 21 + .../in-trait/unconstrained-lt.current.stderr | 9 + .../in-trait/unconstrained-lt.next.stderr | 9 + tests/ui/impl-trait/in-trait/unconstrained-lt.rs | 16 + tests/ui/impl-trait/in-trait/variances-of-gat.rs | 19 + .../impl-trait/in-trait/wf-bounds.current.stderr | 27 +- tests/ui/impl-trait/in-trait/wf-bounds.next.stderr | 27 +- tests/ui/impl-trait/in-trait/wf-bounds.rs | 7 + tests/ui/impl-trait/issue-103181-2.rs | 2 + tests/ui/impl-trait/issue-103181-2.stderr | 57 +- tests/ui/impl-trait/issue-55872-3.rs | 1 - tests/ui/impl-trait/issue-55872-3.stderr | 6 +- tests/ui/impl-trait/issues/issue-65581.rs | 1 - tests/ui/impl-trait/issues/issue-70877.rs | 4 +- tests/ui/impl-trait/issues/issue-70877.stderr | 6 +- tests/ui/impl-trait/issues/issue-74282.rs | 9 +- tests/ui/impl-trait/issues/issue-74282.stderr | 18 +- tests/ui/impl-trait/issues/issue-78722-2.rs | 22 + tests/ui/impl-trait/issues/issue-78722-2.stderr | 32 + tests/ui/impl-trait/issues/issue-78722.rs | 3 +- tests/ui/impl-trait/issues/issue-78722.stderr | 6 +- .../impl-trait/multiple-defining-usages-in-body.rs | 2 +- .../multiple-defining-usages-in-body.stderr | 10 +- .../ui/impl-trait/nested-return-type2-tait.stderr | 4 - .../ui/impl-trait/nested-return-type3-tait.stderr | 4 - .../ui/impl-trait/nested-return-type3-tait2.stderr | 4 - .../impl-trait/normalize-opaque-with-bound-vars.rs | 27 + ...pe-alias-impl-trait-declaration-too-subtle-2.rs | 3 +- ...lias-impl-trait-declaration-too-subtle-2.stderr | 15 - ...-alias-impl-trait-declaration-too-subtle.stderr | 4 +- .../recursive-type-alias-impl-trait-declaration.rs | 3 +- ...ursive-type-alias-impl-trait-declaration.stderr | 15 + tests/ui/impl-trait/reveal-during-codegen.rs | 11 + .../static-lifetime-return-position-impl-trait.rs | 12 + tests/ui/impl-trait/universal_wrong_hrtb.rs | 2 +- tests/ui/impl-trait/universal_wrong_hrtb.stderr | 10 +- .../implied-bounds-unconstrained-1.rs | 28 + .../implied-bounds-unconstrained-2.rs | 20 + tests/ui/implied-bounds/references-err.rs | 22 + tests/ui/implied-bounds/references-err.stderr | 9 + tests/ui/imports/auxiliary/issue-85992-extern-1.rs | 6 + tests/ui/imports/auxiliary/issue-85992-extern-2.rs | 1 + tests/ui/imports/issue-55884-2.rs | 1 + tests/ui/imports/issue-55884-2.stderr | 6 +- tests/ui/imports/issue-56125.stderr | 15 +- tests/ui/imports/issue-57539.stderr | 5 +- tests/ui/imports/issue-85992.rs | 11 + tests/ui/imports/issue-85992.stderr | 9 + tests/ui/inference/deref-suggestion.stderr | 13 +- .../elided-lifetime-being-infer-vars.rs | 11 + tests/ui/intrinsics/panic-uninitialized-zeroed.rs | 2 +- tests/ui/issue-94866.rs | 14 - tests/ui/issue-94866.stderr | 21 - tests/ui/issues/issue-100605.stderr | 15 +- tests/ui/issues/issue-11047.rs | 4 +- tests/ui/issues/issue-11680.stderr | 8 +- tests/ui/issues/issue-11709.rs | 4 +- tests/ui/issues/issue-11740.rs | 2 +- tests/ui/issues/issue-11771.stderr | 32 +- tests/ui/issues/issue-12133-3.rs | 2 +- tests/ui/issues/issue-1251.rs | 16 - tests/ui/issues/issue-1257.rs | 11 - tests/ui/issues/issue-13167.rs | 2 + tests/ui/issues/issue-1460.stderr | 4 +- tests/ui/issues/issue-15734.rs | 4 +- tests/ui/issues/issue-16538.mir.stderr | 29 - tests/ui/issues/issue-16538.rs | 19 - tests/ui/issues/issue-16538.thir.stderr | 29 - tests/ui/issues/issue-17954.stderr | 2 +- tests/ui/issues/issue-18389.rs | 8 + tests/ui/issues/issue-18389.stderr | 27 +- tests/ui/issues/issue-1871.rs | 12 - tests/ui/issues/issue-1871.stderr | 9 - tests/ui/issues/issue-20605.rs | 6 - tests/ui/issues/issue-20605.stderr | 16 - tests/ui/issues/issue-2063-resource.rs | 14 - tests/ui/issues/issue-2063.rs | 22 - tests/ui/issues/issue-20644.rs | 2 +- tests/ui/issues/issue-23808.rs | 8 +- tests/ui/issues/issue-24352.stderr | 4 +- tests/ui/issues/issue-28822.rs | 7 - tests/ui/issues/issue-29798.rs | 11 - tests/ui/issues/issue-3008-1.rs | 12 - tests/ui/issues/issue-3008-1.stderr | 17 - tests/ui/issues/issue-3008-2.rs | 6 - tests/ui/issues/issue-3008-2.stderr | 14 - tests/ui/issues/issue-3008-3.rs | 10 - tests/ui/issues/issue-3008-3.stderr | 14 - tests/ui/issues/issue-32709.stderr | 2 +- tests/ui/issues/issue-35570.rs | 1 - tests/ui/issues/issue-35570.stderr | 12 +- .../issue-37311-type-length-limit/issue-37311.rs | 1 + .../issue-37311.stderr | 4 +- tests/ui/issues/issue-3794.rs | 32 - tests/ui/issues/issue-50582.stderr | 16 +- tests/ui/issues/issue-50689.rs | 9 - tests/ui/issues/issue-50811.rs | 1 + tests/ui/issues/issue-50825-1.rs | 22 - tests/ui/issues/issue-50825.rs | 15 - tests/ui/issues/issue-51714.rs | 10 +- tests/ui/issues/issue-51714.stderr | 6 +- tests/ui/issues/issue-52049.stderr | 4 +- tests/ui/issues/issue-5439.stderr | 2 +- tests/ui/issues/issue-5883.rs | 2 +- tests/ui/issues/issue-5883.stderr | 18 +- tests/ui/issues/issue-67552.rs | 1 + tests/ui/issues/issue-67552.stderr | 4 +- tests/ui/issues/issue-78115.rs | 19 - tests/ui/issues/issue-85461.rs | 1 + .../invalid-iterator-chain-with-int-infer.stderr | 2 +- tests/ui/iterators/invalid-iterator-chain.stderr | 10 +- .../ui/iterators/issue-58952-filter-type-length.rs | 2 + .../layout/cannot-transmute-unnormalizable-type.rs | 22 + .../cannot-transmute-unnormalizable-type.stderr | 19 + tests/ui/let-else/let-else-ref-bindings.stderr | 18 + tests/ui/lexer/lex-bad-char-literals-1.stderr | 4 +- ...ue-90600-expected-return-static-indirect.stderr | 2 +- tests/ui/limits/huge-array-simple-32.rs | 3 - tests/ui/limits/huge-array-simple-32.stderr | 2 +- tests/ui/limits/huge-array-simple-64.rs | 3 - tests/ui/limits/huge-array-simple-64.stderr | 2 +- tests/ui/limits/huge-array.rs | 4 - tests/ui/limits/huge-array.stderr | 2 +- tests/ui/limits/huge-enum.rs | 4 - tests/ui/limits/huge-enum.stderr | 2 +- tests/ui/limits/huge-struct.rs | 4 - tests/ui/limits/huge-struct.stderr | 2 +- tests/ui/limits/issue-15919-32.rs | 4 - tests/ui/limits/issue-15919-32.stderr | 2 +- tests/ui/limits/issue-15919-64.rs | 4 - tests/ui/limits/issue-15919-64.stderr | 2 +- tests/ui/limits/issue-17913.rs | 4 - tests/ui/limits/issue-56762.rs | 3 - tests/ui/limits/issue-56762.stderr | 4 +- tests/ui/linkage-attr/incompatible-flavor.rs | 6 + tests/ui/linkage-attr/incompatible-flavor.stderr | 6 + tests/ui/linkage-attr/issue-10755.rs | 2 +- tests/ui/linkage-attr/linkage3.rs | 4 - tests/ui/linkage-attr/linkage3.stderr | 2 +- tests/ui/linkage-attr/unstable-flavor.bpf.stderr | 2 + tests/ui/linkage-attr/unstable-flavor.ptx.stderr | 2 + tests/ui/linkage-attr/unstable-flavor.rs | 14 + .../lint/invalid-nan-comparison-suggestion.fixed | 36 + tests/ui/lint/invalid-nan-comparison-suggestion.rs | 39 + .../lint/invalid-nan-comparison-suggestion.stderr | 114 ++ tests/ui/lint/invalid-nan-comparison.rs | 51 + tests/ui/lint/invalid-nan-comparison.stderr | 159 ++ tests/ui/lint/invalid_from_utf8.rs | 93 + tests/ui/lint/invalid_from_utf8.stderr | 110 ++ tests/ui/lint/issue-99387.rs | 4 +- tests/ui/lint/issue-99387.stderr | 15 + tests/ui/lint/lint-attr-everywhere-early.rs | 2 +- tests/ui/lint/lint-attr-everywhere-late.rs | 2 +- tests/ui/lint/lint-ctypes-113436-1.rs | 28 + tests/ui/lint/lint-ctypes-113436-1.stderr | 35 + tests/ui/lint/lint-ctypes-113436.rs | 34 + tests/ui/lint/lint-ctypes-113900.rs | 12 + tests/ui/lint/lint-ctypes-73249-2.rs | 8 +- tests/ui/lint/lint-ctypes-73249-2.stderr | 6 +- tests/ui/lint/lint-ctypes-73251-1.rs | 6 +- tests/ui/lint/lint-ctypes-73251-1.stderr | 6 +- tests/ui/lint/lint-ctypes-73251-2.rs | 2 +- tests/ui/lint/lint-ctypes-73251-2.stderr | 6 +- tests/ui/lint/lint-ctypes-73251.rs | 4 +- tests/ui/lint/lint-ctypes-94223.rs | 42 + tests/ui/lint/lint-ctypes-94223.stderr | 126 ++ tests/ui/lint/lint-unnecessary-parens.fixed | 8 + tests/ui/lint/lint-unnecessary-parens.rs | 8 + tests/ui/lint/lint-unnecessary-parens.stderr | 86 +- tests/ui/lint/opaque-ty-ffi-unsafe.rs | 4 +- tests/ui/lint/opaque-ty-ffi-unsafe.stderr | 6 +- tests/ui/lint/reference_casting.rs | 51 + tests/ui/lint/reference_casting.stderr | 68 + .../trivial-casts-featuring-type-ascription.stderr | 4 +- tests/ui/lint/type-overflow.stderr | 28 +- tests/ui/lint/undropped_manually_drops.rs | 19 + tests/ui/lint/undropped_manually_drops.stderr | 42 + tests/ui/lint/unused/lint-unused-extern-crate.rs | 2 +- tests/ui/lint/unused/lint-unused-imports.rs | 2 +- tests/ui/lint/unused/lint-unused-variables.rs | 4 +- tests/ui/lint/unused/must-use-block-expr.fixed | 36 + tests/ui/lint/unused/must-use-block-expr.rs | 36 + tests/ui/lint/unused/must-use-block-expr.stderr | 51 + tests/ui/lint/unused_import_warning_issue_45268.rs | 8 +- tests/ui/loops/dont-suggest-break-thru-item.rs | 55 + tests/ui/loops/dont-suggest-break-thru-item.stderr | 55 + tests/ui/macros/auxiliary/proc_macro_sequence.rs | 5 - .../ui/macros/builtin-prelude-no-accidents.stderr | 32 +- tests/ui/macros/builtin-std-paths-fail.stderr | 3 + tests/ui/macros/format-args-temporaries.rs | 10 +- tests/ui/macros/issue-112342-1.rs | 49 + tests/ui/macros/issue-112342-1.stderr | 64 + tests/ui/macros/issue-112342-2.rs | 39 + tests/ui/macros/issue-112342-2.stderr | 24 + tests/ui/macros/issue-88228.rs | 5 +- tests/ui/macros/issue-88228.stderr | 14 +- tests/ui/macros/macro-comma-support-rpass.rs | 4 +- tests/ui/macros/macro-outer-attributes.stderr | 5 + tests/ui/macros/macro-use-wrong-name.stderr | 12 +- tests/ui/macros/same-sequence-span.stderr | 7 +- tests/ui/match/issue-112438.rs | 11 + tests/ui/match/issue-113012.rs | 12 + tests/ui/match/issue-70972-dyn-trait.rs | 2 +- tests/ui/match/issue-70972-dyn-trait.stderr | 2 +- tests/ui/mir/issue-101844.rs | 2 +- tests/ui/mir/issue-112269.rs | 9 + tests/ui/mir/issue-112269.stderr | 31 + tests/ui/mir/issue-80949.rs | 2 +- tests/ui/mir/issue66339.rs | 2 +- tests/ui/mir/ssa-analysis-regression-50041.rs | 11 +- tests/ui/mir/thir-constparam-temp.rs | 4 +- tests/ui/mir/thir-constparam-temp.stderr | 6 +- tests/ui/mismatched_types/E0053.stderr | 2 +- tests/ui/mismatched_types/binops.stderr | 72 +- tests/ui/mismatched_types/issue-112036.rs | 7 + tests/ui/mismatched_types/issue-112036.stderr | 15 + .../suggest-option-asderef-inference-var.rs | 9 + .../suggest-option-asderef-inference-var.stderr | 24 + .../suggest-option-asderef-unfixable.rs | 34 + .../suggest-option-asderef-unfixable.stderr | 75 + .../mismatched_types/suggest-option-asderef.fixed | 39 + .../ui/mismatched_types/suggest-option-asderef.rs | 39 + .../mismatched_types/suggest-option-asderef.stderr | 88 + tests/ui/missing/missing-macro-use.stderr | 6 +- .../never_type/diverging-fallback-control-flow.rs | 12 +- .../diverging-fallback-no-leak.fallback.stderr | 2 +- tests/ui/never_type/issue-13352.stderr | 4 +- tests/ui/nll/assign-while-to-immutable.rs | 4 +- .../nll/issue-112604-closure-output-normalize.rs | 49 + tests/ui/nll/issue-53119.rs | 2 + tests/ui/nll/issue-54943-3.rs | 2 +- .../ui/nll/ty-outlives/impl-trait-captures.stderr | 4 +- .../ui/nll/user-annotations/normalization-2.stderr | 2 +- .../issue-8460-const.noopt.stderr | 12 +- .../numbers-arithmetic/issue-8460-const.opt.stderr | 12 +- ...ssue-8460-const.opt_with_overflow_checks.stderr | 12 +- .../not-suggest-float-literal.stderr | 50 +- .../suggest-float-literal.stderr | 32 +- tests/ui/object-safety/assoc_type_bounds_sized.rs | 17 +- .../object-safety/assoc_type_bounds_sized.stderr | 12 - .../assoc_type_bounds_sized_others.rs | 25 + .../assoc_type_bounds_sized_others.stderr | 21 + .../assoc_type_bounds_sized_unnecessary.rs | 17 + .../assoc_type_bounds_sized_unnecessary.stderr | 27 + .../object-safety/assoc_type_bounds_sized_used.rs | 20 + .../assoc_type_bounds_sized_used.stderr | 53 + tests/ui/offset-of/offset-of-dst-field.rs | 2 + tests/ui/offset-of/offset-of-dst-field.stderr | 41 +- tests/ui/offset-of/offset-of-must-use.rs | 9 + tests/ui/offset-of/offset-of-must-use.stderr | 16 + tests/ui/offset-of/offset-of-output-type.stderr | 20 +- tests/ui/offset-of/offset-of-tuple-nested.rs | 32 + tests/ui/offset-of/offset-of-tuple.rs | 54 + tests/ui/offset-of/offset-of-tuple.stderr | 226 +++ tests/ui/offset-of/offset-of-unsized.rs | 16 + tests/ui/on-unimplemented/multiple-impls.stderr | 18 +- tests/ui/on-unimplemented/slice-index.stderr | 2 +- tests/ui/on-unimplemented/sum.stderr | 4 +- tests/ui/packed/issue-27060-2.stderr | 2 +- tests/ui/parser/bad-escape-suggest-raw-string.rs | 2 +- .../ui/parser/bad-escape-suggest-raw-string.stderr | 2 +- tests/ui/parser/bad-interpolated-block.stderr | 12 + tests/ui/parser/byte-literals.stderr | 4 +- tests/ui/parser/byte-string-literals.stderr | 4 +- tests/ui/parser/foreign-ty-semantic-fail.rs | 1 + tests/ui/parser/foreign-ty-semantic-fail.stderr | 13 +- tests/ui/parser/issue-112188.fixed | 14 + tests/ui/parser/issue-112188.rs | 14 + tests/ui/parser/issue-112188.stderr | 37 + tests/ui/parser/issue-113342.rs | 9 + tests/ui/parser/issue-113342.stderr | 11 + tests/ui/parser/issue-49257.stderr | 2 +- tests/ui/parser/issues/issue-111692.rs | 32 + tests/ui/parser/issues/issue-111692.stderr | 46 + tests/ui/parser/issues/issue-112458.rs | 4 + tests/ui/parser/issues/issue-112458.stderr | 15 + tests/ui/parser/labeled-no-colon-expr.stderr | 4 + tests/ui/parser/lit-err-in-macro.rs | 10 + tests/ui/parser/lit-err-in-macro.stderr | 8 + ...d-call-on-struct-literal-in-if-condition.stderr | 2 +- tests/ui/parser/typod-const-in-const-param-def.rs | 16 + .../parser/typod-const-in-const-param-def.stderr | 46 + tests/ui/parser/utf16-be-without-bom.stderr | Bin 3537 -> 3641 bytes tests/ui/parser/utf16-le-without-bom.stderr | Bin 3500 -> 3603 bytes tests/ui/pattern/byte-string-inference.rs | 15 + tests/ui/pattern/issue-110508.rs | 38 + tests/ui/pattern/issue-72565.rs | 2 +- tests/ui/pattern/issue-72565.stderr | 2 +- tests/ui/pattern/issue-94866.rs | 14 + tests/ui/pattern/issue-94866.stderr | 21 + .../empty-match.exhaustive_patterns.stderr | 22 +- .../pattern/usefulness/empty-match.normal.stderr | 22 +- tests/ui/pattern/usefulness/empty-match.rs | 8 + tests/ui/pattern/usefulness/issue-3601.rs | 17 +- tests/ui/pattern/usefulness/issue-3601.stderr | 5 +- .../ui/pattern/usefulness/match-non-exhaustive.rs | 1 + .../pattern/usefulness/match-non-exhaustive.stderr | 1 + tests/ui/polymorphization/drop_shims/simple.rs | 2 +- tests/ui/polymorphization/drop_shims/transitive.rs | 2 +- .../ui/privacy/effective_visibilities_full_priv.rs | 21 + .../effective_visibilities_full_priv.stderr | 26 + tests/ui/privacy/export-tag-variant.stderr | 4 +- tests/ui/privacy/privacy-in-paths.stderr | 12 +- tests/ui/privacy/privacy-ufcs.stderr | 4 +- tests/ui/privacy/privacy1.stderr | 28 +- .../ui/privacy/private-in-public-non-principal.rs | 7 + .../privacy/private-in-public-non-principal.stderr | 25 +- tests/ui/privacy/private-inferred-type-1.rs | 10 + tests/ui/privacy/private-inferred-type-1.stderr | 18 +- .../sealed-traits/private-trait-non-local.rs | 4 + .../sealed-traits/private-trait-non-local.stderr | 12 + tests/ui/privacy/sealed-traits/private-trait.rs | 10 + .../ui/privacy/sealed-traits/private-trait.stderr | 17 + .../privacy/sealed-traits/re-exported-trait.fixed | 13 + .../ui/privacy/sealed-traits/re-exported-trait.rs | 13 + .../privacy/sealed-traits/re-exported-trait.stderr | 19 + .../ui/privacy/sealed-traits/sealed-trait-local.rs | 19 + .../sealed-traits/sealed-trait-local.stderr | 16 + tests/ui/privacy/unnameable_types.rs | 30 + tests/ui/privacy/unnameable_types.stderr | 38 + tests/ui/privacy/where-priv-type.rs | 12 + tests/ui/privacy/where-priv-type.stderr | 108 +- .../ui/privacy/where-pub-type-impls-priv-trait.rs | 10 + .../privacy/where-pub-type-impls-priv-trait.stderr | 87 +- tests/ui/proc-macro/auxiliary/api/cmp.rs | 11 +- tests/ui/proc-macro/auxiliary/assert-span-pos.rs | 5 +- tests/ui/proc-macro/auxiliary/exports_no_mangle.rs | 11 + tests/ui/proc-macro/auxiliary/macro-only-syntax.rs | 2 +- tests/ui/proc-macro/crt-static.rs | 1 + tests/ui/proc-macro/derive-helper-shadowing.rs | 2 +- tests/ui/proc-macro/derive-helper-shadowing.stderr | 29 +- .../no-mangle-in-proc-macro-issue-111888.rs | 22 + tests/ui/proc-macro/span-preservation.stderr | 2 +- tests/ui/process/process-panic-after-fork.rs | 2 + ...ue-33174-restricted-type-in-public-interface.rs | 16 + ...3174-restricted-type-in-public-interface.stderr | 49 +- tests/ui/range/range-1.stderr | 8 +- tests/ui/reachable/expr_return.rs | 2 +- tests/ui/reachable/expr_return.stderr | 12 +- tests/ui/reachable/unreachable-variant.stderr | 2 +- tests/ui/recursion/issue-83150.rs | 1 + tests/ui/recursion/issue-83150.stderr | 6 +- tests/ui/recursion/issue-95134.rs | 1 + .../regions-implied-bounds-projection-gap-hr-1.rs | 1 - ...gions-implied-bounds-projection-gap-hr-1.stderr | 17 +- tests/ui/resolve/auxiliary/issue-112831-aux.rs | 13 + tests/ui/resolve/export-fully-qualified-2018.rs | 13 + .../ui/resolve/export-fully-qualified-2018.stderr | 14 + tests/ui/resolve/export-fully-qualified.rs | 2 + tests/ui/resolve/export-fully-qualified.stderr | 7 +- tests/ui/resolve/extern-prelude.rs | 2 +- tests/ui/resolve/hidden_glob_reexports.rs | 52 + tests/ui/resolve/hidden_glob_reexports.stderr | 54 + tests/ui/resolve/issue-105069.stderr | 4 +- tests/ui/resolve/issue-109153.rs | 14 + tests/ui/resolve/issue-109153.stderr | 23 + .../issue-112472-multi-generics-suggestion.fixed | 31 + .../issue-112472-multi-generics-suggestion.rs | 31 + .../issue-112472-multi-generics-suggestion.stderr | 25 + tests/ui/resolve/issue-112831.rs | 20 + tests/ui/resolve/privacy-enum-ctor.stderr | 8 +- tests/ui/resolve/resolve-pseudo-shadowing.rs | 2 +- tests/ui/resolve/resolve-self-in-impl.stderr | 30 +- tests/ui/return-nil.rs | 4 +- tests/ui/return/issue-64620.rs | 2 +- tests/ui/return/issue-64620.stderr | 2 +- .../ui/return/issue-86188-return-not-in-fn-body.rs | 12 +- tests/ui/return/tail-expr-as-potential-return.rs | 4 +- .../bind-by-move-no-guards.rs | 19 - .../former-E0008-now-pass.rs | 11 - .../rfc-basic-examples.rs | 43 - .../rfc-reject-double-move-across-arms.rs | 24 - .../rfc-reject-double-move-across-arms.stderr | 19 - .../rfc-reject-double-move-in-first-arm.rs | 26 - .../rfc-reject-double-move-in-first-arm.stderr | 19 - ...allow-hide-behind-direct-unsafe-ptr-embedded.rs | 26 - .../allow-hide-behind-direct-unsafe-ptr-param.rs | 26 - ...low-hide-behind-indirect-unsafe-ptr-embedded.rs | 26 - .../allow-hide-behind-indirect-unsafe-ptr-param.rs | 26 - .../allow-use-behind-cousin-variant.rs | 59 - .../cant-hide-behind-direct-struct-embedded.rs | 26 - .../cant-hide-behind-direct-struct-embedded.stderr | 11 - .../cant-hide-behind-direct-struct-param.rs | 26 - .../cant-hide-behind-direct-struct-param.stderr | 11 - .../cant-hide-behind-doubly-indirect-embedded.rs | 29 - ...ant-hide-behind-doubly-indirect-embedded.stderr | 18 - .../cant-hide-behind-doubly-indirect-param.rs | 29 - .../cant-hide-behind-doubly-indirect-param.stderr | 18 - .../cant-hide-behind-indirect-struct-embedded.rs | 29 - ...ant-hide-behind-indirect-struct-embedded.stderr | 18 - .../cant-hide-behind-indirect-struct-param.rs | 29 - .../cant-hide-behind-indirect-struct-param.stderr | 18 - .../feature-gate.no_gate.stderr | 21 - .../feature-gate.rs | 39 - .../feature-gate.with_gate.stderr | 8 - .../fn-ptr-is-structurally-matchable.rs | 135 -- ...issue-61188-match-slice-forbidden-without-eq.rs | 19 - ...e-61188-match-slice-forbidden-without-eq.stderr | 11 - ...sue-62307-match-ref-ref-forbidden-without-eq.rs | 43 - ...62307-match-ref-ref-forbidden-without-eq.stderr | 29 - .../issue-63479-match-fnptr.rs | 40 - .../issue-63479-match-fnptr.stderr | 16 - .../issue-6804.rs | 21 - .../issue-6804.stderr | 25 - ...h-empty-array-allowed-without-eq-issue-62336.rs | 17 - .../match-forbidden-without-eq.rs | 23 - .../match-forbidden-without-eq.stderr | 21 - .../match-nonempty-array-forbidden-without-eq.rs | 19 - ...atch-nonempty-array-forbidden-without-eq.stderr | 11 - .../match-requires-both-partialeq-and-eq.rs | 21 - .../match-requires-both-partialeq-and-eq.stderr | 11 - .../phantom-data-is-structurally-matchable.rs | 53 - tests/ui/rfc-1717-dllimport/missing-link-attr.rs | 4 - .../ui/rfc-1717-dllimport/missing-link-attr.stderr | 4 - tests/ui/rfc-1717-dllimport/multiple-renames.rs | 7 - .../ui/rfc-1717-dllimport/multiple-renames.stderr | 4 - tests/ui/rfc-1717-dllimport/rename-modifiers.rs | 9 - .../ui/rfc-1717-dllimport/rename-modifiers.stderr | 8 - tests/ui/rfc-1717-dllimport/rename-to-empty.rs | 7 - tests/ui/rfc-1717-dllimport/rename-to-empty.stderr | 4 - .../rfc-1937-termination-trait/issue-103052-1.rs | 11 - .../issue-103052-1.stderr | 17 - .../issue-103052-2.current.stderr | 15 - .../issue-103052-2.next.stderr | 15 - .../rfc-1937-termination-trait/issue-103052-2.rs | 22 - .../termination-trait-for-box-dyn-error.rs | 11 - .../termination-trait-for-never.rs | 7 - .../termination-trait-for-result-box-error_err.rs | 10 - .../termination-trait-for-str.rs | 8 - .../termination-trait-impl-trait.rs | 3 - .../termination-trait-impl-trait.stderr | 11 - .../termination-trait-in-test-should-panic.rs | 15 - .../termination-trait-in-test-should-panic.stderr | 12 - .../termination-trait-in-test.rs | 28 - .../termination-trait-main-i32.rs | 6 - .../termination-trait-main-i32.stderr | 11 - .../termination-trait-main-wrong-type.rs | 3 - .../termination-trait-main-wrong-type.stderr | 11 - .../termination-trait-not-satisfied.rs | 5 - .../termination-trait-not-satisfied.stderr | 11 - .../termination-trait-test-wrong-type.rs | 8 - .../termination-trait-test-wrong-type.stderr | 16 - .../borrowck-issue-49631.rs | 24 - .../borrowck-issue-49631.stderr | 14 - tests/ui/rfc-2005-default-binding-mode/const.rs | 17 - .../ui/rfc-2005-default-binding-mode/const.stderr | 18 - tests/ui/rfc-2005-default-binding-mode/enum.rs | 22 - tests/ui/rfc-2005-default-binding-mode/enum.stderr | 21 - .../rfc-2005-default-binding-mode/explicit-mut.rs | 28 - .../explicit-mut.stderr | 21 - tests/ui/rfc-2005-default-binding-mode/for.rs | 9 - tests/ui/rfc-2005-default-binding-mode/for.stderr | 17 - .../issue-44912-or.rs | 10 - .../issue-44912-or.stderr | 9 - tests/ui/rfc-2005-default-binding-mode/lit.rs | 24 - tests/ui/rfc-2005-default-binding-mode/lit.stderr | 25 - .../no-double-error.rs | 11 - .../no-double-error.stderr | 9 - tests/ui/rfc-2005-default-binding-mode/slice.rs | 7 - .../ui/rfc-2005-default-binding-mode/slice.stderr | 16 - .../ui/rfc-2008-non-exhaustive/auxiliary/enums.rs | 44 - .../auxiliary/monovariants.rs | 8 - .../rfc-2008-non-exhaustive/auxiliary/structs.rs | 41 - .../rfc-2008-non-exhaustive/auxiliary/unstable.rs | 60 - .../rfc-2008-non-exhaustive/auxiliary/variants.rs | 7 - .../rfc-2008-non-exhaustive/borrowck-exhaustive.rs | 44 - .../borrowck-non-exhaustive.rs | 18 - .../borrowck-non-exhaustive.stderr | 14 - tests/ui/rfc-2008-non-exhaustive/enum-as-cast.rs | 11 - .../ui/rfc-2008-non-exhaustive/enum-as-cast.stderr | 11 - tests/ui/rfc-2008-non-exhaustive/enum.rs | 69 - tests/ui/rfc-2008-non-exhaustive/enum.stderr | 59 - .../ui/rfc-2008-non-exhaustive/enum_same_crate.rs | 18 - .../enum_same_crate_empty_match.rs | 37 - .../enum_same_crate_empty_match.stderr | 69 - .../improper_ctypes/auxiliary/types.rs | 29 - .../improper_ctypes/extern_crate_improper.rs | 24 - .../improper_ctypes/extern_crate_improper.stderr | 47 - .../improper_ctypes/same_crate_proper.rs | 48 - .../rfc-2008-non-exhaustive/invalid-attribute.rs | 16 - .../invalid-attribute.stderr | 30 - .../ui/rfc-2008-non-exhaustive/omitted-patterns.rs | 211 --- .../omitted-patterns.stderr | 217 --- .../stable-omitted-patterns.rs | 45 - .../stable-omitted-patterns.stderr | 30 - tests/ui/rfc-2008-non-exhaustive/struct.rs | 49 - tests/ui/rfc-2008-non-exhaustive/struct.stderr | 95 - .../rfc-2008-non-exhaustive/structs_same_crate.rs | 32 - .../uninhabited/auxiliary/uninhabited.rs | 32 - .../uninhabited/coercions.rs | 38 - .../uninhabited/coercions.stderr | 35 - .../uninhabited/coercions_same_crate.rs | 45 - .../uninhabited/coercions_same_crate.stderr | 35 - .../uninhabited/indirect_match.rs | 36 - .../uninhabited/indirect_match.stderr | 79 - .../uninhabited/indirect_match_same_crate.rs | 51 - .../uninhabited/indirect_match_same_crate.stderr | 79 - .../indirect_match_with_exhaustive_patterns.rs | 40 - .../indirect_match_with_exhaustive_patterns.stderr | 79 - ...ct_match_with_exhaustive_patterns_same_crate.rs | 57 - .../uninhabited/issue-65157-repeated-match-arm.rs | 21 - .../issue-65157-repeated-match-arm.stderr | 14 - .../rfc-2008-non-exhaustive/uninhabited/match.rs | 34 - .../uninhabited/match.stderr | 83 - .../uninhabited/match_same_crate.rs | 41 - .../uninhabited/match_same_crate.stderr | 64 - .../uninhabited/match_with_exhaustive_patterns.rs | 37 - .../match_with_exhaustive_patterns.stderr | 83 - .../match_with_exhaustive_patterns_same_crate.rs | 47 - .../uninhabited/patterns.rs | 59 - .../uninhabited/patterns_same_crate.rs | 70 - .../uninhabited/patterns_same_crate.stderr | 38 - tests/ui/rfc-2008-non-exhaustive/variant.rs | 33 - tests/ui/rfc-2008-non-exhaustive/variant.stderr | 102 -- .../variants_fictive_visibility.rs | 12 - .../rfc-2008-non-exhaustive/variants_same_crate.rs | 18 - .../downcast-unsafe-trait-objects.rs | 23 - .../manual-self-impl-for-unsafe-obj.rs | 66 - .../static-dispatch-unsafe-object.rs | 37 - tests/ui/rfc-2091-track-caller/call-chain.rs | 30 - .../caller-location-fnptr-rt-ctfe-equiv.rs | 32 - .../caller-location-fnptr-rt-ctfe-equiv.stderr | 10 - .../caller-location-intrinsic.rs | 27 - .../rfc-2091-track-caller/const-caller-location.rs | 43 - .../diverging-caller-location.rs | 17 - tests/ui/rfc-2091-track-caller/error-odd-syntax.rs | 5 - .../rfc-2091-track-caller/error-odd-syntax.stderr | 8 - .../error-with-invalid-abi.rs | 11 - .../error-with-invalid-abi.stderr | 15 - tests/ui/rfc-2091-track-caller/error-with-main.rs | 4 - .../rfc-2091-track-caller/error-with-main.stderr | 10 - tests/ui/rfc-2091-track-caller/error-with-naked.rs | 24 - .../rfc-2091-track-caller/error-with-naked.stderr | 28 - tests/ui/rfc-2091-track-caller/error-with-start.rs | 7 - .../rfc-2091-track-caller/error-with-start.stderr | 10 - .../ui/rfc-2091-track-caller/intrinsic-wrapper.rs | 22 - .../ui/rfc-2091-track-caller/macro-declaration.rs | 10 - .../ui/rfc-2091-track-caller/mir-inlined-macro.rs | 23 - tests/ui/rfc-2091-track-caller/only-for-fns.rs | 5 - tests/ui/rfc-2091-track-caller/only-for-fns.stderr | 11 - tests/ui/rfc-2091-track-caller/pass.rs | 10 - .../rfc-2091-track-caller/std-panic-locations.rs | 64 - .../track-caller-attribute.rs | 40 - tests/ui/rfc-2091-track-caller/track-caller-ffi.rs | 48 - tests/ui/rfc-2091-track-caller/tracked-closure.rs | 154 -- .../tracked-fn-ptr-with-arg.rs | 62 - tests/ui/rfc-2091-track-caller/tracked-fn-ptr.rs | 62 - .../rfc-2091-track-caller/tracked-trait-impls.rs | 77 - .../ui/rfc-2091-track-caller/tracked-trait-obj.rs | 61 - tests/ui/rfc-2093-infer-outlives/cross-crate.rs | 8 - .../ui/rfc-2093-infer-outlives/cross-crate.stderr | 10 - .../rfc-2093-infer-outlives/dont-infer-static.rs | 12 - .../dont-infer-static.stderr | 19 - tests/ui/rfc-2093-infer-outlives/enum.rs | 27 - tests/ui/rfc-2093-infer-outlives/enum.stderr | 26 - tests/ui/rfc-2093-infer-outlives/explicit-dyn.rs | 12 - .../ui/rfc-2093-infer-outlives/explicit-dyn.stderr | 10 - tests/ui/rfc-2093-infer-outlives/explicit-enum.rs | 13 - .../rfc-2093-infer-outlives/explicit-enum.stderr | 10 - .../rfc-2093-infer-outlives/explicit-projection.rs | 13 - .../explicit-projection.stderr | 10 - .../ui/rfc-2093-infer-outlives/explicit-struct.rs | 13 - .../rfc-2093-infer-outlives/explicit-struct.stderr | 10 - tests/ui/rfc-2093-infer-outlives/explicit-union.rs | 14 - .../rfc-2093-infer-outlives/explicit-union.stderr | 10 - tests/ui/rfc-2093-infer-outlives/issue-54467.rs | 17 - tests/ui/rfc-2093-infer-outlives/nested-enum.rs | 13 - .../ui/rfc-2093-infer-outlives/nested-enum.stderr | 10 - tests/ui/rfc-2093-infer-outlives/nested-regions.rs | 8 - .../rfc-2093-infer-outlives/nested-regions.stderr | 12 - tests/ui/rfc-2093-infer-outlives/nested-structs.rs | 12 - .../rfc-2093-infer-outlives/nested-structs.stderr | 10 - tests/ui/rfc-2093-infer-outlives/nested-union.rs | 14 - .../ui/rfc-2093-infer-outlives/nested-union.stderr | 10 - tests/ui/rfc-2093-infer-outlives/privacy.rs | 20 - tests/ui/rfc-2093-infer-outlives/projection.rs | 8 - tests/ui/rfc-2093-infer-outlives/projection.stderr | 10 - tests/ui/rfc-2093-infer-outlives/reference.rs | 8 - tests/ui/rfc-2093-infer-outlives/reference.stderr | 10 - .../rfc-2093-infer-outlives/regions-enum-not-wf.rs | 39 - .../regions-enum-not-wf.stderr | 36 - .../regions-outlives-nominal-type-region-rev.rs | 22 - ...regions-outlives-nominal-type-region-rev.stderr | 20 - .../regions-outlives-nominal-type-region.rs | 22 - .../regions-outlives-nominal-type-region.stderr | 20 - .../regions-outlives-nominal-type-type-rev.rs | 22 - .../regions-outlives-nominal-type-type-rev.stderr | 20 - .../regions-outlives-nominal-type-type.rs | 22 - .../regions-outlives-nominal-type-type.stderr | 20 - .../regions-struct-not-wf.rs | 28 - .../regions-struct-not-wf.stderr | 48 - tests/ui/rfc-2093-infer-outlives/self-dyn.rs | 13 - tests/ui/rfc-2093-infer-outlives/self-dyn.stderr | 10 - tests/ui/rfc-2093-infer-outlives/self-structs.rs | 13 - .../ui/rfc-2093-infer-outlives/self-structs.stderr | 10 - .../crate-path-non-absolute.rs | 11 - .../crate-path-non-absolute.stderr | 15 - .../keyword-crate-as-identifier.rs | 4 - .../keyword-crate-as-identifier.stderr | 9 - .../auxiliary/xcrate.rs | 5 - .../non-existent-1.rs | 5 - .../non-existent-1.stderr | 9 - .../non-existent-2.rs | 6 - .../non-existent-2.stderr | 9 - .../non-existent-3.rs | 5 - .../non-existent-3.stderr | 9 - .../rfc-2126-extern-absolute-paths/not-allowed.rs | 9 - .../not-allowed.stderr | 16 - .../single-segment.rs | 11 - .../single-segment.stderr | 21 - tests/ui/rfc-2294-if-let-guard/bindings.rs | 9 - tests/ui/rfc-2294-if-let-guard/bindings.stderr | 15 - tests/ui/rfc-2294-if-let-guard/feature-gate.rs | 96 - tests/ui/rfc-2294-if-let-guard/feature-gate.stderr | 431 ----- tests/ui/rfc-2294-if-let-guard/run-pass.rs | 40 - tests/ui/rfc-2294-if-let-guard/typeck.rs | 15 - tests/ui/rfc-2294-if-let-guard/typeck.stderr | 25 - tests/ui/rfc-2294-if-let-guard/warns.rs | 21 - tests/ui/rfc-2294-if-let-guard/warns.stderr | 28 - tests/ui/rfc-2306/convert-id-const-with-gate.rs | 7 - .../dbg-macro-expected-behavior.rs | 69 - .../dbg-macro-expected-behavior.run.stderr | 28 - .../rfc-2361-dbg-macro/dbg-macro-move-semantics.rs | 10 - .../dbg-macro-move-semantics.stderr | 14 - .../rfc-2361-dbg-macro/dbg-macro-requires-debug.rs | 7 - .../dbg-macro-requires-debug.stderr | 18 - .../feature-gate-do_not_recommend.rs | 21 - .../feature-gate-do_not_recommend.stderr | 25 - .../incorrect-locations.rs | 45 - .../incorrect-locations.stderr | 50 - .../rfc-2397-do-not-recommend/unstable-feature.rs | 10 - .../unstable-feature.stderr | 12 - .../mod_file_nonascii_with_path_allowed-aux.rs | 1 - .../ui/rfc-2457/crate_name_nonascii_forbidden-1.rs | 3 - .../crate_name_nonascii_forbidden-1.stderr | 8 - .../ui/rfc-2457/crate_name_nonascii_forbidden-2.rs | 6 - .../crate_name_nonascii_forbidden-2.stderr | 8 - .../ui/rfc-2457/extern_block_nonascii_forbidden.rs | 9 - .../extern_block_nonascii_forbidden.stderr | 34 - tests/ui/rfc-2457/idents-normalized.rs | 7 - tests/ui/rfc-2457/mod_file_nonascii_forbidden.rs | 4 - .../ui/rfc-2457/mod_file_nonascii_forbidden.stderr | 20 - .../mod_file_nonascii_with_path_allowed.rs | 6 - tests/ui/rfc-2457/mod_inline_nonascii_allowed.rs | 7 - tests/ui/rfc-2457/no_mangle_nonascii_forbidden.rs | 20 - .../rfc-2457/no_mangle_nonascii_forbidden.stderr | 21 - .../ast-lowering-does-not-wrap-let-chains.rs | 16 - .../ui/rfc-2497-if-let-chains/ast-pretty-check.rs | 6 - .../rfc-2497-if-let-chains/ast-pretty-check.stdout | 10 - .../rfc-2497-if-let-chains/ast-validate-guards.rs | 23 - .../ast-validate-guards.stderr | 21 - .../rfc-2497-if-let-chains/chains-without-let.rs | 20 - .../chains-without-let.stderr | 33 - .../rfc-2497-if-let-chains/disallowed-positions.rs | 480 ----- .../disallowed-positions.stderr | 1911 -------------------- ...t-let-else-does-not-interact-with-let-chains.rs | 55 - ...t-else-does-not-interact-with-let-chains.stderr | 147 -- tests/ui/rfc-2497-if-let-chains/feature-gate.rs | 62 - .../ui/rfc-2497-if-let-chains/feature-gate.stderr | 120 -- .../invalid-let-in-a-valid-let-context.rs | 45 - .../invalid-let-in-a-valid-let-context.stderr | 38 - .../irrefutable-lets.disallowed.stderr | 115 -- .../ui/rfc-2497-if-let-chains/irrefutable-lets.rs | 78 - tests/ui/rfc-2497-if-let-chains/issue-88498.rs | 16 - tests/ui/rfc-2497-if-let-chains/issue-90722.rs | 11 - tests/ui/rfc-2497-if-let-chains/issue-92145.rs | 11 - tests/ui/rfc-2497-if-let-chains/issue-93150.rs | 8 - tests/ui/rfc-2497-if-let-chains/issue-93150.stderr | 22 - tests/ui/rfc-2497-if-let-chains/issue-99938.rs | 31 - .../rfc-2497-if-let-chains/no-double-assigments.rs | 9 - .../rfc-2497-if-let-chains/protect-precedences.rs | 17 - .../protect-precedences.stderr | 12 - .../ui/rfc-2497-if-let-chains/then-else-blocks.rs | 49 - .../ui/rfc-2565-param-attrs/attr-without-param.rs | 16 - .../rfc-2565-param-attrs/attr-without-param.stderr | 20 - .../ui/rfc-2565-param-attrs/auxiliary/ident-mac.rs | 11 - .../rfc-2565-param-attrs/auxiliary/param-attrs.rs | 43 - ...issue-64682-dropping-first-attrs-in-impl-fns.rs | 21 - tests/ui/rfc-2565-param-attrs/param-attrs-2018.rs | 6 - .../rfc-2565-param-attrs/param-attrs-2018.stderr | 22 - .../ui/rfc-2565-param-attrs/param-attrs-allowed.rs | 101 -- .../param-attrs-builtin-attrs.rs | 174 -- .../param-attrs-builtin-attrs.stderr | 386 ---- tests/ui/rfc-2565-param-attrs/param-attrs-cfg.rs | 121 -- .../ui/rfc-2565-param-attrs/param-attrs-cfg.stderr | 122 -- .../ui/rfc-2565-param-attrs/param-attrs-pretty.rs | 61 - .../proc-macro-cannot-be-used.rs | 66 - .../proc-macro-cannot-be-used.stderr | 176 -- tests/ui/rfc-2627-raw-dylib/dlltool-failed.rs | 19 - tests/ui/rfc-2627-raw-dylib/dlltool-failed.stderr | 5 - .../import-name-type-invalid-format.rs | 7 - .../import-name-type-invalid-format.stderr | 8 - .../import-name-type-multiple.rs | 8 - .../import-name-type-multiple.stderr | 8 - .../import-name-type-unknown-value.rs | 7 - .../import-name-type-unknown-value.stderr | 8 - .../import-name-type-unsupported-link-kind.rs | 15 - .../import-name-type-unsupported-link-kind.stderr | 14 - .../import-name-type-x86-only.rs | 7 - .../import-name-type-x86-only.stderr | 8 - tests/ui/rfc-2627-raw-dylib/invalid-dlltool.rs | 13 - tests/ui/rfc-2627-raw-dylib/invalid-dlltool.stderr | 4 - .../ui/rfc-2627-raw-dylib/link-ordinal-and-name.rs | 13 - .../link-ordinal-and-name.stderr | 14 - .../link-ordinal-invalid-format.rs | 11 - .../link-ordinal-invalid-format.stderr | 18 - .../link-ordinal-missing-argument.rs | 11 - .../link-ordinal-missing-argument.stderr | 18 - .../ui/rfc-2627-raw-dylib/link-ordinal-multiple.rs | 12 - .../link-ordinal-multiple.stderr | 26 - .../link-ordinal-not-foreign-fn.rs | 22 - .../link-ordinal-not-foreign-fn.stderr | 20 - .../rfc-2627-raw-dylib/link-ordinal-too-large.rs | 11 - .../link-ordinal-too-large.stderr | 18 - .../link-ordinal-too-many-arguments.rs | 11 - .../link-ordinal-too-many-arguments.stderr | 18 - .../link-ordinal-unsupported-link-kind.rs | 15 - .../link-ordinal-unsupported-link-kind.stderr | 14 - .../ui/rfc-2627-raw-dylib/multiple-declarations.rs | 18 - .../multiple-declarations.stderr | 8 - .../rfc-2627-raw-dylib/raw-dylib-windows-only.rs | 5 - .../raw-dylib-windows-only.stderr | 9 - tests/ui/rfc-2627-raw-dylib/unsupported-abi.rs | 12 - tests/ui/rfc-2627-raw-dylib/unsupported-abi.stderr | 8 - .../assoc-type-const-bound-usage.rs | 14 - tests/ui/rfc-2632-const-trait-impl/assoc-type.rs | 33 - .../ui/rfc-2632-const-trait-impl/assoc-type.stderr | 8 - tests/ui/rfc-2632-const-trait-impl/attr-misuse.rs | 10 - .../rfc-2632-const-trait-impl/attr-misuse.stderr | 14 - .../auxiliary/cross-crate.rs | 23 - .../auxiliary/staged-api.rs | 19 - .../call-const-trait-method-fail.rs | 29 - .../call-const-trait-method-fail.stderr | 15 - .../call-const-trait-method-pass.rs | 43 - .../call-const-trait-method-pass.stderr | 20 - .../call-generic-in-impl.rs | 15 - .../call-generic-in-impl.stderr | 8 - .../call-generic-method-chain.rs | 28 - .../call-generic-method-chain.stderr | 23 - .../call-generic-method-dup-bound.rs | 31 - .../call-generic-method-dup-bound.stderr | 23 - .../call-generic-method-fail.rs | 9 - .../call-generic-method-fail.stderr | 28 - .../call-generic-method-nonconst-bound.rs | 17 - .../call-generic-method-nonconst.rs | 26 - .../call-generic-method-nonconst.stderr | 15 - .../call-generic-method-pass.rs | 24 - .../call-generic-method-pass.stderr | 17 - tests/ui/rfc-2632-const-trait-impl/call.rs | 10 - .../const-and-non-const-impl.rs | 31 - .../const-and-non-const-impl.stderr | 20 - .../const-check-fns-in-const-impl.rs | 16 - .../const-check-fns-in-const-impl.stderr | 11 - .../const-closure-parse-not-item.rs | 10 - .../const-closure-trait-method-fail.rs | 20 - .../const-closure-trait-method-fail.stderr | 16 - .../const-closure-trait-method.rs | 19 - .../ui/rfc-2632-const-trait-impl/const-closures.rs | 30 - .../const-default-method-bodies.rs | 29 - .../const-default-method-bodies.stderr | 15 - .../rfc-2632-const-trait-impl/const-drop-bound.rs | 25 - .../const-drop-fail-2.precise.stderr | 26 - .../rfc-2632-const-trait-impl/const-drop-fail-2.rs | 43 - .../const-drop-fail-2.stderr | 50 - .../const-drop-fail-2.stock.stderr | 26 - .../const-drop-fail.precise.stderr | 58 - .../rfc-2632-const-trait-impl/const-drop-fail.rs | 37 - .../const-drop-fail.stock.stderr | 58 - tests/ui/rfc-2632-const-trait-impl/const-drop.rs | 113 -- .../const-impl-norecover.rs | 12 - .../const-impl-norecover.stderr | 8 - .../const-impl-recovery.rs | 17 - .../const-impl-recovery.stderr | 26 - .../const-impl-requires-const-trait.rs | 9 - .../const-impl-requires-const-trait.stderr | 14 - .../rfc-2632-const-trait-impl/const-impl-trait.rs | 55 - .../const-impl-trait.stderr | 39 - .../const_derives/derive-const-gate.rs | 5 - .../const_derives/derive-const-gate.stderr | 21 - .../const_derives/derive-const-non-const-type.rs | 13 - .../derive-const-non-const-type.stderr | 12 - .../const_derives/derive-const-use.rs | 19 - .../const_derives/derive-const-use.stderr | 53 - .../const_derives/derive-const-with-params.rs | 13 - .../const_derives/derive-const-with-params.stderr | 20 - .../cross-crate-default-method-body-is-const.rs | 18 - .../cross-crate.gatednc.stderr | 15 - tests/ui/rfc-2632-const-trait-impl/cross-crate.rs | 24 - .../cross-crate.stock.stderr | 12 - .../cross-crate.stocknc.stderr | 15 - .../default-method-body-is-const-body-checking.rs | 17 - ...fault-method-body-is-const-body-checking.stderr | 15 - .../default-method-body-is-const-same-trait-ck.rs | 15 - ...fault-method-body-is-const-same-trait-ck.stderr | 15 - ...default-method-body-is-const-with-staged-api.rs | 17 - .../do-not-const-check-override.rs | 19 - .../do-not-const-check.rs | 18 - .../feature-gate.gated.stderr | 8 - tests/ui/rfc-2632-const-trait-impl/feature-gate.rs | 14 - .../feature-gate.stock.stderr | 21 - .../function-pointer-does-not-require-const.rs | 15 - tests/ui/rfc-2632-const-trait-impl/gate.rs | 13 - tests/ui/rfc-2632-const-trait-impl/gate.stderr | 21 - .../ui/rfc-2632-const-trait-impl/generic-bound.rs | 30 - .../rfc-2632-const-trait-impl/generic-bound.stderr | 11 - .../rfc-2632-const-trait-impl/hir-const-check.rs | 17 - .../hir-const-check.stderr | 12 - .../impl-tilde-const-trait.rs | 9 - .../impl-tilde-const-trait.stderr | 8 - .../impl-with-default-fn-fail.rs | 17 - .../impl-with-default-fn-fail.stderr | 12 - .../impl-with-default-fn-pass.rs | 26 - .../inherent-impl-const-bounds.rs | 22 - .../ui/rfc-2632-const-trait-impl/inherent-impl.rs | 13 - .../rfc-2632-const-trait-impl/inherent-impl.stderr | 22 - tests/ui/rfc-2632-const-trait-impl/issue-100222.rs | 39 - tests/ui/rfc-2632-const-trait-impl/issue-102156.rs | 15 - .../rfc-2632-const-trait-impl/issue-102156.stderr | 19 - tests/ui/rfc-2632-const-trait-impl/issue-102985.rs | 12 - .../rfc-2632-const-trait-impl/issue-102985.stderr | 41 - tests/ui/rfc-2632-const-trait-impl/issue-103677.rs | 5 - tests/ui/rfc-2632-const-trait-impl/issue-79450.rs | 20 - .../rfc-2632-const-trait-impl/issue-79450.stderr | 12 - tests/ui/rfc-2632-const-trait-impl/issue-88155.rs | 13 - .../rfc-2632-const-trait-impl/issue-88155.stderr | 24 - tests/ui/rfc-2632-const-trait-impl/issue-90052.rs | 9 - .../rfc-2632-const-trait-impl/issue-90052.stderr | 14 - tests/ui/rfc-2632-const-trait-impl/issue-92111.rs | 23 - .../issue-92230-wf-super-trait-env.rs | 15 - .../ui/rfc-2632-const-trait-impl/nested-closure.rs | 12 - .../non-const-op-const-closure-non-const-outer.rs | 15 - ...n-const-op-const-closure-non-const-outer.stderr | 11 - .../non-const-op-in-closure-in-const.rs | 18 - .../non-const-op-in-closure-in-const.stderr | 8 - ...st-default-bound-non-const-specialized-bound.rs | 58 - ...efault-bound-non-const-specialized-bound.stderr | 18 - .../const-default-const-specialized.rs | 39 - ...onst-default-impl-non-const-specialized-impl.rs | 26 - ...-default-impl-non-const-specialized-impl.stderr | 8 - .../specialization/default-keyword.rs | 15 - .../issue-95186-specialize-on-tilde-const.rs | 49 - ...e-95187-same-trait-bound-different-constness.rs | 57 - .../non-const-default-const-specialized.rs | 39 - .../specializing-constness-2.rs | 31 - .../specializing-constness-2.stderr | 21 - .../specializing-constness.rs | 31 - .../specializing-constness.stderr | 14 - .../staged-api-user-crate.rs | 16 - .../staged-api-user-crate.stderr | 12 - tests/ui/rfc-2632-const-trait-impl/staged-api.rs | 63 - .../staged-api.stable.stderr | 25 - .../staged-api.unstable.stderr | 42 - .../static-const-trait-bound.rs | 18 - .../std-impl-gate.gated.stderr | 9 - .../ui/rfc-2632-const-trait-impl/std-impl-gate.rs | 21 - .../std-impl-gate.stock.stderr | 12 - .../super-traits-fail-2.nn.stderr | 14 - .../super-traits-fail-2.ny.stderr | 14 - .../super-traits-fail-2.rs | 20 - .../super-traits-fail-2.yn.stderr | 19 - .../super-traits-fail-2.yy.stderr | 19 - .../super-traits-fail-3.nn.stderr | 20 - .../super-traits-fail-3.ny.stderr | 14 - .../super-traits-fail-3.rs | 21 - .../super-traits-fail-3.yn.stderr | 8 - .../rfc-2632-const-trait-impl/super-traits-fail.rs | 18 - .../super-traits-fail.stderr | 20 - tests/ui/rfc-2632-const-trait-impl/super-traits.rs | 25 - tests/ui/rfc-2632-const-trait-impl/syntax.rs | 8 - .../tilde-const-and-const-params.rs | 34 - .../tilde-const-and-const-params.stderr | 14 - .../tilde-const-invalid-places.rs | 7 - .../tilde-const-invalid-places.stderr | 8 - .../tilde-const-syntax.rs | 9 - tests/ui/rfc-2632-const-trait-impl/tilde-twice.rs | 6 - .../rfc-2632-const-trait-impl/tilde-twice.stderr | 8 - .../tilde_const_on_impl_bound.rs | 17 - .../trait-default-body-stability.rs | 50 - .../trait-default-body-stability.stderr | 20 - .../trait-method-ptr-in-consts-ice.rs | 23 - .../trait-where-clause-const.rs | 31 - .../trait-where-clause-const.stderr | 35 - .../trait-where-clause-run.rs | 41 - .../trait-where-clause-self-referential.rs | 24 - .../trait-where-clause.rs | 26 - .../trait-where-clause.stderr | 35 - .../ui/rfc-2632-const-trait-impl/without-tilde.rs | 6 - .../rfc-2632-const-trait-impl/without-tilde.stderr | 10 - .../bind-by-move-no-guards.rs | 19 + .../former-E0008-now-pass.rs | 11 + .../rfc-basic-examples.rs | 43 + .../rfc-reject-double-move-across-arms.rs | 24 + .../rfc-reject-double-move-across-arms.stderr | 19 + .../rfc-reject-double-move-in-first-arm.rs | 26 + .../rfc-reject-double-move-in-first-arm.stderr | 19 + tests/ui/rfcs/rfc-1014-2.rs | 31 - .../rfc-1014-2.rs | 31 + .../rfc-1014-stdout-existential-crisis/rfc-1014.rs | 34 + tests/ui/rfcs/rfc-1014.rs | 34 - ...allow-hide-behind-direct-unsafe-ptr-embedded.rs | 26 + .../allow-hide-behind-direct-unsafe-ptr-param.rs | 26 + ...low-hide-behind-indirect-unsafe-ptr-embedded.rs | 26 + .../allow-hide-behind-indirect-unsafe-ptr-param.rs | 26 + .../allow-use-behind-cousin-variant.rs | 59 + .../cant-hide-behind-direct-struct-embedded.rs | 26 + .../cant-hide-behind-direct-struct-embedded.stderr | 11 + .../cant-hide-behind-direct-struct-param.rs | 26 + .../cant-hide-behind-direct-struct-param.stderr | 11 + .../cant-hide-behind-doubly-indirect-embedded.rs | 29 + ...ant-hide-behind-doubly-indirect-embedded.stderr | 18 + .../cant-hide-behind-doubly-indirect-param.rs | 29 + .../cant-hide-behind-doubly-indirect-param.stderr | 18 + .../cant-hide-behind-indirect-struct-embedded.rs | 29 + ...ant-hide-behind-indirect-struct-embedded.stderr | 18 + .../cant-hide-behind-indirect-struct-param.rs | 29 + .../cant-hide-behind-indirect-struct-param.stderr | 18 + .../feature-gate.no_gate.stderr | 21 + .../feature-gate.rs | 39 + .../feature-gate.with_gate.stderr | 8 + .../fn-ptr-is-structurally-matchable.rs | 135 ++ ...issue-61188-match-slice-forbidden-without-eq.rs | 19 + ...e-61188-match-slice-forbidden-without-eq.stderr | 11 + ...sue-62307-match-ref-ref-forbidden-without-eq.rs | 43 + ...62307-match-ref-ref-forbidden-without-eq.stderr | 29 + .../issue-63479-match-fnptr.rs | 40 + .../issue-63479-match-fnptr.stderr | 16 + .../issue-6804.rs | 21 + .../issue-6804.stderr | 25 + ...h-empty-array-allowed-without-eq-issue-62336.rs | 17 + .../match-forbidden-without-eq.rs | 23 + .../match-forbidden-without-eq.stderr | 21 + .../match-nonempty-array-forbidden-without-eq.rs | 19 + ...atch-nonempty-array-forbidden-without-eq.stderr | 11 + .../match-requires-both-partialeq-and-eq.rs | 21 + .../match-requires-both-partialeq-and-eq.stderr | 11 + .../phantom-data-is-structurally-matchable.rs | 53 + .../rfc1445/eq-allows-match-on-ty-in-macro.rs | 23 + .../rfc1445/eq-allows-match.rs | 17 + tests/ui/rfcs/rfc-1623-static/rfc1623-2.rs | 99 + tests/ui/rfcs/rfc-1623-static/rfc1623-2.stderr | 39 + tests/ui/rfcs/rfc-1623-static/rfc1623-3.rs | 14 + tests/ui/rfcs/rfc-1623-static/rfc1623-3.stderr | 35 + tests/ui/rfcs/rfc-1623-static/rfc1623.rs | 75 + .../1717-dllimport/library-override.rs | 14 + .../rfcs/rfc-1717-dllimport/missing-link-attr.rs | 4 + .../rfc-1717-dllimport/missing-link-attr.stderr | 4 + .../ui/rfcs/rfc-1717-dllimport/multiple-renames.rs | 7 + .../rfc-1717-dllimport/multiple-renames.stderr | 4 + .../ui/rfcs/rfc-1717-dllimport/rename-modifiers.rs | 9 + .../rfc-1717-dllimport/rename-modifiers.stderr | 8 + .../ui/rfcs/rfc-1717-dllimport/rename-to-empty.rs | 7 + .../rfcs/rfc-1717-dllimport/rename-to-empty.stderr | 4 + .../rfc-1857-stabilize-drop-order/drop-order.rs | 224 +++ .../rfc-1937-termination-trait/issue-103052-1.rs | 11 + .../issue-103052-1.stderr | 17 + .../issue-103052-2.current.stderr | 15 + .../issue-103052-2.next.stderr | 15 + .../rfc-1937-termination-trait/issue-103052-2.rs | 22 + .../termination-trait-for-box-dyn-error-err.rs | 11 + .../termination-trait-for-box-dyn-error-ok.rs | 6 + .../termination-trait-for-box-dyn-error.rs | 6 - .../termination-trait-for-never.rs | 7 + .../termination-trait-for-result-box-error_err.rs | 10 + .../termination-trait-for-str-err.rs | 8 + .../termination-trait-for-str-ok.rs | 4 + .../termination-trait-for-str.rs | 4 - .../termination-trait-impl-trait.rs | 3 + .../termination-trait-impl-trait.stderr | 11 + .../termination-trait-in-test-should-panic.rs | 15 + .../termination-trait-in-test-should-panic.stderr | 12 + .../termination-trait-in-test.rs | 28 + .../termination-trait-main-i32.rs | 6 + .../termination-trait-main-i32.stderr | 11 + .../termination-trait-main-wrong-type.rs | 3 + .../termination-trait-main-wrong-type.stderr | 11 + .../termination-trait-not-satisfied.rs | 5 + .../termination-trait-not-satisfied.stderr | 11 + .../termination-trait-test-wrong-type.rs | 8 + .../termination-trait-test-wrong-type.stderr | 16 + .../borrowck-issue-49631.rs | 24 + .../borrowck-issue-49631.stderr | 14 + .../ui/rfcs/rfc-2005-default-binding-mode/const.rs | 17 + .../rfc-2005-default-binding-mode/const.stderr | 18 + .../rfcs/rfc-2005-default-binding-mode/enum-ok.rs | 45 + .../ui/rfcs/rfc-2005-default-binding-mode/enum.rs | 29 +- .../rfcs/rfc-2005-default-binding-mode/enum.stderr | 21 + .../rfc-2005-default-binding-mode/explicit-mut.rs | 28 + .../explicit-mut.stderr | 21 + .../rfcs/rfc-2005-default-binding-mode/for-ok.rs | 20 + tests/ui/rfcs/rfc-2005-default-binding-mode/for.rs | 23 +- .../rfcs/rfc-2005-default-binding-mode/for.stderr | 17 + .../issue-44912-or.rs | 10 + .../issue-44912-or.stderr | 9 + .../rfcs/rfc-2005-default-binding-mode/lit-ok.rs | 34 + tests/ui/rfcs/rfc-2005-default-binding-mode/lit.rs | 26 +- .../rfcs/rfc-2005-default-binding-mode/lit.stderr | 25 + .../no-double-error.rs | 11 + .../no-double-error.stderr | 9 + .../rfcs/rfc-2005-default-binding-mode/slice-ok.rs | 25 + .../ui/rfcs/rfc-2005-default-binding-mode/slice.rs | 26 +- .../rfc-2005-default-binding-mode/slice.stderr | 16 + .../rfc-2008-non-exhaustive/auxiliary/enums.rs | 44 + .../auxiliary/monovariants.rs | 8 + .../rfc-2008-non-exhaustive/auxiliary/structs.rs | 41 + .../rfc-2008-non-exhaustive/auxiliary/unstable.rs | 60 + .../rfc-2008-non-exhaustive/auxiliary/variants.rs | 7 + .../rfc-2008-non-exhaustive/borrowck-exhaustive.rs | 44 + .../borrowck-non-exhaustive.rs | 18 + .../borrowck-non-exhaustive.stderr | 14 + .../rfcs/rfc-2008-non-exhaustive/enum-as-cast.rs | 11 + .../rfc-2008-non-exhaustive/enum-as-cast.stderr | 11 + tests/ui/rfcs/rfc-2008-non-exhaustive/enum.rs | 69 + tests/ui/rfcs/rfc-2008-non-exhaustive/enum.stderr | 59 + .../rfc-2008-non-exhaustive/enum_same_crate.rs | 18 + .../enum_same_crate_empty_match.rs | 37 + .../enum_same_crate_empty_match.stderr | 69 + .../improper_ctypes/auxiliary/types.rs | 29 + .../improper_ctypes/extern_crate_improper.rs | 24 + .../improper_ctypes/extern_crate_improper.stderr | 47 + .../improper_ctypes/same_crate_proper.rs | 48 + .../rfc-2008-non-exhaustive/invalid-attribute.rs | 16 + .../invalid-attribute.stderr | 30 + .../rfc-2008-non-exhaustive/omitted-patterns.rs | 211 +++ .../omitted-patterns.stderr | 217 +++ .../stable-omitted-patterns.rs | 45 + .../stable-omitted-patterns.stderr | 30 + tests/ui/rfcs/rfc-2008-non-exhaustive/struct.rs | 49 + .../ui/rfcs/rfc-2008-non-exhaustive/struct.stderr | 95 + .../rfc-2008-non-exhaustive/structs_same_crate.rs | 32 + .../uninhabited/auxiliary/uninhabited.rs | 32 + .../uninhabited/coercions.rs | 38 + .../uninhabited/coercions.stderr | 35 + .../uninhabited/coercions_same_crate.rs | 45 + .../uninhabited/coercions_same_crate.stderr | 35 + .../uninhabited/indirect_match.rs | 36 + .../uninhabited/indirect_match.stderr | 79 + .../uninhabited/indirect_match_same_crate.rs | 51 + .../uninhabited/indirect_match_same_crate.stderr | 79 + .../indirect_match_with_exhaustive_patterns.rs | 40 + .../indirect_match_with_exhaustive_patterns.stderr | 79 + ...ct_match_with_exhaustive_patterns_same_crate.rs | 57 + .../uninhabited/issue-65157-repeated-match-arm.rs | 21 + .../issue-65157-repeated-match-arm.stderr | 14 + .../rfc-2008-non-exhaustive/uninhabited/match.rs | 34 + .../uninhabited/match.stderr | 83 + .../uninhabited/match_same_crate.rs | 41 + .../uninhabited/match_same_crate.stderr | 64 + .../uninhabited/match_with_exhaustive_patterns.rs | 37 + .../match_with_exhaustive_patterns.stderr | 83 + .../match_with_exhaustive_patterns_same_crate.rs | 47 + .../uninhabited/patterns.rs | 59 + .../uninhabited/patterns_same_crate.rs | 70 + .../uninhabited/patterns_same_crate.stderr | 38 + tests/ui/rfcs/rfc-2008-non-exhaustive/variant.rs | 33 + .../ui/rfcs/rfc-2008-non-exhaustive/variant.stderr | 102 ++ .../variants_fictive_visibility.rs | 12 + .../rfc-2008-non-exhaustive/variants_same_crate.rs | 18 + .../downcast-unsafe-trait-objects.rs | 23 + .../manual-self-impl-for-unsafe-obj.rs | 66 + .../static-dispatch-unsafe-object.rs | 37 + tests/ui/rfcs/rfc-2091-track-caller/call-chain.rs | 30 + .../caller-location-fnptr-rt-ctfe-equiv.rs | 32 + .../caller-location-fnptr-rt-ctfe-equiv.stderr | 10 + .../caller-location-intrinsic.rs | 27 + .../rfc-2091-track-caller/const-caller-location.rs | 43 + .../diverging-caller-location.rs | 17 + .../rfcs/rfc-2091-track-caller/error-odd-syntax.rs | 5 + .../rfc-2091-track-caller/error-odd-syntax.stderr | 8 + .../error-with-invalid-abi.rs | 11 + .../error-with-invalid-abi.stderr | 15 + .../rfcs/rfc-2091-track-caller/error-with-main.rs | 4 + .../rfc-2091-track-caller/error-with-main.stderr | 10 + .../rfcs/rfc-2091-track-caller/error-with-naked.rs | 24 + .../rfc-2091-track-caller/error-with-naked.stderr | 28 + .../rfcs/rfc-2091-track-caller/error-with-start.rs | 7 + .../rfc-2091-track-caller/error-with-start.stderr | 10 + .../rfc-2091-track-caller/intrinsic-wrapper.rs | 22 + .../rfc-2091-track-caller/macro-declaration.rs | 10 + .../rfc-2091-track-caller/mir-inlined-macro.rs | 23 + .../ui/rfcs/rfc-2091-track-caller/only-for-fns.rs | 5 + .../rfcs/rfc-2091-track-caller/only-for-fns.stderr | 11 + tests/ui/rfcs/rfc-2091-track-caller/pass.rs | 10 + .../rfc-2091-track-caller/std-panic-locations.rs | 64 + .../track-caller-attribute.rs | 40 + .../rfcs/rfc-2091-track-caller/track-caller-ffi.rs | 48 + .../rfcs/rfc-2091-track-caller/tracked-closure.rs | 154 ++ .../tracked-fn-ptr-with-arg.rs | 62 + .../rfcs/rfc-2091-track-caller/tracked-fn-ptr.rs | 62 + .../rfc-2091-track-caller/tracked-trait-impls.rs | 77 + .../rfc-2091-track-caller/tracked-trait-obj.rs | 61 + .../ui/rfcs/rfc-2093-infer-outlives/cross-crate.rs | 8 + .../rfc-2093-infer-outlives/cross-crate.stderr | 10 + .../rfc-2093-infer-outlives/dont-infer-static.rs | 12 + .../dont-infer-static.stderr | 19 + tests/ui/rfcs/rfc-2093-infer-outlives/enum.rs | 27 + tests/ui/rfcs/rfc-2093-infer-outlives/enum.stderr | 26 + .../rfcs/rfc-2093-infer-outlives/explicit-dyn.rs | 12 + .../rfc-2093-infer-outlives/explicit-dyn.stderr | 10 + .../rfcs/rfc-2093-infer-outlives/explicit-enum.rs | 13 + .../rfc-2093-infer-outlives/explicit-enum.stderr | 10 + .../rfc-2093-infer-outlives/explicit-projection.rs | 13 + .../explicit-projection.stderr | 10 + .../rfc-2093-infer-outlives/explicit-struct.rs | 13 + .../rfc-2093-infer-outlives/explicit-struct.stderr | 10 + .../rfcs/rfc-2093-infer-outlives/explicit-union.rs | 14 + .../rfc-2093-infer-outlives/explicit-union.stderr | 10 + .../ui/rfcs/rfc-2093-infer-outlives/issue-54467.rs | 17 + .../ui/rfcs/rfc-2093-infer-outlives/nested-enum.rs | 13 + .../rfc-2093-infer-outlives/nested-enum.stderr | 10 + .../rfcs/rfc-2093-infer-outlives/nested-regions.rs | 8 + .../rfc-2093-infer-outlives/nested-regions.stderr | 12 + .../rfcs/rfc-2093-infer-outlives/nested-structs.rs | 12 + .../rfc-2093-infer-outlives/nested-structs.stderr | 10 + .../rfcs/rfc-2093-infer-outlives/nested-union.rs | 14 + .../rfc-2093-infer-outlives/nested-union.stderr | 10 + tests/ui/rfcs/rfc-2093-infer-outlives/privacy.rs | 20 + .../ui/rfcs/rfc-2093-infer-outlives/projection.rs | 8 + .../rfcs/rfc-2093-infer-outlives/projection.stderr | 10 + tests/ui/rfcs/rfc-2093-infer-outlives/reference.rs | 8 + .../rfcs/rfc-2093-infer-outlives/reference.stderr | 10 + .../rfc-2093-infer-outlives/regions-enum-not-wf.rs | 39 + .../regions-enum-not-wf.stderr | 36 + .../regions-outlives-nominal-type-region-rev.rs | 22 + ...regions-outlives-nominal-type-region-rev.stderr | 20 + .../regions-outlives-nominal-type-region.rs | 22 + .../regions-outlives-nominal-type-region.stderr | 20 + .../regions-outlives-nominal-type-type-rev.rs | 22 + .../regions-outlives-nominal-type-type-rev.stderr | 20 + .../regions-outlives-nominal-type-type.rs | 22 + .../regions-outlives-nominal-type-type.stderr | 20 + .../regions-struct-not-wf.rs | 28 + .../regions-struct-not-wf.stderr | 48 + tests/ui/rfcs/rfc-2093-infer-outlives/self-dyn.rs | 13 + .../rfcs/rfc-2093-infer-outlives/self-dyn.stderr | 10 + .../rfcs/rfc-2093-infer-outlives/self-structs.rs | 13 + .../rfc-2093-infer-outlives/self-structs.stderr | 10 + .../crate-path-non-absolute.rs | 11 + .../crate-path-non-absolute.stderr | 15 + .../keyword-crate-as-identifier.rs | 4 + .../keyword-crate-as-identifier.stderr | 9 + .../auxiliary/xcrate.rs | 5 + .../non-existent-1.rs | 5 + .../non-existent-1.stderr | 9 + .../non-existent-2.rs | 6 + .../non-existent-2.stderr | 9 + .../non-existent-3.rs | 5 + .../non-existent-3.stderr | 9 + .../rfc-2126-extern-absolute-paths/not-allowed.rs | 9 + .../not-allowed.stderr | 16 + .../single-segment.rs | 11 + .../single-segment.stderr | 21 + tests/ui/rfcs/rfc-2294-if-let-guard/bindings.rs | 9 + .../ui/rfcs/rfc-2294-if-let-guard/bindings.stderr | 15 + .../ui/rfcs/rfc-2294-if-let-guard/feature-gate.rs | 96 + .../rfcs/rfc-2294-if-let-guard/feature-gate.stderr | 431 +++++ tests/ui/rfcs/rfc-2294-if-let-guard/run-pass.rs | 40 + tests/ui/rfcs/rfc-2294-if-let-guard/typeck.rs | 15 + tests/ui/rfcs/rfc-2294-if-let-guard/typeck.stderr | 25 + tests/ui/rfcs/rfc-2294-if-let-guard/warns.rs | 21 + tests/ui/rfcs/rfc-2294-if-let-guard/warns.stderr | 28 + tests/ui/rfcs/rfc-2302-self-struct-ctor.rs | 127 -- .../rfc-2302-self-struct-ctor.rs | 127 ++ .../convert-id-const-with-gate.rs | 7 + .../dbg-macro-expected-behavior.rs | 69 + .../dbg-macro-expected-behavior.run.stderr | 28 + .../rfc-2361-dbg-macro/dbg-macro-move-semantics.rs | 10 + .../dbg-macro-move-semantics.stderr | 14 + .../rfc-2361-dbg-macro/dbg-macro-requires-debug.rs | 7 + .../dbg-macro-requires-debug.stderr | 18 + .../feature-gate-do_not_recommend.rs | 21 + .../feature-gate-do_not_recommend.stderr | 25 + .../incorrect-locations.rs | 45 + .../incorrect-locations.stderr | 50 + .../rfc-2397-do-not-recommend/unstable-feature.rs | 10 + .../unstable-feature.stderr | 12 + ...-2421-unreserve-pure-offsetof-sizeof-alignof.rs | 15 - ...of-alignof-sizeof-pure-can-be-used-as-idents.rs | 15 + .../mod_file_nonascii_with_path_allowed-aux.rs | 1 + .../crate_name_nonascii_forbidden-1.rs | 3 + .../crate_name_nonascii_forbidden-1.stderr | 8 + .../crate_name_nonascii_forbidden-2.rs | 6 + .../crate_name_nonascii_forbidden-2.stderr | 8 + .../extern_block_nonascii_forbidden.rs | 9 + .../extern_block_nonascii_forbidden.stderr | 34 + .../rfc-2457-non-ascii-idents/idents-normalized.rs | 7 + .../mod_file_nonascii_forbidden.rs | 4 + .../mod_file_nonascii_forbidden.stderr | 20 + .../mod_file_nonascii_with_path_allowed.rs | 6 + .../mod_inline_nonascii_allowed.rs | 7 + .../no_mangle_nonascii_forbidden.rs | 20 + .../no_mangle_nonascii_forbidden.stderr | 21 + .../ast-lowering-does-not-wrap-let-chains.rs | 16 + .../rfc-2497-if-let-chains/ast-pretty-check.rs | 6 + .../rfc-2497-if-let-chains/ast-pretty-check.stdout | 10 + .../rfc-2497-if-let-chains/ast-validate-guards.rs | 23 + .../ast-validate-guards.stderr | 21 + .../rfc-2497-if-let-chains/chains-without-let.rs | 20 + .../chains-without-let.stderr | 33 + .../rfc-2497-if-let-chains/disallowed-positions.rs | 480 +++++ .../disallowed-positions.stderr | 1911 ++++++++++++++++++++ ...t-let-else-does-not-interact-with-let-chains.rs | 55 + ...t-else-does-not-interact-with-let-chains.stderr | 147 ++ .../ui/rfcs/rfc-2497-if-let-chains/feature-gate.rs | 62 + .../rfc-2497-if-let-chains/feature-gate.stderr | 120 ++ .../invalid-let-in-a-valid-let-context.rs | 45 + .../invalid-let-in-a-valid-let-context.stderr | 38 + .../irrefutable-lets.disallowed.stderr | 115 ++ .../rfc-2497-if-let-chains/irrefutable-lets.rs | 78 + .../ui/rfcs/rfc-2497-if-let-chains/issue-88498.rs | 16 + .../ui/rfcs/rfc-2497-if-let-chains/issue-90722.rs | 11 + .../ui/rfcs/rfc-2497-if-let-chains/issue-92145.rs | 11 + .../ui/rfcs/rfc-2497-if-let-chains/issue-93150.rs | 8 + .../rfcs/rfc-2497-if-let-chains/issue-93150.stderr | 22 + .../ui/rfcs/rfc-2497-if-let-chains/issue-99938.rs | 31 + .../rfc-2497-if-let-chains/no-double-assigments.rs | 9 + .../rfc-2497-if-let-chains/protect-precedences.rs | 17 + .../protect-precedences.stderr | 12 + .../rfc-2497-if-let-chains/then-else-blocks.rs | 49 + .../rfc-2565-param-attrs/attr-without-param.rs | 16 + .../rfc-2565-param-attrs/attr-without-param.stderr | 20 + .../rfc-2565-param-attrs/auxiliary/ident-mac.rs | 11 + .../rfc-2565-param-attrs/auxiliary/param-attrs.rs | 43 + ...issue-64682-dropping-first-attrs-in-impl-fns.rs | 21 + .../rfcs/rfc-2565-param-attrs/param-attrs-2018.rs | 6 + .../rfc-2565-param-attrs/param-attrs-2018.stderr | 22 + .../rfc-2565-param-attrs/param-attrs-allowed.rs | 101 ++ .../param-attrs-builtin-attrs.rs | 174 ++ .../param-attrs-builtin-attrs.stderr | 386 ++++ .../rfcs/rfc-2565-param-attrs/param-attrs-cfg.rs | 121 ++ .../rfc-2565-param-attrs/param-attrs-cfg.stderr | 122 ++ .../rfc-2565-param-attrs/param-attrs-pretty.rs | 61 + .../proc-macro-cannot-be-used.rs | 66 + .../proc-macro-cannot-be-used.stderr | 176 ++ tests/ui/rfcs/rfc-2627-raw-dylib/dlltool-failed.rs | 19 + .../rfcs/rfc-2627-raw-dylib/dlltool-failed.stderr | 5 + .../import-name-type-invalid-format.rs | 7 + .../import-name-type-invalid-format.stderr | 8 + .../import-name-type-multiple.rs | 8 + .../import-name-type-multiple.stderr | 8 + .../import-name-type-unknown-value.rs | 7 + .../import-name-type-unknown-value.stderr | 8 + .../import-name-type-unsupported-link-kind.rs | 15 + .../import-name-type-unsupported-link-kind.stderr | 14 + .../import-name-type-x86-only.rs | 7 + .../import-name-type-x86-only.stderr | 8 + .../ui/rfcs/rfc-2627-raw-dylib/invalid-dlltool.rs | 13 + .../rfcs/rfc-2627-raw-dylib/invalid-dlltool.stderr | 4 + .../rfc-2627-raw-dylib/link-ordinal-and-name.rs | 13 + .../link-ordinal-and-name.stderr | 14 + .../link-ordinal-invalid-format.rs | 11 + .../link-ordinal-invalid-format.stderr | 18 + .../link-ordinal-missing-argument.rs | 11 + .../link-ordinal-missing-argument.stderr | 18 + .../rfc-2627-raw-dylib/link-ordinal-multiple.rs | 12 + .../link-ordinal-multiple.stderr | 26 + .../link-ordinal-not-foreign-fn.rs | 22 + .../link-ordinal-not-foreign-fn.stderr | 20 + .../rfc-2627-raw-dylib/link-ordinal-too-large.rs | 11 + .../link-ordinal-too-large.stderr | 18 + .../link-ordinal-too-many-arguments.rs | 11 + .../link-ordinal-too-many-arguments.stderr | 18 + .../link-ordinal-unsupported-link-kind.rs | 15 + .../link-ordinal-unsupported-link-kind.stderr | 14 + .../rfc-2627-raw-dylib/multiple-declarations.rs | 18 + .../multiple-declarations.stderr | 8 + .../rfc-2627-raw-dylib/raw-dylib-windows-only.rs | 5 + .../raw-dylib-windows-only.stderr | 9 + .../ui/rfcs/rfc-2627-raw-dylib/unsupported-abi.rs | 12 + .../rfcs/rfc-2627-raw-dylib/unsupported-abi.stderr | 8 + .../assoc-type-const-bound-usage.rs | 14 + .../rfcs/rfc-2632-const-trait-impl/assoc-type.rs | 33 + .../rfc-2632-const-trait-impl/assoc-type.stderr | 8 + .../rfcs/rfc-2632-const-trait-impl/attr-misuse.rs | 10 + .../rfc-2632-const-trait-impl/attr-misuse.stderr | 18 + .../auxiliary/cross-crate.rs | 23 + .../auxiliary/staged-api.rs | 19 + .../call-const-trait-method-fail.rs | 29 + .../call-const-trait-method-fail.stderr | 15 + .../call-const-trait-method-pass.rs | 43 + .../call-const-trait-method-pass.stderr | 20 + .../call-generic-in-impl.rs | 15 + .../call-generic-in-impl.stderr | 8 + .../call-generic-method-chain.rs | 28 + .../call-generic-method-chain.stderr | 23 + .../call-generic-method-dup-bound.rs | 31 + .../call-generic-method-dup-bound.stderr | 23 + .../call-generic-method-fail.rs | 9 + .../call-generic-method-fail.stderr | 28 + .../call-generic-method-nonconst-bound.rs | 17 + .../call-generic-method-nonconst.rs | 26 + .../call-generic-method-nonconst.stderr | 15 + .../call-generic-method-pass.rs | 24 + .../call-generic-method-pass.stderr | 17 + tests/ui/rfcs/rfc-2632-const-trait-impl/call.rs | 10 + .../const-and-non-const-impl.rs | 31 + .../const-and-non-const-impl.stderr | 20 + .../const-check-fns-in-const-impl.rs | 16 + .../const-check-fns-in-const-impl.stderr | 11 + .../const-closure-parse-not-item.rs | 10 + .../const-closure-trait-method-fail.rs | 20 + .../const-closure-trait-method-fail.stderr | 16 + .../const-closure-trait-method.rs | 19 + .../rfc-2632-const-trait-impl/const-closures.rs | 30 + .../const-default-method-bodies.rs | 29 + .../const-default-method-bodies.stderr | 15 + .../rfc-2632-const-trait-impl/const-drop-bound.rs | 25 + .../const-drop-fail-2.precise.stderr | 26 + .../rfc-2632-const-trait-impl/const-drop-fail-2.rs | 43 + .../const-drop-fail-2.stderr | 50 + .../const-drop-fail-2.stock.stderr | 26 + .../const-drop-fail.precise.stderr | 58 + .../rfc-2632-const-trait-impl/const-drop-fail.rs | 37 + .../const-drop-fail.stock.stderr | 58 + .../rfcs/rfc-2632-const-trait-impl/const-drop.rs | 113 ++ .../const-impl-norecover.rs | 12 + .../const-impl-norecover.stderr | 8 + .../const-impl-recovery.rs | 17 + .../const-impl-recovery.stderr | 26 + .../const-impl-requires-const-trait.rs | 9 + .../const-impl-requires-const-trait.stderr | 14 + .../rfc-2632-const-trait-impl/const-impl-trait.rs | 55 + .../const-impl-trait.stderr | 39 + .../const_derives/derive-const-gate.rs | 5 + .../const_derives/derive-const-gate.stderr | 21 + .../const_derives/derive-const-non-const-type.rs | 13 + .../derive-const-non-const-type.stderr | 12 + .../const_derives/derive-const-use.rs | 19 + .../const_derives/derive-const-use.stderr | 53 + .../const_derives/derive-const-with-params.rs | 13 + .../const_derives/derive-const-with-params.stderr | 20 + .../cross-crate-default-method-body-is-const.rs | 18 + .../cross-crate.gatednc.stderr | 15 + .../rfcs/rfc-2632-const-trait-impl/cross-crate.rs | 24 + .../cross-crate.stock.stderr | 12 + .../cross-crate.stocknc.stderr | 15 + .../default-method-body-is-const-body-checking.rs | 17 + ...fault-method-body-is-const-body-checking.stderr | 15 + .../default-method-body-is-const-same-trait-ck.rs | 15 + ...fault-method-body-is-const-same-trait-ck.stderr | 15 + ...default-method-body-is-const-with-staged-api.rs | 17 + .../do-not-const-check-override.rs | 19 + .../do-not-const-check.rs | 18 + .../effects/helloworld.rs | 29 + .../feature-gate.gated.stderr | 8 + .../rfcs/rfc-2632-const-trait-impl/feature-gate.rs | 14 + .../feature-gate.stock.stderr | 21 + .../function-pointer-does-not-require-const.rs | 15 + tests/ui/rfcs/rfc-2632-const-trait-impl/gate.rs | 13 + .../ui/rfcs/rfc-2632-const-trait-impl/gate.stderr | 21 + .../rfc-2632-const-trait-impl/generic-bound.rs | 30 + .../rfc-2632-const-trait-impl/generic-bound.stderr | 11 + .../rfc-2632-const-trait-impl/hir-const-check.rs | 17 + .../hir-const-check.stderr | 12 + .../impl-tilde-const-trait.rs | 9 + .../impl-tilde-const-trait.stderr | 8 + .../impl-with-default-fn-fail.rs | 17 + .../impl-with-default-fn-fail.stderr | 12 + .../impl-with-default-fn-pass.rs | 26 + .../inherent-impl-const-bounds.rs | 22 + .../rfc-2632-const-trait-impl/inherent-impl.rs | 13 + .../rfc-2632-const-trait-impl/inherent-impl.stderr | 22 + .../rfcs/rfc-2632-const-trait-impl/issue-100222.rs | 39 + .../rfcs/rfc-2632-const-trait-impl/issue-102156.rs | 15 + .../rfc-2632-const-trait-impl/issue-102156.stderr | 19 + .../rfcs/rfc-2632-const-trait-impl/issue-102985.rs | 12 + .../rfc-2632-const-trait-impl/issue-102985.stderr | 41 + .../rfcs/rfc-2632-const-trait-impl/issue-103677.rs | 5 + .../rfcs/rfc-2632-const-trait-impl/issue-79450.rs | 20 + .../rfc-2632-const-trait-impl/issue-79450.stderr | 12 + .../rfcs/rfc-2632-const-trait-impl/issue-88155.rs | 13 + .../rfc-2632-const-trait-impl/issue-88155.stderr | 24 + .../rfcs/rfc-2632-const-trait-impl/issue-90052.rs | 9 + .../rfc-2632-const-trait-impl/issue-90052.stderr | 14 + .../rfcs/rfc-2632-const-trait-impl/issue-92111.rs | 23 + .../issue-92230-wf-super-trait-env.rs | 15 + .../match-non-const-eq.gated.stderr | 26 + .../match-non-const-eq.rs | 12 + .../match-non-const-eq.stock.stderr | 13 + .../rfc-2632-const-trait-impl/nested-closure.rs | 12 + .../non-const-op-const-closure-non-const-outer.rs | 15 + ...n-const-op-const-closure-non-const-outer.stderr | 11 + .../non-const-op-in-closure-in-const.rs | 18 + .../non-const-op-in-closure-in-const.stderr | 8 + ...st-default-bound-non-const-specialized-bound.rs | 58 + ...efault-bound-non-const-specialized-bound.stderr | 18 + .../const-default-const-specialized.rs | 39 + ...onst-default-impl-non-const-specialized-impl.rs | 26 + ...-default-impl-non-const-specialized-impl.stderr | 8 + .../specialization/default-keyword.rs | 15 + .../issue-95186-specialize-on-tilde-const.rs | 49 + ...e-95187-same-trait-bound-different-constness.rs | 57 + .../non-const-default-const-specialized.rs | 39 + .../specializing-constness-2.rs | 31 + .../specializing-constness-2.stderr | 21 + .../specializing-constness.rs | 31 + .../specializing-constness.stderr | 14 + .../staged-api-user-crate.rs | 16 + .../staged-api-user-crate.stderr | 12 + .../rfcs/rfc-2632-const-trait-impl/staged-api.rs | 63 + .../staged-api.stable.stderr | 25 + .../staged-api.unstable.stderr | 42 + .../static-const-trait-bound.rs | 18 + .../std-impl-gate.gated.stderr | 9 + .../rfc-2632-const-trait-impl/std-impl-gate.rs | 21 + .../std-impl-gate.stock.stderr | 12 + .../super-traits-fail-2.nn.stderr | 14 + .../super-traits-fail-2.ny.stderr | 14 + .../super-traits-fail-2.rs | 20 + .../super-traits-fail-2.yn.stderr | 19 + .../super-traits-fail-2.yy.stderr | 19 + .../super-traits-fail-3.nn.stderr | 20 + .../super-traits-fail-3.ny.stderr | 14 + .../super-traits-fail-3.rs | 21 + .../super-traits-fail-3.yn.stderr | 8 + .../rfc-2632-const-trait-impl/super-traits-fail.rs | 18 + .../super-traits-fail.stderr | 20 + .../rfcs/rfc-2632-const-trait-impl/super-traits.rs | 25 + tests/ui/rfcs/rfc-2632-const-trait-impl/syntax.rs | 8 + .../tilde-const-and-const-params.rs | 34 + .../tilde-const-and-const-params.stderr | 14 + .../tilde-const-invalid-places.rs | 7 + .../tilde-const-invalid-places.stderr | 8 + .../tilde-const-syntax.rs | 9 + .../rfcs/rfc-2632-const-trait-impl/tilde-twice.rs | 6 + .../rfc-2632-const-trait-impl/tilde-twice.stderr | 8 + .../tilde_const_on_impl_bound.rs | 17 + .../trait-default-body-stability.rs | 50 + .../trait-default-body-stability.stderr | 20 + .../trait-method-ptr-in-consts-ice.rs | 23 + .../trait-where-clause-const.rs | 31 + .../trait-where-clause-const.stderr | 35 + .../trait-where-clause-run.rs | 41 + .../trait-where-clause-self-referential.rs | 24 + .../trait-where-clause.rs | 26 + .../trait-where-clause.stderr | 35 + .../rfc-2632-const-trait-impl/without-tilde.rs | 6 + .../rfc-2632-const-trait-impl/without-tilde.stderr | 10 + .../rfcs/rfc1445/eq-allows-match-on-ty-in-macro.rs | 23 - tests/ui/rfcs/rfc1445/eq-allows-match.rs | 17 - tests/ui/rfcs/rfc1623-2.rs | 99 - tests/ui/rfcs/rfc1623-2.stderr | 39 - tests/ui/rfcs/rfc1623-3.rs | 14 - tests/ui/rfcs/rfc1623-3.stderr | 35 - tests/ui/rfcs/rfc1623.rs | 75 - tests/ui/rfcs/rfc1717/library-override.rs | 14 - tests/ui/rfcs/rfc1857-drop-order.rs | 224 --- .../ui/rust-2018/edition-lint-infer-outlives.fixed | 6 + tests/ui/rust-2018/edition-lint-infer-outlives.rs | 8 + .../rust-2018/edition-lint-infer-outlives.stderr | 11 +- .../uniform-paths/ambiguity-macros-nested.stderr | 2 +- .../uniform-paths/ambiguity-macros.stderr | 2 +- .../ui/rust-2018/uniform-paths/ambiguity-nested.rs | 4 +- .../uniform-paths/ambiguity-nested.stderr | 21 - tests/ui/rust-2018/uniform-paths/ambiguity.rs | 4 +- tests/ui/rust-2018/uniform-paths/ambiguity.stderr | 21 - .../uniform-paths/block-scoped-shadow-nested.rs | 3 +- .../block-scoped-shadow-nested.stderr | 24 - .../rust-2018/uniform-paths/block-scoped-shadow.rs | 8 +- .../uniform-paths/block-scoped-shadow.stderr | 60 - .../ui/rust-2018/uniform-paths/issue-56596.stderr | 5 +- tests/ui/rust-2018/uniform-paths/macro-rules.rs | 3 +- .../ui/rust-2018/uniform-paths/macro-rules.stderr | 24 +- .../ui/sanitize/issue-111184-generator-witness.rs | 17 + tests/ui/simd/shuffle.rs | 24 +- ...ust-2021-incompatible-closure-captures-96258.rs | 4 +- ...2021-incompatible-closure-captures-96258.stderr | 27 +- tests/ui/span/multiline-span-simple.stderr | 4 +- ...n-default-items-drop-coherence.coherence.stderr | 12 + ...zation-default-items-drop-coherence.next.stderr | 12 + .../specialization-default-items-drop-coherence.rs | 9 +- .../stability-attribute/auxiliary/default_body.rs | 4 + .../default-body-stability-err.rs | 1 + .../default-body-stability-err.stderr | 14 +- .../default-body-stability-ok-impls.rs | 2 + .../stability-in-private-module.stderr | 4 +- tests/ui/statics/uninhabited-static.stderr | 4 +- tests/ui/std/slice-from-array-issue-113238.rs | 9 + tests/ui/stdlib-unit-tests/not-sync.rs | 2 - tests/ui/stdlib-unit-tests/not-sync.stderr | 15 +- tests/ui/structs-enums/issue-3008-1.rs | 12 + tests/ui/structs-enums/issue-3008-1.stderr | 17 + tests/ui/structs-enums/issue-3008-2.rs | 6 + tests/ui/structs-enums/issue-3008-2.stderr | 14 + tests/ui/structs-enums/issue-3008-3.rs | 10 + tests/ui/structs-enums/issue-3008-3.stderr | 14 + tests/ui/structs/struct-field-cfg.stderr | 2 +- tests/ui/structs/struct-fields-shorthand.stderr | 2 +- tests/ui/structs/struct-fields-too-many.stderr | 2 +- tests/ui/structs/struct-variant-privacy-xc.stderr | 4 +- tests/ui/structs/struct-variant-privacy.stderr | 4 +- .../adt-param-with-implicit-sized-bound.stderr | 2 +- tests/ui/suggestions/as-ref.rs | 2 + tests/ui/suggestions/as-ref.stderr | 32 +- tests/ui/suggestions/crate-or-module-typo.stderr | 5 + .../dont-suggest-try_into-in-macros.stderr | 12 +- .../impl-trait-return-trailing-semicolon.stderr | 2 +- tests/ui/suggestions/into-str.stderr | 8 +- tests/ui/suggestions/issue-102972.rs | 16 + tests/ui/suggestions/issue-102972.stderr | 33 + tests/ui/suggestions/issue-103646.rs | 11 + tests/ui/suggestions/issue-103646.stderr | 21 + tests/ui/suggestions/issue-109991.rs | 27 + tests/ui/suggestions/issue-109991.stderr | 72 + .../ui/suggestions/issue-112590-suggest-import.rs | 10 + .../suggestions/issue-112590-suggest-import.stderr | 36 + .../ui/suggestions/issue-71394-no-from-impl.stderr | 6 +- tests/ui/suggestions/issue-88696.rs | 14 + tests/ui/suggestions/issue-88696.stderr | 11 + tests/ui/suggestions/issue-89640.rs | 3 + tests/ui/suggestions/issue-89640.stderr | 13 + ...of-multiline-trait-bound-in-where-clause.stderr | 6 +- tests/ui/suggestions/suggest-split-at-mut.stderr | 1 + tests/ui/suggestions/while-let-typo.rs | 2 +- tests/ui/suggestions/while-let-typo.stderr | 13 +- tests/ui/switched-expectations.stderr | 4 +- .../const-generics-structural-demangling.rs | 25 +- .../const-generics-structural-demangling.stderr | 62 +- ...nature-verification-for-explicit-return-type.rs | 2 +- tests/ui/test-attrs/test-function-signature.rs | 31 + tests/ui/test-attrs/test-function-signature.stderr | 39 + tests/ui/test-attrs/test-panic-abort-disabled.rs | 1 + tests/ui/test-attrs/test-panic-abort.rs | 9 + tests/ui/test-attrs/test-panic-abort.run.stdout | 7 +- tests/ui/test-attrs/test-type.rs | 3 +- tests/ui/thir-print/thir-flat-const-variant.rs | 18 + tests/ui/thir-print/thir-flat-const-variant.stdout | 399 ++++ tests/ui/thir-print/thir-flat.stdout | 2 +- tests/ui/track-diagnostics/track6.stderr | 2 +- tests/ui/trait-bounds/apit-unsized.rs | 4 + tests/ui/trait-bounds/apit-unsized.stderr | 41 + tests/ui/trait-bounds/unsized-bound.stderr | 30 +- tests/ui/traits/auxiliary/trivial3.rs | 1 + tests/ui/traits/auxiliary/trivial4.rs | 3 + .../bound/assoc-fn-bound-root-obligation.stderr | 6 +- tests/ui/traits/bound/generic_trait.rs | 2 +- tests/ui/traits/cache-reached-depth-ice.rs | 2 +- tests/ui/traits/cache-reached-depth-ice.stderr | 2 +- .../traits/deny-builtin-object-impl.current.stderr | 15 + .../ui/traits/deny-builtin-object-impl.next.stderr | 15 + tests/ui/traits/deny-builtin-object-impl.rs | 20 + tests/ui/traits/ice-with-dyn-pointee-errors.rs | 15 + tests/ui/traits/ice-with-dyn-pointee-errors.stderr | 19 + tests/ui/traits/ice-with-dyn-pointee.rs | 11 + tests/ui/traits/issue-105231.rs | 9 + tests/ui/traits/issue-105231.stderr | 29 + .../issue-83538-tainted-cache-after-cycle.rs | 8 +- .../issue-83538-tainted-cache-after-cycle.stderr | 8 +- tests/ui/traits/issue-85360-eval-obligation-ice.rs | 8 +- .../traits/issue-85360-eval-obligation-ice.stderr | 8 +- tests/ui/traits/issue-91949-hangs-on-recursion.rs | 1 + .../traits/issue-91949-hangs-on-recursion.stderr | 4 +- tests/ui/traits/new-solver/alias-bound-unsound.rs | 2 +- .../traits/new-solver/alias-bound-unsound.stderr | 16 +- .../alias_eq_substs_eq_not_intercrate.rs | 19 +- .../alias_eq_substs_eq_not_intercrate.stderr | 11 + tests/ui/traits/new-solver/array-default.rs | 8 + tests/ui/traits/new-solver/async.fail.stderr | 4 +- tests/ui/traits/new-solver/async.rs | 2 +- .../traits/new-solver/closure-substs-ambiguity.rs | 7 + tests/ui/traits/new-solver/dedup-regions.rs | 31 + .../ui/traits/new-solver/dont-remap-tait-substs.rs | 19 + ...-type_of-tait-in-defining-scope.not_send.stderr | 16 + .../dont-type_of-tait-in-defining-scope.rs | 24 + .../traits/new-solver/dyn-any-dont-prefer-impl.rs | 13 + .../new-solver/equating-projection-cyclically.rs | 12 +- .../equating-projection-cyclically.stderr | 9 +- .../traits/new-solver/lazy-nested-obligations-2.rs | 3 +- .../new-solver/lazy-nested-obligations-2.stderr | 39 + .../new-solver/leak-check-coinductive-cycle.rs | 33 + .../member-constraints-in-root-universe.rs | 17 + .../new-solver/normalized-const-built-in-op.rs | 11 + tests/ui/traits/new-solver/object-unsafety.rs | 10 +- tests/ui/traits/new-solver/object-unsafety.stderr | 63 +- .../new-solver/opportunistic-region-resolve.rs | 19 + .../new-solver/recursive-self-normalization-2.rs | 1 + .../recursive-self-normalization-2.stderr | 10 +- .../new-solver/recursive-self-normalization.rs | 1 + .../new-solver/recursive-self-normalization.stderr | 10 +- tests/ui/traits/new-solver/slice-match-byte-lit.rs | 11 + .../traits/new-solver/specialization-transmute.rs | 12 +- .../new-solver/specialization-transmute.stderr | 22 +- .../new-solver/specialization-unconstrained.rs | 2 +- .../new-solver/specialization-unconstrained.stderr | 11 +- tests/ui/traits/new-solver/tait-eq-proj-2.rs | 23 + tests/ui/traits/new-solver/tait-eq-proj.rs | 35 + tests/ui/traits/new-solver/tait-eq-tait.rs | 18 + ...rojection-param-candidates-are-ambiguous.stderr | 1 + .../unevaluated-const-impl-trait-ref.fails.stderr | 18 + .../new-solver/unevaluated-const-impl-trait-ref.rs | 22 + .../traits/new-solver/winnow-specializing-impls.rs | 22 + .../non_lifetime_binders/foreach-partial-eq.rs | 12 + .../non_lifetime_binders/foreach-partial-eq.stderr | 28 + .../nested-apit-mentioning-outer-bound-var.rs | 11 + .../nested-apit-mentioning-outer-bound-var.stderr | 17 + tests/ui/traits/object/print_vtable_sizes.rs | 61 + tests/ui/traits/object/print_vtable_sizes.stdout | 11 + tests/ui/traits/project-modulo-regions.rs | 4 +- .../project-modulo-regions.with_clause.stderr | 2 +- .../project-modulo-regions.without_clause.stderr | 2 +- tests/ui/traits/suggest-where-clause.stderr | 4 +- tests/ui/traits/trivial_impl.rs | 18 + tests/ui/traits/trivial_impl.stderr | 14 + tests/ui/traits/trivial_impl2.rs | 13 + tests/ui/traits/trivial_impl2.stderr | 14 + tests/ui/traits/trivial_impl3.rs | 19 + tests/ui/traits/trivial_impl3.stderr | 14 + tests/ui/traits/trivial_impl4.rs | 21 + tests/ui/traits/trivial_impl4.stderr | 14 + tests/ui/traits/trivial_impl_sized.rs | 26 + tests/ui/traits/trivial_impl_sized.stderr | 25 + tests/ui/transmutability/alignment/align-fail.rs | 23 + .../ui/transmutability/alignment/align-fail.stderr | 30 + tests/ui/transmutability/alignment/align-pass.rs | 23 + ...imitive_reprs_should_have_correct_length.stderr | 16 +- .../unknown_src_field.rs | 2 +- .../unknown_src_field.stderr | 20 +- tests/ui/transmutability/primitives/bool-mut.rs | 17 + .../ui/transmutability/primitives/bool-mut.stderr | 18 + .../transmutability/primitives/bool.current.stderr | 4 +- .../ui/transmutability/primitives/bool.next.stderr | 4 +- tests/ui/transmutability/primitives/bool.rs | 5 +- tests/ui/transmutability/references.current.stderr | 25 - tests/ui/transmutability/references.next.stderr | 25 - tests/ui/transmutability/references.rs | 30 - .../recursive-wrapper-types-bit-compatible-mut.rs | 25 + ...cursive-wrapper-types-bit-compatible-mut.stderr | 25 + .../recursive-wrapper-types-bit-compatible.rs | 26 + .../recursive-wrapper-types-bit-compatible.stderr | 25 + .../recursive-wrapper-types-bit-incompatible.rs | 25 + ...recursive-wrapper-types-bit-incompatible.stderr | 25 + .../references/recursive-wrapper-types.rs | 27 + .../references/recursive-wrapper-types.stderr | 25 + tests/ui/transmutability/references/u8-to-unit.rs | 24 + .../transmutability/references/unit-to-itself.rs | 24 + tests/ui/transmutability/references/unit-to-u8.rs | 24 + .../transmutability/references/unit-to-u8.stderr | 25 + tests/ui/transmutability/region-infer.stderr | 2 +- .../ui/treat-err-as-bug/panic-causes-oom-112708.rs | 10 + .../panic-causes-oom-112708.stderr | 32 + tests/ui/try-block/issue-45124.rs | 2 +- tests/ui/try-trait/bad-interconversion.stderr | 6 +- tests/ui/try-trait/option-to-result.stderr | 2 +- tests/ui/try-trait/try-on-option.stderr | 2 +- tests/ui/tuple/index-float.rs | 6 +- .../ui/type-alias-impl-trait/auto-trait-leakage.rs | 4 +- .../type-alias-impl-trait/auto-trait-leakage3.rs | 4 +- .../auto-trait-leakage3.stderr | 52 +- tests/ui/type-alias-impl-trait/bound_reduction2.rs | 1 + .../type-alias-impl-trait/bound_reduction2.stderr | 16 +- .../type-alias-impl-trait/bounds-are-checked3.rs | 16 + .../bounds-are-checked3.stderr | 20 + tests/ui/type-alias-impl-trait/bounds.rs | 16 + tests/ui/type-alias-impl-trait/closure_args.rs | 11 +- tests/ui/type-alias-impl-trait/closure_args2.rs | 23 +- tests/ui/type-alias-impl-trait/coherence.stderr | 2 +- .../coherence_different_hidden_ty.rs | 25 + .../coherence_different_hidden_ty.stderr | 12 + .../coherence_generalization.rs | 2 + tests/ui/type-alias-impl-trait/cross_inference.rs | 6 +- .../ui/type-alias-impl-trait/debug-ty-with-weak.rs | 12 + .../declared_but_not_defined_in_scope.stderr | 5 + .../defined-by-user-annotation.rs | 19 + .../defining-use-submodule.rs | 6 +- .../different_defining_uses_never_type-2.rs | 3 +- .../different_defining_uses_never_type-2.stderr | 6 +- .../different_defining_uses_never_type-3.rs | 3 +- .../generic_duplicate_lifetime_param.rs | 1 + .../generic_duplicate_lifetime_param.stderr | 16 +- .../generic_duplicate_param_use.rs | 12 +- .../generic_duplicate_param_use.stderr | 50 +- .../generic_nondefining_use.rs | 9 +- .../generic_nondefining_use.stderr | 44 +- .../generic_type_does_not_live_long_enough.rs | 12 +- .../generic_type_does_not_live_long_enough.stderr | 20 +- .../generic_underconstrained.stderr | 4 +- .../generic_underconstrained2.stderr | 8 +- ...hidden_behind_projection_behind_struct_field.rs | 28 + ...en_behind_projection_behind_struct_field.stderr | 20 + .../hidden_behind_struct_field.rs | 30 + .../hidden_behind_struct_field2.rs | 26 + .../type-alias-impl-trait/higher_kinded_params.rs | 28 + .../type-alias-impl-trait/higher_kinded_params2.rs | 35 + .../higher_kinded_params2.stderr | 15 + .../type-alias-impl-trait/higher_kinded_params3.rs | 36 + .../higher_kinded_params3.stderr | 28 + .../impl-trait-in-type-alias-with-bad-substs.rs | 28 + ...impl-trait-in-type-alias-with-bad-substs.stderr | 20 + .../type-alias-impl-trait/impl_for_weak_alias.rs | 14 + .../impl_for_weak_alias.stderr | 11 + tests/ui/type-alias-impl-trait/inference-cycle.rs | 8 +- .../type-alias-impl-trait/inference-cycle.stderr | 52 +- .../invalid_impl_trait_in_assoc_ty.stderr | 4 +- tests/ui/type-alias-impl-trait/issue-109054.rs | 22 + tests/ui/type-alias-impl-trait/issue-109054.stderr | 12 + .../issue-53398-cyclic-types.rs | 3 +- .../issue-53398-cyclic-types.stderr | 12 - .../issue-53678-generator-and-const-fn.rs | 21 +- .../issue-53678-generator-and-const-fn.stderr | 8 - tests/ui/type-alias-impl-trait/issue-57961.rs | 4 +- tests/ui/type-alias-impl-trait/issue-60564.rs | 1 + tests/ui/type-alias-impl-trait/issue-60564.stderr | 16 +- .../issue-63263-closure-return.rs | 5 +- .../issue-65679-inst-opaque-ty-from-val-twice.rs | 4 +- .../issue-68368-non-defining-use-2.rs | 3 +- .../issue-68368-non-defining-use-2.stderr | 14 +- .../issue-68368-non-defining-use.rs | 1 + .../issue-68368-non-defining-use.stderr | 14 +- .../issue-69136-inner-lifetime-resolve-error.rs | 7 +- ...issue-69136-inner-lifetime-resolve-error.stderr | 16 +- tests/ui/type-alias-impl-trait/issue-70121.rs | 3 +- tests/ui/type-alias-impl-trait/issue-70121.stderr | 15 + .../issue-76202-trait-impl-for-tait.rs | 2 + tests/ui/type-alias-impl-trait/issue-77179.rs | 2 +- tests/ui/type-alias-impl-trait/multi-error.rs | 23 + tests/ui/type-alias-impl-trait/multi-error.stderr | 15 + .../multiple-def-uses-in-one-fn.rs | 1 - .../multiple-def-uses-in-one-fn.stderr | 11 +- .../nested-tait-inference2.stderr | 2 +- .../ui/type-alias-impl-trait/nested_in_closure.rs | 17 + .../nested_type_alias_impl_trait.rs | 4 +- .../no_revealing_outside_defining_module.stderr | 10 + .../type-alias-impl-trait/non-defining-method.rs | 21 + .../non-defining-method.stderr | 15 + .../normalize-hidden-types.current.stderr | 55 + .../normalize-hidden-types.rs | 60 + .../not-matching-trait-refs-isnt-defining.rs | 33 + .../not-matching-trait-refs-isnt-defining.stderr | 22 + tests/ui/type-alias-impl-trait/obligation_ice.rs | 17 + tests/ui/type-alias-impl-trait/privacy.rs | 8 + tests/ui/type-alias-impl-trait/privacy.stderr | 11 + tests/ui/type-alias-impl-trait/reveal_local.rs | 10 +- tests/ui/type-alias-impl-trait/reveal_local.stderr | 96 +- .../ui/type-alias-impl-trait/self-referential-3.rs | 2 +- .../self-referential-3.stderr | 15 + tests/ui/type-alias-impl-trait/self-referential.rs | 2 +- .../type-alias-impl-trait/self-referential.stderr | 6 +- .../type-alias-impl-trait-fns.rs | 8 +- tests/ui/type-alias-impl-trait/type_of_a_let.rs | 8 +- .../ui/type-alias-impl-trait/type_of_a_let.stderr | 6 +- .../issue-113283-alllocator-trait-eq.rs | 18 + tests/ui/type/type-check-defaults.stderr | 4 +- ...dont-record-adjustments-when-pointing-at-arg.rs | 29 + ...-record-adjustments-when-pointing-at-arg.stderr | 17 + tests/ui/typeck/issue-106929.rs | 13 + tests/ui/typeck/issue-106929.stderr | 15 + .../typeck/issue-112252-ptr-arithmetics-help.fixed | 10 + .../ui/typeck/issue-112252-ptr-arithmetics-help.rs | 10 + .../issue-112252-ptr-arithmetics-help.stderr | 54 + ...issue-112385-while-assign-lhs-place-expr-ice.rs | 9 + ...e-112385-while-assign-lhs-place-expr-ice.stderr | 14 + tests/ui/typeck/issue-1871.rs | 12 + tests/ui/typeck/issue-1871.stderr | 9 + tests/ui/typeck/issue-2063-resource.rs | 14 + tests/ui/typeck/issue-2063.rs | 22 + tests/ui/typeck/issue-81293.stderr | 4 +- tests/ui/typeck/issue-86721-return-expr-ice.rs | 2 +- tests/ui/typeck/issue-89856.stderr | 2 +- tests/ui/typeck/issue-90101.stderr | 2 +- .../typeck/ptr-null-mutability-suggestions.fixed | 11 + tests/ui/typeck/ptr-null-mutability-suggestions.rs | 11 + .../typeck/ptr-null-mutability-suggestions.stderr | 21 + tests/ui/typeck/return-dyn-type-mismatch-2.rs | 11 + tests/ui/typeck/return-dyn-type-mismatch-2.stderr | 15 + tests/ui/typeck/return-dyn-type-mismatch.rs | 21 + tests/ui/typeck/return-dyn-type-mismatch.stderr | 15 + tests/ui/typeck/type-placeholder-fn-in-const.rs | 3 +- .../ui/typeck/type-placeholder-fn-in-const.stderr | 10 +- tests/ui/typeck/typeck_type_placeholder_item.rs | 8 +- .../ui/typeck/typeck_type_placeholder_item.stderr | 8 +- .../ui/typeck/typeck_type_placeholder_item_help.rs | 4 +- .../typeck_type_placeholder_item_help.stderr | 4 +- tests/ui/ufcs/ufcs-qpath-self-mismatch.stderr | 8 +- ...e-clause-inherent-impl-ampersand-rust2015.fixed | 17 + ...here-clause-inherent-impl-ampersand-rust2015.rs | 17 + ...-clause-inherent-impl-ampersand-rust2015.stderr | 14 + ...e-clause-inherent-impl-ampersand-rust2018.fixed | 18 + ...here-clause-inherent-impl-ampersand-rust2018.rs | 18 + ...-clause-inherent-impl-ampersand-rust2018.stderr | 14 + .../where-clause-inherent-impl-ampersand.rs | 18 - ...-clause-inherent-impl-ampersand.rust2015.stderr | 15 - ...-clause-inherent-impl-ampersand.rust2018.stderr | 15 - .../where-clause-trait-impl-region-2015.fixed | 14 + .../where-clause-trait-impl-region-2015.rs | 14 + .../where-clause-trait-impl-region-2015.stderr | 14 + .../where-clause-trait-impl-region-2018.fixed | 15 + .../where-clause-trait-impl-region-2018.rs | 15 + .../where-clause-trait-impl-region-2018.stderr | 14 + .../where-clause-trait-impl-region.rs | 15 - .../where-clause-trait-impl-region.rust2015.stderr | 15 - .../where-clause-trait-impl-region.rust2018.stderr | 15 - tests/ui/uninhabited/projection.rs | 32 + tests/ui/union/union-fields-2.mirunsafeck.stderr | 2 +- tests/ui/union/union-fields-2.thirunsafeck.stderr | 2 +- tests/ui/union/union-sized-field.stderr | 6 +- tests/ui/unsafe/auxiliary/external_unsafe_macro.rs | 4 + .../rfc-2585-unsafe_op_in_unsafe_fn.mir.stderr | 10 + tests/ui/unsafe/wrapping-unsafe-block-sugg.fixed | 66 + tests/ui/unsafe/wrapping-unsafe-block-sugg.rs | 66 + tests/ui/unsafe/wrapping-unsafe-block-sugg.stderr | 99 + tests/ui/unsized-locals/issue-67981.stderr | 5 +- tests/ui/unsized-locals/rust-call.rs | 12 + tests/ui/unsized-locals/rust-call.stderr | 13 + tests/ui/unsized/issue-71659.current.stderr | 18 + tests/ui/unsized/issue-71659.next.stderr | 18 + tests/ui/unsized/issue-71659.rs | 3 + tests/ui/unsized/issue-71659.stderr | 18 - tests/ui/unsized/unsized-bare-typaram.stderr | 2 +- tests/ui/unsized/unsized-enum.stderr | 2 +- tests/ui/unsized/unsized-enum2.stderr | 8 +- tests/ui/unsized/unsized-fn-arg.stderr | 2 +- .../unsized/unsized-inherent-impl-self-type.stderr | 2 +- tests/ui/unsized/unsized-struct.stderr | 4 +- .../ui/unsized/unsized-trait-impl-self-type.stderr | 2 +- .../ui/unsized/unsized-trait-impl-trait-arg.stderr | 2 +- tests/ui/unsized/unsized3.stderr | 12 +- tests/ui/unsized/unsized5.stderr | 8 +- tests/ui/unsized/unsized6.stderr | 26 +- tests/ui/unsized/unsized7.stderr | 2 +- tests/ui/use/use-keyword.rs | 2 +- tests/ui/weird-exprs.rs | 16 +- tests/ui/where-clauses/issue-50825-1.rs | 22 + tests/ui/where-clauses/issue-50825.rs | 15 + tests/ui/xcrate/xcrate-private-by-default.stderr | 20 +- 3946 files changed, 76813 insertions(+), 53920 deletions(-) create mode 100644 tests/codegen/array-codegen.rs create mode 100644 tests/codegen/const_scalar_pair.rs create mode 100644 tests/codegen/enum-u128.rs create mode 100644 tests/codegen/issues/issue-114312.rs create mode 100644 tests/codegen/sanitizer-safestack-attr-check.rs create mode 100644 tests/codegen/slice-iter-fold.rs create mode 100644 tests/incremental/issue-110457-same-span-closures/auxiliary/egui_inspect_derive.rs create mode 100644 tests/incremental/issue-110457-same-span-closures/main.rs delete mode 100644 tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.mir create mode 100644 tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir create mode 100644 tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir delete mode 100644 tests/mir-opt/box_expr.main.ElaborateDrops.before.mir create mode 100644 tests/mir-opt/box_expr.main.ElaborateDrops.before.panic-abort.mir create mode 100644 tests/mir-opt/box_expr.main.ElaborateDrops.before.panic-unwind.mir create mode 100644 tests/mir-opt/building/issue_110508.rs create mode 100644 tests/mir-opt/building/issue_110508.{impl#0}-BAR.built.after.mir create mode 100644 tests/mir-opt/building/issue_110508.{impl#0}-SELF_BAR.built.after.mir delete mode 100644 tests/mir-opt/combine_array_len.norm2.InstSimplify.diff create mode 100644 tests/mir-opt/combine_array_len.norm2.InstSimplify.panic-abort.diff create mode 100644 tests/mir-opt/combine_array_len.norm2.InstSimplify.panic-unwind.diff delete mode 100644 tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.diff create mode 100644 tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.panic-abort.diff create mode 100644 tests/mir-opt/combine_clone_of_primitives.{impl#0}-clone.InstSimplify.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/aggregate.foo.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/aggregate.foo.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/aggregate.foo.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.mir create mode 100644 tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/const_prop/aggregate.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/aggregate.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/aggregate.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.mir create mode 100644 tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/const_prop/aggregate.main.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.diff create mode 100644 tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/array_index.main.ConstProp.32bit.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.diff create mode 100644 tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/array_index.main.ConstProp.64bit.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/bad_op_div_by_zero.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.diff create mode 100644 tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.diff create mode 100644 tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.64bit.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/boxes.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/boxes.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/boxes.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/checked_add.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/checked_add.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/checked_add.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/const_prop_fails_gracefully.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/control_flow_simplification.hello.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.mir create mode 100644 tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.panic-abort.mir create mode 100644 tests/mir-opt/const_prop/control_flow_simplification.hello.PreCodegen.before.panic-unwind.mir delete mode 100644 tests/mir-opt/const_prop/indirect.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/indirect.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/indirect.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/inherit_overflow.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/issue_66971.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/issue_66971.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/issue_66971.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/issue_67019.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/issue_67019.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/issue_67019.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.diff create mode 100644 tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/large_array_index.main.ConstProp.32bit.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.diff create mode 100644 tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/large_array_index.main.ConstProp.64bit.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/mutable_variable_aggregate_partial_read.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/mutable_variable_unprop_assign.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/offset_of.concrete.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/offset_of.concrete.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/offset_of.concrete.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/offset_of.generic.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/offset_of.generic.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/offset_of.generic.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.diff create mode 100644 tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/repeat.main.ConstProp.32bit.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.diff create mode 100644 tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/repeat.main.ConstProp.64bit.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/return_place.add.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/return_place.add.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/return_place.add.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/return_place.add.PreCodegen.before.mir create mode 100644 tests/mir-opt/const_prop/return_place.add.PreCodegen.before.panic-abort.mir create mode 100644 tests/mir-opt/const_prop/return_place.add.PreCodegen.before.panic-unwind.mir delete mode 100644 tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.diff create mode 100644 tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/slice_len.main.ConstProp.32bit.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.diff create mode 100644 tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/slice_len.main.ConstProp.64bit.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/switch_int.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/switch_int.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/switch_int.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.diff create mode 100644 tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/switch_int.main.SimplifyConstCondition-after-const-prop.panic-unwind.diff delete mode 100644 tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/const_prop/tuple_literal_propagation.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/borrowed_local.f.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/branch.foo.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/branch.foo.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/branch.foo.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/copy_propagation_arg.arg_src.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/copy_propagation_arg.bar.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/copy_propagation_arg.baz.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/copy_propagation_arg.foo.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/custom_move_arg.f.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/cycle.main.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/cycle.main.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/cycle.main.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.mir create mode 100644 tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.panic-abort.mir create mode 100644 tests/mir-opt/copy-prop/dead_stores_79191.f.CopyProp.after.panic-unwind.mir delete mode 100644 tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.mir create mode 100644 tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.panic-abort.mir create mode 100644 tests/mir-opt/copy-prop/dead_stores_better.f.CopyProp.after.panic-unwind.mir delete mode 100644 tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/issue_107511.main.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/issue_107511.main.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/move_arg.f.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/move_arg.f.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/move_arg.f.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/move_projection.f.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/move_projection.f.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/move_projection.f.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/reborrow.demiraw.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/reborrow.miraw.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/reborrow.remut.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/reborrow.remut.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/reborrow.remut.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.panic-abort.diff create mode 100644 tests/mir-opt/copy-prop/reborrow.reraw.CopyProp.panic-unwind.diff delete mode 100644 tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.diff create mode 100644 tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.panic-abort.diff create mode 100644 tests/mir-opt/dataflow-const-prop/checked.main.DataflowConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.diff create mode 100644 tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.panic-abort.diff create mode 100644 tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.diff create mode 100644 tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.panic-abort.diff create mode 100644 tests/mir-opt/dataflow-const-prop/ref_without_sb.main.DataflowConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.diff create mode 100644 tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.panic-abort.diff create mode 100644 tests/mir-opt/dataflow-const-prop/sibling_ptr.main.DataflowConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.diff create mode 100644 tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.panic-abort.diff create mode 100644 tests/mir-opt/dataflow-const-prop/terminator.main.DataflowConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.diff create mode 100644 tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.panic-abort.diff create mode 100644 tests/mir-opt/dead-store-elimination/cycle.cycle.DeadStoreElimination.panic-unwind.diff delete mode 100644 tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.diff create mode 100644 tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.panic-abort.diff create mode 100644 tests/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.panic-unwind.diff delete mode 100644 tests/mir-opt/derefer_complex_case.main.Derefer.diff create mode 100644 tests/mir-opt/derefer_complex_case.main.Derefer.panic-abort.diff create mode 100644 tests/mir-opt/derefer_complex_case.main.Derefer.panic-unwind.diff delete mode 100644 tests/mir-opt/derefer_inline_test.main.Derefer.diff create mode 100644 tests/mir-opt/derefer_inline_test.main.Derefer.panic-abort.diff create mode 100644 tests/mir-opt/derefer_inline_test.main.Derefer.panic-unwind.diff delete mode 100644 tests/mir-opt/derefer_terminator_test.main.Derefer.diff create mode 100644 tests/mir-opt/derefer_terminator_test.main.Derefer.panic-abort.diff create mode 100644 tests/mir-opt/derefer_terminator_test.main.Derefer.panic-unwind.diff delete mode 100644 tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.diff create mode 100644 tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.panic-abort.diff create mode 100644 tests/mir-opt/dest-prop/branch.foo.DestinationPropagation.panic-unwind.diff delete mode 100644 tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.diff create mode 100644 tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.panic-abort.diff create mode 100644 tests/mir-opt/dest-prop/copy_propagation_arg.arg_src.DestinationPropagation.panic-unwind.diff delete mode 100644 tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.diff create mode 100644 tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.panic-abort.diff create mode 100644 tests/mir-opt/dest-prop/copy_propagation_arg.bar.DestinationPropagation.panic-unwind.diff delete mode 100644 tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.diff create mode 100644 tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.panic-abort.diff create mode 100644 tests/mir-opt/dest-prop/copy_propagation_arg.baz.DestinationPropagation.panic-unwind.diff delete mode 100644 tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.diff create mode 100644 tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.panic-abort.diff create mode 100644 tests/mir-opt/dest-prop/copy_propagation_arg.foo.DestinationPropagation.panic-unwind.diff delete mode 100644 tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.diff create mode 100644 tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.panic-abort.diff create mode 100644 tests/mir-opt/dest-prop/cycle.main.DestinationPropagation.panic-unwind.diff delete mode 100644 tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.mir create mode 100644 tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.panic-abort.mir create mode 100644 tests/mir-opt/dest-prop/dead_stores_79191.f.DestinationPropagation.after.panic-unwind.mir delete mode 100644 tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.mir create mode 100644 tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.panic-abort.mir create mode 100644 tests/mir-opt/dest-prop/dead_stores_better.f.DestinationPropagation.after.panic-unwind.mir delete mode 100644 tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.diff create mode 100644 tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.panic-abort.diff create mode 100644 tests/mir-opt/dest-prop/simple.nrvo.DestinationPropagation.panic-unwind.diff delete mode 100644 tests/mir-opt/dest-prop/union.main.DestinationPropagation.diff create mode 100644 tests/mir-opt/dest-prop/union.main.DestinationPropagation.panic-abort.diff create mode 100644 tests/mir-opt/dest-prop/union.main.DestinationPropagation.panic-unwind.diff delete mode 100644 tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.diff create mode 100644 tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.panic-abort.diff create mode 100644 tests/mir-opt/dest-prop/unreachable.f.DestinationPropagation.panic-unwind.diff delete mode 100644 tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.diff create mode 100644 tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.mir create mode 100644 tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.panic-abort.mir create mode 100644 tests/mir-opt/generator_drop_cleanup.main-{closure#0}.generator_drop.0.panic-unwind.mir delete mode 100644 tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.mir create mode 100644 tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.panic-abort.mir create mode 100644 tests/mir-opt/generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.panic-unwind.mir delete mode 100644 tests/mir-opt/inline/asm_unwind.main.Inline.diff create mode 100644 tests/mir-opt/inline/asm_unwind.main.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/asm_unwind.main.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/caller_with_trivial_bound.foo.Inline.diff create mode 100644 tests/mir-opt/inline/caller_with_trivial_bound.foo.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/cycle.f.Inline.diff create mode 100644 tests/mir-opt/inline/cycle.f.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/cycle.f.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/cycle.g.Inline.diff create mode 100644 tests/mir-opt/inline/cycle.g.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/cycle.g.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/cycle.main.Inline.diff create mode 100644 tests/mir-opt/inline/cycle.main.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/cycle.main.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/dyn_trait.get_query.Inline.diff create mode 100644 tests/mir-opt/inline/dyn_trait.get_query.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/dyn_trait.get_query.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.diff create mode 100644 tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/dyn_trait.mk_cycle.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.diff create mode 100644 tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/dyn_trait.try_execute_query.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/exponential_runtime.main.Inline.diff create mode 100644 tests/mir-opt/inline/exponential_runtime.main.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/exponential_runtime.main.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.diff create mode 100644 tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_compatibility.inlined_no_sanitize.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.diff create mode 100644 tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_compatibility.inlined_target_feature.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.diff create mode 100644 tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_compatibility.not_inlined_c_variadic.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.diff create mode 100644 tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_compatibility.not_inlined_no_sanitize.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.diff create mode 100644 tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_compatibility.not_inlined_target_feature.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_cycle.one.Inline.diff create mode 100644 tests/mir-opt/inline/inline_cycle.one.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_cycle.one.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_cycle.two.Inline.diff create mode 100644 tests/mir-opt/inline/inline_cycle.two.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_cycle.two.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_cycle_generic.main.Inline.diff create mode 100644 tests/mir-opt/inline/inline_cycle_generic.main.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_cycle_generic.main.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_diverging.f.Inline.diff create mode 100644 tests/mir-opt/inline/inline_diverging.f.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_diverging.f.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_diverging.g.Inline.diff create mode 100644 tests/mir-opt/inline/inline_diverging.g.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_diverging.g.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_diverging.h.Inline.diff create mode 100644 tests/mir-opt/inline/inline_diverging.h.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_diverging.h.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_generator.main.Inline.diff create mode 100644 tests/mir-opt/inline/inline_generator.main.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_generator.main.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_into_box_place.main.Inline.diff create mode 100644 tests/mir-opt/inline/inline_into_box_place.main.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_into_box_place.main.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_options.main.Inline.after.mir create mode 100644 tests/mir-opt/inline/inline_options.main.Inline.after.panic-abort.mir create mode 100644 tests/mir-opt/inline/inline_options.main.Inline.after.panic-unwind.mir delete mode 100644 tests/mir-opt/inline/inline_shims.clone.Inline.diff create mode 100644 tests/mir-opt/inline/inline_shims.clone.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_shims.clone.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_shims.drop.Inline.diff create mode 100644 tests/mir-opt/inline/inline_shims.drop.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_shims.drop.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_specialization.main.Inline.diff create mode 100644 tests/mir-opt/inline/inline_specialization.main.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/inline_specialization.main.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/inline_trait_method.test.Inline.after.mir create mode 100644 tests/mir-opt/inline/inline_trait_method.test.Inline.after.panic-abort.mir create mode 100644 tests/mir-opt/inline/inline_trait_method.test.Inline.after.panic-unwind.mir delete mode 100644 tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.mir create mode 100644 tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.panic-abort.mir create mode 100644 tests/mir-opt/inline/inline_trait_method_2.test2.Inline.after.panic-unwind.mir delete mode 100644 tests/mir-opt/inline/issue_106141.outer.Inline.diff create mode 100644 tests/mir-opt/inline/issue_106141.outer.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/issue_106141.outer.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/issue_78442.bar.Inline.diff create mode 100644 tests/mir-opt/inline/issue_78442.bar.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/issue_78442.bar.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/issue_78442.bar.RevealAll.diff create mode 100644 tests/mir-opt/inline/issue_78442.bar.RevealAll.panic-abort.diff create mode 100644 tests/mir-opt/inline/issue_78442.bar.RevealAll.panic-unwind.diff create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.Inline.panic-unwind.diff create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_bigger.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.diff create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.mir create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shl_unsigned_smaller.PreCodegen.after.panic-unwind.mir create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.Inline.panic-unwind.diff create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_bigger.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.diff create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.mir create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/inline/unchecked_shifts.unchecked_shr_signed_smaller.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.diff create mode 100644 tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-abort.diff create mode 100644 tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-unwind.diff delete mode 100644 tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.mir create mode 100644 tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/issue_101973.inner.ConstProp.diff create mode 100644 tests/mir-opt/issue_101973.inner.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/issue_101973.inner.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.mir create mode 100644 tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.panic-abort.mir create mode 100644 tests/mir-opt/issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.panic-unwind.mir delete mode 100644 tests/mir-opt/issue_41110.main.ElaborateDrops.diff create mode 100644 tests/mir-opt/issue_41110.main.ElaborateDrops.panic-abort.diff create mode 100644 tests/mir-opt/issue_41110.main.ElaborateDrops.panic-unwind.diff delete mode 100644 tests/mir-opt/issue_41110.test.ElaborateDrops.diff create mode 100644 tests/mir-opt/issue_41110.test.ElaborateDrops.panic-abort.diff create mode 100644 tests/mir-opt/issue_41110.test.ElaborateDrops.panic-unwind.diff delete mode 100644 tests/mir-opt/issue_41888.main.ElaborateDrops.diff create mode 100644 tests/mir-opt/issue_41888.main.ElaborateDrops.panic-abort.diff create mode 100644 tests/mir-opt/issue_41888.main.ElaborateDrops.panic-unwind.diff delete mode 100644 tests/mir-opt/issue_62289.test.ElaborateDrops.before.mir create mode 100644 tests/mir-opt/issue_62289.test.ElaborateDrops.before.panic-abort.mir create mode 100644 tests/mir-opt/issue_62289.test.ElaborateDrops.before.panic-unwind.mir delete mode 100644 tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.diff create mode 100644 tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.panic-abort.diff create mode 100644 tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.panic-unwind.diff delete mode 100644 tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.mir create mode 100644 tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.diff create mode 100644 tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-abort.diff create mode 100644 tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.diff create mode 100644 tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-abort.diff create mode 100644 tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.diff create mode 100644 tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-abort.diff create mode 100644 tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.diff create mode 100644 tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-abort.diff create mode 100644 tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.diff create mode 100644 tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-abort.diff create mode 100644 tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.diff create mode 100644 tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-abort.diff create mode 100644 tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.align_of.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.assume.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.discriminant.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.forget.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.non_const.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.ptr_offset.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.read_via_copy_primitive.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.read_via_copy_uninhabited.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.size_of.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.transmute_inhabited.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.transmute_ref_dst.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.transmute_to_box_uninhabited.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.transmute_to_mut_uninhabited.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.transmute_to_ref_uninhabited.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.transmute_uninhabited.LowerIntrinsics.panic-unwind.diff create mode 100644 tests/mir-opt/lower_intrinsics.unchecked.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.unchecked.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.unreachable.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.with_overflow.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.wrapping.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.diff create mode 100644 tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.panic-abort.diff create mode 100644 tests/mir-opt/lower_intrinsics.write_via_move_string.LowerIntrinsics.panic-unwind.diff delete mode 100644 tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.diff create mode 100644 tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-abort.diff create mode 100644 tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-unwind.diff delete mode 100644 tests/mir-opt/match_arm_scopes.complicated_match.SimplifyCfg-initial.after-ElaborateDrops.after.diff create mode 100644 tests/mir-opt/match_arm_scopes.complicated_match.panic-abort.SimplifyCfg-initial.after-ElaborateDrops.after.diff create mode 100644 tests/mir-opt/match_arm_scopes.complicated_match.panic-unwind.SimplifyCfg-initial.after-ElaborateDrops.after.diff delete mode 100644 tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.mir create mode 100644 tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.panic-abort.mir create mode 100644 tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.panic-unwind.mir delete mode 100644 tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.mir create mode 100644 tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.panic-abort.mir create mode 100644 tests/mir-opt/no_spurious_drop_after_call.main.ElaborateDrops.before.panic-unwind.mir delete mode 100644 tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.diff create mode 100644 tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.panic-abort.diff create mode 100644 tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.panic-unwind.diff delete mode 100644 tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.mir create mode 100644 tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir create mode 100644 tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir create mode 100644 tests/mir-opt/pre-codegen/chained_comparison.bitand.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/chained_comparison.naive.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/chained_comparison.returning.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/chained_comparison.rs create mode 100644 tests/mir-opt/pre-codegen/checked_ops.checked_shl.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/checked_ops.rs create mode 100644 tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/loops.filter_mapped.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/loops.int_range.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/loops.mapped.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/loops.rs create mode 100644 tests/mir-opt/pre-codegen/loops.vec_move.PreCodegen.after.mir delete mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.diff create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.panic-abort.diff create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.32bit.panic-unwind.diff delete mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.diff create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.panic-abort.diff create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.ConstProp.64bit.panic-unwind.diff delete mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.mir create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.32bit.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.mir create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.PreCodegen.after.64bit.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.diff create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.panic-abort.diff create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.panic-unwind.diff delete mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.diff create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.panic-abort.diff create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.panic-unwind.diff delete mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.mir create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.32bit.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.mir create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/optimizes_into_variable.main.SimplifyLocals-final.after.64bit.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/range_iter.inclusive_loop.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/range_iter.range_inclusive_iter_next.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-unwind.mir create mode 100644 tests/mir-opt/pre-codegen/slice_filter.rs create mode 100644 tests/mir-opt/pre-codegen/slice_filter.variant_a-{closure#0}.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/slice_filter.variant_b-{closure#0}.PreCodegen.after.mir delete mode 100644 tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/slice_index.slice_index_range.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/slice_index.slice_index_usize.PreCodegen.after.panic-unwind.mir create mode 100644 tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-unwind.mir create mode 100644 tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/slice_iter.slice_iter_mut_next_back.PreCodegen.after.panic-unwind.mir delete mode 100644 tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.mir create mode 100644 tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/slice_iter.slice_iter_next.PreCodegen.after.panic-unwind.mir create mode 100644 tests/mir-opt/pre-codegen/spans.outer.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/pre-codegen/spans.outer.PreCodegen.after.panic-unwind.mir create mode 100644 tests/mir-opt/pre-codegen/spans.rs delete mode 100644 tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.diff create mode 100644 tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.panic-abort.diff create mode 100644 tests/mir-opt/remove_fake_borrows.match_guard.CleanupPostBorrowck.panic-unwind.diff delete mode 100644 tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.diff create mode 100644 tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.panic-abort.diff create mode 100644 tests/mir-opt/remove_storage_markers.main.RemoveStorageMarkers.panic-unwind.diff delete mode 100644 tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.diff create mode 100644 tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.panic-abort.diff create mode 100644 tests/mir-opt/remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.panic-unwind.diff delete mode 100644 tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.diff create mode 100644 tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.panic-abort.diff create mode 100644 tests/mir-opt/remove_unneeded_drops.dont_opt.RemoveUnneededDrops.panic-unwind.diff delete mode 100644 tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.diff create mode 100644 tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.panic-abort.diff create mode 100644 tests/mir-opt/remove_unneeded_drops.opt.RemoveUnneededDrops.panic-unwind.diff delete mode 100644 tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.diff create mode 100644 tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.panic-abort.diff create mode 100644 tests/mir-opt/remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.panic-unwind.diff delete mode 100644 tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.mir create mode 100644 tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.panic-abort.mir create mode 100644 tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.panic-unwind.mir delete mode 100644 tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir create mode 100644 tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.panic-abort.mir create mode 100644 tests/mir-opt/retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.panic-unwind.mir delete mode 100644 tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.mir create mode 100644 tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.panic-abort.mir create mode 100644 tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.panic-unwind.mir delete mode 100644 tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.mir create mode 100644 tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir create mode 100644 tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir delete mode 100644 tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.mir create mode 100644 tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.panic-abort.mir create mode 100644 tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.panic-unwind.mir delete mode 100644 tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.mir create mode 100644 tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.panic-abort.mir create mode 100644 tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.panic-unwind.mir delete mode 100644 tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.diff create mode 100644 tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.panic-abort.diff create mode 100644 tests/mir-opt/simplify_if.main.SimplifyConstCondition-after-const-prop.panic-unwind.diff delete mode 100644 tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.diff create mode 100644 tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.panic-abort.diff create mode 100644 tests/mir-opt/simplify_locals_fixedpoint.foo.SimplifyLocals-final.panic-unwind.diff delete mode 100644 tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.diff create mode 100644 tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.panic-abort.diff create mode 100644 tests/mir-opt/simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.panic-unwind.diff delete mode 100644 tests/mir-opt/simplify_match.main.ConstProp.diff create mode 100644 tests/mir-opt/simplify_match.main.ConstProp.panic-abort.diff create mode 100644 tests/mir-opt/simplify_match.main.ConstProp.panic-unwind.diff delete mode 100644 tests/mir-opt/slice_filter.rs delete mode 100644 tests/mir-opt/slice_filter.variant_a-{closure#0}.CopyProp.diff delete mode 100644 tests/mir-opt/slice_filter.variant_a-{closure#0}.DestinationPropagation.diff delete mode 100644 tests/mir-opt/slice_filter.variant_a-{closure#0}.ReferencePropagation.diff delete mode 100644 tests/mir-opt/slice_filter.variant_b-{closure#0}.CopyProp.diff delete mode 100644 tests/mir-opt/slice_filter.variant_b-{closure#0}.DestinationPropagation.diff delete mode 100644 tests/mir-opt/slice_filter.variant_b-{closure#0}.ReferencePropagation.diff create mode 100644 tests/mir-opt/switch_to_self.rs create mode 100644 tests/mir-opt/switch_to_self.test.MatchBranchSimplification.diff delete mode 100644 tests/mir-opt/unreachable.main.UnreachablePropagation.diff create mode 100644 tests/mir-opt/unreachable.main.UnreachablePropagation.panic-abort.diff create mode 100644 tests/mir-opt/unreachable.main.UnreachablePropagation.panic-unwind.diff delete mode 100644 tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.diff create mode 100644 tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.panic-abort.diff create mode 100644 tests/mir-opt/unreachable_diverging.main.UnreachablePropagation.panic-unwind.diff delete mode 100644 tests/mir-opt/while_storage.while_loop.PreCodegen.after.mir create mode 100644 tests/mir-opt/while_storage.while_loop.PreCodegen.after.panic-abort.mir create mode 100644 tests/mir-opt/while_storage.while_loop.PreCodegen.after.panic-unwind.mir create mode 100644 tests/run-coverage-rustdoc/auxiliary/doctest_crate.rs create mode 100644 tests/run-coverage-rustdoc/doctest.coverage create mode 100644 tests/run-coverage-rustdoc/doctest.rs create mode 100644 tests/run-coverage/abort.coverage create mode 100644 tests/run-coverage/abort.rs create mode 100644 tests/run-coverage/assert.coverage create mode 100644 tests/run-coverage/assert.rs create mode 100644 tests/run-coverage/async.coverage create mode 100644 tests/run-coverage/async.rs create mode 100644 tests/run-coverage/async2.coverage create mode 100644 tests/run-coverage/async2.rs create mode 100644 tests/run-coverage/auxiliary/inline_always_with_dead_code.rs create mode 100644 tests/run-coverage/auxiliary/unused_mod_helper.rs create mode 100644 tests/run-coverage/auxiliary/used_crate.rs create mode 100644 tests/run-coverage/auxiliary/used_inline_crate.rs create mode 100644 tests/run-coverage/closure.coverage create mode 100644 tests/run-coverage/closure.rs create mode 100644 tests/run-coverage/closure_macro.coverage create mode 100644 tests/run-coverage/closure_macro.rs create mode 100644 tests/run-coverage/closure_macro_async.coverage create mode 100644 tests/run-coverage/closure_macro_async.rs create mode 100644 tests/run-coverage/conditions.coverage create mode 100644 tests/run-coverage/conditions.rs create mode 100644 tests/run-coverage/continue.coverage create mode 100644 tests/run-coverage/continue.rs create mode 100644 tests/run-coverage/dead_code.coverage create mode 100644 tests/run-coverage/dead_code.rs create mode 100644 tests/run-coverage/drop_trait.coverage create mode 100644 tests/run-coverage/drop_trait.rs create mode 100644 tests/run-coverage/generator.coverage create mode 100644 tests/run-coverage/generator.rs create mode 100644 tests/run-coverage/generics.coverage create mode 100644 tests/run-coverage/generics.rs create mode 100644 tests/run-coverage/if.coverage create mode 100644 tests/run-coverage/if.rs create mode 100644 tests/run-coverage/if_else.coverage create mode 100644 tests/run-coverage/if_else.rs create mode 100644 tests/run-coverage/inline-dead.coverage create mode 100644 tests/run-coverage/inline-dead.rs create mode 100644 tests/run-coverage/inline.coverage create mode 100644 tests/run-coverage/inline.rs create mode 100644 tests/run-coverage/inner_items.coverage create mode 100644 tests/run-coverage/inner_items.rs create mode 100644 tests/run-coverage/issue-83601.coverage create mode 100644 tests/run-coverage/issue-83601.rs create mode 100644 tests/run-coverage/issue-84561.coverage create mode 100644 tests/run-coverage/issue-84561.rs create mode 100644 tests/run-coverage/issue-85461.coverage create mode 100644 tests/run-coverage/issue-85461.rs create mode 100644 tests/run-coverage/issue-93054.coverage create mode 100644 tests/run-coverage/issue-93054.rs create mode 100644 tests/run-coverage/lazy_boolean.coverage create mode 100644 tests/run-coverage/lazy_boolean.rs create mode 100644 tests/run-coverage/loop_break_value.coverage create mode 100644 tests/run-coverage/loop_break_value.rs create mode 100644 tests/run-coverage/loops_branches.coverage create mode 100644 tests/run-coverage/loops_branches.rs create mode 100644 tests/run-coverage/match_or_pattern.coverage create mode 100644 tests/run-coverage/match_or_pattern.rs create mode 100644 tests/run-coverage/nested_loops.coverage create mode 100644 tests/run-coverage/nested_loops.rs create mode 100644 tests/run-coverage/no_cov_crate.coverage create mode 100644 tests/run-coverage/no_cov_crate.rs create mode 100644 tests/run-coverage/overflow.coverage create mode 100644 tests/run-coverage/overflow.rs create mode 100644 tests/run-coverage/panic_unwind.coverage create mode 100644 tests/run-coverage/panic_unwind.rs create mode 100644 tests/run-coverage/partial_eq.coverage create mode 100644 tests/run-coverage/partial_eq.rs create mode 100644 tests/run-coverage/simple_loop.coverage create mode 100644 tests/run-coverage/simple_loop.rs create mode 100644 tests/run-coverage/simple_match.coverage create mode 100644 tests/run-coverage/simple_match.rs create mode 100644 tests/run-coverage/sort_groups.coverage create mode 100644 tests/run-coverage/sort_groups.rs create mode 100644 tests/run-coverage/test_harness.coverage create mode 100644 tests/run-coverage/test_harness.rs create mode 100644 tests/run-coverage/tight_inf_loop.coverage create mode 100644 tests/run-coverage/tight_inf_loop.rs create mode 100644 tests/run-coverage/try_error_result.coverage create mode 100644 tests/run-coverage/try_error_result.rs create mode 100644 tests/run-coverage/unused.coverage create mode 100644 tests/run-coverage/unused.rs create mode 100644 tests/run-coverage/unused_mod.coverage create mode 100644 tests/run-coverage/unused_mod.rs create mode 100644 tests/run-coverage/uses_crate.coverage create mode 100644 tests/run-coverage/uses_crate.rs create mode 100644 tests/run-coverage/uses_inline_crate.coverage create mode 100644 tests/run-coverage/uses_inline_crate.rs create mode 100644 tests/run-coverage/while.coverage create mode 100644 tests/run-coverage/while.rs create mode 100644 tests/run-coverage/while_early_ret.coverage create mode 100644 tests/run-coverage/while_early_ret.rs create mode 100644 tests/run-coverage/yield.coverage create mode 100644 tests/run-coverage/yield.rs delete mode 100644 tests/run-make/coverage-reports/Makefile delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.abort.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.assert.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.async.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.async2.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.closure.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.closure_macro.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.closure_macro_async.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.conditions.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.continue.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.dead_code.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.doctest.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.drop_trait.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.generator.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.generics.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.if.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.if_else.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.inline-dead.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.inline.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.inner_items.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.issue-83601.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.issue-84561.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.issue-85461.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.issue-93054.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.lazy_boolean.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.loop_break_value.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.loops_branches.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.match_or_pattern.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.nested_loops.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.no_cov_crate.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.overflow.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.panic_unwind.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.partial_eq.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.simple_loop.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.simple_match.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.sort_groups.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.test_harness.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.tight_inf_loop.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.try_error_result.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.unused.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.unused_mod.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.uses_crate.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.uses_inline_crate.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.while.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.while_early_ret.txt delete mode 100644 tests/run-make/coverage-reports/expected_show_coverage.yield.txt delete mode 100755 tests/run-make/coverage-reports/normalize_paths.py delete mode 100644 tests/run-make/coverage-reports/sort_subviews.py delete mode 100644 tests/run-make/coverage/WARNING_KEEP_NAMES_SHORT.txt delete mode 100644 tests/run-make/coverage/abort.rs delete mode 100644 tests/run-make/coverage/assert.rs delete mode 100644 tests/run-make/coverage/async.rs delete mode 100644 tests/run-make/coverage/async2.rs delete mode 100644 tests/run-make/coverage/closure.rs delete mode 100644 tests/run-make/coverage/closure_macro.rs delete mode 100644 tests/run-make/coverage/closure_macro_async.rs delete mode 100644 tests/run-make/coverage/compiletest-ignore-dir delete mode 100644 tests/run-make/coverage/conditions.rs delete mode 100644 tests/run-make/coverage/continue.rs delete mode 100644 tests/run-make/coverage/coverage_tools.mk delete mode 100644 tests/run-make/coverage/dead_code.rs delete mode 100644 tests/run-make/coverage/doctest.rs delete mode 100644 tests/run-make/coverage/drop_trait.rs delete mode 100644 tests/run-make/coverage/generator.rs delete mode 100644 tests/run-make/coverage/generics.rs delete mode 100644 tests/run-make/coverage/if.rs delete mode 100644 tests/run-make/coverage/if_else.rs delete mode 100644 tests/run-make/coverage/inline-dead.rs delete mode 100644 tests/run-make/coverage/inline.rs delete mode 100644 tests/run-make/coverage/inner_items.rs delete mode 100644 tests/run-make/coverage/issue-83601.rs delete mode 100644 tests/run-make/coverage/issue-84561.rs delete mode 100644 tests/run-make/coverage/issue-85461.rs delete mode 100644 tests/run-make/coverage/issue-93054.rs delete mode 100644 tests/run-make/coverage/lazy_boolean.rs delete mode 100644 tests/run-make/coverage/lib/doctest_crate.rs delete mode 100644 tests/run-make/coverage/lib/inline_always_with_dead_code.rs delete mode 100644 tests/run-make/coverage/lib/unused_mod_helper.rs delete mode 100644 tests/run-make/coverage/lib/used_crate.rs delete mode 100644 tests/run-make/coverage/lib/used_inline_crate.rs delete mode 100644 tests/run-make/coverage/loop_break_value.rs delete mode 100644 tests/run-make/coverage/loops_branches.rs delete mode 100644 tests/run-make/coverage/match_or_pattern.rs delete mode 100644 tests/run-make/coverage/nested_loops.rs delete mode 100644 tests/run-make/coverage/no_cov_crate.rs delete mode 100644 tests/run-make/coverage/overflow.rs delete mode 100644 tests/run-make/coverage/panic_unwind.rs delete mode 100644 tests/run-make/coverage/partial_eq.rs delete mode 100644 tests/run-make/coverage/simple_loop.rs delete mode 100644 tests/run-make/coverage/simple_match.rs delete mode 100644 tests/run-make/coverage/sort_groups.rs delete mode 100644 tests/run-make/coverage/test_harness.rs delete mode 100644 tests/run-make/coverage/tight_inf_loop.rs delete mode 100644 tests/run-make/coverage/try_error_result.rs delete mode 100644 tests/run-make/coverage/unused.rs delete mode 100644 tests/run-make/coverage/unused_mod.rs delete mode 100644 tests/run-make/coverage/uses_crate.rs delete mode 100644 tests/run-make/coverage/uses_inline_crate.rs delete mode 100644 tests/run-make/coverage/while.rs delete mode 100644 tests/run-make/coverage/while_early_ret.rs delete mode 100644 tests/run-make/coverage/yield.rs create mode 100644 tests/run-make/emit-to-stdout/Makefile create mode 100644 tests/run-make/emit-to-stdout/emit-link.stderr create mode 100644 tests/run-make/emit-to-stdout/emit-llvm-bc.stderr create mode 100644 tests/run-make/emit-to-stdout/emit-metadata.stderr create mode 100644 tests/run-make/emit-to-stdout/emit-multiple-types.stderr create mode 100644 tests/run-make/emit-to-stdout/emit-obj.stderr create mode 100644 tests/run-make/emit-to-stdout/test.rs create mode 100644 tests/run-make/optimization-remarks-dir/Makefile create mode 100644 tests/run-make/optimization-remarks-dir/foo.rs create mode 100644 tests/run-make/panic-abort-eh_frame/Makefile create mode 100644 tests/run-make/panic-abort-eh_frame/foo.rs create mode 100644 tests/run-make/rust-lld/Makefile create mode 100644 tests/run-make/rust-lld/main.rs create mode 100644 tests/run-make/target-specs/endianness-mismatch.json create mode 100644 tests/rustdoc-gui/fields.goml create mode 100644 tests/rustdoc-js-std/bufread-fill-buf.js create mode 100644 tests/rustdoc-js-std/osstring-to-string.js create mode 100644 tests/rustdoc-js-std/parser-slice-array.js create mode 100644 tests/rustdoc-js/generics-match-ambiguity.js create mode 100644 tests/rustdoc-js/generics-match-ambiguity.rs create mode 100644 tests/rustdoc-js/nested-unboxed.js create mode 100644 tests/rustdoc-js/nested-unboxed.rs create mode 100644 tests/rustdoc-js/never-search.js create mode 100644 tests/rustdoc-js/never-search.rs create mode 100644 tests/rustdoc/alias-reexport.rs create mode 100644 tests/rustdoc/alias-reexport2.rs create mode 100644 tests/rustdoc/auxiliary/alias-reexport.rs create mode 100644 tests/rustdoc/auxiliary/alias-reexport2.rs create mode 100644 tests/rustdoc/decl-line-wrapping-empty-arg-list.decl.html create mode 100644 tests/rustdoc/decl-line-wrapping-empty-arg-list.rs create mode 100644 tests/rustdoc/double-hyphen-to-dash.rs create mode 100644 tests/rustdoc/files-creation-hidden.rs create mode 100644 tests/rustdoc/files-creation-private.rs create mode 100644 tests/rustdoc/inline-private-with-intermediate-doc-hidden.rs create mode 100644 tests/rustdoc/inline_cross/assoc-const-equality.rs create mode 100644 tests/rustdoc/inline_cross/auxiliary/assoc-const-equality.rs create mode 100644 tests/rustdoc/intra-doc/issue-108459.rs create mode 100644 tests/rustdoc/issue-109449-doc-hidden-reexports.rs create mode 100644 tests/rustdoc/issue-111249-file-creation.rs create mode 100644 tests/rustdoc/issue-112515-impl-ty-alias.rs create mode 100644 tests/rustdoc/reexport-doc-hidden-inside-private.rs create mode 100644 tests/rustdoc/union-fields-html.rs create mode 100644 tests/rustdoc/where.SWhere_Echo_impl.html create mode 100644 tests/rustdoc/where.alpha_trait_decl.html create mode 100644 tests/rustdoc/where.bravo_trait_decl.html create mode 100644 tests/rustdoc/where.charlie_fn_decl.html create mode 100644 tests/rustdoc/where.golf_type_alias_decl.html create mode 100644 tests/ui-fulldeps/session-diagnostic/invalid-variable.rs create mode 100644 tests/ui/abi/issue-94223.rs create mode 100644 tests/ui/argument-suggestions/issue-112507.rs create mode 100644 tests/ui/argument-suggestions/issue-112507.stderr create mode 100644 tests/ui/asm/parse-error.rs create mode 100644 tests/ui/asm/parse-error.stderr delete mode 100644 tests/ui/asm/x86_64/parse-error.rs delete mode 100644 tests/ui/asm/x86_64/parse-error.stderr create mode 100644 tests/ui/asm/x86_64/x86_64_parse_error.rs create mode 100644 tests/ui/asm/x86_64/x86_64_parse_error.stderr create mode 100644 tests/ui/associated-consts/infer-placeholder-in-non-suggestable-pos.rs create mode 100644 tests/ui/associated-consts/infer-placeholder-in-non-suggestable-pos.stderr create mode 100644 tests/ui/associated-consts/issue-110933.rs create mode 100644 tests/ui/associated-inherent-types/dont-select-if-disabled.rs create mode 100644 tests/ui/associated-inherent-types/dont-select-if-disabled.stderr create mode 100644 tests/ui/associated-inherent-types/issue-109071.no_gate.stderr create mode 100644 tests/ui/associated-inherent-types/issue-109071.rs create mode 100644 tests/ui/associated-inherent-types/issue-109071.with_gate.stderr create mode 100644 tests/ui/associated-inherent-types/issue-111404-0.rs create mode 100644 tests/ui/associated-inherent-types/issue-111404-1.rs create mode 100644 tests/ui/associated-inherent-types/issue-111404-1.stderr create mode 100644 tests/ui/associated-type-bounds/implied-in-supertrait.rs create mode 100644 tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.current.stderr create mode 100644 tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.next.stderr delete mode 100644 tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.stderr create mode 100644 tests/ui/associated-type-bounds/return-type-notation/basic.current_with.stderr create mode 100644 tests/ui/associated-type-bounds/return-type-notation/basic.current_without.stderr create mode 100644 tests/ui/associated-type-bounds/return-type-notation/basic.next_with.stderr create mode 100644 tests/ui/associated-type-bounds/return-type-notation/basic.next_without.stderr create mode 100644 tests/ui/associated-type-bounds/return-type-notation/equality.current.stderr create mode 100644 tests/ui/associated-type-bounds/return-type-notation/equality.next.stderr delete mode 100644 tests/ui/associated-type-bounds/return-type-notation/equality.stderr create mode 100644 tests/ui/associated-types/dont-suggest-cyclic-constraint.rs create mode 100644 tests/ui/associated-types/dont-suggest-cyclic-constraint.stderr create mode 100644 tests/ui/async-await/deep-futures-are-freeze.rs delete mode 100644 tests/ui/async-await/in-trait/async-associated-types2.rs create mode 100644 tests/ui/async-await/in-trait/missing-feature-flag.current.stderr create mode 100644 tests/ui/async-await/in-trait/missing-feature-flag.next.stderr create mode 100644 tests/ui/async-await/in-trait/missing-feature-flag.rs create mode 100644 tests/ui/async-await/in-trait/normalize-opaque-with-bound-vars.rs create mode 100644 tests/ui/async-await/in-trait/return-not-existing-pair.current.stderr create mode 100644 tests/ui/async-await/in-trait/return-not-existing-pair.next.stderr create mode 100644 tests/ui/async-await/in-trait/return-not-existing-pair.rs create mode 100644 tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.current.stderr create mode 100644 tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.next.stderr create mode 100644 tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.rs create mode 100644 tests/ui/async-await/issue-78115.rs create mode 100644 tests/ui/async-await/return-type-notation/issue-110963-early.current.stderr create mode 100644 tests/ui/async-await/return-type-notation/issue-110963-early.next.stderr delete mode 100644 tests/ui/async-await/return-type-notation/issue-110963-early.stderr create mode 100644 tests/ui/async-await/return-type-notation/issue-110963-late.current.stderr create mode 100644 tests/ui/async-await/return-type-notation/issue-110963-late.next.stderr delete mode 100644 tests/ui/async-await/return-type-notation/issue-110963-late.stderr create mode 100644 tests/ui/async-await/return-type-notation/rtn-implied-in-supertrait.rs create mode 100644 tests/ui/async-await/return-type-notation/rtn-implied-in-supertrait.stderr create mode 100644 tests/ui/async-await/return-type-notation/rtn-in-impl-signature.rs create mode 100644 tests/ui/async-await/return-type-notation/rtn-in-impl-signature.stderr create mode 100644 tests/ui/async-await/return-type-notation/super-method-bound.current.stderr create mode 100644 tests/ui/async-await/return-type-notation/super-method-bound.next.stderr delete mode 100644 tests/ui/async-await/return-type-notation/super-method-bound.stderr create mode 100644 tests/ui/async-await/return-type-notation/supertrait-bound.current.stderr create mode 100644 tests/ui/async-await/return-type-notation/supertrait-bound.next.stderr delete mode 100644 tests/ui/async-await/return-type-notation/supertrait-bound.stderr create mode 100644 tests/ui/async-await/return-type-notation/ty-or-ct-params.current.stderr create mode 100644 tests/ui/async-await/return-type-notation/ty-or-ct-params.next.stderr create mode 100644 tests/ui/async-await/return-type-notation/ty-or-ct-params.rs create mode 100644 tests/ui/attributes/doc-test-literal.rs create mode 100644 tests/ui/attributes/doc-test-literal.stderr create mode 100644 tests/ui/auto-traits/issue-23080-2.current.stderr create mode 100644 tests/ui/auto-traits/issue-23080-2.next.stderr delete mode 100644 tests/ui/auto-traits/issue-23080-2.stderr create mode 100644 tests/ui/autoref-autoderef/deref-ambiguity-becomes-nonambiguous.rs create mode 100644 tests/ui/autoref-autoderef/deref-ambiguity-becomes-nonambiguous.stderr create mode 100644 tests/ui/borrowck/issue-111554.rs create mode 100644 tests/ui/borrowck/issue-111554.stderr create mode 100644 tests/ui/cfg/auxiliary/cfg_false_lib_no_std_after.rs create mode 100644 tests/ui/cfg/auxiliary/cfg_false_lib_no_std_before.rs create mode 100644 tests/ui/cfg/auxiliary/cfged_out.rs create mode 100644 tests/ui/cfg/cfg_false_no_std-1.rs create mode 100644 tests/ui/cfg/cfg_false_no_std-2.rs create mode 100644 tests/ui/cfg/diagnostics-cross-crate.rs create mode 100644 tests/ui/cfg/diagnostics-cross-crate.stderr create mode 100644 tests/ui/cfg/diagnostics-not-a-def.rs create mode 100644 tests/ui/cfg/diagnostics-not-a-def.stderr create mode 100644 tests/ui/cfg/diagnostics-reexport.rs create mode 100644 tests/ui/cfg/diagnostics-reexport.stderr create mode 100644 tests/ui/cfg/diagnostics-same-crate.rs create mode 100644 tests/ui/cfg/diagnostics-same-crate.stderr delete mode 100644 tests/ui/chalkify/arithmetic.rs delete mode 100644 tests/ui/chalkify/assert.rs delete mode 100644 tests/ui/chalkify/basic.rs delete mode 100644 tests/ui/chalkify/bugs/async.rs delete mode 100644 tests/ui/chalkify/bugs/async.stderr delete mode 100644 tests/ui/chalkify/builtin-copy-clone.rs delete mode 100644 tests/ui/chalkify/chalk_initial_program.rs delete mode 100644 tests/ui/chalkify/chalk_initial_program.stderr delete mode 100644 tests/ui/chalkify/closure.rs delete mode 100644 tests/ui/chalkify/closure.stderr delete mode 100644 tests/ui/chalkify/generic_impls.rs delete mode 100644 tests/ui/chalkify/generic_impls.stderr delete mode 100644 tests/ui/chalkify/impl_wf.rs delete mode 100644 tests/ui/chalkify/impl_wf.stderr delete mode 100644 tests/ui/chalkify/impl_wf_2.rs delete mode 100644 tests/ui/chalkify/impl_wf_2.stderr delete mode 100644 tests/ui/chalkify/inherent_impl.rs delete mode 100644 tests/ui/chalkify/inherent_impl_min.rs delete mode 100644 tests/ui/chalkify/lower_env1.rs delete mode 100644 tests/ui/chalkify/lower_env2.rs delete mode 100644 tests/ui/chalkify/lower_env3.rs delete mode 100644 tests/ui/chalkify/lower_impl.rs delete mode 100644 tests/ui/chalkify/lower_struct.rs delete mode 100644 tests/ui/chalkify/lower_trait.rs delete mode 100644 tests/ui/chalkify/lower_trait_higher_rank.rs delete mode 100644 tests/ui/chalkify/lower_trait_where_clause.rs delete mode 100644 tests/ui/chalkify/println.rs delete mode 100644 tests/ui/chalkify/projection.rs delete mode 100644 tests/ui/chalkify/recursive_where_clause_on_type.rs delete mode 100644 tests/ui/chalkify/recursive_where_clause_on_type.stderr delete mode 100644 tests/ui/chalkify/super_trait.rs delete mode 100644 tests/ui/chalkify/trait-objects.rs delete mode 100644 tests/ui/chalkify/trait_implied_bound.rs delete mode 100644 tests/ui/chalkify/type_implied_bound.rs delete mode 100644 tests/ui/chalkify/type_inference.rs delete mode 100644 tests/ui/chalkify/type_inference.stderr delete mode 100644 tests/ui/chalkify/type_wf.rs delete mode 100644 tests/ui/chalkify/type_wf.stderr create mode 100644 tests/ui/closures/cannot-call-unsized-via-ptr-2.rs create mode 100644 tests/ui/closures/cannot-call-unsized-via-ptr-2.stderr create mode 100644 tests/ui/closures/cannot-call-unsized-via-ptr.rs create mode 100644 tests/ui/closures/cannot-call-unsized-via-ptr.stderr create mode 100644 tests/ui/closures/issue-111932.rs create mode 100644 tests/ui/closures/issue-111932.stderr create mode 100644 tests/ui/closures/issue-113087.rs create mode 100644 tests/ui/closures/issue-113087.stderr create mode 100644 tests/ui/codegen/subtyping-enforces-type-equality.rs create mode 100644 tests/ui/codegen/subtyping-enforces-type-equality.stderr create mode 100644 tests/ui/codegen/subtyping-impacts-selection-1.rs create mode 100644 tests/ui/codegen/subtyping-impacts-selection-2.rs create mode 100644 tests/ui/coercion/issue-3794.rs delete mode 100644 tests/ui/coherence/coherence-inherited-subtyping.old.stderr delete mode 100644 tests/ui/coherence/coherence-inherited-subtyping.re.stderr create mode 100644 tests/ui/coherence/coherence-inherited-subtyping.stderr create mode 100644 tests/ui/const-generics/const-param-with-additional-obligations.rs create mode 100644 tests/ui/const-generics/const-param-with-additional-obligations.stderr create mode 100644 tests/ui/const-generics/defaults/default-param-wf-concrete.next.stderr create mode 100644 tests/ui/const-generics/defaults/default-param-wf-concrete.old.stderr delete mode 100644 tests/ui/const-generics/defaults/default-param-wf-concrete.stderr create mode 100644 tests/ui/const-generics/generic_const_exprs/inline-const-in-const-generic-defaults.rs create mode 100644 tests/ui/const-generics/generic_const_exprs/issue-109141.rs create mode 100644 tests/ui/const-generics/generic_const_exprs/issue-109141.stderr create mode 100644 tests/ui/const-generics/generic_const_exprs/issue-96699.rs create mode 100644 tests/ui/const-generics/issue-112505-overflow.rs create mode 100644 tests/ui/const-generics/issue-112505-overflow.stderr create mode 100644 tests/ui/const-generics/std/const-generics-range.full.stderr create mode 100644 tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.allow.stderr delete mode 100644 tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.stderr create mode 100644 tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.warn.stderr create mode 100644 tests/ui/consts/const-len-underflow-separate-spans.next.stderr create mode 100644 tests/ui/consts/const-len-underflow-separate-spans.old.stderr delete mode 100644 tests/ui/consts/const-len-underflow-separate-spans.stderr delete mode 100644 tests/ui/consts/const_limit/const_eval_limit_not_reached.rs delete mode 100644 tests/ui/consts/const_limit/const_eval_limit_overflow.rs delete mode 100644 tests/ui/consts/const_limit/const_eval_limit_overflow.stderr delete mode 100644 tests/ui/consts/const_limit/const_eval_limit_reached.rs delete mode 100644 tests/ui/consts/const_limit/const_eval_limit_reached.stderr delete mode 100644 tests/ui/consts/const_limit/feature-gate-const_eval_limit.rs delete mode 100644 tests/ui/consts/const_limit/feature-gate-const_eval_limit.stderr create mode 100644 tests/ui/consts/issue-16538.mir.stderr create mode 100644 tests/ui/consts/issue-16538.rs create mode 100644 tests/ui/consts/issue-16538.thir.stderr create mode 100644 tests/ui/consts/issue-28822.rs create mode 100644 tests/ui/consts/issue-29798.rs create mode 100644 tests/ui/consts/missing-larger-array-impl.rs create mode 100644 tests/ui/consts/missing-larger-array-impl.stderr create mode 100644 tests/ui/consts/timeout.rs create mode 100644 tests/ui/consts/timeout.stderr delete mode 100644 tests/ui/discrim/discrim-ill-typed.rs delete mode 100644 tests/ui/discrim/discrim-ill-typed.stderr delete mode 100644 tests/ui/discrim/discrim-overflow-2.rs delete mode 100644 tests/ui/discrim/discrim-overflow-2.stderr delete mode 100644 tests/ui/discrim/discrim-overflow.rs delete mode 100644 tests/ui/discrim/discrim-overflow.stderr delete mode 100644 tests/ui/dyn-star/param-env-infer.current.stderr delete mode 100644 tests/ui/dyn-star/param-env-infer.next.stderr delete mode 100644 tests/ui/dyn-star/param-env-infer.rs create mode 100644 tests/ui/dyn-star/param-env-region-infer.current.stderr create mode 100644 tests/ui/dyn-star/param-env-region-infer.next.stderr create mode 100644 tests/ui/dyn-star/param-env-region-infer.rs create mode 100644 tests/ui/enum-discriminant/discriminant-ill-typed.rs create mode 100644 tests/ui/enum-discriminant/discriminant-ill-typed.stderr create mode 100644 tests/ui/enum-discriminant/discriminant-overflow-2.rs create mode 100644 tests/ui/enum-discriminant/discriminant-overflow-2.stderr create mode 100644 tests/ui/enum-discriminant/discriminant-overflow.rs create mode 100644 tests/ui/enum-discriminant/discriminant-overflow.stderr create mode 100644 tests/ui/enum-discriminant/issue-50689.rs create mode 100644 tests/ui/explicit-tail-calls/become-outside.array.stderr create mode 100644 tests/ui/explicit-tail-calls/become-outside.constant.stderr create mode 100644 tests/ui/explicit-tail-calls/become-outside.rs create mode 100644 tests/ui/explicit-tail-calls/return-lifetime-sub.rs create mode 100644 tests/ui/explicit-tail-calls/return-mismatches.rs create mode 100644 tests/ui/explicit-tail-calls/return-mismatches.stderr create mode 100644 tests/ui/extern/issue-112363-extern-item-where-clauses-debug-ice.rs create mode 100644 tests/ui/extern/issue-112363-extern-item-where-clauses-debug-ice.stderr create mode 100644 tests/ui/extern/issue-1251.rs create mode 100644 tests/ui/feature-gates/feature-gate-explicit_tail_calls.rs create mode 100644 tests/ui/feature-gates/feature-gate-explicit_tail_calls.stderr create mode 100644 tests/ui/feature-gates/feature-gate-return_type_notation.cfg_current.stderr create mode 100644 tests/ui/feature-gates/feature-gate-return_type_notation.cfg_next.stderr create mode 100644 tests/ui/feature-gates/feature-gate-return_type_notation.no_current.stderr create mode 100644 tests/ui/feature-gates/feature-gate-return_type_notation.no_next.stderr create mode 100644 tests/ui/feature-gates/feature-gate-type_privacy_lints.rs create mode 100644 tests/ui/feature-gates/feature-gate-type_privacy_lints.stderr create mode 100644 tests/ui/for-loop-while/issue-1257.rs create mode 100644 tests/ui/for/issue-20605.current.stderr create mode 100644 tests/ui/for/issue-20605.next.stderr create mode 100644 tests/ui/for/issue-20605.rs create mode 100644 tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.rs create mode 100644 tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.stderr create mode 100644 tests/ui/generic-associated-types/issue-90014-tait.rs create mode 100644 tests/ui/generic-associated-types/issue-90014-tait.stderr create mode 100644 tests/ui/generic-associated-types/issue-90014-tait2.rs create mode 100644 tests/ui/generic-associated-types/issue-90014-tait2.stderr delete mode 100644 tests/ui/higher-lifetime-bounds.rs delete mode 100644 tests/ui/higher-lifetime-bounds.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/complex.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/due-to-where-clause.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/due-to-where-clause.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/fn-ptr.classic.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/fn-ptr.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hang-on-deeply-nested-dyn.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hang-on-deeply-nested-dyn.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-binder-levels-in-object-types.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-cache-issue-54302.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-cache-issue-54302.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-conflate-regions.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-conflate-regions.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-debruijn-in-receiver.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-debruijn-in-receiver.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-debruijn-object-types-in-closures.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-fn.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-fn.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-contravariant.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-contravariant.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-covariant.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-invariant.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-invariant.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-fn-like-trait-object.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-fn-like-trait.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits-transitive.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits-transitive.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-identity-fn-borrows.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-identity-fn-borrows.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-just-for-static.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-just-for-static.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-malformed-lifetime-generics.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-malformed-lifetime-generics.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-opt-in-copy.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-parse.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-perfect-forwarding.polonius.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-perfect-forwarding.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-perfect-forwarding.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-precedence-of-plus-where-clause.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-precedence-of-plus.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-resolve-lifetime.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-trait-object-paren-notation.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-trait-object-passed-to-closure.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-type-outlives.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-unboxed-closure-trait.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-wrong-kind.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/hrtb-wrong-kind.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-100689.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-102899.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-30786.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-30786.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-36139-normalize-closure-sig.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-39292.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-42114.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-43623.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-46989.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-46989.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-57639.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-58451.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-58451.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-59311.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-59311.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-60283.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-62203-hrtb-ice.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-62203-hrtb-ice.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-88446.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-88586-hr-self-outlives-in-trait-def.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-90177.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-95034.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-95230.new.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/issue-95230.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-44005.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-56556.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-1.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-2.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-3.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-3.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-4.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-5.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-6.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-70120.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-71955.migrate.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-71955.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-71955.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-74261.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-76956.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-80706.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-80956.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-81809.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-85455.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-85455.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89118.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89118.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89436.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90612.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90638.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90875.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90950.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90950.stderr delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/norm-before-method-resolution.rs delete mode 100644 tests/ui/higher-rank-trait-bounds/normalize-under-binder/norm-before-method-resolution.stderr create mode 100644 tests/ui/higher-ranked/higher-lifetime-bounds.rs create mode 100644 tests/ui/higher-ranked/higher-lifetime-bounds.stderr create mode 100644 tests/ui/higher-ranked/leak-check-in-selection.rs create mode 100644 tests/ui/higher-ranked/subtype/hr-subtype.bound_a_b_ret_a_vs_bound_a_ret_a.stderr create mode 100644 tests/ui/higher-ranked/subtype/hr-subtype.bound_a_vs_free_x.stderr create mode 100644 tests/ui/higher-ranked/subtype/hr-subtype.bound_inv_a_b_vs_bound_inv_a.stderr create mode 100644 tests/ui/higher-ranked/subtype/hr-subtype.free_inv_x_vs_free_inv_y.stderr create mode 100644 tests/ui/higher-ranked/subtype/hr-subtype.free_x_vs_free_y.stderr create mode 100644 tests/ui/higher-ranked/subtype/hr-subtype.rs create mode 100644 tests/ui/higher-ranked/subtype/placeholder-pattern-fail.rs create mode 100644 tests/ui/higher-ranked/subtype/placeholder-pattern-fail.stderr create mode 100644 tests/ui/higher-ranked/subtype/placeholder-pattern.rs create mode 100644 tests/ui/higher-ranked/subtype/return-static.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/complex.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/due-to-where-clause.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/due-to-where-clause.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/fn-ptr.classic.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/fn-ptr.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/future.classic.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/future.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hang-on-deeply-nested-dyn.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hang-on-deeply-nested-dyn.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-binder-levels-in-object-types.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-cache-issue-54302.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-cache-issue-54302.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-conflate-regions.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-conflate-regions.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-debruijn-in-receiver.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-debruijn-in-receiver.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-debruijn-object-types-in-closures.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-fn.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-fn.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-contravariant.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-contravariant.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-covariant.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-invariant.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-invariant.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-fn-like-trait-object.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-fn-like-trait.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits-transitive.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits-transitive.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-identity-fn-borrows.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-identity-fn-borrows.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-just-for-static.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-just-for-static.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-malformed-lifetime-generics.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-malformed-lifetime-generics.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-opt-in-copy.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-parse.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-perfect-forwarding.polonius.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-perfect-forwarding.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-perfect-forwarding.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-precedence-of-plus-where-clause.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-precedence-of-plus.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-resolve-lifetime.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-trait-object-paren-notation.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-trait-object-passed-to-closure.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-type-outlives.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-unboxed-closure-trait.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-wrong-kind.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/hrtb-wrong-kind.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-100689.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-102899.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-30786.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-30786.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-36139-normalize-closure-sig.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-39292.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-42114.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-43623.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-46989.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-46989.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-57639.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-58451.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-58451.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-59311.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-59311.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-60283.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-62203-hrtb-ice.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-62203-hrtb-ice.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-88446.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-88586-hr-self-outlives-in-trait-def.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-90177.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-95034.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-95230.next.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/issue-95230.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-44005.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-56556.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-1.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-2.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-3.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-3.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-4.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-5.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-6.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-70120.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-71955.migrate.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-71955.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-71955.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-74261.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-76956.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-80706.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-80956.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-81809.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-85455.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-85455.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-89118.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-89118.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-89436.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90612.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90638.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90875.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90950.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90950.stderr create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.rs create mode 100644 tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.stderr delete mode 100644 tests/ui/hr-subtype/hr-subtype.bound_a_b_ret_a_vs_bound_a_ret_a.stderr delete mode 100644 tests/ui/hr-subtype/hr-subtype.bound_a_vs_free_x.stderr delete mode 100644 tests/ui/hr-subtype/hr-subtype.bound_inv_a_b_vs_bound_inv_a.stderr delete mode 100644 tests/ui/hr-subtype/hr-subtype.free_inv_x_vs_free_inv_y.stderr delete mode 100644 tests/ui/hr-subtype/hr-subtype.free_x_vs_free_y.stderr delete mode 100644 tests/ui/hr-subtype/hr-subtype.rs delete mode 100644 tests/ui/hr-subtype/placeholder-pattern-fail.rs delete mode 100644 tests/ui/hr-subtype/placeholder-pattern-fail.stderr delete mode 100644 tests/ui/hr-subtype/placeholder-pattern.rs delete mode 100644 tests/ui/hr-subtype/return-static.rs create mode 100644 tests/ui/impl-trait/coherence-treats-tait-ambig.current.stderr create mode 100644 tests/ui/impl-trait/coherence-treats-tait-ambig.next.stderr create mode 100644 tests/ui/impl-trait/coherence-treats-tait-ambig.rs create mode 100644 tests/ui/impl-trait/defined-by-trait-resolution.rs create mode 100644 tests/ui/impl-trait/dont-suggest-box-on-empty-else-arm.rs create mode 100644 tests/ui/impl-trait/dont-suggest-box-on-empty-else-arm.stderr create mode 100644 tests/ui/impl-trait/in-trait/method-signature-matches.lt.stderr create mode 100644 tests/ui/impl-trait/in-trait/method-signature-matches.mismatch.stderr create mode 100644 tests/ui/impl-trait/in-trait/method-signature-matches.mismatch_async.stderr delete mode 100644 tests/ui/impl-trait/in-trait/method-signature-matches.stderr create mode 100644 tests/ui/impl-trait/in-trait/method-signature-matches.too_few.stderr create mode 100644 tests/ui/impl-trait/in-trait/method-signature-matches.too_many.stderr create mode 100644 tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.current.stderr create mode 100644 tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.next.stderr create mode 100644 tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.rs create mode 100644 tests/ui/impl-trait/in-trait/suggest-missing-item.fixed create mode 100644 tests/ui/impl-trait/in-trait/suggest-missing-item.rs create mode 100644 tests/ui/impl-trait/in-trait/suggest-missing-item.stderr create mode 100644 tests/ui/impl-trait/in-trait/unconstrained-lt.current.stderr create mode 100644 tests/ui/impl-trait/in-trait/unconstrained-lt.next.stderr create mode 100644 tests/ui/impl-trait/in-trait/unconstrained-lt.rs create mode 100644 tests/ui/impl-trait/in-trait/variances-of-gat.rs create mode 100644 tests/ui/impl-trait/issues/issue-78722-2.rs create mode 100644 tests/ui/impl-trait/issues/issue-78722-2.stderr create mode 100644 tests/ui/impl-trait/normalize-opaque-with-bound-vars.rs delete mode 100644 tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle-2.stderr create mode 100644 tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration.stderr create mode 100644 tests/ui/impl-trait/reveal-during-codegen.rs create mode 100644 tests/ui/impl-trait/static-lifetime-return-position-impl-trait.rs create mode 100644 tests/ui/implied-bounds/implied-bounds-unconstrained-1.rs create mode 100644 tests/ui/implied-bounds/implied-bounds-unconstrained-2.rs create mode 100644 tests/ui/implied-bounds/references-err.rs create mode 100644 tests/ui/implied-bounds/references-err.stderr create mode 100644 tests/ui/imports/auxiliary/issue-85992-extern-1.rs create mode 100644 tests/ui/imports/auxiliary/issue-85992-extern-2.rs create mode 100644 tests/ui/imports/issue-85992.rs create mode 100644 tests/ui/imports/issue-85992.stderr create mode 100644 tests/ui/inline-const/elided-lifetime-being-infer-vars.rs delete mode 100644 tests/ui/issue-94866.rs delete mode 100644 tests/ui/issue-94866.stderr delete mode 100644 tests/ui/issues/issue-1251.rs delete mode 100644 tests/ui/issues/issue-1257.rs delete mode 100644 tests/ui/issues/issue-16538.mir.stderr delete mode 100644 tests/ui/issues/issue-16538.rs delete mode 100644 tests/ui/issues/issue-16538.thir.stderr delete mode 100644 tests/ui/issues/issue-1871.rs delete mode 100644 tests/ui/issues/issue-1871.stderr delete mode 100644 tests/ui/issues/issue-20605.rs delete mode 100644 tests/ui/issues/issue-20605.stderr delete mode 100644 tests/ui/issues/issue-2063-resource.rs delete mode 100644 tests/ui/issues/issue-2063.rs delete mode 100644 tests/ui/issues/issue-28822.rs delete mode 100644 tests/ui/issues/issue-29798.rs delete mode 100644 tests/ui/issues/issue-3008-1.rs delete mode 100644 tests/ui/issues/issue-3008-1.stderr delete mode 100644 tests/ui/issues/issue-3008-2.rs delete mode 100644 tests/ui/issues/issue-3008-2.stderr delete mode 100644 tests/ui/issues/issue-3008-3.rs delete mode 100644 tests/ui/issues/issue-3008-3.stderr delete mode 100644 tests/ui/issues/issue-3794.rs delete mode 100644 tests/ui/issues/issue-50689.rs delete mode 100644 tests/ui/issues/issue-50825-1.rs delete mode 100644 tests/ui/issues/issue-50825.rs delete mode 100644 tests/ui/issues/issue-78115.rs create mode 100644 tests/ui/layout/cannot-transmute-unnormalizable-type.rs create mode 100644 tests/ui/layout/cannot-transmute-unnormalizable-type.stderr create mode 100644 tests/ui/linkage-attr/incompatible-flavor.rs create mode 100644 tests/ui/linkage-attr/incompatible-flavor.stderr create mode 100644 tests/ui/linkage-attr/unstable-flavor.bpf.stderr create mode 100644 tests/ui/linkage-attr/unstable-flavor.ptx.stderr create mode 100644 tests/ui/linkage-attr/unstable-flavor.rs create mode 100644 tests/ui/lint/invalid-nan-comparison-suggestion.fixed create mode 100644 tests/ui/lint/invalid-nan-comparison-suggestion.rs create mode 100644 tests/ui/lint/invalid-nan-comparison-suggestion.stderr create mode 100644 tests/ui/lint/invalid-nan-comparison.rs create mode 100644 tests/ui/lint/invalid-nan-comparison.stderr create mode 100644 tests/ui/lint/invalid_from_utf8.rs create mode 100644 tests/ui/lint/invalid_from_utf8.stderr create mode 100644 tests/ui/lint/issue-99387.stderr create mode 100644 tests/ui/lint/lint-ctypes-113436-1.rs create mode 100644 tests/ui/lint/lint-ctypes-113436-1.stderr create mode 100644 tests/ui/lint/lint-ctypes-113436.rs create mode 100644 tests/ui/lint/lint-ctypes-113900.rs create mode 100644 tests/ui/lint/lint-ctypes-94223.rs create mode 100644 tests/ui/lint/lint-ctypes-94223.stderr create mode 100644 tests/ui/lint/reference_casting.rs create mode 100644 tests/ui/lint/reference_casting.stderr create mode 100644 tests/ui/lint/undropped_manually_drops.rs create mode 100644 tests/ui/lint/undropped_manually_drops.stderr create mode 100644 tests/ui/lint/unused/must-use-block-expr.fixed create mode 100644 tests/ui/lint/unused/must-use-block-expr.rs create mode 100644 tests/ui/lint/unused/must-use-block-expr.stderr create mode 100644 tests/ui/loops/dont-suggest-break-thru-item.rs create mode 100644 tests/ui/loops/dont-suggest-break-thru-item.stderr create mode 100644 tests/ui/macros/issue-112342-1.rs create mode 100644 tests/ui/macros/issue-112342-1.stderr create mode 100644 tests/ui/macros/issue-112342-2.rs create mode 100644 tests/ui/macros/issue-112342-2.stderr create mode 100644 tests/ui/match/issue-112438.rs create mode 100644 tests/ui/match/issue-113012.rs create mode 100644 tests/ui/mir/issue-112269.rs create mode 100644 tests/ui/mir/issue-112269.stderr create mode 100644 tests/ui/mismatched_types/issue-112036.rs create mode 100644 tests/ui/mismatched_types/issue-112036.stderr create mode 100644 tests/ui/mismatched_types/suggest-option-asderef-inference-var.rs create mode 100644 tests/ui/mismatched_types/suggest-option-asderef-inference-var.stderr create mode 100644 tests/ui/mismatched_types/suggest-option-asderef-unfixable.rs create mode 100644 tests/ui/mismatched_types/suggest-option-asderef-unfixable.stderr create mode 100644 tests/ui/mismatched_types/suggest-option-asderef.fixed create mode 100644 tests/ui/mismatched_types/suggest-option-asderef.rs create mode 100644 tests/ui/mismatched_types/suggest-option-asderef.stderr create mode 100644 tests/ui/nll/issue-112604-closure-output-normalize.rs delete mode 100644 tests/ui/object-safety/assoc_type_bounds_sized.stderr create mode 100644 tests/ui/object-safety/assoc_type_bounds_sized_others.rs create mode 100644 tests/ui/object-safety/assoc_type_bounds_sized_others.stderr create mode 100644 tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.rs create mode 100644 tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.stderr create mode 100644 tests/ui/object-safety/assoc_type_bounds_sized_used.rs create mode 100644 tests/ui/object-safety/assoc_type_bounds_sized_used.stderr create mode 100644 tests/ui/offset-of/offset-of-must-use.rs create mode 100644 tests/ui/offset-of/offset-of-must-use.stderr create mode 100644 tests/ui/offset-of/offset-of-tuple-nested.rs create mode 100644 tests/ui/offset-of/offset-of-tuple.rs create mode 100644 tests/ui/offset-of/offset-of-tuple.stderr create mode 100644 tests/ui/offset-of/offset-of-unsized.rs create mode 100644 tests/ui/parser/issue-112188.fixed create mode 100644 tests/ui/parser/issue-112188.rs create mode 100644 tests/ui/parser/issue-112188.stderr create mode 100644 tests/ui/parser/issue-113342.rs create mode 100644 tests/ui/parser/issue-113342.stderr create mode 100644 tests/ui/parser/issues/issue-111692.rs create mode 100644 tests/ui/parser/issues/issue-111692.stderr create mode 100644 tests/ui/parser/issues/issue-112458.rs create mode 100644 tests/ui/parser/issues/issue-112458.stderr create mode 100644 tests/ui/parser/lit-err-in-macro.rs create mode 100644 tests/ui/parser/lit-err-in-macro.stderr create mode 100644 tests/ui/parser/typod-const-in-const-param-def.rs create mode 100644 tests/ui/parser/typod-const-in-const-param-def.stderr create mode 100644 tests/ui/pattern/byte-string-inference.rs create mode 100644 tests/ui/pattern/issue-110508.rs create mode 100644 tests/ui/pattern/issue-94866.rs create mode 100644 tests/ui/pattern/issue-94866.stderr create mode 100644 tests/ui/privacy/effective_visibilities_full_priv.rs create mode 100644 tests/ui/privacy/effective_visibilities_full_priv.stderr create mode 100644 tests/ui/privacy/sealed-traits/private-trait-non-local.rs create mode 100644 tests/ui/privacy/sealed-traits/private-trait-non-local.stderr create mode 100644 tests/ui/privacy/sealed-traits/private-trait.rs create mode 100644 tests/ui/privacy/sealed-traits/private-trait.stderr create mode 100644 tests/ui/privacy/sealed-traits/re-exported-trait.fixed create mode 100644 tests/ui/privacy/sealed-traits/re-exported-trait.rs create mode 100644 tests/ui/privacy/sealed-traits/re-exported-trait.stderr create mode 100644 tests/ui/privacy/sealed-traits/sealed-trait-local.rs create mode 100644 tests/ui/privacy/sealed-traits/sealed-trait-local.stderr create mode 100644 tests/ui/privacy/unnameable_types.rs create mode 100644 tests/ui/privacy/unnameable_types.stderr create mode 100644 tests/ui/proc-macro/auxiliary/exports_no_mangle.rs create mode 100644 tests/ui/proc-macro/no-mangle-in-proc-macro-issue-111888.rs create mode 100644 tests/ui/resolve/auxiliary/issue-112831-aux.rs create mode 100644 tests/ui/resolve/export-fully-qualified-2018.rs create mode 100644 tests/ui/resolve/export-fully-qualified-2018.stderr create mode 100644 tests/ui/resolve/hidden_glob_reexports.rs create mode 100644 tests/ui/resolve/hidden_glob_reexports.stderr create mode 100644 tests/ui/resolve/issue-109153.rs create mode 100644 tests/ui/resolve/issue-109153.stderr create mode 100644 tests/ui/resolve/issue-112472-multi-generics-suggestion.fixed create mode 100644 tests/ui/resolve/issue-112472-multi-generics-suggestion.rs create mode 100644 tests/ui/resolve/issue-112472-multi-generics-suggestion.stderr create mode 100644 tests/ui/resolve/issue-112831.rs delete mode 100644 tests/ui/rfc-0107-bind-by-move-pattern-guards/bind-by-move-no-guards.rs delete mode 100644 tests/ui/rfc-0107-bind-by-move-pattern-guards/former-E0008-now-pass.rs delete mode 100644 tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-basic-examples.rs delete mode 100644 tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.rs delete mode 100644 tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.stderr delete mode 100644 tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.rs delete mode 100644 tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-embedded.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-param.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-embedded.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-param.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/allow-use-behind-cousin-variant.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/feature-gate.no_gate.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/feature-gate.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/feature-gate.with_gate.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/fn-ptr-is-structurally-matchable.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/issue-6804.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/issue-6804.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/match-empty-array-allowed-without-eq-issue-62336.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.rs delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.stderr delete mode 100644 tests/ui/rfc-1445-restrict-constants-in-patterns/phantom-data-is-structurally-matchable.rs delete mode 100644 tests/ui/rfc-1717-dllimport/missing-link-attr.rs delete mode 100644 tests/ui/rfc-1717-dllimport/missing-link-attr.stderr delete mode 100644 tests/ui/rfc-1717-dllimport/multiple-renames.rs delete mode 100644 tests/ui/rfc-1717-dllimport/multiple-renames.stderr delete mode 100644 tests/ui/rfc-1717-dllimport/rename-modifiers.rs delete mode 100644 tests/ui/rfc-1717-dllimport/rename-modifiers.stderr delete mode 100644 tests/ui/rfc-1717-dllimport/rename-to-empty.rs delete mode 100644 tests/ui/rfc-1717-dllimport/rename-to-empty.stderr delete mode 100644 tests/ui/rfc-1937-termination-trait/issue-103052-1.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/issue-103052-1.stderr delete mode 100644 tests/ui/rfc-1937-termination-trait/issue-103052-2.current.stderr delete mode 100644 tests/ui/rfc-1937-termination-trait/issue-103052-2.next.stderr delete mode 100644 tests/ui/rfc-1937-termination-trait/issue-103052-2.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-for-never.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-for-str.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-impl-trait.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-impl-trait.stderr delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-in-test-should-panic.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-in-test-should-panic.stderr delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-in-test.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-main-i32.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-main-i32.stderr delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-main-wrong-type.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-main-wrong-type.stderr delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-not-satisfied.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-not-satisfied.stderr delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-test-wrong-type.rs delete mode 100644 tests/ui/rfc-1937-termination-trait/termination-trait-test-wrong-type.stderr delete mode 100644 tests/ui/rfc-2005-default-binding-mode/borrowck-issue-49631.rs delete mode 100644 tests/ui/rfc-2005-default-binding-mode/borrowck-issue-49631.stderr delete mode 100644 tests/ui/rfc-2005-default-binding-mode/const.rs delete mode 100644 tests/ui/rfc-2005-default-binding-mode/const.stderr delete mode 100644 tests/ui/rfc-2005-default-binding-mode/enum.rs delete mode 100644 tests/ui/rfc-2005-default-binding-mode/enum.stderr delete mode 100644 tests/ui/rfc-2005-default-binding-mode/explicit-mut.rs delete mode 100644 tests/ui/rfc-2005-default-binding-mode/explicit-mut.stderr delete mode 100644 tests/ui/rfc-2005-default-binding-mode/for.rs delete mode 100644 tests/ui/rfc-2005-default-binding-mode/for.stderr delete mode 100644 tests/ui/rfc-2005-default-binding-mode/issue-44912-or.rs delete mode 100644 tests/ui/rfc-2005-default-binding-mode/issue-44912-or.stderr delete mode 100644 tests/ui/rfc-2005-default-binding-mode/lit.rs delete mode 100644 tests/ui/rfc-2005-default-binding-mode/lit.stderr delete mode 100644 tests/ui/rfc-2005-default-binding-mode/no-double-error.rs delete mode 100644 tests/ui/rfc-2005-default-binding-mode/no-double-error.stderr delete mode 100644 tests/ui/rfc-2005-default-binding-mode/slice.rs delete mode 100644 tests/ui/rfc-2005-default-binding-mode/slice.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/auxiliary/enums.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/auxiliary/monovariants.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/auxiliary/structs.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/auxiliary/unstable.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/auxiliary/variants.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/borrowck-exhaustive.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/borrowck-non-exhaustive.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/borrowck-non-exhaustive.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/enum-as-cast.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/enum-as-cast.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/enum.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/enum.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/enum_same_crate.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/enum_same_crate_empty_match.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/enum_same_crate_empty_match.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/improper_ctypes/auxiliary/types.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/improper_ctypes/same_crate_proper.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/invalid-attribute.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/invalid-attribute.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/omitted-patterns.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/omitted-patterns.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/stable-omitted-patterns.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/stable-omitted-patterns.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/struct.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/struct.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/structs_same_crate.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/auxiliary/uninhabited.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns_same_crate.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/match.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/match.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/match_same_crate.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/match_same_crate.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns_same_crate.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/patterns.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/variant.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/variant.stderr delete mode 100644 tests/ui/rfc-2008-non-exhaustive/variants_fictive_visibility.rs delete mode 100644 tests/ui/rfc-2008-non-exhaustive/variants_same_crate.rs delete mode 100644 tests/ui/rfc-2027-object-safe-for-dispatch/downcast-unsafe-trait-objects.rs delete mode 100644 tests/ui/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs delete mode 100644 tests/ui/rfc-2027-object-safe-for-dispatch/static-dispatch-unsafe-object.rs delete mode 100644 tests/ui/rfc-2091-track-caller/call-chain.rs delete mode 100644 tests/ui/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.rs delete mode 100644 tests/ui/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.stderr delete mode 100644 tests/ui/rfc-2091-track-caller/caller-location-intrinsic.rs delete mode 100644 tests/ui/rfc-2091-track-caller/const-caller-location.rs delete mode 100644 tests/ui/rfc-2091-track-caller/diverging-caller-location.rs delete mode 100644 tests/ui/rfc-2091-track-caller/error-odd-syntax.rs delete mode 100644 tests/ui/rfc-2091-track-caller/error-odd-syntax.stderr delete mode 100644 tests/ui/rfc-2091-track-caller/error-with-invalid-abi.rs delete mode 100644 tests/ui/rfc-2091-track-caller/error-with-invalid-abi.stderr delete mode 100644 tests/ui/rfc-2091-track-caller/error-with-main.rs delete mode 100644 tests/ui/rfc-2091-track-caller/error-with-main.stderr delete mode 100644 tests/ui/rfc-2091-track-caller/error-with-naked.rs delete mode 100644 tests/ui/rfc-2091-track-caller/error-with-naked.stderr delete mode 100644 tests/ui/rfc-2091-track-caller/error-with-start.rs delete mode 100644 tests/ui/rfc-2091-track-caller/error-with-start.stderr delete mode 100644 tests/ui/rfc-2091-track-caller/intrinsic-wrapper.rs delete mode 100644 tests/ui/rfc-2091-track-caller/macro-declaration.rs delete mode 100644 tests/ui/rfc-2091-track-caller/mir-inlined-macro.rs delete mode 100644 tests/ui/rfc-2091-track-caller/only-for-fns.rs delete mode 100644 tests/ui/rfc-2091-track-caller/only-for-fns.stderr delete mode 100644 tests/ui/rfc-2091-track-caller/pass.rs delete mode 100644 tests/ui/rfc-2091-track-caller/std-panic-locations.rs delete mode 100644 tests/ui/rfc-2091-track-caller/track-caller-attribute.rs delete mode 100644 tests/ui/rfc-2091-track-caller/track-caller-ffi.rs delete mode 100644 tests/ui/rfc-2091-track-caller/tracked-closure.rs delete mode 100644 tests/ui/rfc-2091-track-caller/tracked-fn-ptr-with-arg.rs delete mode 100644 tests/ui/rfc-2091-track-caller/tracked-fn-ptr.rs delete mode 100644 tests/ui/rfc-2091-track-caller/tracked-trait-impls.rs delete mode 100644 tests/ui/rfc-2091-track-caller/tracked-trait-obj.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/cross-crate.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/cross-crate.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/dont-infer-static.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/dont-infer-static.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/enum.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/enum.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/explicit-dyn.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/explicit-dyn.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/explicit-enum.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/explicit-enum.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/explicit-projection.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/explicit-projection.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/explicit-struct.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/explicit-struct.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/explicit-union.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/explicit-union.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/issue-54467.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/nested-enum.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/nested-enum.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/nested-regions.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/nested-regions.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/nested-structs.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/nested-structs.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/nested-union.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/nested-union.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/privacy.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/projection.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/projection.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/reference.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/reference.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/regions-enum-not-wf.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/regions-enum-not-wf.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/regions-struct-not-wf.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/regions-struct-not-wf.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/self-dyn.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/self-dyn.stderr delete mode 100644 tests/ui/rfc-2093-infer-outlives/self-structs.rs delete mode 100644 tests/ui/rfc-2093-infer-outlives/self-structs.stderr delete mode 100644 tests/ui/rfc-2126-crate-paths/crate-path-non-absolute.rs delete mode 100644 tests/ui/rfc-2126-crate-paths/crate-path-non-absolute.stderr delete mode 100644 tests/ui/rfc-2126-crate-paths/keyword-crate-as-identifier.rs delete mode 100644 tests/ui/rfc-2126-crate-paths/keyword-crate-as-identifier.stderr delete mode 100644 tests/ui/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs delete mode 100644 tests/ui/rfc-2126-extern-absolute-paths/non-existent-1.rs delete mode 100644 tests/ui/rfc-2126-extern-absolute-paths/non-existent-1.stderr delete mode 100644 tests/ui/rfc-2126-extern-absolute-paths/non-existent-2.rs delete mode 100644 tests/ui/rfc-2126-extern-absolute-paths/non-existent-2.stderr delete mode 100644 tests/ui/rfc-2126-extern-absolute-paths/non-existent-3.rs delete mode 100644 tests/ui/rfc-2126-extern-absolute-paths/non-existent-3.stderr delete mode 100644 tests/ui/rfc-2126-extern-absolute-paths/not-allowed.rs delete mode 100644 tests/ui/rfc-2126-extern-absolute-paths/not-allowed.stderr delete mode 100644 tests/ui/rfc-2126-extern-absolute-paths/single-segment.rs delete mode 100644 tests/ui/rfc-2126-extern-absolute-paths/single-segment.stderr delete mode 100644 tests/ui/rfc-2294-if-let-guard/bindings.rs delete mode 100644 tests/ui/rfc-2294-if-let-guard/bindings.stderr delete mode 100644 tests/ui/rfc-2294-if-let-guard/feature-gate.rs delete mode 100644 tests/ui/rfc-2294-if-let-guard/feature-gate.stderr delete mode 100644 tests/ui/rfc-2294-if-let-guard/run-pass.rs delete mode 100644 tests/ui/rfc-2294-if-let-guard/typeck.rs delete mode 100644 tests/ui/rfc-2294-if-let-guard/typeck.stderr delete mode 100644 tests/ui/rfc-2294-if-let-guard/warns.rs delete mode 100644 tests/ui/rfc-2294-if-let-guard/warns.stderr delete mode 100644 tests/ui/rfc-2306/convert-id-const-with-gate.rs delete mode 100644 tests/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs delete mode 100644 tests/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.run.stderr delete mode 100644 tests/ui/rfc-2361-dbg-macro/dbg-macro-move-semantics.rs delete mode 100644 tests/ui/rfc-2361-dbg-macro/dbg-macro-move-semantics.stderr delete mode 100644 tests/ui/rfc-2361-dbg-macro/dbg-macro-requires-debug.rs delete mode 100644 tests/ui/rfc-2361-dbg-macro/dbg-macro-requires-debug.stderr delete mode 100644 tests/ui/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.rs delete mode 100644 tests/ui/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.stderr delete mode 100644 tests/ui/rfc-2397-do-not-recommend/incorrect-locations.rs delete mode 100644 tests/ui/rfc-2397-do-not-recommend/incorrect-locations.stderr delete mode 100644 tests/ui/rfc-2397-do-not-recommend/unstable-feature.rs delete mode 100644 tests/ui/rfc-2397-do-not-recommend/unstable-feature.stderr delete mode 100644 tests/ui/rfc-2457/auxiliary/mod_file_nonascii_with_path_allowed-aux.rs delete mode 100644 tests/ui/rfc-2457/crate_name_nonascii_forbidden-1.rs delete mode 100644 tests/ui/rfc-2457/crate_name_nonascii_forbidden-1.stderr delete mode 100644 tests/ui/rfc-2457/crate_name_nonascii_forbidden-2.rs delete mode 100644 tests/ui/rfc-2457/crate_name_nonascii_forbidden-2.stderr delete mode 100644 tests/ui/rfc-2457/extern_block_nonascii_forbidden.rs delete mode 100644 tests/ui/rfc-2457/extern_block_nonascii_forbidden.stderr delete mode 100644 tests/ui/rfc-2457/idents-normalized.rs delete mode 100644 tests/ui/rfc-2457/mod_file_nonascii_forbidden.rs delete mode 100644 tests/ui/rfc-2457/mod_file_nonascii_forbidden.stderr delete mode 100644 tests/ui/rfc-2457/mod_file_nonascii_with_path_allowed.rs delete mode 100644 tests/ui/rfc-2457/mod_inline_nonascii_allowed.rs delete mode 100644 tests/ui/rfc-2457/no_mangle_nonascii_forbidden.rs delete mode 100644 tests/ui/rfc-2457/no_mangle_nonascii_forbidden.stderr delete mode 100644 tests/ui/rfc-2497-if-let-chains/ast-lowering-does-not-wrap-let-chains.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/ast-pretty-check.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/ast-pretty-check.stdout delete mode 100644 tests/ui/rfc-2497-if-let-chains/ast-validate-guards.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/ast-validate-guards.stderr delete mode 100644 tests/ui/rfc-2497-if-let-chains/chains-without-let.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/chains-without-let.stderr delete mode 100644 tests/ui/rfc-2497-if-let-chains/disallowed-positions.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/disallowed-positions.stderr delete mode 100644 tests/ui/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.stderr delete mode 100644 tests/ui/rfc-2497-if-let-chains/feature-gate.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/feature-gate.stderr delete mode 100644 tests/ui/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.stderr delete mode 100644 tests/ui/rfc-2497-if-let-chains/irrefutable-lets.disallowed.stderr delete mode 100644 tests/ui/rfc-2497-if-let-chains/irrefutable-lets.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/issue-88498.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/issue-90722.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/issue-92145.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/issue-93150.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/issue-93150.stderr delete mode 100644 tests/ui/rfc-2497-if-let-chains/issue-99938.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/no-double-assigments.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/protect-precedences.rs delete mode 100644 tests/ui/rfc-2497-if-let-chains/protect-precedences.stderr delete mode 100644 tests/ui/rfc-2497-if-let-chains/then-else-blocks.rs delete mode 100644 tests/ui/rfc-2565-param-attrs/attr-without-param.rs delete mode 100644 tests/ui/rfc-2565-param-attrs/attr-without-param.stderr delete mode 100644 tests/ui/rfc-2565-param-attrs/auxiliary/ident-mac.rs delete mode 100644 tests/ui/rfc-2565-param-attrs/auxiliary/param-attrs.rs delete mode 100644 tests/ui/rfc-2565-param-attrs/issue-64682-dropping-first-attrs-in-impl-fns.rs delete mode 100644 tests/ui/rfc-2565-param-attrs/param-attrs-2018.rs delete mode 100644 tests/ui/rfc-2565-param-attrs/param-attrs-2018.stderr delete mode 100644 tests/ui/rfc-2565-param-attrs/param-attrs-allowed.rs delete mode 100644 tests/ui/rfc-2565-param-attrs/param-attrs-builtin-attrs.rs delete mode 100644 tests/ui/rfc-2565-param-attrs/param-attrs-builtin-attrs.stderr delete mode 100644 tests/ui/rfc-2565-param-attrs/param-attrs-cfg.rs delete mode 100644 tests/ui/rfc-2565-param-attrs/param-attrs-cfg.stderr delete mode 100644 tests/ui/rfc-2565-param-attrs/param-attrs-pretty.rs delete mode 100644 tests/ui/rfc-2565-param-attrs/proc-macro-cannot-be-used.rs delete mode 100644 tests/ui/rfc-2565-param-attrs/proc-macro-cannot-be-used.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/dlltool-failed.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/dlltool-failed.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/import-name-type-invalid-format.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/import-name-type-invalid-format.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/import-name-type-multiple.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/import-name-type-multiple.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/import-name-type-unknown-value.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/import-name-type-unknown-value.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/import-name-type-x86-only.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/import-name-type-x86-only.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/invalid-dlltool.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/invalid-dlltool.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-and-name.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-and-name.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-invalid-format.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-invalid-format.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-missing-argument.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-missing-argument.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-multiple.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-multiple.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-too-large.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-too-large.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/multiple-declarations.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/multiple-declarations.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/raw-dylib-windows-only.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/raw-dylib-windows-only.stderr delete mode 100644 tests/ui/rfc-2627-raw-dylib/unsupported-abi.rs delete mode 100644 tests/ui/rfc-2627-raw-dylib/unsupported-abi.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/assoc-type-const-bound-usage.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/assoc-type.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/assoc-type.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/attr-misuse.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/attr-misuse.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/auxiliary/staged-api.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-pass.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-pass.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-in-impl.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-in-impl.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-method-chain.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-method-chain.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-method-dup-bound.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-method-fail.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-method-fail.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst-bound.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-method-pass.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call-generic-method-pass.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/call.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-and-non-const-impl.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-closure-parse-not-item.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-closures.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-default-method-bodies.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-default-method-bodies.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-drop-bound.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.precise.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.stock.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-drop-fail.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-drop.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-impl-norecover.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-impl-norecover.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-impl-recovery.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-impl-recovery.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-impl-requires-const-trait.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-impl-trait.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const-impl-trait.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-gate.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-gate.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-use.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/cross-crate.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/cross-crate.stock.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-with-staged-api.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/do-not-const-check-override.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/do-not-const-check.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/feature-gate.gated.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/feature-gate.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/feature-gate.stock.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/gate.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/gate.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/generic-bound.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/generic-bound.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/hir-const-check.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/hir-const-check.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/impl-tilde-const-trait.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/impl-tilde-const-trait.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/impl-with-default-fn-fail.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/impl-with-default-fn-fail.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/impl-with-default-fn-pass.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/inherent-impl-const-bounds.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/inherent-impl.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/inherent-impl.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-100222.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-102156.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-102156.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-102985.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-102985.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-103677.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-79450.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-79450.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-88155.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-88155.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-90052.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-90052.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-92111.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/issue-92230-wf-super-trait-env.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/nested-closure.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specialization/default-keyword.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specialization/issue-95186-specialize-on-tilde-const.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specialization/issue-95187-same-trait-bound-different-constness.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specializing-constness-2.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specializing-constness-2.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specializing-constness.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/specializing-constness.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/staged-api-user-crate.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/staged-api-user-crate.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/staged-api.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/staged-api.stable.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/staged-api.unstable.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/static-const-trait-bound.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/std-impl-gate.gated.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/std-impl-gate.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/std-impl-gate.stock.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/super-traits-fail.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/super-traits-fail.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/super-traits.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/syntax.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/tilde-const-and-const-params.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/tilde-const-and-const-params.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/tilde-const-invalid-places.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/tilde-const-invalid-places.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/tilde-const-syntax.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/tilde-twice.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/tilde-twice.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/tilde_const_on_impl_bound.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/trait-default-body-stability.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/trait-default-body-stability.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/trait-method-ptr-in-consts-ice.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/trait-where-clause-const.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/trait-where-clause-const.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/trait-where-clause-run.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/trait-where-clause.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/trait-where-clause.stderr delete mode 100644 tests/ui/rfc-2632-const-trait-impl/without-tilde.rs delete mode 100644 tests/ui/rfc-2632-const-trait-impl/without-tilde.stderr create mode 100644 tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/bind-by-move-no-guards.rs create mode 100644 tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/former-E0008-now-pass.rs create mode 100644 tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-basic-examples.rs create mode 100644 tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.rs create mode 100644 tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.stderr create mode 100644 tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.rs create mode 100644 tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.stderr delete mode 100644 tests/ui/rfcs/rfc-1014-2.rs create mode 100644 tests/ui/rfcs/rfc-1014-stdout-existential-crisis/rfc-1014-2.rs create mode 100644 tests/ui/rfcs/rfc-1014-stdout-existential-crisis/rfc-1014.rs delete mode 100644 tests/ui/rfcs/rfc-1014.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-embedded.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-param.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-embedded.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-param.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-use-behind-cousin-variant.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/feature-gate.no_gate.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/feature-gate.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/feature-gate.with_gate.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/fn-ptr-is-structurally-matchable.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-6804.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-6804.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-empty-array-allowed-without-eq-issue-62336.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.stderr create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/phantom-data-is-structurally-matchable.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/rfc1445/eq-allows-match-on-ty-in-macro.rs create mode 100644 tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/rfc1445/eq-allows-match.rs create mode 100644 tests/ui/rfcs/rfc-1623-static/rfc1623-2.rs create mode 100644 tests/ui/rfcs/rfc-1623-static/rfc1623-2.stderr create mode 100644 tests/ui/rfcs/rfc-1623-static/rfc1623-3.rs create mode 100644 tests/ui/rfcs/rfc-1623-static/rfc1623-3.stderr create mode 100644 tests/ui/rfcs/rfc-1623-static/rfc1623.rs create mode 100644 tests/ui/rfcs/rfc-1717-dllimport/1717-dllimport/library-override.rs create mode 100644 tests/ui/rfcs/rfc-1717-dllimport/missing-link-attr.rs create mode 100644 tests/ui/rfcs/rfc-1717-dllimport/missing-link-attr.stderr create mode 100644 tests/ui/rfcs/rfc-1717-dllimport/multiple-renames.rs create mode 100644 tests/ui/rfcs/rfc-1717-dllimport/multiple-renames.stderr create mode 100644 tests/ui/rfcs/rfc-1717-dllimport/rename-modifiers.rs create mode 100644 tests/ui/rfcs/rfc-1717-dllimport/rename-modifiers.stderr create mode 100644 tests/ui/rfcs/rfc-1717-dllimport/rename-to-empty.rs create mode 100644 tests/ui/rfcs/rfc-1717-dllimport/rename-to-empty.stderr create mode 100644 tests/ui/rfcs/rfc-1857-stabilize-drop-order/drop-order.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-1.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-1.stderr create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-2.current.stderr create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-2.next.stderr create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-2.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-box-dyn-error-err.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-box-dyn-error-ok.rs delete mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-never.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-str-err.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-str-ok.rs delete mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-str.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-impl-trait.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-impl-trait.stderr create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test-should-panic.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test-should-panic.stderr create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-i32.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-i32.stderr create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-wrong-type.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-wrong-type.stderr create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-not-satisfied.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-not-satisfied.stderr create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-test-wrong-type.rs create mode 100644 tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-test-wrong-type.stderr create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/borrowck-issue-49631.rs create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/borrowck-issue-49631.stderr create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/const.rs create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/const.stderr create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/enum-ok.rs create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/enum.stderr create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/explicit-mut.rs create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/explicit-mut.stderr create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/for-ok.rs create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/for.stderr create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/issue-44912-or.rs create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/issue-44912-or.stderr create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/lit-ok.rs create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/lit.stderr create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/no-double-error.rs create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/no-double-error.stderr create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/slice-ok.rs create mode 100644 tests/ui/rfcs/rfc-2005-default-binding-mode/slice.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/enums.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/monovariants.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/structs.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/unstable.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/variants.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/borrowck-exhaustive.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/borrowck-non-exhaustive.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/borrowck-non-exhaustive.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/enum-as-cast.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/enum-as-cast.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/enum.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/enum.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/enum_same_crate.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/enum_same_crate_empty_match.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/enum_same_crate_empty_match.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/auxiliary/types.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/same_crate_proper.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/invalid-attribute.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/invalid-attribute.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/omitted-patterns.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/omitted-patterns.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/stable-omitted-patterns.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/stable-omitted-patterns.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/struct.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/struct.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/structs_same_crate.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/auxiliary/uninhabited.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns_same_crate.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_same_crate.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_same_crate.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns_same_crate.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/patterns.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/variant.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/variant.stderr create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/variants_fictive_visibility.rs create mode 100644 tests/ui/rfcs/rfc-2008-non-exhaustive/variants_same_crate.rs create mode 100644 tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/downcast-unsafe-trait-objects.rs create mode 100644 tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs create mode 100644 tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/static-dispatch-unsafe-object.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/call-chain.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.stderr create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/caller-location-intrinsic.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/const-caller-location.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/diverging-caller-location.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/error-odd-syntax.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/error-odd-syntax.stderr create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/error-with-invalid-abi.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/error-with-invalid-abi.stderr create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/error-with-main.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/error-with-main.stderr create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/error-with-naked.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/error-with-naked.stderr create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/error-with-start.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/error-with-start.stderr create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/intrinsic-wrapper.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/macro-declaration.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/mir-inlined-macro.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/only-for-fns.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/only-for-fns.stderr create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/pass.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/std-panic-locations.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/track-caller-attribute.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/track-caller-ffi.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/tracked-closure.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/tracked-fn-ptr-with-arg.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/tracked-fn-ptr.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/tracked-trait-impls.rs create mode 100644 tests/ui/rfcs/rfc-2091-track-caller/tracked-trait-obj.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/cross-crate.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/cross-crate.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/dont-infer-static.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/dont-infer-static.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/enum.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/enum.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/explicit-dyn.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/explicit-dyn.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/explicit-enum.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/explicit-enum.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/explicit-projection.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/explicit-projection.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/explicit-struct.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/explicit-struct.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/explicit-union.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/explicit-union.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/issue-54467.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/nested-enum.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/nested-enum.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/nested-regions.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/nested-regions.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/nested-structs.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/nested-structs.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/nested-union.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/nested-union.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/privacy.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/projection.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/projection.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/reference.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/reference.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/regions-enum-not-wf.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/regions-enum-not-wf.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/regions-struct-not-wf.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/regions-struct-not-wf.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/self-dyn.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/self-dyn.stderr create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/self-structs.rs create mode 100644 tests/ui/rfcs/rfc-2093-infer-outlives/self-structs.stderr create mode 100644 tests/ui/rfcs/rfc-2126-crate-paths/crate-path-non-absolute.rs create mode 100644 tests/ui/rfcs/rfc-2126-crate-paths/crate-path-non-absolute.stderr create mode 100644 tests/ui/rfcs/rfc-2126-crate-paths/keyword-crate-as-identifier.rs create mode 100644 tests/ui/rfcs/rfc-2126-crate-paths/keyword-crate-as-identifier.stderr create mode 100644 tests/ui/rfcs/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs create mode 100644 tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-1.rs create mode 100644 tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-1.stderr create mode 100644 tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-2.rs create mode 100644 tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-2.stderr create mode 100644 tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-3.rs create mode 100644 tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-3.stderr create mode 100644 tests/ui/rfcs/rfc-2126-extern-absolute-paths/not-allowed.rs create mode 100644 tests/ui/rfcs/rfc-2126-extern-absolute-paths/not-allowed.stderr create mode 100644 tests/ui/rfcs/rfc-2126-extern-absolute-paths/single-segment.rs create mode 100644 tests/ui/rfcs/rfc-2126-extern-absolute-paths/single-segment.stderr create mode 100644 tests/ui/rfcs/rfc-2294-if-let-guard/bindings.rs create mode 100644 tests/ui/rfcs/rfc-2294-if-let-guard/bindings.stderr create mode 100644 tests/ui/rfcs/rfc-2294-if-let-guard/feature-gate.rs create mode 100644 tests/ui/rfcs/rfc-2294-if-let-guard/feature-gate.stderr create mode 100644 tests/ui/rfcs/rfc-2294-if-let-guard/run-pass.rs create mode 100644 tests/ui/rfcs/rfc-2294-if-let-guard/typeck.rs create mode 100644 tests/ui/rfcs/rfc-2294-if-let-guard/typeck.stderr create mode 100644 tests/ui/rfcs/rfc-2294-if-let-guard/warns.rs create mode 100644 tests/ui/rfcs/rfc-2294-if-let-guard/warns.stderr delete mode 100644 tests/ui/rfcs/rfc-2302-self-struct-ctor.rs create mode 100644 tests/ui/rfcs/rfc-2302-self-struct-ctor/rfc-2302-self-struct-ctor.rs create mode 100644 tests/ui/rfcs/rfc-2306-convert-id/convert-id-const-with-gate.rs create mode 100644 tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs create mode 100644 tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-expected-behavior.run.stderr create mode 100644 tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-move-semantics.rs create mode 100644 tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-move-semantics.stderr create mode 100644 tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-requires-debug.rs create mode 100644 tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-requires-debug.stderr create mode 100644 tests/ui/rfcs/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.rs create mode 100644 tests/ui/rfcs/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.stderr create mode 100644 tests/ui/rfcs/rfc-2397-do-not-recommend/incorrect-locations.rs create mode 100644 tests/ui/rfcs/rfc-2397-do-not-recommend/incorrect-locations.stderr create mode 100644 tests/ui/rfcs/rfc-2397-do-not-recommend/unstable-feature.rs create mode 100644 tests/ui/rfcs/rfc-2397-do-not-recommend/unstable-feature.stderr delete mode 100644 tests/ui/rfcs/rfc-2421-unreserve-pure-offsetof-sizeof-alignof.rs create mode 100644 tests/ui/rfcs/rfc-2421-unreserve-pure-offsetof-sizeof-alignof/offsetof-alignof-sizeof-pure-can-be-used-as-idents.rs create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/auxiliary/mod_file_nonascii_with_path_allowed-aux.rs create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-1.rs create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-1.stderr create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-2.rs create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-2.stderr create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/extern_block_nonascii_forbidden.rs create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/extern_block_nonascii_forbidden.stderr create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/idents-normalized.rs create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_file_nonascii_forbidden.rs create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_file_nonascii_forbidden.stderr create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_file_nonascii_with_path_allowed.rs create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_inline_nonascii_allowed.rs create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/no_mangle_nonascii_forbidden.rs create mode 100644 tests/ui/rfcs/rfc-2457-non-ascii-idents/no_mangle_nonascii_forbidden.stderr create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/ast-lowering-does-not-wrap-let-chains.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/ast-pretty-check.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/ast-pretty-check.stdout create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/ast-validate-guards.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/ast-validate-guards.stderr create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/chains-without-let.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/chains-without-let.stderr create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/disallowed-positions.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/disallowed-positions.stderr create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.stderr create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/feature-gate.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/feature-gate.stderr create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.stderr create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/irrefutable-lets.disallowed.stderr create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/irrefutable-lets.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/issue-88498.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/issue-90722.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/issue-92145.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/issue-93150.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/issue-93150.stderr create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/issue-99938.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/no-double-assigments.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/protect-precedences.rs create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/protect-precedences.stderr create mode 100644 tests/ui/rfcs/rfc-2497-if-let-chains/then-else-blocks.rs create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/attr-without-param.rs create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/attr-without-param.stderr create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/auxiliary/ident-mac.rs create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/auxiliary/param-attrs.rs create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/issue-64682-dropping-first-attrs-in-impl-fns.rs create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-2018.rs create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-2018.stderr create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-allowed.rs create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-builtin-attrs.rs create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-builtin-attrs.stderr create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-cfg.rs create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-cfg.stderr create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-pretty.rs create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/proc-macro-cannot-be-used.rs create mode 100644 tests/ui/rfcs/rfc-2565-param-attrs/proc-macro-cannot-be-used.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/dlltool-failed.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/dlltool-failed.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-invalid-format.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-invalid-format.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-multiple.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-multiple.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unknown-value.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unknown-value.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-x86-only.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-x86-only.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/invalid-dlltool.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/invalid-dlltool.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-and-name.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-and-name.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-invalid-format.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-invalid-format.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-missing-argument.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-missing-argument.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-multiple.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-multiple.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-large.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-large.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/multiple-declarations.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/multiple-declarations.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/raw-dylib-windows-only.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/raw-dylib-windows-only.stderr create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/unsupported-abi.rs create mode 100644 tests/ui/rfcs/rfc-2627-raw-dylib/unsupported-abi.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/attr-misuse.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/attr-misuse.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/staged-api.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-pass.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-pass.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst-bound.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/call.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-parse-not-item.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-trait-method-fail.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-trait-method.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-closures.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-bound.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.precise.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stock.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-norecover.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-norecover.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-recovery.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-recovery.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-gate.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-gate.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stock.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-with-staged-api.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/feature-gate.gated.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/feature-gate.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/feature-gate.stock.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/gate.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/gate.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/generic-bound.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/generic-bound.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/impl-tilde-const-trait.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/impl-tilde-const-trait.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/impl-with-default-fn-fail.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/impl-with-default-fn-fail.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/impl-with-default-fn-pass.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/inherent-impl-const-bounds.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/inherent-impl.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/inherent-impl.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-100222.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102156.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102156.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102985.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102985.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-103677.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-88155.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-88155.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-90052.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-90052.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92111.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92230-wf-super-trait-env.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.gated.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.stock.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/nested-closure.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/default-keyword.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/issue-95186-specialize-on-tilde-const.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/issue-95187-same-trait-bound-different-constness.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api-user-crate.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api-user-crate.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.stable.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.unstable.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/static-const-trait-bound.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/std-impl-gate.gated.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/std-impl-gate.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/std-impl-gate.stock.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/syntax.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-and-const-params.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-and-const-params.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-invalid-places.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-invalid-places.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-syntax.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-twice.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-twice.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/tilde_const_on_impl_bound.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/trait-method-ptr-in-consts-ice.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause.stderr create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/without-tilde.rs create mode 100644 tests/ui/rfcs/rfc-2632-const-trait-impl/without-tilde.stderr delete mode 100644 tests/ui/rfcs/rfc1445/eq-allows-match-on-ty-in-macro.rs delete mode 100644 tests/ui/rfcs/rfc1445/eq-allows-match.rs delete mode 100644 tests/ui/rfcs/rfc1623-2.rs delete mode 100644 tests/ui/rfcs/rfc1623-2.stderr delete mode 100644 tests/ui/rfcs/rfc1623-3.rs delete mode 100644 tests/ui/rfcs/rfc1623-3.stderr delete mode 100644 tests/ui/rfcs/rfc1623.rs delete mode 100644 tests/ui/rfcs/rfc1717/library-override.rs delete mode 100644 tests/ui/rfcs/rfc1857-drop-order.rs delete mode 100644 tests/ui/rust-2018/uniform-paths/ambiguity-nested.stderr delete mode 100644 tests/ui/rust-2018/uniform-paths/ambiguity.stderr delete mode 100644 tests/ui/rust-2018/uniform-paths/block-scoped-shadow-nested.stderr delete mode 100644 tests/ui/rust-2018/uniform-paths/block-scoped-shadow.stderr create mode 100644 tests/ui/sanitize/issue-111184-generator-witness.rs create mode 100644 tests/ui/specialization/specialization-default-items-drop-coherence.coherence.stderr create mode 100644 tests/ui/specialization/specialization-default-items-drop-coherence.next.stderr create mode 100644 tests/ui/std/slice-from-array-issue-113238.rs create mode 100644 tests/ui/structs-enums/issue-3008-1.rs create mode 100644 tests/ui/structs-enums/issue-3008-1.stderr create mode 100644 tests/ui/structs-enums/issue-3008-2.rs create mode 100644 tests/ui/structs-enums/issue-3008-2.stderr create mode 100644 tests/ui/structs-enums/issue-3008-3.rs create mode 100644 tests/ui/structs-enums/issue-3008-3.stderr create mode 100644 tests/ui/suggestions/issue-102972.rs create mode 100644 tests/ui/suggestions/issue-102972.stderr create mode 100644 tests/ui/suggestions/issue-103646.rs create mode 100644 tests/ui/suggestions/issue-103646.stderr create mode 100644 tests/ui/suggestions/issue-109991.rs create mode 100644 tests/ui/suggestions/issue-109991.stderr create mode 100644 tests/ui/suggestions/issue-112590-suggest-import.rs create mode 100644 tests/ui/suggestions/issue-112590-suggest-import.stderr create mode 100644 tests/ui/suggestions/issue-88696.rs create mode 100644 tests/ui/suggestions/issue-88696.stderr create mode 100644 tests/ui/suggestions/issue-89640.rs create mode 100644 tests/ui/suggestions/issue-89640.stderr create mode 100644 tests/ui/test-attrs/test-function-signature.rs create mode 100644 tests/ui/test-attrs/test-function-signature.stderr create mode 100644 tests/ui/thir-print/thir-flat-const-variant.rs create mode 100644 tests/ui/thir-print/thir-flat-const-variant.stdout create mode 100644 tests/ui/trait-bounds/apit-unsized.rs create mode 100644 tests/ui/trait-bounds/apit-unsized.stderr create mode 100644 tests/ui/traits/auxiliary/trivial3.rs create mode 100644 tests/ui/traits/auxiliary/trivial4.rs create mode 100644 tests/ui/traits/deny-builtin-object-impl.current.stderr create mode 100644 tests/ui/traits/deny-builtin-object-impl.next.stderr create mode 100644 tests/ui/traits/deny-builtin-object-impl.rs create mode 100644 tests/ui/traits/ice-with-dyn-pointee-errors.rs create mode 100644 tests/ui/traits/ice-with-dyn-pointee-errors.stderr create mode 100644 tests/ui/traits/ice-with-dyn-pointee.rs create mode 100644 tests/ui/traits/issue-105231.rs create mode 100644 tests/ui/traits/issue-105231.stderr create mode 100644 tests/ui/traits/new-solver/alias_eq_substs_eq_not_intercrate.stderr create mode 100644 tests/ui/traits/new-solver/array-default.rs create mode 100644 tests/ui/traits/new-solver/closure-substs-ambiguity.rs create mode 100644 tests/ui/traits/new-solver/dedup-regions.rs create mode 100644 tests/ui/traits/new-solver/dont-remap-tait-substs.rs create mode 100644 tests/ui/traits/new-solver/dont-type_of-tait-in-defining-scope.not_send.stderr create mode 100644 tests/ui/traits/new-solver/dont-type_of-tait-in-defining-scope.rs create mode 100644 tests/ui/traits/new-solver/dyn-any-dont-prefer-impl.rs create mode 100644 tests/ui/traits/new-solver/lazy-nested-obligations-2.stderr create mode 100644 tests/ui/traits/new-solver/leak-check-coinductive-cycle.rs create mode 100644 tests/ui/traits/new-solver/member-constraints-in-root-universe.rs create mode 100644 tests/ui/traits/new-solver/normalized-const-built-in-op.rs create mode 100644 tests/ui/traits/new-solver/opportunistic-region-resolve.rs create mode 100644 tests/ui/traits/new-solver/slice-match-byte-lit.rs create mode 100644 tests/ui/traits/new-solver/tait-eq-proj-2.rs create mode 100644 tests/ui/traits/new-solver/tait-eq-proj.rs create mode 100644 tests/ui/traits/new-solver/tait-eq-tait.rs create mode 100644 tests/ui/traits/new-solver/unevaluated-const-impl-trait-ref.fails.stderr create mode 100644 tests/ui/traits/new-solver/unevaluated-const-impl-trait-ref.rs create mode 100644 tests/ui/traits/new-solver/winnow-specializing-impls.rs create mode 100644 tests/ui/traits/non_lifetime_binders/foreach-partial-eq.rs create mode 100644 tests/ui/traits/non_lifetime_binders/foreach-partial-eq.stderr create mode 100644 tests/ui/traits/non_lifetime_binders/nested-apit-mentioning-outer-bound-var.rs create mode 100644 tests/ui/traits/non_lifetime_binders/nested-apit-mentioning-outer-bound-var.stderr create mode 100644 tests/ui/traits/object/print_vtable_sizes.rs create mode 100644 tests/ui/traits/object/print_vtable_sizes.stdout create mode 100644 tests/ui/traits/trivial_impl.rs create mode 100644 tests/ui/traits/trivial_impl.stderr create mode 100644 tests/ui/traits/trivial_impl2.rs create mode 100644 tests/ui/traits/trivial_impl2.stderr create mode 100644 tests/ui/traits/trivial_impl3.rs create mode 100644 tests/ui/traits/trivial_impl3.stderr create mode 100644 tests/ui/traits/trivial_impl4.rs create mode 100644 tests/ui/traits/trivial_impl4.stderr create mode 100644 tests/ui/traits/trivial_impl_sized.rs create mode 100644 tests/ui/traits/trivial_impl_sized.stderr create mode 100644 tests/ui/transmutability/alignment/align-fail.rs create mode 100644 tests/ui/transmutability/alignment/align-fail.stderr create mode 100644 tests/ui/transmutability/alignment/align-pass.rs create mode 100644 tests/ui/transmutability/primitives/bool-mut.rs create mode 100644 tests/ui/transmutability/primitives/bool-mut.stderr delete mode 100644 tests/ui/transmutability/references.current.stderr delete mode 100644 tests/ui/transmutability/references.next.stderr delete mode 100644 tests/ui/transmutability/references.rs create mode 100644 tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible-mut.rs create mode 100644 tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible-mut.stderr create mode 100644 tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible.rs create mode 100644 tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible.stderr create mode 100644 tests/ui/transmutability/references/recursive-wrapper-types-bit-incompatible.rs create mode 100644 tests/ui/transmutability/references/recursive-wrapper-types-bit-incompatible.stderr create mode 100644 tests/ui/transmutability/references/recursive-wrapper-types.rs create mode 100644 tests/ui/transmutability/references/recursive-wrapper-types.stderr create mode 100644 tests/ui/transmutability/references/u8-to-unit.rs create mode 100644 tests/ui/transmutability/references/unit-to-itself.rs create mode 100644 tests/ui/transmutability/references/unit-to-u8.rs create mode 100644 tests/ui/transmutability/references/unit-to-u8.stderr create mode 100644 tests/ui/treat-err-as-bug/panic-causes-oom-112708.rs create mode 100644 tests/ui/treat-err-as-bug/panic-causes-oom-112708.stderr create mode 100644 tests/ui/type-alias-impl-trait/bounds-are-checked3.rs create mode 100644 tests/ui/type-alias-impl-trait/bounds-are-checked3.stderr create mode 100644 tests/ui/type-alias-impl-trait/bounds.rs create mode 100644 tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.rs create mode 100644 tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.stderr create mode 100644 tests/ui/type-alias-impl-trait/debug-ty-with-weak.rs create mode 100644 tests/ui/type-alias-impl-trait/defined-by-user-annotation.rs create mode 100644 tests/ui/type-alias-impl-trait/hidden_behind_projection_behind_struct_field.rs create mode 100644 tests/ui/type-alias-impl-trait/hidden_behind_projection_behind_struct_field.stderr create mode 100644 tests/ui/type-alias-impl-trait/hidden_behind_struct_field.rs create mode 100644 tests/ui/type-alias-impl-trait/hidden_behind_struct_field2.rs create mode 100644 tests/ui/type-alias-impl-trait/higher_kinded_params.rs create mode 100644 tests/ui/type-alias-impl-trait/higher_kinded_params2.rs create mode 100644 tests/ui/type-alias-impl-trait/higher_kinded_params2.stderr create mode 100644 tests/ui/type-alias-impl-trait/higher_kinded_params3.rs create mode 100644 tests/ui/type-alias-impl-trait/higher_kinded_params3.stderr create mode 100644 tests/ui/type-alias-impl-trait/impl-trait-in-type-alias-with-bad-substs.rs create mode 100644 tests/ui/type-alias-impl-trait/impl-trait-in-type-alias-with-bad-substs.stderr create mode 100644 tests/ui/type-alias-impl-trait/impl_for_weak_alias.rs create mode 100644 tests/ui/type-alias-impl-trait/impl_for_weak_alias.stderr create mode 100644 tests/ui/type-alias-impl-trait/issue-109054.rs create mode 100644 tests/ui/type-alias-impl-trait/issue-109054.stderr delete mode 100644 tests/ui/type-alias-impl-trait/issue-53398-cyclic-types.stderr delete mode 100644 tests/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.stderr create mode 100644 tests/ui/type-alias-impl-trait/issue-70121.stderr create mode 100644 tests/ui/type-alias-impl-trait/multi-error.rs create mode 100644 tests/ui/type-alias-impl-trait/multi-error.stderr create mode 100644 tests/ui/type-alias-impl-trait/nested_in_closure.rs create mode 100644 tests/ui/type-alias-impl-trait/non-defining-method.rs create mode 100644 tests/ui/type-alias-impl-trait/non-defining-method.stderr create mode 100644 tests/ui/type-alias-impl-trait/normalize-hidden-types.current.stderr create mode 100644 tests/ui/type-alias-impl-trait/normalize-hidden-types.rs create mode 100644 tests/ui/type-alias-impl-trait/not-matching-trait-refs-isnt-defining.rs create mode 100644 tests/ui/type-alias-impl-trait/not-matching-trait-refs-isnt-defining.stderr create mode 100644 tests/ui/type-alias-impl-trait/obligation_ice.rs create mode 100644 tests/ui/type-alias-impl-trait/privacy.rs create mode 100644 tests/ui/type-alias-impl-trait/privacy.stderr create mode 100644 tests/ui/type-alias-impl-trait/self-referential-3.stderr create mode 100644 tests/ui/type-inference/issue-113283-alllocator-trait-eq.rs create mode 100644 tests/ui/typeck/dont-record-adjustments-when-pointing-at-arg.rs create mode 100644 tests/ui/typeck/dont-record-adjustments-when-pointing-at-arg.stderr create mode 100644 tests/ui/typeck/issue-106929.rs create mode 100644 tests/ui/typeck/issue-106929.stderr create mode 100644 tests/ui/typeck/issue-112252-ptr-arithmetics-help.fixed create mode 100644 tests/ui/typeck/issue-112252-ptr-arithmetics-help.rs create mode 100644 tests/ui/typeck/issue-112252-ptr-arithmetics-help.stderr create mode 100644 tests/ui/typeck/issue-112385-while-assign-lhs-place-expr-ice.rs create mode 100644 tests/ui/typeck/issue-112385-while-assign-lhs-place-expr-ice.stderr create mode 100644 tests/ui/typeck/issue-1871.rs create mode 100644 tests/ui/typeck/issue-1871.stderr create mode 100644 tests/ui/typeck/issue-2063-resource.rs create mode 100644 tests/ui/typeck/issue-2063.rs create mode 100644 tests/ui/typeck/ptr-null-mutability-suggestions.fixed create mode 100644 tests/ui/typeck/ptr-null-mutability-suggestions.rs create mode 100644 tests/ui/typeck/ptr-null-mutability-suggestions.stderr create mode 100644 tests/ui/typeck/return-dyn-type-mismatch-2.rs create mode 100644 tests/ui/typeck/return-dyn-type-mismatch-2.stderr create mode 100644 tests/ui/typeck/return-dyn-type-mismatch.rs create mode 100644 tests/ui/typeck/return-dyn-type-mismatch.stderr create mode 100644 tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.fixed create mode 100644 tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.rs create mode 100644 tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.stderr create mode 100644 tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.fixed create mode 100644 tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.rs create mode 100644 tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.stderr delete mode 100644 tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rs delete mode 100644 tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rust2015.stderr delete mode 100644 tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rust2018.stderr create mode 100644 tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.fixed create mode 100644 tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.rs create mode 100644 tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.stderr create mode 100644 tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.fixed create mode 100644 tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.rs create mode 100644 tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.stderr delete mode 100644 tests/ui/underscore-lifetime/where-clause-trait-impl-region.rs delete mode 100644 tests/ui/underscore-lifetime/where-clause-trait-impl-region.rust2015.stderr delete mode 100644 tests/ui/underscore-lifetime/where-clause-trait-impl-region.rust2018.stderr create mode 100644 tests/ui/uninhabited/projection.rs create mode 100644 tests/ui/unsafe/auxiliary/external_unsafe_macro.rs create mode 100644 tests/ui/unsafe/wrapping-unsafe-block-sugg.fixed create mode 100644 tests/ui/unsafe/wrapping-unsafe-block-sugg.rs create mode 100644 tests/ui/unsafe/wrapping-unsafe-block-sugg.stderr create mode 100644 tests/ui/unsized-locals/rust-call.rs create mode 100644 tests/ui/unsized-locals/rust-call.stderr create mode 100644 tests/ui/unsized/issue-71659.current.stderr create mode 100644 tests/ui/unsized/issue-71659.next.stderr delete mode 100644 tests/ui/unsized/issue-71659.stderr create mode 100644 tests/ui/where-clauses/issue-50825-1.rs create mode 100644 tests/ui/where-clauses/issue-50825.rs (limited to 'tests') diff --git a/tests/assembly/asm/mips-types.rs b/tests/assembly/asm/mips-types.rs index 6aa28b062..27469b229 100644 --- a/tests/assembly/asm/mips-types.rs +++ b/tests/assembly/asm/mips-types.rs @@ -72,7 +72,7 @@ macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { // mips32-LABEL: sym_static_32: // mips32: #APP -// mips32: lw $3, %got(extern_static) +// mips32: lw $3, %got(extern_static)($gp) // mips32: #NO_APP #[cfg(mips32)] #[no_mangle] @@ -82,7 +82,7 @@ pub unsafe fn sym_static_32() { // mips32-LABEL: sym_fn_32: // mips32: #APP -// mips32: lw $3, %got(extern_func) +// mips32: lw $3, %got(extern_func)($gp) // mips32: #NO_APP #[cfg(mips32)] #[no_mangle] @@ -92,7 +92,9 @@ pub unsafe fn sym_fn_32() { // mips64-LABEL: sym_static_64: // mips64: #APP -// mips64: ld $3, %got_disp(extern_static) +// mips64: lui $3, %got_hi(extern_static) +// mips64: daddu $3, $3, $gp +// mips64: ld $3, %got_lo(extern_static)($3) // mips64: #NO_APP #[cfg(mips64)] #[no_mangle] @@ -102,7 +104,9 @@ pub unsafe fn sym_static_64() { // mips64-LABEL: sym_fn_64: // mips64: #APP -// mips64: ld $3, %got_disp(extern_func) +// mips64: lui $3, %got_hi(extern_func) +// mips64: daddu $3, $3, $gp +// mips64: ld $3, %got_lo(extern_func)($3) // mips64: #NO_APP #[cfg(mips64)] #[no_mangle] diff --git a/tests/assembly/stack-protector/stack-protector-heuristics-effect.rs b/tests/assembly/stack-protector/stack-protector-heuristics-effect.rs index 7c2b60550..011a253c6 100644 --- a/tests/assembly/stack-protector/stack-protector-heuristics-effect.rs +++ b/tests/assembly/stack-protector/stack-protector-heuristics-effect.rs @@ -370,7 +370,7 @@ pub fn unsized_fn_param(s: [u8], l: bool, f: fn([u8])) { // all: __stack_chk_fail - // strong-NOT: __stack_chk_fail + // strong: __stack_chk_fail // basic-NOT: __stack_chk_fail // none-NOT: __stack_chk_fail // missing-NOT: __stack_chk_fail diff --git a/tests/codegen/array-codegen.rs b/tests/codegen/array-codegen.rs new file mode 100644 index 000000000..98488eb92 --- /dev/null +++ b/tests/codegen/array-codegen.rs @@ -0,0 +1,35 @@ +// compile-flags: -O -C no-prepopulate-passes +// min-llvm-version: 15.0 (for opaque pointers) + +#![crate_type = "lib"] + +// CHECK-LABEL: @array_load +#[no_mangle] +pub fn array_load(a: &[u8; 4]) -> [u8; 4] { + // CHECK: %0 = alloca [4 x i8], align 1 + // CHECK: %[[TEMP1:.+]] = load <4 x i8>, ptr %a, align 1 + // CHECK: store <4 x i8> %[[TEMP1]], ptr %0, align 1 + // CHECK: %[[TEMP2:.+]] = load i32, ptr %0, align 1 + // CHECK: ret i32 %[[TEMP2]] + *a +} + +// CHECK-LABEL: @array_store +#[no_mangle] +pub fn array_store(a: [u8; 4], p: &mut [u8; 4]) { + // CHECK: %a = alloca [4 x i8] + // CHECK: %[[TEMP:.+]] = load <4 x i8>, ptr %a, align 1 + // CHECK-NEXT: store <4 x i8> %[[TEMP]], ptr %p, align 1 + *p = a; +} + +// CHECK-LABEL: @array_copy +#[no_mangle] +pub fn array_copy(a: &[u8; 4], p: &mut [u8; 4]) { + // CHECK: %[[LOCAL:.+]] = alloca [4 x i8], align 1 + // CHECK: %[[TEMP1:.+]] = load <4 x i8>, ptr %a, align 1 + // CHECK: store <4 x i8> %[[TEMP1]], ptr %[[LOCAL]], align 1 + // CHECK: %[[TEMP2:.+]] = load <4 x i8>, ptr %[[LOCAL]], align 1 + // CHECK: store <4 x i8> %[[TEMP2]], ptr %p, align 1 + *p = *a; +} diff --git a/tests/codegen/array-map.rs b/tests/codegen/array-map.rs index 3706ddf99..24f3f43d0 100644 --- a/tests/codegen/array-map.rs +++ b/tests/codegen/array-map.rs @@ -4,7 +4,6 @@ // ignore-debug (the extra assertions get in the way) #![crate_type = "lib"] -#![feature(array_zip)] // CHECK-LABEL: @short_integer_map #[no_mangle] @@ -16,16 +15,6 @@ pub fn short_integer_map(x: [u32; 8]) -> [u32; 8] { x.map(|x| 2 * x + 1) } -// CHECK-LABEL: @short_integer_zip_map -#[no_mangle] -pub fn short_integer_zip_map(x: [u32; 8], y: [u32; 8]) -> [u32; 8] { - // CHECK: %[[A:.+]] = load <8 x i32> - // CHECK: %[[B:.+]] = load <8 x i32> - // CHECK: sub <8 x i32> %[[B]], %[[A]] - // CHECK: store <8 x i32> - x.zip(y).map(|(x, y)| x - y) -} - // This test is checking that LLVM can SRoA away a bunch of the overhead, // like fully moving the iterators to registers. Notably, previous implementations // of `map` ended up `alloca`ing the whole `array::IntoIterator`, meaning both a diff --git a/tests/codegen/autovectorize-f32x4.rs b/tests/codegen/autovectorize-f32x4.rs index 9ecea53f1..54392be70 100644 --- a/tests/codegen/autovectorize-f32x4.rs +++ b/tests/codegen/autovectorize-f32x4.rs @@ -1,7 +1,6 @@ // compile-flags: -C opt-level=3 -Z merge-functions=disabled // only-x86_64 #![crate_type = "lib"] -#![feature(array_zip)] // CHECK-LABEL: @auto_vectorize_direct #[no_mangle] @@ -32,12 +31,12 @@ pub fn auto_vectorize_loop(a: [f32; 4], b: [f32; 4]) -> [f32; 4] { c } -// CHECK-LABEL: @auto_vectorize_array_zip_map +// CHECK-LABEL: @auto_vectorize_array_from_fn #[no_mangle] -pub fn auto_vectorize_array_zip_map(a: [f32; 4], b: [f32; 4]) -> [f32; 4] { +pub fn auto_vectorize_array_from_fn(a: [f32; 4], b: [f32; 4]) -> [f32; 4] { // CHECK: load <4 x float> // CHECK: load <4 x float> // CHECK: fadd <4 x float> // CHECK: store <4 x float> - a.zip(b).map(|(a, b)| a + b) + std::array::from_fn(|i| a[i] + b[i]) } diff --git a/tests/codegen/box-maybe-uninit-llvm14.rs b/tests/codegen/box-maybe-uninit-llvm14.rs index b0c88f76c..c9f88fb3f 100644 --- a/tests/codegen/box-maybe-uninit-llvm14.rs +++ b/tests/codegen/box-maybe-uninit-llvm14.rs @@ -31,4 +31,4 @@ pub fn box_uninitialized2() -> Box> { // Hide the LLVM 15+ `allocalign` attribute in the declaration of __rust_alloc // from the CHECK-NOT above. We don't check the attributes here because we can't rely // on all of them being set until LLVM 15. -// CHECK: declare noalias{{.*}} @__rust_alloc(i{{[0-9]+}} noundef, i{{[0-9]+.*}} noundef) +// CHECK: declare {{(dso_local )?}}noalias{{.*}} @__rust_alloc(i{{[0-9]+}} noundef, i{{[0-9]+.*}} noundef) diff --git a/tests/codegen/box-maybe-uninit.rs b/tests/codegen/box-maybe-uninit.rs index 2f8896699..5c08b5832 100644 --- a/tests/codegen/box-maybe-uninit.rs +++ b/tests/codegen/box-maybe-uninit.rs @@ -28,6 +28,6 @@ pub fn box_uninitialized2() -> Box> { // Hide the `allocalign` attribute in the declaration of __rust_alloc // from the CHECK-NOT above, and also verify the attributes got set reasonably. -// CHECK: declare noalias noundef ptr @__rust_alloc(i{{[0-9]+}} noundef, i{{[0-9]+}} allocalign noundef) unnamed_addr [[RUST_ALLOC_ATTRS:#[0-9]+]] +// CHECK: declare {{(dso_local )?}}noalias noundef ptr @__rust_alloc(i{{[0-9]+}} noundef, i{{[0-9]+}} allocalign noundef) unnamed_addr [[RUST_ALLOC_ATTRS:#[0-9]+]] -// CHECK-DAG: attributes [[RUST_ALLOC_ATTRS]] = { {{.*}} allockind("alloc,uninitialized,aligned") allocsize(0) uwtable "alloc-family"="__rust_alloc" {{.*}} } +// CHECK-DAG: attributes [[RUST_ALLOC_ATTRS]] = { {{.*}} allockind("alloc,uninitialized,aligned") allocsize(0) {{(uwtable )?}}"alloc-family"="__rust_alloc" {{.*}} } diff --git a/tests/codegen/call-metadata.rs b/tests/codegen/call-metadata.rs index 1c30c08d3..07cc0c963 100644 --- a/tests/codegen/call-metadata.rs +++ b/tests/codegen/call-metadata.rs @@ -6,7 +6,7 @@ #![crate_type = "lib"] pub fn test() { - // CHECK: call noundef i8 @some_true(), !range [[R0:![0-9]+]] + // CHECK: call noundef i8 @some_true(){{( #[0-9]+)?}}, !range [[R0:![0-9]+]] // CHECK: [[R0]] = !{i8 0, i8 3} some_true(); } diff --git a/tests/codegen/const_scalar_pair.rs b/tests/codegen/const_scalar_pair.rs new file mode 100644 index 000000000..aa4cf7a64 --- /dev/null +++ b/tests/codegen/const_scalar_pair.rs @@ -0,0 +1,10 @@ +// compile-flags: --crate-type=lib -Copt-level=0 -Zmir-opt-level=0 -C debuginfo=2 + +#![feature(inline_const)] + +// Test that we don't generate a memory allocation for the constant +// and read the fields from that, but instead just create the value pair directly. +pub fn foo() -> (i32, i32) { + // CHECK: ret { i32, i32 } { i32 1, i32 2 } + const { (1, 2) } +} diff --git a/tests/codegen/debug-column.rs b/tests/codegen/debug-column.rs index e61642b8e..f3b19a2eb 100644 --- a/tests/codegen/debug-column.rs +++ b/tests/codegen/debug-column.rs @@ -6,11 +6,11 @@ fn main() { unsafe { // Column numbers are 1-based. Regression test for #65437. - // CHECK: call void @giraffe(), !dbg [[A:!.*]] + // CHECK: call void @giraffe(){{( #[0-9]+)?}}, !dbg [[A:!.*]] giraffe(); // Column numbers use byte offests. Regression test for #67360 - // CHECK: call void @turtle(), !dbg [[B:!.*]] + // CHECK: call void @turtle(){{( #[0-9]+)?}}, !dbg [[B:!.*]] /* ż */ turtle(); // CHECK: [[A]] = !DILocation(line: 10, column: 9, diff --git a/tests/codegen/drop.rs b/tests/codegen/drop.rs index 994028271..3615ef47b 100644 --- a/tests/codegen/drop.rs +++ b/tests/codegen/drop.rs @@ -1,4 +1,5 @@ // ignore-wasm32-bare compiled with panic=abort by default +// needs-unwind - this test verifies the amount of drop calls when unwinding is used // compile-flags: -C no-prepopulate-passes #![crate_type = "lib"] diff --git a/tests/codegen/enum-debug-niche-2.rs b/tests/codegen/enum-debug-niche-2.rs index 9c72ad9d2..4b607d505 100644 --- a/tests/codegen/enum-debug-niche-2.rs +++ b/tests/codegen/enum-debug-niche-2.rs @@ -7,8 +7,8 @@ // compile-flags: -g -C no-prepopulate-passes // CHECK: {{.*}}DICompositeType{{.*}}tag: DW_TAG_variant_part,{{.*}}size: 32,{{.*}} -// CHECK: {{.*}}DIDerivedType{{.*}}tag: DW_TAG_member,{{.*}}name: "Placeholder",{{.*}}extraData: i64 4294967295{{[,)].*}} -// CHECK: {{.*}}DIDerivedType{{.*}}tag: DW_TAG_member,{{.*}}name: "Error",{{.*}}extraData: i64 0{{[,)].*}} +// CHECK: {{.*}}DIDerivedType{{.*}}tag: DW_TAG_member,{{.*}}name: "Placeholder",{{.*}}extraData: i128 4294967295{{[,)].*}} +// CHECK: {{.*}}DIDerivedType{{.*}}tag: DW_TAG_member,{{.*}}name: "Error",{{.*}}extraData: i128 0{{[,)].*}} #![feature(never_type)] diff --git a/tests/codegen/enum-u128.rs b/tests/codegen/enum-u128.rs new file mode 100644 index 000000000..f50d360ac --- /dev/null +++ b/tests/codegen/enum-u128.rs @@ -0,0 +1,27 @@ +// This tests that debug info for "c-like" 128bit enums is properly emitted. +// This is ignored for the fallback mode on MSVC due to problems with PDB. + +// +// ignore-msvc + +// compile-flags: -g -C no-prepopulate-passes + +// CHECK-LABEL: @main +// CHECK: {{.*}}DICompositeType{{.*}}tag: DW_TAG_enumeration_type,{{.*}}name: "Foo",{{.*}}flags: DIFlagEnumClass,{{.*}} +// CHECK: {{.*}}DIEnumerator{{.*}}name: "Lo",{{.*}}value: 0,{{.*}} +// CHECK: {{.*}}DIEnumerator{{.*}}name: "Hi",{{.*}}value: 18446744073709551616,{{.*}} +// CHECK: {{.*}}DIEnumerator{{.*}}name: "Bar",{{.*}}value: 18446745000000000123,{{.*}} + +#![allow(incomplete_features)] +#![feature(repr128)] + +#[repr(u128)] +pub enum Foo { + Lo, + Hi = 1 << 64, + Bar = 18_446_745_000_000_000_123, +} + +pub fn main() { + let foo = Foo::Bar; +} diff --git a/tests/codegen/external-no-mangle-statics.rs b/tests/codegen/external-no-mangle-statics.rs index c6ecb7aa9..48023a2a9 100644 --- a/tests/codegen/external-no-mangle-statics.rs +++ b/tests/codegen/external-no-mangle-statics.rs @@ -6,72 +6,72 @@ // `#[no_mangle]`d static variables always have external linkage, i.e., no `internal` in their // definitions -// CHECK: @A = local_unnamed_addr constant +// CHECK: @A = {{(dso_local )?}}local_unnamed_addr constant #[no_mangle] static A: u8 = 0; -// CHECK: @B = local_unnamed_addr global +// CHECK: @B = {{(dso_local )?}}local_unnamed_addr global #[no_mangle] static mut B: u8 = 0; -// CHECK: @C = local_unnamed_addr constant +// CHECK: @C = {{(dso_local )?}}local_unnamed_addr constant #[no_mangle] pub static C: u8 = 0; -// CHECK: @D = local_unnamed_addr global +// CHECK: @D = {{(dso_local )?}}local_unnamed_addr global #[no_mangle] pub static mut D: u8 = 0; mod private { - // CHECK: @E = local_unnamed_addr constant + // CHECK: @E = {{(dso_local )?}}local_unnamed_addr constant #[no_mangle] static E: u8 = 0; - // CHECK: @F = local_unnamed_addr global + // CHECK: @F = {{(dso_local )?}}local_unnamed_addr global #[no_mangle] static mut F: u8 = 0; - // CHECK: @G = local_unnamed_addr constant + // CHECK: @G = {{(dso_local )?}}local_unnamed_addr constant #[no_mangle] pub static G: u8 = 0; - // CHECK: @H = local_unnamed_addr global + // CHECK: @H = {{(dso_local )?}}local_unnamed_addr global #[no_mangle] pub static mut H: u8 = 0; } const HIDDEN: () = { - // CHECK: @I = local_unnamed_addr constant + // CHECK: @I = {{(dso_local )?}}local_unnamed_addr constant #[no_mangle] static I: u8 = 0; - // CHECK: @J = local_unnamed_addr global + // CHECK: @J = {{(dso_local )?}}local_unnamed_addr global #[no_mangle] static mut J: u8 = 0; - // CHECK: @K = local_unnamed_addr constant + // CHECK: @K = {{(dso_local )?}}local_unnamed_addr constant #[no_mangle] pub static K: u8 = 0; - // CHECK: @L = local_unnamed_addr global + // CHECK: @L = {{(dso_local )?}}local_unnamed_addr global #[no_mangle] pub static mut L: u8 = 0; }; fn x() { - // CHECK: @M = local_unnamed_addr constant + // CHECK: @M = {{(dso_local )?}}local_unnamed_addr constant #[no_mangle] static M: fn() = x; - // CHECK: @N = local_unnamed_addr global + // CHECK: @N = {{(dso_local )?}}local_unnamed_addr global #[no_mangle] static mut N: u8 = 0; - // CHECK: @O = local_unnamed_addr constant + // CHECK: @O = {{(dso_local )?}}local_unnamed_addr constant #[no_mangle] pub static O: u8 = 0; - // CHECK: @P = local_unnamed_addr global + // CHECK: @P = {{(dso_local )?}}local_unnamed_addr global #[no_mangle] pub static mut P: u8 = 0; } diff --git a/tests/codegen/intrinsics/transmute.rs b/tests/codegen/intrinsics/transmute.rs index 664e697c2..fe4249400 100644 --- a/tests/codegen/intrinsics/transmute.rs +++ b/tests/codegen/intrinsics/transmute.rs @@ -14,10 +14,10 @@ use std::intrinsics::{transmute, transmute_unchecked}; // Some of these need custom MIR to not get removed by MIR optimizations. use std::intrinsics::mir::*; -enum Never {} +pub enum ZstNever {} #[repr(align(2))] -pub struct BigNever(Never, u16, Never); +pub struct BigNever(ZstNever, u16, ZstNever); #[repr(align(8))] pub struct Scalar64(i64); @@ -56,11 +56,13 @@ pub unsafe fn check_bigger_array(x: [u32; 3]) -> [u32; 7] { transmute_unchecked(x) } -// CHECK-LABEL: @check_to_uninhabited( +// CHECK-LABEL: @check_to_empty_array( #[no_mangle] #[custom_mir(dialect = "runtime", phase = "optimized")] -pub unsafe fn check_to_uninhabited(x: u16) -> BigNever { +pub unsafe fn check_to_empty_array(x: [u32; 5]) -> [u32; 0] { + // CHECK-NOT: trap // CHECK: call void @llvm.trap + // CHECK-NOT: trap mir!{ { RET = CastTransmute(x); @@ -69,6 +71,37 @@ pub unsafe fn check_to_uninhabited(x: u16) -> BigNever { } } +// CHECK-LABEL: @check_from_empty_array( +#[no_mangle] +#[custom_mir(dialect = "runtime", phase = "optimized")] +pub unsafe fn check_from_empty_array(x: [u32; 0]) -> [u32; 5] { + // CHECK-NOT: trap + // CHECK: call void @llvm.trap + // CHECK-NOT: trap + mir!{ + { + RET = CastTransmute(x); + Return() + } + } +} + +// CHECK-LABEL: @check_to_uninhabited( +#[no_mangle] +#[custom_mir(dialect = "runtime", phase = "optimized")] +pub unsafe fn check_to_uninhabited(x: u16) { + // CHECK-NOT: trap + // CHECK: call void @llvm.trap + // CHECK-NOT: trap + mir!{ + let temp: BigNever; + { + temp = CastTransmute(x); + Return() + } + } +} + // CHECK-LABEL: @check_from_uninhabited( #[no_mangle] #[custom_mir(dialect = "runtime", phase = "optimized")] @@ -366,6 +399,40 @@ pub unsafe fn check_issue_109992(x: ()) -> [(); 1] { } } +// CHECK-LABEL: @check_unit_to_never( +#[no_mangle] +#[custom_mir(dialect = "runtime", phase = "optimized")] +pub unsafe fn check_unit_to_never(x: ()) { + // This uses custom MIR to avoid MIR optimizations having removed ZST ops. + + // CHECK-NOT: trap + // CHECK: call void @llvm.trap + // CHECK-NOT: trap + mir!{ + let temp: ZstNever; + { + temp = CastTransmute(x); + Return() + } + } +} + +// CHECK-LABEL: @check_unit_from_never( +#[no_mangle] +#[custom_mir(dialect = "runtime", phase = "optimized")] +pub unsafe fn check_unit_from_never(x: ZstNever) -> () { + // This uses custom MIR to avoid MIR optimizations having removed ZST ops. + + // CHECK: start + // CHECK-NEXT: ret void + mir!{ + { + RET = CastTransmute(x); + Return() + } + } +} + // CHECK-LABEL: @check_maybe_uninit_pair(i16 %x.0, i64 %x.1) #[no_mangle] pub unsafe fn check_maybe_uninit_pair( diff --git a/tests/codegen/issues/issue-105386-ub-in-debuginfo.rs b/tests/codegen/issues/issue-105386-ub-in-debuginfo.rs index 2ee4d7cca..6e0eacfe4 100644 --- a/tests/codegen/issues/issue-105386-ub-in-debuginfo.rs +++ b/tests/codegen/issues/issue-105386-ub-in-debuginfo.rs @@ -1,4 +1,5 @@ -// compile-flags: --crate-type=lib -O -Cdebuginfo=2 -Cno-prepopulate-passes +// compile-flags: --crate-type=lib -O -Cdebuginfo=2 -Cno-prepopulate-passes -Zmir-enable-passes=-ScalarReplacementOfAggregates +// MIR SROA will decompose the closure // min-llvm-version: 15.0 # this test uses opaque pointer notation #![feature(stmt_expr_attributes)] @@ -15,8 +16,8 @@ pub fn outer_function(x: S, y: S) -> usize { // Check that we do not attempt to load from the spilled arg before it is assigned to // when generating debuginfo. // CHECK-LABEL: @outer_function -// CHECK: [[spill:%.*]] = alloca %"[closure@{{.*.rs}}:9:23: 9:25]" -// CHECK-NOT: [[ptr_tmp:%.*]] = getelementptr inbounds %"[closure@{{.*.rs}}:9:23: 9:25]", ptr [[spill]] +// CHECK: [[spill:%.*]] = alloca %"[closure@{{.*.rs}}:10:23: 10:25]" +// CHECK-NOT: [[ptr_tmp:%.*]] = getelementptr inbounds %"[closure@{{.*.rs}}:10:23: 10:25]", ptr [[spill]] // CHECK-NOT: [[load:%.*]] = load ptr, ptr // CHECK: call void @llvm.lifetime.start{{.*}}({{.*}}, ptr [[spill]]) // CHECK: [[inner:%.*]] = getelementptr inbounds %"{{.*}}", ptr [[spill]] diff --git a/tests/codegen/issues/issue-111603.rs b/tests/codegen/issues/issue-111603.rs index 90b3c314d..06429ed3f 100644 --- a/tests/codegen/issues/issue-111603.rs +++ b/tests/codegen/issues/issue-111603.rs @@ -5,6 +5,18 @@ use std::sync::Arc; +// CHECK-LABEL: @new_from_array +#[no_mangle] +pub fn new_from_array(x: u64) -> Arc<[u64]> { + // Ensure that we only generate one alloca for the array. + + // CHECK: alloca + // CHECK-SAME: [1000 x i64] + // CHECK-NOT: alloca + let array = [x; 1000]; + Arc::new(array) +} + // CHECK-LABEL: @new_uninit #[no_mangle] pub fn new_uninit(x: u64) -> Arc<[u64; 1000]> { diff --git a/tests/codegen/issues/issue-114312.rs b/tests/codegen/issues/issue-114312.rs new file mode 100644 index 000000000..28b029a8b --- /dev/null +++ b/tests/codegen/issues/issue-114312.rs @@ -0,0 +1,27 @@ +// compile-flags: -O +// min-system-llvm-version: 17 +// only-x86_64-unknown-linux-gnu + +// We want to check that this function does not mis-optimize to loop jumping. + +#![crate_type = "lib"] + +#[repr(C)] +pub enum Expr { + Sum, + // must have more than usize data + Sub(usize, u8), +} + +#[no_mangle] +pub extern "C" fn issue_114312(expr: Expr) { + // CHECK-LABEL: @issue_114312( + // CHECK-NOT: readonly + // CHECK-SAME: byval + // CHECK-NEXT: start: + // CHECK-NEXT: ret void + match expr { + Expr::Sum => {} + Expr::Sub(_, _) => issue_114312(Expr::Sum), + } +} diff --git a/tests/codegen/issues/issue-86106.rs b/tests/codegen/issues/issue-86106.rs index c0be7fab2..be5034dcf 100644 --- a/tests/codegen/issues/issue-86106.rs +++ b/tests/codegen/issues/issue-86106.rs @@ -7,7 +7,7 @@ #![crate_type = "lib"] -// CHECK-LABEL: define void @string_new +// CHECK-LABEL: define {{(dso_local )?}}void @string_new #[no_mangle] pub fn string_new() -> String { // CHECK: store ptr inttoptr @@ -17,7 +17,7 @@ pub fn string_new() -> String { String::new() } -// CHECK-LABEL: define void @empty_to_string +// CHECK-LABEL: define {{(dso_local )?}}void @empty_to_string #[no_mangle] pub fn empty_to_string() -> String { // CHECK: store ptr inttoptr diff --git a/tests/codegen/link_section.rs b/tests/codegen/link_section.rs index 88b8692b0..2b26b604a 100644 --- a/tests/codegen/link_section.rs +++ b/tests/codegen/link_section.rs @@ -3,7 +3,7 @@ #![crate_type = "lib"] -// CHECK: @VAR1 = constant <{ [4 x i8] }> <{ [4 x i8] c"\01\00\00\00" }>, section ".test_one" +// CHECK: @VAR1 = {{(dso_local )?}}constant <{ [4 x i8] }> <{ [4 x i8] c"\01\00\00\00" }>, section ".test_one" #[no_mangle] #[link_section = ".test_one"] #[cfg(target_endian = "little")] @@ -19,17 +19,17 @@ pub enum E { B(f32) } -// CHECK: @VAR2 = constant {{.*}}, section ".test_two" +// CHECK: @VAR2 = {{(dso_local )?}}constant {{.*}}, section ".test_two" #[no_mangle] #[link_section = ".test_two"] pub static VAR2: E = E::A(666); -// CHECK: @VAR3 = constant {{.*}}, section ".test_three" +// CHECK: @VAR3 = {{(dso_local )?}}constant {{.*}}, section ".test_three" #[no_mangle] #[link_section = ".test_three"] pub static VAR3: E = E::B(1.); -// CHECK: define void @fn1() {{.*}} section ".test_four" { +// CHECK: define {{(dso_local )?}}void @fn1() {{.*}} section ".test_four" { #[no_mangle] #[link_section = ".test_four"] pub fn fn1() {} diff --git a/tests/codegen/mem-replace-simple-type.rs b/tests/codegen/mem-replace-simple-type.rs index 4253ef136..751aeaa2b 100644 --- a/tests/codegen/mem-replace-simple-type.rs +++ b/tests/codegen/mem-replace-simple-type.rs @@ -32,3 +32,23 @@ pub fn replace_ref_str<'a>(r: &mut &'a str, v: &'a str) -> &'a str { // CHECK: ret { ptr, i64 } %[[P2]] std::mem::replace(r, v) } + +#[no_mangle] +// CHECK-LABEL: @replace_short_array_3( +pub fn replace_short_array_3(r: &mut [u32; 3], v: [u32; 3]) -> [u32; 3] { + // CHECK-NOT: alloca + // CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %0, ptr align 4 %r, i64 12, i1 false) + // CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %r, ptr align 4 %v, i64 12, i1 false) + std::mem::replace(r, v) +} + +#[no_mangle] +// CHECK-LABEL: @replace_short_array_4( +pub fn replace_short_array_4(r: &mut [u32; 4], v: [u32; 4]) -> [u32; 4] { + // CHECK-NOT: alloca + // CHECK: %[[R:.+]] = load <4 x i32>, ptr %r, align 4 + // CHECK: store <4 x i32> %[[R]], ptr %0 + // CHECK: %[[V:.+]] = load <4 x i32>, ptr %v, align 4 + // CHECK: store <4 x i32> %[[V]], ptr %r + std::mem::replace(r, v) +} diff --git a/tests/codegen/mir-inlined-line-numbers.rs b/tests/codegen/mir-inlined-line-numbers.rs index 19d83f0ee..d13527b95 100644 --- a/tests/codegen/mir-inlined-line-numbers.rs +++ b/tests/codegen/mir-inlined-line-numbers.rs @@ -19,7 +19,7 @@ pub fn example() { } // CHECK-LABEL: @example -// CHECK: tail call void @bar(), !dbg [[DBG_ID:![0-9]+]] +// CHECK: tail call void @bar(){{( #[0-9]+)?}}, !dbg [[DBG_ID:![0-9]+]] // CHECK: [[DBG_ID]] = !DILocation(line: 7, // CHECK-SAME: inlinedAt: [[INLINE_ID:![0-9]+]]) // CHECK: [[INLINE_ID]] = !DILocation(line: 18, diff --git a/tests/codegen/naked-nocoverage.rs b/tests/codegen/naked-nocoverage.rs index 91a6260bf..3c755e49c 100644 --- a/tests/codegen/naked-nocoverage.rs +++ b/tests/codegen/naked-nocoverage.rs @@ -11,7 +11,7 @@ use std::arch::asm; #[naked] #[no_mangle] pub unsafe extern "C" fn f() { - // CHECK: define void @f() + // CHECK: define {{(dso_local )?}}void @f() // CHECK-NEXT: start: // CHECK-NEXT: call void asm // CHECK-NEXT: unreachable diff --git a/tests/codegen/naked-noinline.rs b/tests/codegen/naked-noinline.rs index c0ac69f4e..5cfb500c0 100644 --- a/tests/codegen/naked-noinline.rs +++ b/tests/codegen/naked-noinline.rs @@ -12,7 +12,7 @@ use std::arch::asm; pub unsafe extern "C" fn f() { // Check that f has naked and noinline attributes. // - // CHECK: define void @f() unnamed_addr [[ATTR:#[0-9]+]] + // CHECK: define {{(dso_local )?}}void @f() unnamed_addr [[ATTR:#[0-9]+]] // CHECK-NEXT: start: // CHECK-NEXT: call void asm asm!("", options(noreturn)); @@ -22,7 +22,7 @@ pub unsafe extern "C" fn f() { pub unsafe fn g() { // Check that call to f is not inlined. // - // CHECK-LABEL: define void @g() + // CHECK-LABEL: define {{(dso_local )?}}void @g() // CHECK-NEXT: start: // CHECK-NEXT: call void @f() f(); diff --git a/tests/codegen/personality_lifetimes.rs b/tests/codegen/personality_lifetimes.rs index 2104022f5..9ff7a9b3e 100644 --- a/tests/codegen/personality_lifetimes.rs +++ b/tests/codegen/personality_lifetimes.rs @@ -1,5 +1,6 @@ // ignore-msvc // ignore-wasm32-bare compiled with panic=abort by default +// needs-unwind // compile-flags: -O -C no-prepopulate-passes diff --git a/tests/codegen/ptr-read-metadata.rs b/tests/codegen/ptr-read-metadata.rs index e1e327266..73d1db6df 100644 --- a/tests/codegen/ptr-read-metadata.rs +++ b/tests/codegen/ptr-read-metadata.rs @@ -9,7 +9,7 @@ use std::mem::MaybeUninit; -// CHECK-LABEL: define noundef i8 @copy_byte( +// CHECK-LABEL: define {{(dso_local )?}}noundef i8 @copy_byte( #[no_mangle] pub unsafe fn copy_byte(p: *const u8) -> u8 { // CHECK-NOT: load @@ -19,7 +19,7 @@ pub unsafe fn copy_byte(p: *const u8) -> u8 { *p } -// CHECK-LABEL: define noundef i8 @read_byte( +// CHECK-LABEL: define {{(dso_local )?}}noundef i8 @read_byte( #[no_mangle] pub unsafe fn read_byte(p: *const u8) -> u8 { // CHECK-NOT: load @@ -29,7 +29,7 @@ pub unsafe fn read_byte(p: *const u8) -> u8 { p.read() } -// CHECK-LABEL: define i8 @read_byte_maybe_uninit( +// CHECK-LABEL: define {{(dso_local )?}}i8 @read_byte_maybe_uninit( #[no_mangle] pub unsafe fn read_byte_maybe_uninit(p: *const MaybeUninit) -> MaybeUninit { // CHECK-NOT: load @@ -39,7 +39,7 @@ pub unsafe fn read_byte_maybe_uninit(p: *const MaybeUninit) -> MaybeUninit) -> u8 { // CHECK-NOT: load @@ -49,7 +49,7 @@ pub unsafe fn read_byte_assume_init(p: &MaybeUninit) -> u8 { p.assume_init_read() } -// CHECK-LABEL: define noundef i32 @copy_char( +// CHECK-LABEL: define {{(dso_local )?}}noundef i32 @copy_char( #[no_mangle] pub unsafe fn copy_char(p: *const char) -> char { // CHECK-NOT: load @@ -60,7 +60,7 @@ pub unsafe fn copy_char(p: *const char) -> char { *p } -// CHECK-LABEL: define noundef i32 @read_char( +// CHECK-LABEL: define {{(dso_local )?}}noundef i32 @read_char( #[no_mangle] pub unsafe fn read_char(p: *const char) -> char { // CHECK-NOT: load @@ -71,7 +71,7 @@ pub unsafe fn read_char(p: *const char) -> char { p.read() } -// CHECK-LABEL: define i32 @read_char_maybe_uninit( +// CHECK-LABEL: define {{(dso_local )?}}i32 @read_char_maybe_uninit( #[no_mangle] pub unsafe fn read_char_maybe_uninit(p: *const MaybeUninit) -> MaybeUninit { // CHECK-NOT: load @@ -82,7 +82,7 @@ pub unsafe fn read_char_maybe_uninit(p: *const MaybeUninit) -> MaybeUninit p.read() } -// CHECK-LABEL: define noundef i32 @read_char_assume_init( +// CHECK-LABEL: define {{(dso_local )?}}noundef i32 @read_char_assume_init( #[no_mangle] pub unsafe fn read_char_assume_init(p: &MaybeUninit) -> char { // CHECK-NOT: load diff --git a/tests/codegen/sanitizer-cfi-emit-type-metadata-id-itanium-cxx-abi.rs b/tests/codegen/sanitizer-cfi-emit-type-metadata-id-itanium-cxx-abi.rs index ebb26cd35..63e63c5d4 100644 --- a/tests/codegen/sanitizer-cfi-emit-type-metadata-id-itanium-cxx-abi.rs +++ b/tests/codegen/sanitizer-cfi-emit-type-metadata-id-itanium-cxx-abi.rs @@ -61,7 +61,19 @@ pub type Type9 = impl Send; pub type Type10 = impl Send; pub type Type11 = impl Send; -pub fn fn1<'a>() { +pub fn fn1<'a>() where + Type1: 'static, + Type2: 'static, + Type3: 'static, + Type4: 'static, + Type5: 'static, + Type6: 'static, + Type7: 'static, + Type8: 'static, + Type9: 'static, + Type10: 'static, + Type11: 'static, +{ // Closure let closure1 = || { }; let _: Type1 = closure1; @@ -587,6 +599,6 @@ pub fn foo149(_: Type14, _: Type14, _: Type14) { } // CHECK: ![[TYPE144]] = !{i64 0, !"_ZTSFvu3refIvEE"} // CHECK: ![[TYPE145]] = !{i64 0, !"_ZTSFvu3refIvES_E"} // CHECK: ![[TYPE146]] = !{i64 0, !"_ZTSFvu3refIvES_S_E"} -// CHECK: ![[TYPE147]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarE -// CHECK: ![[TYPE148]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarS_E -// CHECK: ![[TYPE149]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarS_S_E +// CHECK: ![[TYPE147]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarE"} +// CHECK: ![[TYPE148]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarS_E"} +// CHECK: ![[TYPE149]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarS_S_E"} diff --git a/tests/codegen/sanitizer-safestack-attr-check.rs b/tests/codegen/sanitizer-safestack-attr-check.rs new file mode 100644 index 000000000..b73ed00e7 --- /dev/null +++ b/tests/codegen/sanitizer-safestack-attr-check.rs @@ -0,0 +1,11 @@ +// This tests that the safestack attribute is applied when enabling the safe-stack sanitizer. +// +// needs-sanitizer-safestack +// compile-flags: -Zsanitizer=safestack + +#![crate_type = "lib"] + +// CHECK: ; Function Attrs:{{.*}}safestack +pub fn tagged() {} + +// CHECK: attributes #0 = {{.*}}safestack diff --git a/tests/codegen/slice-iter-fold.rs b/tests/codegen/slice-iter-fold.rs new file mode 100644 index 000000000..9391c1761 --- /dev/null +++ b/tests/codegen/slice-iter-fold.rs @@ -0,0 +1,14 @@ +// ignore-debug: the debug assertions get in the way +// compile-flags: -O +// min-llvm-version: 16 +#![crate_type = "lib"] + +// CHECK-LABEL: @slice_fold_to_last +#[no_mangle] +pub fn slice_fold_to_last(slice: &[i32]) -> Option<&i32> { + // CHECK-NOT: loop + // CHECK-NOT: br + // CHECK-NOT: call + // CHECK: ret + slice.iter().fold(None, |_, i| Some(i)) +} diff --git a/tests/codegen/stack-protector.rs b/tests/codegen/stack-protector.rs index a24e6f1e4..a680789af 100644 --- a/tests/codegen/stack-protector.rs +++ b/tests/codegen/stack-protector.rs @@ -10,25 +10,25 @@ pub fn foo() { // CHECK: @foo() unnamed_addr #0 - // all-NOT: attributes #0 = { {{.*}} sspstrong {{.*}} } - // all-NOT: attributes #0 = { {{.*}} ssp {{.*}} } - // all: attributes #0 = { {{.*}} sspreq {{.*}} } - // all-NOT: attributes #0 = { {{.*}} sspstrong {{.*}} } - // all-NOT: attributes #0 = { {{.*}} ssp {{.*}} } + // all-NOT: attributes #0 = { {{.*}}sspstrong {{.*}} } + // all-NOT: attributes #0 = { {{.*}}ssp {{.*}} } + // all: attributes #0 = { {{.*}}sspreq {{.*}} } + // all-NOT: attributes #0 = { {{.*}}sspstrong {{.*}} } + // all-NOT: attributes #0 = { {{.*}}ssp {{.*}} } - // strong-NOT: attributes #0 = { {{.*}} sspreq {{.*}} } - // strong-NOT: attributes #0 = { {{.*}} ssp {{.*}} } - // strong: attributes #0 = { {{.*}} sspstrong {{.*}} } - // strong-NOT: attributes #0 = { {{.*}} sspreq {{.*}} } - // strong-NOT: attributes #0 = { {{.*}} ssp {{.*}} } + // strong-NOT: attributes #0 = { {{.*}}sspreq {{.*}} } + // strong-NOT: attributes #0 = { {{.*}}ssp {{.*}} } + // strong: attributes #0 = { {{.*}}sspstrong {{.*}} } + // strong-NOT: attributes #0 = { {{.*}}sspreq {{.*}} } + // strong-NOT: attributes #0 = { {{.*}}ssp {{.*}} } - // basic-NOT: attributes #0 = { {{.*}} sspreq {{.*}} } - // basic-NOT: attributes #0 = { {{.*}} sspstrong {{.*}} } - // basic: attributes #0 = { {{.*}} ssp {{.*}} } - // basic-NOT: attributes #0 = { {{.*}} sspreq {{.*}} } - // basic-NOT: attributes #0 = { {{.*}} sspstrong {{.*}} } + // basic-NOT: attributes #0 = { {{.*}}sspreq {{.*}} } + // basic-NOT: attributes #0 = { {{.*}}sspstrong {{.*}} } + // basic: attributes #0 = { {{.*}}ssp {{.*}} } + // basic-NOT: attributes #0 = { {{.*}}sspreq {{.*}} } + // basic-NOT: attributes #0 = { {{.*}}sspstrong {{.*}} } - // none-NOT: attributes #0 = { {{.*}} sspreq {{.*}} } - // none-NOT: attributes #0 = { {{.*}} sspstrong {{.*}} } - // none-NOT: attributes #0 = { {{.*}} ssp {{.*}} } + // none-NOT: attributes #0 = { {{.*}}sspreq {{.*}} } + // none-NOT: attributes #0 = { {{.*}}sspstrong {{.*}} } + // none-NOT: attributes #0 = { {{.*}}ssp {{.*}} } } diff --git a/tests/codegen/swap-simd-types.rs b/tests/codegen/swap-simd-types.rs index c90b277eb..3472a42b0 100644 --- a/tests/codegen/swap-simd-types.rs +++ b/tests/codegen/swap-simd-types.rs @@ -30,3 +30,12 @@ pub fn swap_m256_slice(x: &mut [__m256], y: &mut [__m256]) { x.swap_with_slice(y); } } + +// CHECK-LABEL: @swap_bytes32 +#[no_mangle] +pub fn swap_bytes32(x: &mut [u8; 32], y: &mut [u8; 32]) { +// CHECK-NOT: alloca +// CHECK: load <32 x i8>{{.+}}align 1 +// CHECK: store <32 x i8>{{.+}}align 1 + swap(x, y) +} diff --git a/tests/codegen/swap-small-types.rs b/tests/codegen/swap-small-types.rs index 03e2a2327..27bc00bc3 100644 --- a/tests/codegen/swap-small-types.rs +++ b/tests/codegen/swap-small-types.rs @@ -1,4 +1,4 @@ -// compile-flags: -O +// compile-flags: -O -Z merge-functions=disabled // only-x86_64 // ignore-debug: the debug assertions get in the way @@ -8,13 +8,43 @@ use std::mem::swap; type RGB48 = [u16; 3]; +// CHECK-LABEL: @swap_rgb48_manually( +#[no_mangle] +pub fn swap_rgb48_manually(x: &mut RGB48, y: &mut RGB48) { + // FIXME: See #115212 for why this has an alloca again + + // CHECK: alloca [3 x i16], align 2 + // CHECK: call void @llvm.memcpy.p0.p0.i64({{.+}}, i64 6, i1 false) + // CHECK: call void @llvm.memcpy.p0.p0.i64({{.+}}, i64 6, i1 false) + // CHECK: call void @llvm.memcpy.p0.p0.i64({{.+}}, i64 6, i1 false) + + let temp = *x; + *x = *y; + *y = temp; +} + // CHECK-LABEL: @swap_rgb48 #[no_mangle] pub fn swap_rgb48(x: &mut RGB48, y: &mut RGB48) { - // FIXME MIR inlining messes up LLVM optimizations. -// WOULD-CHECK-NOT: alloca -// WOULD-CHECK: load i48 -// WOULD-CHECK: store i48 + // FIXME: See #115212 for why this has an alloca again + + // CHECK: alloca [3 x i16], align 2 + // CHECK: call void @llvm.memcpy.p0.p0.i64({{.+}}, i64 6, i1 false) + // CHECK: call void @llvm.memcpy.p0.p0.i64({{.+}}, i64 6, i1 false) + // CHECK: call void @llvm.memcpy.p0.p0.i64({{.+}}, i64 6, i1 false) + swap(x, y) +} + +type RGBA64 = [u16; 4]; + +// CHECK-LABEL: @swap_rgba64 +#[no_mangle] +pub fn swap_rgba64(x: &mut RGBA64, y: &mut RGBA64) { + // CHECK-NOT: alloca + // CHECK-DAG: %[[XVAL:.+]] = load <4 x i16>, ptr %x, align 2 + // CHECK-DAG: %[[YVAL:.+]] = load <4 x i16>, ptr %y, align 2 + // CHECK-DAG: store <4 x i16> %[[YVAL]], ptr %x, align 2 + // CHECK-DAG: store <4 x i16> %[[XVAL]], ptr %y, align 2 swap(x, y) } diff --git a/tests/codegen/tuple-layout-opt.rs b/tests/codegen/tuple-layout-opt.rs index 35f760851..309fe1d5e 100644 --- a/tests/codegen/tuple-layout-opt.rs +++ b/tests/codegen/tuple-layout-opt.rs @@ -6,31 +6,31 @@ #![crate_type="lib"] type ScalarZstLast = (u128, ()); -// CHECK: define i128 @test_ScalarZstLast(i128 %_1) +// CHECK: define {{(dso_local )?}}i128 @test_ScalarZstLast(i128 %_1) #[no_mangle] pub fn test_ScalarZstLast(_: ScalarZstLast) -> ScalarZstLast { loop {} } type ScalarZstFirst = ((), u128); -// CHECK: define i128 @test_ScalarZstFirst(i128 %_1) +// CHECK: define {{(dso_local )?}}i128 @test_ScalarZstFirst(i128 %_1) #[no_mangle] pub fn test_ScalarZstFirst(_: ScalarZstFirst) -> ScalarZstFirst { loop {} } type ScalarPairZstLast = (u8, u128, ()); -// CHECK: define { i128, i8 } @test_ScalarPairZstLast(i128 %_1.0, i8 %_1.1) +// CHECK: define {{(dso_local )?}}{ i128, i8 } @test_ScalarPairZstLast(i128 %_1.0, i8 %_1.1) #[no_mangle] pub fn test_ScalarPairZstLast(_: ScalarPairZstLast) -> ScalarPairZstLast { loop {} } type ScalarPairZstFirst = ((), u8, u128); -// CHECK: define { i8, i128 } @test_ScalarPairZstFirst(i8 %_1.0, i128 %_1.1) +// CHECK: define {{(dso_local )?}}{ i8, i128 } @test_ScalarPairZstFirst(i8 %_1.0, i128 %_1.1) #[no_mangle] pub fn test_ScalarPairZstFirst(_: ScalarPairZstFirst) -> ScalarPairZstFirst { loop {} } type ScalarPairLotsOfZsts = ((), u8, (), u128, ()); -// CHECK: define { i128, i8 } @test_ScalarPairLotsOfZsts(i128 %_1.0, i8 %_1.1) +// CHECK: define {{(dso_local )?}}{ i128, i8 } @test_ScalarPairLotsOfZsts(i128 %_1.0, i8 %_1.1) #[no_mangle] pub fn test_ScalarPairLotsOfZsts(_: ScalarPairLotsOfZsts) -> ScalarPairLotsOfZsts { loop {} } type ScalarPairLottaNesting = (((), ((), u8, (), u128, ())), ()); -// CHECK: define { i128, i8 } @test_ScalarPairLottaNesting(i128 %_1.0, i8 %_1.1) +// CHECK: define {{(dso_local )?}}{ i128, i8 } @test_ScalarPairLottaNesting(i128 %_1.0, i8 %_1.1) #[no_mangle] pub fn test_ScalarPairLottaNesting(_: ScalarPairLottaNesting) -> ScalarPairLottaNesting { loop {} } diff --git a/tests/codegen/unchecked_shifts.rs b/tests/codegen/unchecked_shifts.rs index 60d0cb09a..0924dda08 100644 --- a/tests/codegen/unchecked_shifts.rs +++ b/tests/codegen/unchecked_shifts.rs @@ -8,6 +8,7 @@ // CHECK-LABEL: @unchecked_shl_unsigned_same #[no_mangle] pub unsafe fn unchecked_shl_unsigned_same(a: u32, b: u32) -> u32 { + // CHECK-NOT: assume // CHECK-NOT: and i32 // CHECK: shl i32 %a, %b // CHECK-NOT: and i32 @@ -30,6 +31,7 @@ pub unsafe fn unchecked_shl_unsigned_smaller(a: u16, b: u32) -> u16 { // CHECK-LABEL: @unchecked_shl_unsigned_bigger #[no_mangle] pub unsafe fn unchecked_shl_unsigned_bigger(a: u64, b: u32) -> u64 { + // CHECK-NOT: assume // CHECK: %[[EXT:.+]] = zext i32 %b to i64 // CHECK: shl i64 %a, %[[EXT]] a.unchecked_shl(b) @@ -38,6 +40,7 @@ pub unsafe fn unchecked_shl_unsigned_bigger(a: u64, b: u32) -> u64 { // CHECK-LABEL: @unchecked_shr_signed_same #[no_mangle] pub unsafe fn unchecked_shr_signed_same(a: i32, b: u32) -> i32 { + // CHECK-NOT: assume // CHECK-NOT: and i32 // CHECK: ashr i32 %a, %b // CHECK-NOT: and i32 @@ -60,6 +63,7 @@ pub unsafe fn unchecked_shr_signed_smaller(a: i16, b: u32) -> i16 { // CHECK-LABEL: @unchecked_shr_signed_bigger #[no_mangle] pub unsafe fn unchecked_shr_signed_bigger(a: i64, b: u32) -> i64 { + // CHECK-NOT: assume // CHECK: %[[EXT:.+]] = zext i32 %b to i64 // CHECK: ashr i64 %a, %[[EXT]] a.unchecked_shr(b) diff --git a/tests/codegen/union-abi.rs b/tests/codegen/union-abi.rs index c18f2a49f..8481ca8cc 100644 --- a/tests/codegen/union-abi.rs +++ b/tests/codegen/union-abi.rs @@ -17,60 +17,60 @@ pub struct i64x4(i64, i64, i64, i64); #[derive(Copy, Clone)] pub union UnionI64x4{ a:(), b: i64x4 } -// CHECK: define void @test_UnionI64x4({{<4 x i64>\*|ptr}} {{.*}} %_1) +// CHECK: define {{(dso_local )?}}void @test_UnionI64x4({{<4 x i64>\*|ptr}} {{.*}} %_1) #[no_mangle] pub fn test_UnionI64x4(_: UnionI64x4) { loop {} } pub union UnionI64x4_{ a: i64x4, b: (), c:i64x4, d: Unhab, e: ((),()), f: UnionI64x4 } -// CHECK: define void @test_UnionI64x4_({{<4 x i64>\*|ptr}} {{.*}} %_1) +// CHECK: define {{(dso_local )?}}void @test_UnionI64x4_({{<4 x i64>\*|ptr}} {{.*}} %_1) #[no_mangle] pub fn test_UnionI64x4_(_: UnionI64x4_) { loop {} } pub union UnionI64x4I64{ a: i64x4, b: i64 } -// CHECK: define void @test_UnionI64x4I64({{%UnionI64x4I64\*|ptr}} {{.*}} %_1) +// CHECK: define {{(dso_local )?}}void @test_UnionI64x4I64({{%UnionI64x4I64\*|ptr}} {{.*}} %_1) #[no_mangle] pub fn test_UnionI64x4I64(_: UnionI64x4I64) { loop {} } pub union UnionI64x4Tuple{ a: i64x4, b: (i64, i64, i64, i64) } -// CHECK: define void @test_UnionI64x4Tuple({{%UnionI64x4Tuple\*|ptr}} {{.*}} %_1) +// CHECK: define {{(dso_local )?}}void @test_UnionI64x4Tuple({{%UnionI64x4Tuple\*|ptr}} {{.*}} %_1) #[no_mangle] pub fn test_UnionI64x4Tuple(_: UnionI64x4Tuple) { loop {} } pub union UnionF32{a:f32} -// CHECK: define float @test_UnionF32(float %_1) +// CHECK: define {{(dso_local )?}}float @test_UnionF32(float %_1) #[no_mangle] pub fn test_UnionF32(_: UnionF32) -> UnionF32 { loop {} } pub union UnionF32F32{a:f32, b:f32} -// CHECK: define float @test_UnionF32F32(float %_1) +// CHECK: define {{(dso_local )?}}float @test_UnionF32F32(float %_1) #[no_mangle] pub fn test_UnionF32F32(_: UnionF32F32) -> UnionF32F32 { loop {} } pub union UnionF32U32{a:f32, b:u32} -// CHECK: define i32 @test_UnionF32U32(i32{{( %0)?}}) +// CHECK: define {{(dso_local )?}}i32 @test_UnionF32U32(i32{{( %0)?}}) #[no_mangle] pub fn test_UnionF32U32(_: UnionF32U32) -> UnionF32U32 { loop {} } pub union UnionU128{a:u128} -// CHECK: define i128 @test_UnionU128(i128 %_1) +// CHECK: define {{(dso_local )?}}i128 @test_UnionU128(i128 %_1) #[no_mangle] pub fn test_UnionU128(_: UnionU128) -> UnionU128 { loop {} } #[repr(C)] pub union CUnionU128{a:u128} -// CHECK: define void @test_CUnionU128({{%CUnionU128\*|ptr}} {{.*}} %_1) +// CHECK: define {{(dso_local )?}}void @test_CUnionU128({{%CUnionU128\*|ptr}} {{.*}} %_1) #[no_mangle] pub fn test_CUnionU128(_: CUnionU128) { loop {} } pub union UnionBool { b:bool } -// CHECK: define noundef zeroext i1 @test_UnionBool(i8 %b) +// CHECK: define {{(dso_local )?}}noundef zeroext i1 @test_UnionBool(i8 %b) #[no_mangle] pub fn test_UnionBool(b: UnionBool) -> bool { unsafe { b.b } } // CHECK: %0 = trunc i8 %b to i1 diff --git a/tests/codegen/unwind-abis/c-unwind-abi.rs b/tests/codegen/unwind-abis/c-unwind-abi.rs index e258dbcac..fa5b6bad7 100644 --- a/tests/codegen/unwind-abis/c-unwind-abi.rs +++ b/tests/codegen/unwind-abis/c-unwind-abi.rs @@ -1,4 +1,5 @@ // compile-flags: -C opt-level=0 +// needs-unwind // Test that `nounwind` attributes are correctly applied to exported `C` and `C-unwind` extern // functions. `C-unwind` functions MUST NOT have this attribute. We disable optimizations above diff --git a/tests/codegen/unwind-abis/cdecl-unwind-abi.rs b/tests/codegen/unwind-abis/cdecl-unwind-abi.rs index 19a722883..64746d321 100644 --- a/tests/codegen/unwind-abis/cdecl-unwind-abi.rs +++ b/tests/codegen/unwind-abis/cdecl-unwind-abi.rs @@ -1,4 +1,5 @@ // compile-flags: -C opt-level=0 +// needs-unwind // Test that `nounwind` attributes are correctly applied to exported `cdecl` and // `cdecl-unwind` extern functions. `cdecl-unwind` functions MUST NOT have this attribute. We diff --git a/tests/codegen/unwind-abis/nounwind-on-stable-panic-unwind.rs b/tests/codegen/unwind-abis/nounwind-on-stable-panic-unwind.rs index c1c5bbdda..dc3911cd4 100644 --- a/tests/codegen/unwind-abis/nounwind-on-stable-panic-unwind.rs +++ b/tests/codegen/unwind-abis/nounwind-on-stable-panic-unwind.rs @@ -1,5 +1,6 @@ // compile-flags: -C opt-level=0 // ignore-wasm32-bare compiled with panic=abort by default +// needs-unwind #![crate_type = "lib"] diff --git a/tests/codegen/unwind-abis/system-unwind-abi.rs b/tests/codegen/unwind-abis/system-unwind-abi.rs index 2591c1d48..f274a33b0 100644 --- a/tests/codegen/unwind-abis/system-unwind-abi.rs +++ b/tests/codegen/unwind-abis/system-unwind-abi.rs @@ -1,4 +1,5 @@ // compile-flags: -C opt-level=0 +// needs-unwind // Test that `nounwind` attributes are correctly applied to exported `system` and `system-unwind` // extern functions. `system-unwind` functions MUST NOT have this attribute. We disable diff --git a/tests/codegen/unwind-extern-exports.rs b/tests/codegen/unwind-extern-exports.rs index 6ac3c079f..4e1e719d5 100644 --- a/tests/codegen/unwind-extern-exports.rs +++ b/tests/codegen/unwind-extern-exports.rs @@ -1,5 +1,6 @@ // compile-flags: -C opt-level=0 // ignore-wasm32-bare compiled with panic=abort by default +// needs-unwind #![crate_type = "lib"] #![feature(c_unwind)] diff --git a/tests/codegen/unwind-extern-imports.rs b/tests/codegen/unwind-extern-imports.rs index e33e3e805..260dcc628 100644 --- a/tests/codegen/unwind-extern-imports.rs +++ b/tests/codegen/unwind-extern-imports.rs @@ -1,5 +1,6 @@ // compile-flags: -C no-prepopulate-passes // ignore-wasm32-bare compiled with panic=abort by default +// needs-unwind #![crate_type = "lib"] #![feature(c_unwind)] diff --git a/tests/codegen/vec-shrink-panik.rs b/tests/codegen/vec-shrink-panik.rs index 88b7edff2..14fef4e2c 100644 --- a/tests/codegen/vec-shrink-panik.rs +++ b/tests/codegen/vec-shrink-panik.rs @@ -5,6 +5,7 @@ // [new]min-llvm-version: 17 // compile-flags: -O // ignore-debug: the debug assertions get in the way +// needs-unwind #![crate_type = "lib"] #![feature(shrink_to)] @@ -36,14 +37,6 @@ pub fn issue71861(vec: Vec) -> Box<[u32]> { // CHECK-LABEL: @issue75636 #[no_mangle] pub fn issue75636<'a>(iter: &[&'a str]) -> Box<[&'a str]> { - // CHECK-NOT: panic - - // Call to panic_cannot_unwind in case of double-panic is expected, - // on LLVM 16 and older, but other panics are not. - // old: filter - // old-NEXT: ; call core::panicking::panic_cannot_unwind - // old-NEXT: panic_cannot_unwind - // CHECK-NOT: panic iter.iter().copied().collect() } diff --git a/tests/incremental/const-generics/hash-tyvid-regression-1.rs b/tests/incremental/const-generics/hash-tyvid-regression-1.rs index 5ff7b19d8..06d674234 100644 --- a/tests/incremental/const-generics/hash-tyvid-regression-1.rs +++ b/tests/incremental/const-generics/hash-tyvid-regression-1.rs @@ -1,8 +1,20 @@ // revisions: cfail #![feature(generic_const_exprs, adt_const_params)] #![allow(incomplete_features)] + +use std::marker::ConstParamTy; + +#[derive(PartialEq, Eq, ConstParamTy)] +struct NonZeroUsize(usize); + +impl NonZeroUsize { + const fn get(self) -> usize { + self.0 + } +} + // regression test for #77650 -fn c() +fn c() where [T; N.get()]: Sized, { diff --git a/tests/incremental/const-generics/hash-tyvid-regression-2.rs b/tests/incremental/const-generics/hash-tyvid-regression-2.rs index 5cdd43cd7..33f226ff6 100644 --- a/tests/incremental/const-generics/hash-tyvid-regression-2.rs +++ b/tests/incremental/const-generics/hash-tyvid-regression-2.rs @@ -1,11 +1,23 @@ // revisions: cfail #![feature(generic_const_exprs, adt_const_params)] #![allow(incomplete_features)] + +use std::marker::ConstParamTy; + +#[derive(PartialEq, Eq, ConstParamTy)] +struct NonZeroUsize(usize); + +impl NonZeroUsize { + const fn get(self) -> usize { + self.0 + } +} + // regression test for #77650 -struct C([T; N.get()]) +struct C([T; N.get()]) where [T; N.get()]: Sized; -impl<'a, const N: core::num::NonZeroUsize, A, B: PartialEq> PartialEq<&'a [A]> for C +impl<'a, const N: NonZeroUsize, A, B: PartialEq> PartialEq<&'a [A]> for C where [B; N.get()]: Sized, { diff --git a/tests/incremental/const-generics/try_unify_abstract_const_regression_tests/issue-77708-3.rs b/tests/incremental/const-generics/try_unify_abstract_const_regression_tests/issue-77708-3.rs index fc114f224..f1c108fed 100644 --- a/tests/incremental/const-generics/try_unify_abstract_const_regression_tests/issue-77708-3.rs +++ b/tests/incremental/const-generics/try_unify_abstract_const_regression_tests/issue-77708-3.rs @@ -2,7 +2,18 @@ #![feature(generic_const_exprs, adt_const_params)] #![allow(incomplete_features)] -use std::{convert::TryFrom, num::NonZeroUsize}; +use std::{convert::TryFrom}; + +use std::marker::ConstParamTy; + +#[derive(PartialEq, Eq, ConstParamTy)] +struct NonZeroUsize(usize); + +impl NonZeroUsize { + const fn get(self) -> usize { + self.0 + } +} struct A([u8; N.get()]) where diff --git a/tests/incremental/hashes/match_expressions.rs b/tests/incremental/hashes/match_expressions.rs index 4429df683..4d1b3b683 100644 --- a/tests/incremental/hashes/match_expressions.rs +++ b/tests/incremental/hashes/match_expressions.rs @@ -225,6 +225,7 @@ pub fn change_mutability_of_binding_in_pattern(x: u32) -> u32 { } } +// Ignore optimized_mir in cfail2, the only change to optimized MIR is a span. #[cfg(not(any(cfail1,cfail4)))] #[rustc_clean(cfg="cfail2", except="hir_owner_nodes,optimized_mir,typeck")] #[rustc_clean(cfg="cfail3")] diff --git a/tests/incremental/issue-101518.rs b/tests/incremental/issue-101518.rs index 501be175f..39373da6a 100644 --- a/tests/incremental/issue-101518.rs +++ b/tests/incremental/issue-101518.rs @@ -1,7 +1,4 @@ -// revisions: cfail1 -// should-ice -// error-pattern: forcing query -// known-bug: #101518 +// revisions: cpass #[derive(PartialEq, Eq)] struct Id<'a> { @@ -9,9 +6,7 @@ struct Id<'a> { } fn visit_struct() { let id = Id { ns: "random1" }; - const FLAG: Id<'static> = Id { - ns: "needs_to_be_the_same", - }; + const FLAG: Id<'static> = Id { ns: "needs_to_be_the_same" }; match id { FLAG => {} _ => {} @@ -19,9 +14,7 @@ fn visit_struct() { } fn visit_struct2() { let id = Id { ns: "random2" }; - const FLAG: Id<'static> = Id { - ns: "needs_to_be_the_same", - }; + const FLAG: Id<'static> = Id { ns: "needs_to_be_the_same" }; match id { FLAG => {} _ => {} diff --git a/tests/incremental/issue-110457-same-span-closures/auxiliary/egui_inspect_derive.rs b/tests/incremental/issue-110457-same-span-closures/auxiliary/egui_inspect_derive.rs new file mode 100644 index 000000000..e7d91235e --- /dev/null +++ b/tests/incremental/issue-110457-same-span-closures/auxiliary/egui_inspect_derive.rs @@ -0,0 +1,90 @@ +// force-host +// no-prefer-dynamic +#![crate_type = "proc-macro"] + +extern crate proc_macro; + +use proc_macro::{Delimiter, Group, Ident, Literal, Punct, Spacing, Span, TokenStream, TokenTree}; + +#[proc_macro] +pub fn expand(_: TokenStream) -> TokenStream { + // Hand expansion/rewriting of + // ``` + // quote! { + // output_mut(|o| o.copied_text = "".into()); + // output_mut(|o| o.copied_text = format!("{:?}", self.tile_db)); + // }.into() + // ``` + stream([ + ident("output_mut"), + group( + Delimiter::Parenthesis, + [ + or(), + ident("o"), + or(), + ident("o"), + dot(), + ident("copied_text"), + eq(), + string(""), + dot(), + ident("into"), + group(Delimiter::Parenthesis, []), + ], + ), + semi(), + ident("output_mut"), + group( + Delimiter::Parenthesis, + [ + or(), + ident("o"), + or(), + ident("o"), + dot(), + ident("copied_text"), + eq(), + ident("format"), + bang(), + group( + Delimiter::Parenthesis, + [string("{:?}"), comma(), ident("self"), dot(), ident("tile_db")], + ), + ], + ), + semi(), + ]) +} + +fn stream(s: impl IntoIterator) -> TokenStream { + s.into_iter().collect() +} + +fn ident(i: &str) -> TokenTree { + TokenTree::Ident(Ident::new(i, Span::call_site())) +} +fn group(d: Delimiter, s: impl IntoIterator) -> TokenTree { + TokenTree::Group(Group::new(d, s.into_iter().collect())) +} +fn semi() -> TokenTree { + TokenTree::Punct(Punct::new(';', Spacing::Alone)) +} +fn or() -> TokenTree { + TokenTree::Punct(Punct::new('|', Spacing::Alone)) +} +fn dot() -> TokenTree { + TokenTree::Punct(Punct::new('.', Spacing::Alone)) +} +fn eq() -> TokenTree { + TokenTree::Punct(Punct::new('=', Spacing::Alone)) +} +fn bang() -> TokenTree { + TokenTree::Punct(Punct::new('!', Spacing::Alone)) +} +fn comma() -> TokenTree { + TokenTree::Punct(Punct::new(',', Spacing::Alone)) +} +fn string(s: &str) -> TokenTree { + TokenTree::Literal(Literal::string(s)) +} diff --git a/tests/incremental/issue-110457-same-span-closures/main.rs b/tests/incremental/issue-110457-same-span-closures/main.rs new file mode 100644 index 000000000..b44fda3d3 --- /dev/null +++ b/tests/incremental/issue-110457-same-span-closures/main.rs @@ -0,0 +1,47 @@ +// aux-build: egui_inspect_derive.rs +// revisions: cpass1 cpass2 + +extern crate egui_inspect_derive; + +pub struct TileDef { + pub layer: (), + #[cfg(cpass2)] + pub blend_graphic: String, +} + +pub(crate) struct GameState { + pub(crate) tile_db: TileDb, +} + +impl GameState { + fn inspect_mut(&mut self) { + egui_inspect_derive::expand! {} + } +} + +fn new() -> GameState { + loop {} +} + +fn main() { + let mut app = new(); + app.inspect_mut(); +} +// this is actually used +pub struct TileDb { + unknown_bg: TileDef, +} + +impl std::fmt::Debug for TileDb { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + loop {} + } +} + +pub struct PlatformOutput { + pub copied_text: String, +} + +pub fn output_mut(writer: impl FnOnce(&mut PlatformOutput) -> R) -> R { + loop {} +} 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() } - } - - 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>; // 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>; 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>; // in scope 2 at $DIR/basic_assignment.rs:+8:9: +8:15 + debug nodrop_y => _2; + let _4: std::option::Option>; scope 3 { - debug drop_x => _4; // in scope 3 at $DIR/basic_assignment.rs:+8:9: +8:15 - let _5: std::option::Option>; // in scope 3 at $DIR/basic_assignment.rs:+9:9: +9:15 + debug drop_x => _4; + let _5: std::option::Option>; 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::>::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::>::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>), max_universe: U0, variables: [] }, span: $DIR/basic_assignment.rs:20:17: 20:33, inferred_ty: std::option::Option> | 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>; // 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>; 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> 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> 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>; // in scope 3 at $DIR/basic_assignment.rs:+9:9: +9:15 + debug drop_x => _4; + let _5: std::option::Option>; 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::>::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::>::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; // 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; // 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; // 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() } - } - - 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() } - } - - 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::>(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) {std::mem::drop::>}, val: Value() } - } - - 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; + let mut _2: usize; + let mut _3: usize; + let mut _4: *mut u8; + let mut _5: std::boxed::Box; + let _6: (); + let mut _7: std::boxed::Box; + 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::>(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; + let mut _2: usize; + let mut _3: usize; + let mut _4: *mut u8; + let mut _5: std::boxed::Box; + let _6: (); + let mut _7: std::boxed::Box; + 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::>(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; // in scope 0 at $DIR/async_await.rs:+1:9: +1:14 - let mut _5: impl std::future::Future; // in scope 0 at $DIR/async_await.rs:+1:5: +1:8 - let mut _6: impl std::future::Future; // 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>; // in scope 0 at $DIR/async_await.rs:+1:9: +1:14 - let mut _11: &mut impl std::future::Future; // in scope 0 at $DIR/async_await.rs:+1:9: +1:14 - let mut _12: &mut impl std::future::Future; // 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; // in scope 0 at $DIR/async_await.rs:+2:9: +2:14 - let mut _22: impl std::future::Future; // in scope 0 at $DIR/async_await.rs:+2:5: +2:8 - let mut _23: impl std::future::Future; // 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>; // in scope 0 at $DIR/async_await.rs:+2:9: +2:14 - let mut _27: &mut impl std::future::Future; // in scope 0 at $DIR/async_await.rs:+2:9: +2:14 - let mut _28: &mut impl std::future::Future; // 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; + let mut _5: impl std::future::Future; + let mut _6: impl std::future::Future; + let mut _7: (); + let _8: (); + let mut _9: std::task::Poll<()>; + let mut _10: std::pin::Pin<&mut impl std::future::Future>; + let mut _11: &mut impl std::future::Future; + let mut _12: &mut impl std::future::Future; + 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; + let mut _22: impl std::future::Future; + let mut _23: impl std::future::Future; + let _24: (); + let mut _25: std::task::Poll<()>; + let mut _26: std::pin::Pin<&mut impl std::future::Future>; + let mut _27: &mut impl std::future::Future; + let mut _28: &mut impl std::future::Future; + 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); // 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); + 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); // 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); + 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 {a}, val: Value() } + _38 = move _2; + StorageLive(_3); + StorageLive(_4); + StorageLive(_5); + _5 = a() -> [return: bb2, unwind unreachable]; } bb2: { - _4 = 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) -> as IntoFuture>::IntoFuture { as IntoFuture>::into_future}, val: Value() } + _4 = 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) = 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) = 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); // 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>::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) -> Pin<&mut impl Future> {Pin::<&mut impl Future>::new_unchecked}, val: Value() } + 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); + _11 = &mut (*_12); + _10 = Pin::<&mut impl Future>::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 = 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>, &'b mut Context<'c>) -> Poll< as Future>::Output> { as Future>::poll}, val: Value() } + _13 = &mut (*_14); + StorageDead(_15); + _9 = 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 {a}, val: Value() } + StorageDead(_4); + StorageDead(_3); + StorageLive(_21); + StorageLive(_22); + _22 = a() -> [return: bb14, unwind unreachable]; } bb14: { - _21 = 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) -> as IntoFuture>::IntoFuture { as IntoFuture>::into_future}, val: Value() } + _21 = 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) = 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) = 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); // 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>::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) -> Pin<&mut impl Future> {Pin::<&mut impl Future>::new_unchecked}, val: Value() } + 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); + _27 = &mut (*_28); + _26 = Pin::<&mut impl Future>::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 = 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>, &'b mut Context<'c>) -> Poll< as Future>::Output> { as Future>::poll}, val: Value() } + _29 = &mut (*_30); + StorageDead(_31); + _25 = 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() } - 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) -> () { - 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 { - 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::(_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::}, val: Value() } + _0 = ident::(_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), max_universe: U0, variables: [] }, span: $DIR/issue_101867.rs:3:12: 3:22, inferred_ty: std::option::Option | fn main() -> () { - let mut _0: (); // return place in scope 0 at $DIR/issue_101867.rs:+0:11: +0:11 - let _1: std::option::Option 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 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::::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::::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() } - // 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 `::BAR` after built + +const ::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 `::SELF_BAR` after built + +const ::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() } + 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; // 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; // 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; + let mut _3: isize; + let mut _4: &std::option::Option; + 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::::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::::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() } + 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; // 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; // 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; + let mut _3: isize; + let mut _4: &std::option::Option; + 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::::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::::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() } + 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; // 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; // 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; // 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; // 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; + let mut _3: isize; + let mut _4: isize; + let mut _5: &std::option::Option; + let _6: i32; + let _7: &i32; + let mut _8: bool; + let _9: std::option::Option; + let _10: i32; + let _11: &i32; + let mut _12: bool; + let mut _13: i32; + let _14: std::option::Option; 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::::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::::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() } + 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() } + 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::() -> [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::}, val: Value() } + StorageLive(_1); + _1 = null_mut::() -> [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() } + 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() } + 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; 2]; // in scope 0 at $DIR/uniform_array_move_out.rs:+1:9: +1:10 - let mut _2: std::boxed::Box; // 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; // in scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20 - let mut _7: std::boxed::Box; // 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; // in scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20 + let mut _0: (); + let _1: [std::boxed::Box; 2]; + let mut _2: std::boxed::Box; + let mut _3: usize; + let mut _4: usize; + let mut _5: *mut u8; + let mut _6: std::boxed::Box; + let mut _7: std::boxed::Box; + let mut _8: usize; + let mut _9: usize; + let mut _10: *mut u8; + let mut _11: std::boxed::Box; scope 1 { - debug a => _1; // in scope 1 at $DIR/uniform_array_move_out.rs:+1:9: +1:10 - let _12: [std::boxed::Box; 2]; // in scope 1 at $DIR/uniform_array_move_out.rs:+7:10: +7:12 + debug a => _1; + let _12: [std::boxed::Box; 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() } + 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() } + 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; 2]; // in scope 0 at $DIR/uniform_array_move_out.rs:+1:9: +1:10 - let mut _2: std::boxed::Box; // 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; // in scope 0 at $DIR/uniform_array_move_out.rs:+3:9: +3:20 - let mut _7: std::boxed::Box; // 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; // in scope 0 at $DIR/uniform_array_move_out.rs:+5:9: +5:20 + let mut _0: (); + let _1: [std::boxed::Box; 2]; + let mut _2: std::boxed::Box; + let mut _3: usize; + let mut _4: usize; + let mut _5: *mut u8; + let mut _6: std::boxed::Box; + let mut _7: std::boxed::Box; + let mut _8: usize; + let mut _9: usize; + let mut _10: *mut u8; + let mut _11: std::boxed::Box; scope 1 { - debug a => _1; // in scope 1 at $DIR/uniform_array_move_out.rs:+1:9: +1:10 - let _12: std::boxed::Box; // in scope 1 at $DIR/uniform_array_move_out.rs:+7:14: +7:16 + debug a => _1; + let _12: std::boxed::Box; 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() } + 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() } + 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 `::clone` before InstSimplify -+ // MIR for `::clone` after InstSimplify - - fn ::clone(_1: &MyThing) -> MyThing { - debug self => _1; // in scope 0 at $DIR/combine_clone_of_primitives.rs:+0:10: +0:15 - let mut _0: MyThing; // 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 = ::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 {::clone}, val: Value() } - } - - 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 = ::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 {::clone}, val: Value() } -+ _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() } -+ _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:: { 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 `::clone` before InstSimplify ++ // MIR for `::clone` after InstSimplify + + fn ::clone(_1: &MyThing) -> MyThing { + debug self => _1; + let mut _0: MyThing; + 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 = ::clone(move _3) -> [return: bb1, unwind unreachable]; + } + + bb1: { + StorageDead(_3); + StorageLive(_5); + StorageLive(_6); + StorageLive(_7); + _7 = &((*_1).1: u64); +- _6 = &(*_7); +- _5 = ::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:: { 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 `::clone` before InstSimplify ++ // MIR for `::clone` after InstSimplify + + fn ::clone(_1: &MyThing) -> MyThing { + debug self => _1; + let mut _0: MyThing; + 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 = ::clone(move _3) -> [return: bb1, unwind continue]; + } + + bb1: { + StorageDead(_3); + StorageLive(_5); + StorageLive(_6); + StorageLive(_7); + _7 = &((*_1).1: u64); +- _6 = &(*_7); +- _5 = ::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:: { 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; // in scope 0 at $DIR/combine_transmutes.rs:+1:28: +1:58 - let mut _4: std::num::Wrapping; // in scope 0 at $DIR/combine_transmutes.rs:+2:29: +2:54 - let mut _6: std::num::Wrapping; // 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; // in scope 0 at $DIR/combine_transmutes.rs:+6:46: +6:77 + let mut _0: (); + let _1: u8; + let mut _2: std::option::Option; + let mut _4: std::num::Wrapping; + let mut _6: std::num::Wrapping; + let mut _8: Union32; + let mut _10: Union32; + let mut _12: std::mem::MaybeUninit; 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; // in scope 5 at $DIR/combine_transmutes.rs:+6:9: +6:11 + debug _a => _9; + let _11: std::mem::ManuallyDrop; 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::::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::(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::(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::::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 {MaybeUninit::::uninit}, val: Value() } + StorageLive(_1); + StorageLive(_2); + _2 = Option::::Some(const _); + _1 = move _2 as u8 (Transmute); + StorageDead(_2); + StorageLive(_3); + StorageLive(_4); + _4 = Wrapping::(const 0_i16); +- _3 = move _4 as i16 (Transmute); ++ _3 = move (_4.0: i16); + StorageDead(_4); + StorageLive(_5); + StorageLive(_6); + _6 = Wrapping::(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::::uninit() -> [return: bb1, unwind unreachable]; } bb1: { -- _11 = move _12 as std::mem::ManuallyDrop (Transmute); // scope 5 at $DIR/combine_transmutes.rs:+6:36: +6:78 -+ _11 = move (_12.1: std::mem::ManuallyDrop); // 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 (Transmute); ++ _11 = move (_12.1: std::mem::ManuallyDrop); + 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; // in scope 0 at $DIR/combine_transmutes.rs:+3:46: +3:56 + let mut _0: (); + let _1: i32; + let mut _3: std::vec::Vec; scope 1 { - debug _a => _1; // in scope 1 at $DIR/combine_transmutes.rs:+2:9: +2:11 - let _2: std::vec::Vec; // in scope 1 at $DIR/combine_transmutes.rs:+3:9: +3:11 + debug _a => _1; + let _2: std::vec::Vec; 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::::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 {Vec::::new}, val: Value() } + StorageLive(_1); +- _1 = const 1_i32 as i32 (Transmute); ++ _1 = const 1_i32; + StorageLive(_2); + StorageLive(_3); + _3 = Vec::::new() -> [return: bb1, unwind unreachable]; } bb1: { -- _2 = move _3 as std::vec::Vec (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 (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, &[&str])]; // in scope 0 at $DIR/const_allocation.rs:+1:5: +1:8 - let mut _2: &&[(std::option::Option, &[&str])]; // in scope 0 at $DIR/const_allocation.rs:+1:5: +1:8 + let mut _0: (); + let _1: &[(std::option::Option, &[&str])]; + let mut _2: &&[(std::option::Option, &[&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, &[&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, &[&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, &[&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, &[&str])]; // in scope 0 at $DIR/const_allocation.rs:+1:5: +1:8 - let mut _2: &&[(std::option::Option, &[&str])]; // in scope 0 at $DIR/const_allocation.rs:+1:5: +1:8 + let mut _0: (); + let _1: &[(std::option::Option, &[&str])]; + let mut _2: &&[(std::option::Option, &[&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, &[&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, &[&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, &[&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, &[&u8])]; // in scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8 - let mut _2: &&[(std::option::Option, &[&u8])]; // in scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8 + let mut _0: (); + let _1: &[(std::option::Option, &[&u8])]; + let mut _2: &&[(std::option::Option, &[&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, &[&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, &[&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, &[&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, &[&u8])]; // in scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8 - let mut _2: &&[(std::option::Option, &[&u8])]; // in scope 0 at $DIR/const_allocation2.rs:+1:5: +1:8 + let mut _0: (); + let _1: &[(std::option::Option, &[&u8])]; + let mut _2: &&[(std::option::Option, &[&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, &[&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, &[&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, &[&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; // 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; 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::::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::::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() -> 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::::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::::as_ptr}, val: Value() } + 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::::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::::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::::as_ptr}, val: Value() } + 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::::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() } - } - - 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() } - } - - 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; // 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; // 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() } - } - - 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).0: std::ptr::NonNull).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).0: std::ptr::NonNull).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; + let mut _4: usize; + let mut _5: usize; + let mut _6: *mut u8; + let mut _7: std::boxed::Box; + 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).0: std::ptr::NonNull).0: *const i32); + (*_8) = const 42_i32; + _3 = move _7; + StorageDead(_7); + _9 = (((_3.0: std::ptr::Unique).0: std::ptr::NonNull).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; + let mut _4: usize; + let mut _5: usize; + let mut _6: *mut u8; + let mut _7: std::boxed::Box; + 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).0: std::ptr::NonNull).0: *const i32); + (*_8) = const 42_i32; + _3 = move _7; + StorageDead(_7); + _9 = (((_3.0: std::ptr::Unique).0: std::ptr::NonNull).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() } - } - - 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() } - // 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; // 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; + 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::::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::::Some(true); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44 -+ // mir::Constant -+ // + span: no-location -+ // + literal: Const { ty: Option, 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::::Some(const true); +- _4 = discriminant(_3); +- switchInt(move _4) -> [1: bb1, otherwise: bb3]; ++ _3 = const Option::::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; // 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; + 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::::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::::Some(true); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44 -+ // mir::Constant -+ // + span: no-location -+ // + literal: Const { ty: Option, 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::::Some(const true); +- _4 = discriminant(_3); +- switchInt(move _4) -> [1: bb1, otherwise: bb3]; ++ _3 = const Option::::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 ::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 ::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 ::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() } - } - - 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() } - } - - 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() } - } - - 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() } - } - - 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::(move _2) -> [return: bb1, unwind unreachable]; + } + + bb1: { + StorageDead(_2); + StorageLive(_3); + StorageLive(_4); +- _4 = OffsetOf(Alpha, [1]); ++ _4 = const 0_usize; + _3 = must_use::(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::(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::(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::(move _2) -> [return: bb1, unwind continue]; + } + + bb1: { + StorageDead(_2); + StorageLive(_3); + StorageLive(_4); +- _4 = OffsetOf(Alpha, [1]); ++ _4 = const 0_usize; + _3 = must_use::(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::(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::(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, [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, [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, [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, [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, [0]); + _1 = must_use::(move _2) -> [return: bb1, unwind unreachable]; + } + + bb1: { + StorageDead(_2); + StorageLive(_3); + StorageLive(_4); + _4 = OffsetOf(Gamma, [1]); + _3 = must_use::(move _4) -> [return: bb2, unwind unreachable]; + } + + bb2: { + StorageDead(_4); + StorageLive(_5); + StorageLive(_6); + _6 = OffsetOf(Delta, [1]); + _5 = must_use::(move _6) -> [return: bb3, unwind unreachable]; + } + + bb3: { + StorageDead(_6); + StorageLive(_7); + StorageLive(_8); + _8 = OffsetOf(Delta, [2]); + _7 = must_use::(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, [0]); + _1 = must_use::(move _2) -> [return: bb1, unwind continue]; + } + + bb1: { + StorageDead(_2); + StorageLive(_3); + StorageLive(_4); + _4 = OffsetOf(Gamma, [1]); + _3 = must_use::(move _4) -> [return: bb2, unwind continue]; + } + + bb2: { + StorageDead(_4); + StorageLive(_5); + StorageLive(_6); + _6 = OffsetOf(Delta, [1]); + _5 = must_use::(move _6) -> [return: bb3, unwind continue]; + } + + bb3: { + StorageDead(_6); + StorageLive(_7); + StorageLive(_8); + _8 = OffsetOf(Delta, [2]); + _7 = must_use::(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() } - _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() } - } - - 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() } - } - - 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() } - } - - 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() } - } - - 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() } - } - - 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; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10 + let mut _0: !; + let _1: std::boxed::Box; 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 (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52 -+ _1 = const Box::(Unique:: {{ pointer: NonNull:: {{ pointer: {0x1 as *const Never} }}, _marker: PhantomData:: }}, std::alloc::Global); // scope 2 at $DIR/transmute.rs:+1:34: +1:52 -+ // mir::Constant -+ // + span: no-location -+ // + literal: Const { ty: Box, 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 (Transmute); ++ _1 = const Box::(Unique:: {{ pointer: NonNull:: {{ pointer: {0x1 as *const Never} }}, _marker: PhantomData:: }}, 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; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10 + let mut _0: !; + let _1: std::boxed::Box; 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 (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52 -+ _1 = const Box::(Unique:: {{ pointer: NonNull:: {{ pointer: {0x1 as *const Never} }}, _marker: PhantomData:: }}, std::alloc::Global); // scope 2 at $DIR/transmute.rs:+1:34: +1:52 -+ // mir::Constant -+ // + span: no-location -+ // + literal: Const { ty: Box, 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 (Transmute); ++ _1 = const Box::(Unique:: {{ pointer: NonNull:: {{ pointer: {0x1 as *const Never} }}, _marker: PhantomData:: }}, 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() } - } - - 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; // 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; + 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::::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::::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() } - } - - bb1: { - _0 = opaque::(_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::}, val: Value() } - } - - 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::(_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::(_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() } - } - - 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() } - } - - 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() } - } - - 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() } - } - - 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() } - } - - 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::(move _1) -> bb1; // scope 0 at $DIR/custom_move_arg.rs:+3:9: +3:41 -+ _0 = opaque::(_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::}, val: Value() } - } - - bb1: { -- _3 = move _2; // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL -- _0 = opaque::(_3) -> bb2; // scope 0 at $DIR/custom_move_arg.rs:+7:9: +7:35 -+ _0 = opaque::(_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::}, val: Value() } - } - - 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::(move _1) -> [return: bb1, unwind unreachable]; ++ _0 = opaque::(_1) -> [return: bb1, unwind unreachable]; + } + + bb1: { +- _3 = move _2; +- _0 = opaque::(_3) -> [return: bb2, unwind unreachable]; ++ _0 = opaque::(_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::(move _1) -> [return: bb1, unwind continue]; ++ _0 = opaque::(_1) -> [return: bb1, unwind continue]; + } + + bb1: { +- _3 = move _2; +- _0 = opaque::(_3) -> [return: bb2, unwind continue]; ++ _0 = opaque::(_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() } - } - - 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::(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::}, val: Value() } - } - - 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::(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::(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::(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::}, val: Value() } - } - - 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::(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::(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(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::(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::}, val: Value() } - } - - 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::(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::(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; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24 - let mut _4: std::ops::Range; // 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; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24 - let mut _12: &mut std::ops::Range; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24 - let mut _13: &mut std::ops::Range; // 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; // 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::::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::::len}, val: Value() } - } - - bb1: { - StorageDead(_6); // scope 2 at $DIR/issue_107511.rs:+6:23: +6:24 - _4 = std::ops::Range:: { 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 = 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) -> as IntoIterator>::IntoIter { as IntoIterator>::into_iter}, val: Value() } - } - - 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 = 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) -> Option< as Iterator>::Item> { as Iterator>::next}, val: Value() } - } - - 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; + let mut _4: std::ops::Range; + let mut _5: usize; + let mut _6: &[i32]; + let mut _7: &[i32; 4]; + let mut _9: (); + let _10: (); + let mut _11: std::option::Option; + let mut _12: &mut std::ops::Range; + let mut _13: &mut std::ops::Range; + 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; + 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::::len(move _6) -> [return: bb1, unwind unreachable]; + } + + bb1: { + StorageDead(_6); + _4 = std::ops::Range:: { start: const 0_usize, end: move _5 }; + StorageDead(_5); + _3 = 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 = 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; + let mut _4: std::ops::Range; + let mut _5: usize; + let mut _6: &[i32]; + let mut _7: &[i32; 4]; + let mut _9: (); + let _10: (); + let mut _11: std::option::Option; + let mut _12: &mut std::ops::Range; + let mut _13: &mut std::ops::Range; + 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; + 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::::len(move _6) -> [return: bb1, unwind continue]; + } + + bb1: { + StorageDead(_6); + _4 = std::ops::Range:: { start: const 0_usize, end: move _5 }; + StorageDead(_5); + _3 = 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 = 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::(move _4, move _5) -> bb1; // scope 1 at $DIR/move_arg.rs:+2:5: +2:12 -+ _3 = g::(_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::}, val: Value() } - } - - 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::(move _4, move _5) -> [return: bb1, unwind unreachable]; ++ _3 = g::(_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::(move _4, move _5) -> [return: bb1, unwind continue]; ++ _3 = g::(_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::(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::(_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::}, val: Value() } - } - - bb1: { - _0 = opaque::(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::}, val: Value() } - } - - 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::(move _1) -> [return: bb1, unwind unreachable]; ++ _3 = (_1.0: u8); ++ _0 = opaque::(_1) -> [return: bb1, unwind unreachable]; + } + + bb1: { + _0 = opaque::(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::(move _1) -> [return: bb1, unwind continue]; ++ _3 = (_1.0: u8); ++ _0 = opaque::(_1) -> [return: bb1, unwind continue]; + } + + bb1: { + _0 = opaque::(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() } - } - - 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() } - } - - 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() } - } - - 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() } - } - - 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; // 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; + 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::::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::::Some(move _5); + StorageDead(_5); + goto -> bb3; } bb2: { - _3 = Option::::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::::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; // 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; + 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 ::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 ::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 ::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::(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::}, val: Value() } - } - - 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() } - } - - 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::(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::(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::::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::::add}, val: Value() } - } - - 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::::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::::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() } - } - - 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() } - } - - 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::::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::::as_bytes}, val: Value() } - } - - 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::::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::::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) -> 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; // 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; 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 = ::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 = ::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 ::Target {::deref}, val: Value() } + _6 = ::eq(_5, const "a") -> [return: bb3, unwind unreachable]; } bb3: { - _4 = ::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 {::eq}, val: Value() } - // 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() } - } - - 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 = 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< as Iterator>::Item> { as Iterator>::next}, val: Value() } - } - - 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::(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::}, val: Value() } - } - - 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 = 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::(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 = 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::(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>; // in scope 0 at $DIR/derefer_inline_test.rs:+1:5: +1:18 - let mut _2: std::boxed::Box; // 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 {f}, val: Value() } - } - - bb1: { - _1 = Box::>::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) -> Box> {Box::>::new}, val: Value() } - } - - 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>; + let mut _2: std::boxed::Box; + + bb0: { + StorageLive(_1); + StorageLive(_2); + _2 = f() -> [return: bb1, unwind: bb5]; + } + + bb1: { + _1 = Box::>::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>; + let mut _2: std::boxed::Box; + + bb0: { + StorageLive(_1); + StorageLive(_2); + _2 = f() -> [return: bb1, unwind continue]; + } + + bb1: { + _1 = Box::>::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 { 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() } - } - - 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() } - } - - 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() } - } - - 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() } - } - - 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() } - } - - 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() } - } - - 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() } - } - - 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() } - } - - 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::(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::}, val: Value() } - } - - 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::(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::(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::(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::}, val: Value() } - } - - 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::(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::(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(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::(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::}, val: Value() } - } - - 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::(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::(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::) { // 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() } - } - - 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::) { + 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::) { + 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::(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::}, val: Value() } -- } -- -- 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::(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::(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::}, val: Value() } - } - -- 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::(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::(move _8, move _9) -> [return: bb4, unwind unreachable]; ++ _9 = _1; ++ _7 = g::(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::(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::(move _8, move _9) -> [return: bb4, unwind continue]; ++ _9 = _1; ++ _7 = g::(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() } + 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, _2: Option) -> 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, std::option::Option); // in scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17 - let mut _4: std::option::Option; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13 - let mut _5: std::option::Option; // 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, std::option::Option); + let mut _4: std::option::Option; + let mut _5: std::option::Option; + 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)); // 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)); // 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)); +- switchInt(move _7) -> [1: bb2, otherwise: bb1]; ++ StorageLive(_10); ++ _10 = discriminant((_3.1: std::option::Option)); ++ 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)); // 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)); +- 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) 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) 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) as Some).0: u32); + StorageLive(_9); + _9 = (((_3.1: std::option::Option) 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, _2: Option) -> 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, std::option::Option); // in scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17 - let mut _4: std::option::Option; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13 - let mut _5: std::option::Option; // 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, std::option::Option); + let mut _4: std::option::Option; + let mut _5: std::option::Option; + 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)); // 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)); // 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)); +- switchInt(move _8) -> [0: bb1, 1: bb3, otherwise: bb2]; ++ StorageLive(_11); ++ _11 = discriminant((_3.1: std::option::Option)); ++ StorageLive(_12); ++ _12 = Ne(_8, move _11); ++ StorageDead(_11); ++ switchInt(move _12) -> [0: bb5, otherwise: bb1]; } bb1: { -- _6 = discriminant((_3.1: std::option::Option)); // 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)); +- 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)); // 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)); +- 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) 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) 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) as Some).0: u32); + StorageLive(_10); + _10 = (((_3.1: std::option::Option) 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, _2: Option) -> 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, std::option::Option); // in scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17 - let mut _4: std::option::Option; // in scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13 - let mut _5: std::option::Option; // 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, std::option::Option); + let mut _4: std::option::Option; + let mut _5: std::option::Option; + 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)); // 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)); // 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)); +- switchInt(move _7) -> [1: bb2, otherwise: bb1]; ++ StorageLive(_10); ++ _10 = discriminant((_3.1: std::option::Option)); ++ 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)); // 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)); +- 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) 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) 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) as Some).0: u32); + StorageLive(_9); + _9 = (((_3.1: std::option::Option) 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, _2: Option, _3: Option) -> 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, std::option::Option, std::option::Option); // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:11: +1:20 - let mut _5: std::option::Option; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:12: +1:13 - let mut _6: std::option::Option; // in scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:15: +1:16 - let mut _7: std::option::Option; // 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, std::option::Option, std::option::Option); + let mut _5: std::option::Option; + let mut _6: std::option::Option; + let mut _7: std::option::Option; + 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)); // 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)); // 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)); +- switchInt(move _10) -> [1: bb2, otherwise: bb1]; ++ StorageLive(_14); ++ _14 = discriminant((_4.1: std::option::Option)); ++ 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)); // 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)); +- switchInt(move _9) -> [1: bb3, otherwise: bb1]; - } - - bb3: { - _8 = discriminant((_4.2: std::option::Option)); // 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)); +- 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) 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) 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) 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) as Some).0: u32); + StorageLive(_12); + _12 = (((_4.1: std::option::Option) as Some).0: u32); + StorageLive(_13); + _13 = (((_4.2: std::option::Option) 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 { - 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; // 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; + 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::::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::::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::::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::::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, _2: Option) -> 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, std::option::Option); // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17 - let mut _4: std::option::Option; // in scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:12: +1:13 - let mut _5: std::option::Option; // 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, std::option::Option); + let mut _4: std::option::Option; + let mut _5: std::option::Option; + 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)); // 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)); + switchInt(move _8) -> [0: bb1, 1: bb4, otherwise: bb3]; } bb1: { - _6 = discriminant((_3.1: std::option::Option)); // 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)); + 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)); // 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)); + 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) 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) 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) as Some).0: u32); + StorageLive(_10); + _10 = (((_3.1: std::option::Option) 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) 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) 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) 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) 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, _2: *const Option) -> 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, 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)); // 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)); + switchInt(move _2) -> [0: bb4, 1: bb3, otherwise: bb1]; } bb3: { - switchInt((((_1.2: std::option::Option) 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) 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: ()) -> >::Output { - let mut _0: >::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: ()) -> >::Output { + let mut _0: >::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; // 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() } - } - - 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 {Formatter::<'_>::precision}, val: Value() } - } - - 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::(_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::}, val: Value() } - } - - 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::(_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::}, val: Value() } - } - - 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; + 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::(_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::(_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; + 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::(_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::(_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::(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::}, val: Value() } - } - - 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::(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::}, val: Value() } - } - - 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::(move _8) -> [return: bb2, unwind unreachable]; + } + + bb2: { + StorageDead(_8); + StorageDead(_7); + StorageLive(_9); + StorageLive(_10); + _10 = move _4; + _9 = take::(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::(move _8) -> [return: bb2, unwind: bb10]; + } + + bb2: { + StorageDead(_8); + StorageDead(_7); + StorageLive(_9); + StorageLive(_10); + _10 = move _4; + _9 = take::(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() } + 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() } -+ 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: >::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::() -> 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() -> >::Item {bar::}, val: Value() } - } - - 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: >::Item; + scope 1 { + debug x => _1; + } + + bb0: { + StorageLive(_1); + _1 = bar::() -> [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 = >::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(), ()) -> >::Output {>::call}, val: Value() } - } - - 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 = >::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 = >::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::) { // 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 >::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::(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::}, val: Value() } -- // mir::Constant - // + span: $DIR/cycle.rs:12:7: 12:11 - // + literal: Const { ty: fn() {main}, val: Value() } -+ 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::) { ++ debug g => _2; ++ let mut _3: &fn() {main}; ++ let _4: (); ++ scope 2 (inlined >::call - shim(fn() {main})) { ++ } ++ } + + bb0: { + StorageLive(_1); +- _1 = f::(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::) { ++ debug g => _2; ++ let mut _3: &fn() {main}; ++ let _4: (); ++ scope 2 (inlined >::call - shim(fn() {main})) { ++ } ++ } + + bb0: { + StorageLive(_1); +- _1 = f::(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::) { // 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 >::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::(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::}, val: Value() } -- // mir::Constant - // + span: $DIR/cycle.rs:17:7: 17:8 - // + literal: Const { ty: fn() {g}, val: Value() } -+ 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::) { ++ debug g => _2; ++ let mut _3: &fn() {g}; ++ let _4: (); ++ scope 2 (inlined >::call - shim(fn() {g})) { ++ scope 3 (inlined g) { ++ scope 4 (inlined f::) { ++ debug g => main; ++ let _6: (); ++ scope 5 (inlined >::call - shim(fn() {main})) { ++ } ++ } ++ } ++ } ++ } + + bb0: { + StorageLive(_1); +- _1 = f::(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::) { ++ debug g => _2; ++ let mut _3: &fn() {g}; ++ let _4: (); ++ scope 2 (inlined >::call - shim(fn() {g})) { ++ scope 3 (inlined g) { ++ scope 4 (inlined f::) { ++ debug g => main; ++ let _6: (); ++ scope 5 (inlined >::call - shim(fn() {main})) { ++ } ++ } ++ } ++ } ++ } + + bb0: { + StorageLive(_1); +- _1 = f::(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: &::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: &::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::<::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>; // in scope 2 at $DIR/dyn_trait.rs:28:14: 28:15 -+ scope 3 (inlined mk_cycle::<::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 = ::cache::(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 ::C {::cache::}, val: Value() } - } - - 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::<::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> (Pointer(Unsize)); // scope 2 at $DIR/dyn_trait.rs:28:14: 28:15 -+ _0 = ::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 ::C) {try_execute_query::<::C>}, val: Value() } -+ // + span: $DIR/dyn_trait.rs:22:7: 22:20 -+ // + literal: Const { ty: for<'a> fn(&'a dyn Cache::V>) {::V> as Cache>::store_nocache}, val: Value() } - } - - 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: &::C; + let mut _3: &T; + let mut _4: &::C; + scope 1 { + debug c => _2; ++ scope 2 (inlined try_execute_query::<::C>) { ++ debug c => _4; ++ let mut _5: &dyn Cache::V>; ++ scope 3 (inlined mk_cycle::<::V>) { ++ debug c => _5; ++ } ++ } + } + + bb0: { + StorageLive(_2); + StorageLive(_3); + _3 = &(*_1); + _2 = ::cache::(move _3) -> [return: bb1, unwind unreachable]; + } + + bb1: { + StorageDead(_3); + StorageLive(_4); + _4 = &(*_2); +- _0 = try_execute_query::<::C>(move _4) -> [return: bb2, unwind unreachable]; ++ StorageLive(_5); ++ _5 = _4 as &dyn Cache::V> (PointerCoercion(Unsize)); ++ _0 = ::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: &::C; + let mut _3: &T; + let mut _4: &::C; + scope 1 { + debug c => _2; ++ scope 2 (inlined try_execute_query::<::C>) { ++ debug c => _4; ++ let mut _5: &dyn Cache::V>; ++ scope 3 (inlined mk_cycle::<::V>) { ++ debug c => _5; ++ } ++ } + } + + bb0: { + StorageLive(_2); + StorageLive(_3); + _3 = &(*_1); + _2 = ::cache::(move _3) -> [return: bb1, unwind continue]; + } + + bb1: { + StorageDead(_3); + StorageLive(_4); + _4 = &(*_2); +- _0 = try_execute_query::<::C>(move _4) -> [return: bb2, unwind continue]; ++ StorageLive(_5); ++ _5 = _4 as &dyn Cache::V> (PointerCoercion(Unsize)); ++ _0 = ::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) -> () { - 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; // 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 = 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) { as Cache>::store_nocache}, val: Value() } - } - - 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) -> () { + debug c => _1; + let mut _0: (); + let mut _2: &dyn Cache; + + bb0: { + StorageLive(_2); + _2 = &(*_1); + _0 = 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) -> () { + debug c => _1; + let mut _0: (); + let mut _2: &dyn Cache; + + bb0: { + StorageLive(_2); + _2 = &(*_1); + _0 = 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>; // 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::<::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> (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::<::V>(move _2) -> bb1; // scope 0 at $DIR/dyn_trait.rs:+1:5: +1:16 -+ _0 = ::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> + 'a)) {mk_cycle::<::V>}, val: Value() } -+ // + span: $DIR/dyn_trait.rs:22:7: 22:20 -+ // + literal: Const { ty: for<'a> fn(&'a dyn Cache::V>) {::V> as Cache>::store_nocache}, val: Value() } - } - - 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>; + let mut _3: &C; ++ scope 1 (inlined mk_cycle::<::V>) { ++ debug c => _2; ++ } + + bb0: { + StorageLive(_2); + StorageLive(_3); + _3 = &(*_1); + _2 = move _3 as &dyn Cache::V> (PointerCoercion(Unsize)); + StorageDead(_3); +- _0 = mk_cycle::<::V>(move _2) -> [return: bb1, unwind unreachable]; ++ _0 = ::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>; + let mut _3: &C; ++ scope 1 (inlined mk_cycle::<::V>) { ++ debug c => _2; ++ } + + bb0: { + StorageLive(_2); + StorageLive(_3); + _3 = &(*_1); + _2 = move _3 as &dyn Cache::V> (PointerCoercion(Unsize)); + StorageDead(_3); +- _0 = mk_cycle::<::V>(move _2) -> [return: bb1, unwind continue]; ++ _0 = ::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() } -+ // + span: $DIR/exponential_runtime.rs:62:9: 62:23 -+ // + literal: Const { ty: fn() {<() as E>::call}, val: Value() } - } - - 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() } -+ } -+ -+ 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() } -+ } -+ -+ 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() } -+ } -+ -+ 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() } - } - } - 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() } - 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::{closure#0}]; // in scope 0 at $DIR/inline_closure.rs:+1:9: +1:10 - let mut _4: &[closure@foo::{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::{closure#0}]; + let mut _4: &[closure@foo::{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::::{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::::{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::::{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::::{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::{closure#0}]; // in scope 0 at $DIR/inline_closure_borrows_arg.rs:+1:9: +1:10 - let mut _4: &[closure@foo::{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::{closure#0}]; + let mut _4: &[closure@foo::{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::::{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::::{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::::{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::::{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::{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::{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::{closure#0}]; + let mut _4: &i32; + let mut _5: &T; + let mut _6: &[closure@foo::{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::::{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::::{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::::{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::::{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() } -- } -- -- 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() } -- } -- -- 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() } - } - - 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() } - } - - 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() } - } - - 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 ::call) { // at $DIR/inline_cycle.rs:15:5: 15:24 -+ scope 2 (inlined as Call>::call) { // at $DIR/inline_cycle.rs:44:9: 44:23 -+ scope 3 (inlined 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 = ::call() -> bb1; // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:24 -+ _1 = ::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() {::call}, val: Value() } - } - - 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 ::call) { ++ scope 2 (inlined as Call>::call) { ++ scope 3 (inlined as Call>::call) { ++ } ++ } ++ } + + bb0: { + StorageLive(_1); + _1 = ::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 ::call) { ++ scope 2 (inlined as Call>::call) { ++ scope 3 (inlined as Call>::call) { ++ } ++ } ++ } + + bb0: { + StorageLive(_1); + _1 = ::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::) { // 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 >::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::(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::}, val: Value() } -- // mir::Constant - // + span: $DIR/inline_cycle.rs:50:10: 50:11 - // + literal: Const { ty: fn() {f}, val: Value() } -+ 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::) { ++ debug f => _2; ++ let _3: (); ++ scope 2 (inlined >::call_once - shim(fn() {f})) { ++ scope 3 (inlined f) { ++ scope 4 (inlined call::) { ++ debug f => f; ++ let _5: (); ++ scope 5 (inlined >::call_once - shim(fn() {f})) { ++ } ++ } ++ } ++ } ++ } + + bb0: { + StorageLive(_1); +- _1 = call::(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::) { ++ debug f => _2; ++ let _3: (); ++ scope 2 (inlined >::call_once - shim(fn() {f})) { ++ scope 3 (inlined f) { ++ scope 4 (inlined call::) { ++ debug f => f; ++ let _5: (); ++ scope 5 (inlined >::call_once - shim(fn() {f})) { ++ } ++ } ++ } ++ } ++ } + + bb0: { + StorageLive(_1); +- _1 = call::(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 ::call) { // at $DIR/inline_cycle_generic.rs:10:5: 10:24 -+ scope 2 (inlined 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 = ::call() -> bb1; // scope 0 at $DIR/inline_cycle_generic.rs:+1:5: +1:24 -+ _1 = ::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() {::call}, val: Value() } -+ // + span: $DIR/inline_cycle_generic.rs:32:9: 32:26 -+ // + literal: Const { ty: fn() {::call}, val: Value() } - } - - 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 ::call) { ++ scope 2 (inlined as Call>::call) { ++ scope 3 (inlined ::call) { ++ } ++ } ++ } + + bb0: { + StorageLive(_1); +- _1 = ::call() -> [return: bb1, unwind unreachable]; ++ _1 = 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 ::call) { ++ scope 2 (inlined as Call>::call) { ++ scope 3 (inlined ::call) { ++ } ++ } ++ } + + bb0: { + StorageLive(_1); +- _1 = ::call() -> [return: bb1, unwind continue]; ++ _1 = 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() } -+ 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() } -+ // + span: $SRC_DIR/std/src/panic.rs:LL:COL -+ // + literal: Const { ty: fn(&str) -> ! {begin_panic::<&str>}, val: Value() } -+ // 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:: ! {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 ! {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:: ! {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:: ! {sleep}>}, val: Value() } -- // mir::Constant - // + span: $DIR/inline_diverging.rs:22:16: 22:21 - // + literal: Const { ty: fn() -> ! {sleep}, val: Value() } -+ 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 = ! {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}, ()) -> ! {sleep} as FnOnce<()>>::Output { ! {sleep} as Fn<()>>::call}, val: Value() } - } - } - 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:: ! {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 ! {sleep} as Fn<()>>::call - shim(fn() -> ! {sleep})) { ++ scope 5 (inlined sleep) { ++ } ++ } ++ } + + bb0: { + StorageLive(_1); +- _1 = call_twice:: ! {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:: ! {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 ! {sleep} as Fn<()>>::call - shim(fn() -> ! {sleep})) { ++ scope 5 (inlined sleep) { ++ } ++ } ++ } + + bb0: { + StorageLive(_1); +- _1 = call_twice:: ! {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; // 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 {g}, val: Value() } -- } -- -- 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() } -- } -- -- 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>::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>::Yield, <[generator@$DIR/inline_generator.rs:15:5: 15:8] as Generator>::Return> {<[generator@$DIR/inline_generator.rs:15:5: 15:8] as Generator>::resume}, val: Value() } -+ 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::::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::::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; + 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>::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::::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::::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; + 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>::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::::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::::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 { - #[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() } + 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() } + 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() } + 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() } -+ 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() } + 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() } + 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() } + 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() } + 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>; // in scope 0 at $DIR/inline_into_box_place.rs:+1:9: +1:11 - let mut _2: std::vec::Vec; // 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::::new) { // at $DIR/inline_into_box_place.rs:8:38: 8:48 -+ let mut _3: alloc::raw_vec::RawVec; // in scope 2 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL -+ } -+ scope 3 (inlined Box::>::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; // 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::::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 {Vec::::new}, val: Value() } -+ // + span: $SRC_DIR/alloc/src/vec/mod.rs:LL:COL -+ // + user_ty: UserType(0) -+ // + literal: Const { ty: alloc::raw_vec::RawVec, val: Unevaluated(alloc::raw_vec::RawVec::::NEW, [u32], None) } -+ _2 = Vec:: { 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); // scope 4 at $SRC_DIR/alloc/src/boxed.rs:LL:COL -+ _5 = AlignOf(std::vec::Vec); // 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() } - } - - bb1: { -- _1 = Box::>::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) -> Box> {Box::>::new}, val: Value() } -+ 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); // scope 3 at $SRC_DIR/alloc/src/boxed.rs:LL:COL -+ _7 = (((_1.0: std::ptr::Unique>).0: std::ptr::NonNull>).0: *const std::vec::Vec); // 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>; + let mut _2: std::vec::Vec; + scope 1 { + debug _x => _1; + } ++ scope 2 (inlined Vec::::new) { ++ let mut _3: alloc::raw_vec::RawVec; ++ } ++ scope 3 (inlined Box::>::new) { ++ debug x => _2; ++ let mut _4: usize; ++ let mut _5: usize; ++ let mut _6: *mut u8; ++ let mut _7: *const std::vec::Vec; ++ 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::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; ++ 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::::as_mut_ptr) { ++ debug self => _18; ++ } ++ scope 23 (inlined NonNull::::new_unchecked) { ++ debug ptr => _17; ++ let mut _20: *const u8; ++ let mut _21: *mut u8; ++ scope 24 { ++ scope 25 (inlined NonNull::::new_unchecked::runtime::) { ++ debug ptr => _21; ++ scope 26 (inlined ptr::mut_ptr::::is_null) { ++ debug self => _21; ++ let mut _22: *mut u8; ++ scope 27 { ++ scope 28 (inlined ptr::mut_ptr::::is_null::runtime_impl) { ++ debug ptr => _22; ++ scope 29 (inlined ptr::mut_ptr::::addr) { ++ debug self => _22; ++ scope 30 { ++ scope 31 (inlined ptr::mut_ptr::::cast::<()>) { ++ debug self => _22; ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ scope 32 (inlined NonNull::::as_ptr) { ++ debug self => _16; ++ let mut _23: *const u8; ++ } ++ } ++ } ++ scope 17 (inlined ::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::::is_power_of_two) { ++ debug self => _15; ++ scope 16 (inlined core::num::::count_ones) { ++ debug self => _15; ++ } ++ } ++ } ++ } ++ scope 13 { ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ } + + bb0: { + StorageLive(_1); + StorageLive(_2); +- _2 = Vec::::new() -> [return: bb1, unwind unreachable]; ++ StorageLive(_3); ++ _3 = const _; ++ _2 = Vec:: { buf: move _3, len: const 0_usize }; ++ StorageDead(_3); ++ _4 = SizeOf(std::vec::Vec); ++ _5 = AlignOf(std::vec::Vec); ++ 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::>::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:: { 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); ++ _7 = (((_1.0: std::ptr::Unique>).0: std::ptr::NonNull>).0: *const std::vec::Vec); ++ (*_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>; + let mut _2: std::vec::Vec; + scope 1 { + debug _x => _1; + } ++ scope 2 (inlined Vec::::new) { ++ let mut _3: alloc::raw_vec::RawVec; ++ } ++ scope 3 (inlined Box::>::new) { ++ debug x => _2; ++ let mut _4: usize; ++ let mut _5: usize; ++ let mut _6: *mut u8; ++ let mut _7: *const std::vec::Vec; ++ 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::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; ++ 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::::as_mut_ptr) { ++ debug self => _18; ++ } ++ scope 23 (inlined NonNull::::new_unchecked) { ++ debug ptr => _17; ++ let mut _20: *const u8; ++ let mut _21: *mut u8; ++ scope 24 { ++ scope 25 (inlined NonNull::::new_unchecked::runtime::) { ++ debug ptr => _21; ++ scope 26 (inlined ptr::mut_ptr::::is_null) { ++ debug self => _21; ++ let mut _22: *mut u8; ++ scope 27 { ++ scope 28 (inlined ptr::mut_ptr::::is_null::runtime_impl) { ++ debug ptr => _22; ++ scope 29 (inlined ptr::mut_ptr::::addr) { ++ debug self => _22; ++ scope 30 { ++ scope 31 (inlined ptr::mut_ptr::::cast::<()>) { ++ debug self => _22; ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ scope 32 (inlined NonNull::::as_ptr) { ++ debug self => _16; ++ let mut _23: *const u8; ++ } ++ } ++ } ++ scope 17 (inlined ::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::::is_power_of_two) { ++ debug self => _15; ++ scope 16 (inlined core::num::::count_ones) { ++ debug self => _15; ++ } ++ } ++ } ++ } ++ scope 13 { ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ } + + bb0: { + StorageLive(_1); + StorageLive(_2); +- _2 = Vec::::new() -> [return: bb1, unwind continue]; ++ StorageLive(_3); ++ _3 = const _; ++ _2 = Vec:: { buf: move _3, len: const 0_usize }; ++ StorageDead(_3); ++ _4 = SizeOf(std::vec::Vec); ++ _5 = AlignOf(std::vec::Vec); ++ 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::>::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:: { 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); ++ _7 = (((_1.0: std::ptr::Unique>).0: std::ptr::NonNull>).0: *const std::vec::Vec); ++ (*_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::) { // 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() } - } - - 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() } - } - - 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() } - } - - 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() } - } -} 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::) { + 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::) { + 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() } - 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 ::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 = ::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) {::clone}, val: Value() } -- } -- -- 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 ::clone - shim(fn(A, B))) { ++ } + + bb0: { + StorageLive(_2); + _2 = &_1; +- _0 = ::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 ::clone - shim(fn(A, B))) { ++ } + + bb0: { + StorageLive(_2); + _2 = &_1; +- _0 = ::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, _2: *mut Option) -> () { - 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; // in scope 0 at $DIR/inline_shims.rs:+1:38: +1:39 - let mut _5: *mut std::option::Option; // in scope 0 at $DIR/inline_shims.rs:+2:38: +2:39 - scope 1 { - } - scope 2 { -+ scope 3 (inlined std::ptr::drop_in_place::> - shim(Some(Option))) { // 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::>(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) {std::ptr::drop_in_place::>}, val: Value() } - } - - 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::>(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) {std::ptr::drop_in_place::>}, val: Value() } -+ 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, _2: *mut Option) -> () { + debug a => _1; + debug b => _2; + let mut _0: (); + let _3: (); + let mut _4: *mut std::vec::Vec; + let mut _5: *mut std::option::Option; + scope 1 { ++ scope 3 (inlined std::ptr::drop_in_place::> - shim(Some(Vec))) { ++ let mut _6: &mut std::vec::Vec; ++ let mut _7: (); ++ } + } + scope 2 { ++ scope 4 (inlined std::ptr::drop_in_place::> - shim(Some(Option))) { ++ let mut _8: isize; ++ let mut _9: isize; ++ } + } + + bb0: { + StorageLive(_3); + StorageLive(_4); + _4 = _1; +- _3 = std::ptr::drop_in_place::>(move _4) -> [return: bb1, unwind unreachable]; ++ StorageLive(_6); ++ StorageLive(_7); ++ _6 = &mut (*_4); ++ _7 = 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::>(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)) -> [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, _2: *mut Option) -> () { + debug a => _1; + debug b => _2; + let mut _0: (); + let _3: (); + let mut _4: *mut std::vec::Vec; + let mut _5: *mut std::option::Option; + scope 1 { + } + scope 2 { ++ scope 3 (inlined std::ptr::drop_in_place::> - shim(Some(Option))) { ++ let mut _6: isize; ++ let mut _7: isize; ++ } + } + + bb0: { + StorageLive(_3); + StorageLive(_4); + _4 = _1; + _3 = std::ptr::drop_in_place::>(move _4) -> [return: bb1, unwind continue]; + } + + bb1: { + StorageDead(_4); + StorageDead(_3); + StorageLive(_5); + _5 = _2; +- _0 = std::ptr::drop_in_place::>(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 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 = 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 { as Foo>::bar}, val: Value() } -- } -- -- 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 as Foo>::bar) { ++ } + + bb0: { + StorageLive(_1); +- _1 = 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 as Foo>::bar) { ++ } + + bb0: { + StorageLive(_1); +- _1 = 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 = ::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 {::y}, val: Value() } - } - - 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 = ::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 = ::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 = ::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 {::y}, val: Value() } - } - - 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 = ::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 = ::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() } -+ // + 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() } - } - - 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) -> &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; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15 - scope 1 (inlined as AsMut>::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; // 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; + scope 1 (inlined as AsMut>::as_mut) { + debug self => _4; + let mut _5: std::boxed::Box; + 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).0: std::ptr::NonNull).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).0: std::ptr::NonNull).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 { - 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; // in scope 0 at $DIR/issue_58867_inline_as_ref_as_mut.rs:+1:5: +1:15 - scope 1 (inlined as AsRef>::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; // 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; + scope 1 (inlined as AsRef>::as_ref) { + debug self => _3; + let mut _4: std::boxed::Box; + 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).0: std::ptr::NonNull).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).0: std::ptr::NonNull).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 >::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() } - } - - 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 = >::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}, ()) -> >::Output {>::call}, val: Value() } -+ _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 >::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 = >::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 >::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 = >::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() } - } - - 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 = >::call(move _3, move _5) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17 -+ _2 = >::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(), ()) -> >::Output {>::call}, val: Value() } -+ // + literal: Const { ty: for<'a> extern "rust-call" fn(&'a fn() {foo}, ()) -> >::Output {>::call}, val: Value() } - } - - 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 = >::call(move _3, move _5) -> [return: bb2, unwind unreachable]; ++ _2 = >::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 = >::call(move _3, move _5) -> [return: bb2, unwind: bb4]; ++ _2 = >::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::::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::::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::::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::::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::::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::::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::::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::::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; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL -+ let mut _9: std::result::Result; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL -+ scope 4 { -+ scope 5 (inlined >::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:: 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::::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::::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; // 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::::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::::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::::unchecked_shl}, val: Value() } -+ 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::::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() } -+ 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::::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::::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::::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::(_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::}, val: Value() } - } - } - 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::::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::::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::::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::::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::::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::::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; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL - let mut _7: std::result::Result; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL - scope 4 { - scope 5 (inlined >::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:: 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::::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::::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; // 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::::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::::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() } - 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::::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::::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::::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::(_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::}, val: Value() } - } -} 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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL -+ let mut _9: std::result::Result; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL -+ scope 4 { -+ scope 5 (inlined >::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:: 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::::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::::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; // 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::::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::::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::::unchecked_shr}, val: Value() } -+ 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::::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() } -+ 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::::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::::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::::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::(_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::}, val: Value() } - } - } - 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::::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::::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::::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::::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::::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::::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; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL - let mut _7: std::result::Result; // in scope 3 at $SRC_DIR/core/src/num/mod.rs:LL:COL - scope 4 { - scope 5 (inlined >::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:: 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::::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::::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; // 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::::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::::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() } - 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::::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::::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::::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::(_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::}, val: Value() } - } -} 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::::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::::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() } + 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() } + _4 = &mut _3; + _5 = 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() } + _8 = &mut _3; + _9 = 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 { - 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; // in scope 0 at $DIR/unwrap_unchecked.rs:+1:5: +1:8 -+ scope 1 (inlined #[track_caller] Option::::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; // 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::::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::::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 {Option::::unwrap_unchecked}, val: Value() } -+ 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 { + debug slf => _1; + let mut _0: T; + let mut _2: std::option::Option; ++ scope 1 (inlined #[track_caller] Option::::unwrap_unchecked) { ++ debug self => _2; ++ let mut _3: &std::option::Option; ++ 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::::is_some) { ++ debug self => _3; ++ } ++ } + + bb0: { + StorageLive(_2); + _2 = move _1; +- _0 = Option::::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 { + debug slf => _1; + let mut _0: T; + let mut _2: std::option::Option; ++ scope 1 (inlined #[track_caller] Option::::unwrap_unchecked) { ++ debug self => _2; ++ let mut _3: &std::option::Option; ++ 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::::is_some) { ++ debug self => _3; ++ } ++ } + + bb0: { + StorageLive(_2); + _2 = move _1; +- _0 = Option::::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 { - 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::::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; // 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::::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 { + debug slf => _1; + let mut _0: T; + scope 1 (inlined #[track_caller] Option::::unwrap_unchecked) { + debug self => _1; + let mut _2: isize; + let mut _3: &std::option::Option; + scope 2 { + debug val => _0; + } + scope 3 { + scope 5 (inlined unreachable_unchecked) { + scope 6 { + scope 7 (inlined unreachable_unchecked::runtime) { + } + } + } + } + scope 4 (inlined Option::::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 { + debug slf => _1; + let mut _0: T; + scope 1 (inlined #[track_caller] Option::::unwrap_unchecked) { + debug self => _1; + let mut _2: isize; + let mut _3: &std::option::Option; + scope 2 { + debug val => _0; + } + scope 3 { + scope 5 (inlined unreachable_unchecked) { + scope 6 { + scope 7 (inlined unreachable_unchecked::runtime) { + } + } + } + } + scope 4 (inlined Option::::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() } + 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::() -> [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::}, val: Value() } + nop; + _1 = assert_inhabited::() -> [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::() -> [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::}, val: Value() } + nop; + nop; + _2 = assert_zero_valid::() -> [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::() -> [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::}, val: Value() } + nop; + nop; + _3 = assert_mem_uninitialized_valid::() -> [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::() -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/intrinsic_asserts.rs:+1:5: +1:50 -+ _1 = assert_inhabited::() -> 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::}, val: Value() } + nop; +- _1 = assert_inhabited::() -> [return: bb1, unwind unreachable]; ++ _1 = assert_inhabited::() -> 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() } + 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() } + 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() } -+ 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::() -> [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::}, val: Value() } -+ goto -> bb2; // scope 0 at $DIR/intrinsic_asserts.rs:+2:5: +2:48 + nop; + nop; +- _2 = assert_zero_valid::() -> [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::() -> [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::}, val: Value() } -+ goto -> bb3; // scope 0 at $DIR/intrinsic_asserts.rs:+3:5: +3:61 + nop; + nop; +- _3 = assert_mem_uninitialized_valid::() -> [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::::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::(_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::}, val: Value() } - } - - 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::::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::(_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::::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::(_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() } - // mir::Constant - // + span: $DIR/issue_104451_unwindable_intrinsics.rs:8:49: 8:54 - // + literal: Const { ty: fn() -> ! {ow_ct}, val: Value() } - // mir::Constant - // + span: $DIR/issue_104451_unwindable_intrinsics.rs:8:56: 8:61 - // + literal: Const { ty: fn() -> ! {ow_ct}, val: Value() } - } -} 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() } - } - - 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() } - } - - 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::(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::}, val: Value() } - } - - 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::(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::(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 `::{constant#0}` after SimplifyCfg-promote-consts ::{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() } - } - - 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> { - let mut _0: std::option::Option>; // return place in scope 0 at $DIR/issue_62289.rs:+0:14: +0:30 - let mut _1: std::boxed::Box; // 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; // in scope 0 at $DIR/issue_62289.rs:+3:9: +3:24 - let mut _6: std::ops::ControlFlow, u32>; // in scope 0 at $DIR/issue_62289.rs:+3:18: +3:23 - let mut _7: std::option::Option; // 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; // 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; // 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() } - } - - 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::::None; // scope 0 at $DIR/issue_62289.rs:+3:18: +3:22 - _6 = 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) -> ControlFlow< as Try>::Residual, as Try>::Output> { as Try>::branch}, val: Value() } - } - - 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); // 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 = > as FromResidual>>::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) -> Option> {> as FromResidual>>::from_residual}, val: Value() } - } - - 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::>::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> { + let mut _0: std::option::Option>; + let mut _1: std::boxed::Box; + let mut _2: usize; + let mut _3: usize; + let mut _4: *mut u8; + let mut _5: std::boxed::Box; + let mut _6: std::ops::ControlFlow, u32>; + let mut _7: std::option::Option; + let mut _8: isize; + let _9: std::option::Option; + let mut _10: !; + let mut _11: std::option::Option; + 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::::None; + _6 = 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); + StorageLive(_11); + _11 = _9; + _0 = > as FromResidual>>::from_residual(move _11) -> [return: bb6, unwind: bb12]; + } + + bb6: { + StorageDead(_11); + StorageDead(_9); + drop(_5) -> [return: bb9, unwind: bb13]; + } + + bb7: { + StorageDead(_5); + _0 = Option::>::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> { + let mut _0: std::option::Option>; + let mut _1: std::boxed::Box; + let mut _2: usize; + let mut _3: usize; + let mut _4: *mut u8; + let mut _5: std::boxed::Box; + let mut _6: std::ops::ControlFlow, u32>; + let mut _7: std::option::Option; + let mut _8: isize; + let _9: std::option::Option; + let mut _10: !; + let mut _11: std::option::Option; + 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::::None; + _6 = 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); + StorageLive(_11); + _11 = _9; + _0 = > as FromResidual>>::from_residual(move _11) -> [return: bb6, unwind: bb12]; + } + + bb6: { + StorageDead(_11); + StorageDead(_9); + drop(_5) -> [return: bb9, unwind continue]; + } + + bb7: { + StorageDead(_5); + _0 = Option::>::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::() -> [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::}, val: Value() } + StorageLive(_1); + _1 = std::mem::size_of::() -> [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() } + 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() } + 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() } - // 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>::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>::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>::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>::Output {<[T] as Index>::index}, val: Value() } + StorageLive(_2); + StorageLive(_3); + _3 = &(*_1); + _2 = <[T] as Index>::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 = ::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 {::clone}, val: Value() } + _3 = &(*_1)[_4]; + _2 = ::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>::Output; // in scope 0 at $DIR/issue_91633.rs:+4:14: +4:20 - let _3: &<[T] as std::ops::Index>::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>::Output; + let _3: &<[T] as std::ops::Index>::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>::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>::Output {<[T] as Index>::index}, val: Value() } + StorageLive(_2); + StorageLive(_3); + StorageLive(_4); + _4 = &(*_1); + _3 = <[T] as Index>::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>; // 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>; // 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>; + 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>; 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() } + 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() } + _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::>::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>) -> ! {core::panicking::assert_failed::<&[u8], &[u8; 4]>}, val: Value() } + 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::>::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() } + 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() } + _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::>::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>) -> ! {core::panicking::assert_failed::<&[u8], &[u8; 4]>}, val: Value() } + 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::>::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; // in scope 0 at $DIR/issue_59352.rs:+2:26: +2:41 - scope 1 (inlined char::methods::::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; // in scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL - let _4: std::option::Option; // in scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL - scope 2 (inlined Option::::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::::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::::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 {char::methods::::to_digit}, val: Value() } - } - - bb1: { - StorageLive(_2); // scope 0 at $DIR/issue_59352.rs:+2:26: +2:41 - _2 = char::methods::::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 {char::methods::::to_digit}, val: Value() } - } - - 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() } - // 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; + scope 1 (inlined char::methods::::is_digit) { + debug self => _1; + debug radix => const 8_u32; + let _2: std::option::Option; + let mut _3: &std::option::Option; + scope 2 (inlined Option::::is_some) { + debug self => _3; + let mut _4: isize; + } + } + scope 3 (inlined #[track_caller] Option::::unwrap) { + debug self => _5; + let mut _6: isize; + let mut _7: !; + scope 4 { + debug val => _0; + } + } + + bb0: { + StorageLive(_3); + StorageLive(_2); + _2 = char::methods::::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::::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; + scope 1 (inlined char::methods::::is_digit) { + debug self => _1; + debug radix => const 8_u32; + let _2: std::option::Option; + let mut _3: &std::option::Option; + scope 2 (inlined Option::::is_some) { + debug self => _3; + let mut _4: isize; + } + } + scope 3 (inlined #[track_caller] Option::::unwrap) { + debug self => _5; + let mut _6: isize; + let mut _7: !; + scope 4 { + debug val => _0; + } + } + + bb0: { + StorageLive(_3); + StorageLive(_2); + _2 = char::methods::::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::::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::() -> [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::}, val: Value() } -+ _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::() -> [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::() -> [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() } -+ 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: ::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::(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) -> ::Discriminant {discriminant_value::}, val: Value() } -+ _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::(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) -> ::Discriminant {discriminant_value::}, val: Value() } -+ _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() } -+ _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::(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) -> ::Discriminant {discriminant_value::}, val: Value() } -+ _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: ::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::(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::(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::(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: ::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::(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::(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::(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::(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::}, val: Value() } -+ 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::(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::(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::(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::}, val: Value() } -+ _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::(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::(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::}; // in scope 0 at $DIR/lower_intrinsics.rs:+2:9: +2:18 - let mut _2: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::}; // 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::; // 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::}, val: Value() } - 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::}; + let mut _2: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::}; + scope 1 { + debug size_of_t => _1; + } + + bb0: { + StorageLive(_1); + _1 = std::intrinsics::size_of::; + 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::}; + let mut _2: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::}; + scope 1 { + debug size_of_t => _1; + } + + bb0: { + StorageLive(_1); + _1 = std::intrinsics::size_of::; + 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, _2: &Option) -> () { - 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; // in scope 0 at $DIR/lower_intrinsics.rs:+2:55: +2:56 - let mut _6: *const std::option::Option; // 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::(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) -> *const usize {option_payload_ptr::}, val: Value() } -+ _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::(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) -> *const String {option_payload_ptr::}, val: Value() } -+ _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, _2: &Option) -> () { + debug o => _1; + debug p => _2; + let mut _0: (); + let mut _4: *const std::option::Option; + let mut _6: *const std::option::Option; + 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::(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::(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, _2: &Option) -> () { + debug o => _1; + debug p => _2; + let mut _0: (); + let mut _4: *const std::option::Option; + let mut _6: *const std::option::Option; + 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::(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::(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() } -+ _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::(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::}, val: Value() } -+ _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::(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::(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::(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::}, val: Value() } -+ 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::(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::(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() -> usize { core::intrinsics::size_of::() 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::() -> [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::}, val: Value() } -+ _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::() -> [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::() -> [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::(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::}, val: Value() } -+ _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::(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::(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() } -+ _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; // 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::>(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 {transmute::>}, val: Value() } -+ _1 = const 1_usize as std::boxed::Box (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; + scope 1 { + debug x => _1; + } + + bb0: { + StorageLive(_1); +- _1 = transmute::>(const 1_usize) -> [return: bb1, unwind unreachable]; ++ _1 = const 1_usize as std::boxed::Box (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; + scope 1 { + debug x => _1; + } + + bb0: { + StorageLive(_1); +- _1 = transmute::>(const 1_usize) -> [return: bb1, unwind unreachable]; ++ _1 = const 1_usize as std::boxed::Box (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::(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::}, val: Value() } -+ _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::(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::(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::(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::}, val: Value() } -+ _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::(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::(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() } -+ _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::(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::(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::(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::(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::(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::(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::(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::(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::(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::(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::(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::(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::(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::(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() } -+ 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::(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::}, val: Value() } -+ _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::(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::}, val: Value() } -+ _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::(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::}, val: Value() } -+ _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::(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::(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::(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::(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::(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::(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::(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::}, val: Value() } -+ _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::(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::}, val: Value() } -+ _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::(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::}, val: Value() } -+ _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::(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::(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::(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::(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::(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::(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::(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::}, val: Value() } -+ (*_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::(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::(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::::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::::len}, val: Value() } -+ _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::::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::::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() } + 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() } + 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() } + 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() } + 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` (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 { - 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() } - // 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 { + 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 { + 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 = ::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 {::to_string}, val: Value() } - } - - bb1: { - StorageDead(_3); // scope 0 at $DIR/no_spurious_drop_after_call.rs:+1:33: +1:34 - _1 = std::mem::drop::(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::}, val: Value() } - } - - 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 = ::to_string(move _3) -> [return: bb1, unwind: bb4]; + } + + bb1: { + StorageDead(_3); + _1 = std::mem::drop::(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 = ::to_string(move _3) -> [return: bb1, unwind continue]; + } + + bb1: { + StorageDead(_3); + _1 = std::mem::drop::(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 { + debug x => _1; + debug rhs => _2; + let mut _0: std::option::Option; + scope 1 (inlined core::num::::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::::overflowing_shl) { + debug self => _1; + debug rhs => _2; + let mut _5: u32; + let mut _6: bool; + scope 4 (inlined core::num::::wrapping_shl) { + debug self => _1; + debug rhs => _2; + let mut _3: u32; + let mut _4: u32; + scope 5 { + scope 6 (inlined core::num::::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::::Some(_8); + goto -> bb4; + } + + bb3: { + _0 = Option::::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 { + 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 ::forward) { + debug start => _1; + debug n => _2; + let _3: std::option::Option; + let mut _4: &std::option::Option; + let mut _7: bool; + let mut _8: u32; + scope 2 { + } + scope 3 (inlined Option::::is_none) { + debug self => _4; + let mut _6: bool; + scope 4 (inlined Option::::is_some) { + debug self => _4; + let mut _5: isize; + } + } + scope 5 (inlined core::num::::wrapping_add) { + debug self => _1; + debug rhs => _8; + } + } + + bb0: { + StorageLive(_7); + StorageLive(_4); + StorageLive(_3); + _3 = ::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::) { // 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::) { // at $DIR/intrinsics.rs:24:8: 24:32 + let mut _0: (); + let mut _1: u64; + scope 1 (inlined f_dispatch::) { + debug t => const 0_u64; + let _2: (); + scope 2 (inlined std::mem::size_of::) { } } 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::(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::}, val: Value() } + StorageLive(_1); + _1 = const 0_u64; + _2 = f_non_zst::(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() } + _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, _2: impl Fn(T) -> Option) -> () { + debug iter => _1; + debug f => _2; + let mut _0: (); + let mut _3: std::iter::FilterMap, impl Fn(T) -> Option>; + let mut _4: std::iter::FilterMap, impl Fn(T) -> Option>; + let mut _5: std::iter::FilterMap, impl Fn(T) -> Option>; + let mut _6: &mut std::iter::FilterMap, impl Fn(T) -> Option>; + let mut _9: std::option::Option; + let mut _10: isize; + let _12: (); + scope 1 { + debug iter => _5; + let _11: U; + scope 2 { + debug x => _11; + } + scope 4 (inlined , impl Fn(T) -> Option> as Iterator>::next) { + debug self => _6; + let mut _7: &mut impl Iterator; + let mut _8: &mut impl Fn(T) -> Option; + } + } + scope 3 (inlined , impl Fn(T) -> Option> as IntoIterator>::into_iter) { + debug self => _3; + } + + bb0: { + StorageLive(_4); + StorageLive(_3); + _3 = as Iterator>::filter_map:: Option>(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); + StorageLive(_8); + _8 = &mut ((*_6).1: impl Fn(T) -> Option); + _9 = as Iterator>::find_map:: Option>(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::(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; + let mut _4: std::ops::Range; + let mut _5: &mut std::ops::Range; + let mut _11: std::option::Option; + let mut _14: isize; + let _16: (); + scope 1 { + debug iter => _4; + let _15: usize; + scope 2 { + debug i => _15; + } + scope 4 (inlined iter::range::>::next) { + debug self => _5; + scope 5 (inlined 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::::lt) { + debug self => _6; + debug other => _7; + let mut _8: usize; + let mut _9: usize; + } + } + } + } + scope 3 (inlined as IntoIterator>::into_iter) { + debug self => _3; + } + + bb0: { + _3 = std::ops::Range:: { 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::::None; + goto -> bb5; + } + + bb3: { + _12 = ((*_5).0: usize); + StorageLive(_13); + _13 = ::forward_unchecked(_12, const 1_usize) -> [return: bb4, unwind continue]; + } + + bb4: { + ((*_5).0: usize) = move _13; + StorageDead(_13); + _11 = Option::::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::(_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, _2: impl Fn(T) -> U) -> () { + debug iter => _1; + debug f => _2; + let mut _0: (); + let mut _3: std::iter::Map, impl Fn(T) -> U>; + let mut _4: std::iter::Map, impl Fn(T) -> U>; + let mut _5: std::iter::Map, impl Fn(T) -> U>; + let mut _6: &mut std::iter::Map, impl Fn(T) -> U>; + let mut _7: std::option::Option; + let mut _8: isize; + let _10: (); + scope 1 { + debug iter => _5; + let _9: U; + scope 2 { + debug x => _9; + } + } + scope 3 (inlined , impl Fn(T) -> U> as IntoIterator>::into_iter) { + debug self => _3; + } + + bb0: { + StorageLive(_4); + StorageLive(_3); + _3 = as Iterator>::map:: 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 = , 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::(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(iter: impl Iterator, f: impl Fn(T) -> U) { + for x in iter.map(f) { + opaque(x) + } +} + +pub fn filter_mapped(iter: impl Iterator, f: impl Fn(T) -> Option) { + for x in iter.filter_map(f) { + opaque(x) + } +} + +pub fn vec_move(mut v: Vec) { + 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) -> () { + debug v => _1; + let mut _0: (); + let mut _2: std::vec::IntoIter; + let mut _3: std::vec::IntoIter; + let mut _4: &mut std::vec::IntoIter; + let mut _5: std::option::Option; + let mut _6: isize; + let _8: (); + scope 1 { + debug iter => _3; + let _7: impl Sized; + scope 2 { + debug x => _7; + } + } + + bb0: { + StorageLive(_2); + _2 = 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 = 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::(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::) { // 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::) { + 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::) { // 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::) { + debug dst => _4; + debug src => _2; + let mut _6: *mut u32; scope 8 { - scope 9 (inlined std::ptr::write::runtime::) { // 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::) { + debug dst => _6; } } } } - scope 4 (inlined std::ptr::read::) { // 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::) { + debug src => _3; + let mut _5: *const u32; scope 5 { - scope 6 (inlined std::ptr::read::runtime::) { // 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::) { + 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; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24 - let mut _5: std::ops::Range; // 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; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24 - let mut _8: &mut std::ops::Range; // 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::>::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 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:: { 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 = 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) -> Option< as iter::range::RangeIteratorImpl>::Item> { as iter::range::RangeIteratorImpl>::spec_next}, val: Value() } - } - - 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 = >::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,)) -> >::Output {>::call}, val: Value() } - } - - 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; + let mut _5: std::ops::Range; + let mut _6: &mut std::ops::Range; + let mut _12: std::option::Option; + 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::>::next) { + debug self => _6; + scope 5 (inlined 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::::lt) { + debug self => _7; + debug other => _8; + let mut _9: u32; + let mut _10: u32; + } + } + } + } + scope 3 (inlined as IntoIterator>::into_iter) { + debug self => _4; + } + + bb0: { + _4 = std::ops::Range:: { 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::::None; + goto -> bb5; + } + + bb3: { + _13 = ((*_6).0: u32); + StorageLive(_14); + _14 = ::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind unreachable]; + } + + bb4: { + ((*_6).0: u32) = move _14; + StorageDead(_14); + _12 = Option::::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 = >::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; + let mut _5: std::ops::Range; + let mut _6: &mut std::ops::Range; + let mut _12: std::option::Option; + 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::>::next) { + debug self => _6; + scope 5 (inlined 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::::lt) { + debug self => _7; + debug other => _8; + let mut _9: u32; + let mut _10: u32; + } + } + } + } + scope 3 (inlined as IntoIterator>::into_iter) { + debug self => _4; + } + + bb0: { + _4 = std::ops::Range:: { 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::::None; + goto -> bb5; + } + + bb3: { + _13 = ((*_6).0: u32); + StorageLive(_14); + _14 = ::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind: bb11]; + } + + bb4: { + ((*_6).0: u32) = move _14; + StorageDead(_14); + _12 = Option::::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 = >::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; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:25 - let mut _5: std::ops::RangeInclusive; // 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; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:25 - let mut _8: &mut std::ops::RangeInclusive; // 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::>::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::::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 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:: { 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 = 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) -> Option< as iter::range::RangeInclusiveIteratorImpl>::Item> { as iter::range::RangeInclusiveIteratorImpl>::spec_next}, val: Value() } - } - - 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 = >::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,)) -> >::Output {>::call}, val: Value() } - } - - 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; + let mut _5: std::ops::RangeInclusive; + let mut _6: &mut std::ops::RangeInclusive; + let mut _7: std::option::Option; + 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::>::next) { + debug self => _6; + } + } + scope 3 (inlined RangeInclusive::::new) { + debug start => _1; + debug end => _2; + } + scope 4 (inlined as IntoIterator>::into_iter) { + debug self => _4; + } + + bb0: { + _4 = RangeInclusive:: { start: _1, end: _2, exhausted: const false }; + StorageLive(_5); + _5 = move _4; + goto -> bb1; + } + + bb1: { + StorageLive(_7); + _6 = &mut _5; + _7 = 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 = >::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; + let mut _5: std::ops::RangeInclusive; + let mut _6: &mut std::ops::RangeInclusive; + let mut _7: std::option::Option; + 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::>::next) { + debug self => _6; + } + } + scope 3 (inlined RangeInclusive::::new) { + debug start => _1; + debug end => _2; + } + scope 4 (inlined as IntoIterator>::into_iter) { + debug self => _4; + } + + bb0: { + _4 = RangeInclusive:: { start: _1, end: _2, exhausted: const false }; + StorageLive(_5); + _5 = move _4; + goto -> bb1; + } + + bb1: { + StorageLive(_7); + _6 = &mut _5; + _7 = 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 = >::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) -> Option { - debug it => _1; // in scope 0 at $DIR/range_iter.rs:+0:34: +0:36 - let mut _0: std::option::Option; // return place in scope 0 at $DIR/range_iter.rs:+0:67: +0:78 - scope 1 (inlined iter::range::>::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 = 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) -> Option< as iter::range::RangeInclusiveIteratorImpl>::Item> { as iter::range::RangeInclusiveIteratorImpl>::spec_next}, val: Value() } - } - - 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) -> Option { + debug it => _1; + let mut _0: std::option::Option; + scope 1 (inlined iter::range::>::next) { + debug self => _1; + } + + bb0: { + _0 = 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) -> Option { + debug it => _1; + let mut _0: std::option::Option; + scope 1 (inlined iter::range::>::next) { + debug self => _1; + } + + bb0: { + _0 = 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) -> Option { - debug it => _1; // in scope 0 at $DIR/range_iter.rs:+0:24: +0:26 - let mut _0: std::option::Option; // return place in scope 0 at $DIR/range_iter.rs:+0:48: +0:59 - scope 1 (inlined iter::range::>::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 = 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) -> Option< as iter::range::RangeIteratorImpl>::Item> { as iter::range::RangeIteratorImpl>::spec_next}, val: Value() } - } - - 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) -> Option { + debug it => _1; + let mut _0: std::option::Option; + scope 1 (inlined iter::range::>::next) { + debug self => _1; + scope 2 (inlined 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::::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::::None; + goto -> bb4; + } + + bb2: { + _7 = ((*_1).0: u32); + StorageLive(_8); + _8 = ::forward_unchecked(_7, const 1_usize) -> [return: bb3, unwind unreachable]; + } + + bb3: { + ((*_1).0: u32) = move _8; + StorageDead(_8); + _0 = Option::::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) -> Option { + debug it => _1; + let mut _0: std::option::Option; + scope 1 (inlined iter::range::>::next) { + debug self => _1; + scope 2 (inlined 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::::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::::None; + goto -> bb4; + } + + bb2: { + _7 = ((*_1).0: u32); + StorageLive(_8); + _8 = ::forward_unchecked(_7, const 1_usize) -> [return: bb3, unwind continue]; + } + + bb3: { + ((*_1).0: u32) = move _8; + StorageDead(_8); + _0 = Option::::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) -> Option { - debug x => _1; // in scope 0 at $DIR/simple_option_map.rs:+0:14: +0:15 - let mut _0: std::option::Option; // 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::) { // 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; + let mut _5: i32; + scope 1 (inlined map::) { + 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::::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::::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::::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::::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::::le) { + debug self => _11; + debug other => _13; + let mut _14: &usize; + let mut _15: &usize; + scope 3 (inlined cmp::impls::::le) { + debug self => _14; + debug other => _15; + let mut _16: usize; + let mut _17: usize; + } + } + scope 4 (inlined cmp::impls::::le) { + debug self => _28; + debug other => _30; + let mut _31: &usize; + let mut _32: &usize; + scope 5 (inlined cmp::impls::::le) { + debug self => _31; + debug other => _32; + let mut _33: usize; + let mut _34: usize; + } + } + scope 6 (inlined cmp::impls::::le) { + debug self => _20; + debug other => _22; + let mut _23: &usize; + let mut _24: &usize; + scope 7 (inlined cmp::impls::::le) { + debug self => _23; + debug other => _24; + let mut _25: usize; + let mut _26: usize; + } + } + scope 8 (inlined cmp::impls::::le) { + debug self => _37; + debug other => _39; + let mut _40: &usize; + let mut _41: &usize; + scope 9 (inlined cmp::impls::::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::::get_mut::) { // 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 >::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 >::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 >::get_unchecked_mut::runtime::) { // 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::::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::::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::::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::::get_mut::) { + debug self => _1; + debug index => _2; + scope 2 (inlined >::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 >::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 >::get_unchecked_mut::runtime::) { + debug this => _10; + debug slice => _11; + scope 8 (inlined ptr::mut_ptr::::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::::as_mut_ptr) { + debug self => _6; + } + scope 12 (inlined ptr::mut_ptr::::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::::get_mut::) { + debug self => _1; + debug index => _2; + scope 2 (inlined >::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 >::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 >::get_unchecked_mut::runtime::) { + debug this => _10; + debug slice => _11; + scope 8 (inlined ptr::mut_ptr::::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::::as_mut_ptr) { + debug self => _6; + } + scope 12 (inlined ptr::mut_ptr::::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) -> &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::::get_unchecked_mut::>) { // 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 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; // 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; // 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::::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::::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::) { // 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::::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 as SliceIndex<[T]>>::get_unchecked_mut::runtime::) { // 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::::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::(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::}, val: Value() } - } - - 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) -> &mut [u32] { + debug slice => _1; + debug index => _2; + let mut _0: &mut [u32]; + scope 1 (inlined core::slice::::get_unchecked_mut::>) { + debug self => _1; + debug index => _2; + let mut _3: *mut [u32]; + let mut _14: *mut [u32]; + scope 2 { + scope 3 (inlined 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; + scope 4 { + debug this => _15; + scope 5 { + let _6: usize; + scope 6 { + debug new_len => _6; + scope 7 (inlined ptr::mut_ptr::::as_mut_ptr) { + debug self => _3; + } + scope 8 (inlined ptr::mut_ptr::::add) { + debug self => _7; + debug count => _8; + scope 9 { + } + } + scope 10 (inlined slice_from_raw_parts_mut::) { + debug data => _9; + debug len => _6; + let mut _10: *mut (); + scope 11 (inlined ptr::mut_ptr::::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) -> &mut [u32] { + debug slice => _1; + debug index => _2; + let mut _0: &mut [u32]; + scope 1 (inlined core::slice::::get_unchecked_mut::>) { + debug self => _1; + debug index => _2; + let mut _3: *mut [u32]; + let mut _14: *mut [u32]; + scope 2 { + scope 3 (inlined 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; + scope 4 { + debug this => _15; + scope 5 { + let _6: usize; + scope 6 { + debug new_len => _6; + scope 7 (inlined ptr::mut_ptr::::as_mut_ptr) { + debug self => _3; + } + scope 8 (inlined ptr::mut_ptr::::add) { + debug self => _7; + debug count => _8; + scope 9 { + } + } + scope 10 (inlined slice_from_raw_parts_mut::) { + debug data => _9; + debug len => _6; + let mut _10: *mut (); + scope 11 (inlined ptr::mut_ptr::::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) -> &[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::> 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 = 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, &'a [u32]) -> &'a as SliceIndex<[u32]>>::Output { as SliceIndex<[u32]>>::index}, val: Value() } - } - - 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) -> &[u32] { + debug slice => _1; + debug index => _2; + let mut _0: &[u32]; + scope 1 (inlined #[track_caller] core::slice::index::> for [u32]>::index) { + debug self => _1; + debug index => _2; + let _3: &[u32]; + } + + bb0: { + StorageLive(_3); + _3 = 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) -> &[u32] { + debug slice => _1; + debug index => _2; + let mut _0: &[u32]; + scope 1 (inlined #[track_caller] core::slice::index::> for [u32]>::index) { + debug self => _1; + debug index => _2; + let _3: &[u32]; + } + + bb0: { + StorageLive(_3); + _3 = 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>; + let mut _15: std::iter::Enumerate>; + let mut _16: &mut std::iter::Enumerate>; + 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::::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; + 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::::new_unchecked) { + debug ptr => _9; + let mut _10: *const T; + let mut _24: *mut T; + scope 14 { + scope 15 (inlined NonNull::::new_unchecked::runtime::) { + debug ptr => _24; + scope 16 (inlined ptr::mut_ptr::::is_null) { + debug self => _24; + let mut _25: *mut u8; + scope 17 { + scope 18 (inlined ptr::mut_ptr::::is_null::runtime_impl) { + debug ptr => _25; + scope 19 (inlined ptr::mut_ptr::::addr) { + debug self => _25; + scope 20 { + scope 21 (inlined ptr::mut_ptr::::cast::<()>) { + debug self => _25; + } + } + } + } + } + } + } + } + } + } + scope 9 (inlined invalid::) { + debug addr => _8; + scope 10 { + } + } + scope 11 (inlined ptr::const_ptr::::add) { + debug self => _4; + debug count => _6; + scope 12 { + } + } + } + } + scope 8 (inlined core::slice::::as_ptr) { + debug self => _1; + let mut _3: *const [T]; + } + } + } + scope 22 (inlined as Iterator>::enumerate) { + debug self => _13; + scope 23 (inlined Enumerate::>::new) { + debug iter => _13; + } + } + scope 24 (inlined > 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:: { 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::> { iter: move _13, count: const 0_usize }; + StorageDead(_13); + StorageLive(_15); + _15 = move _14; + goto -> bb4; + } + + bb4: { + StorageLive(_17); + _16 = &mut _15; + _17 = > 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 = >::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>; + let mut _15: std::iter::Enumerate>; + let mut _16: &mut std::iter::Enumerate>; + 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::::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; + 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::::new_unchecked) { + debug ptr => _9; + let mut _10: *const T; + let mut _24: *mut T; + scope 14 { + scope 15 (inlined NonNull::::new_unchecked::runtime::) { + debug ptr => _24; + scope 16 (inlined ptr::mut_ptr::::is_null) { + debug self => _24; + let mut _25: *mut u8; + scope 17 { + scope 18 (inlined ptr::mut_ptr::::is_null::runtime_impl) { + debug ptr => _25; + scope 19 (inlined ptr::mut_ptr::::addr) { + debug self => _25; + scope 20 { + scope 21 (inlined ptr::mut_ptr::::cast::<()>) { + debug self => _25; + } + } + } + } + } + } + } + } + } + } + scope 9 (inlined invalid::) { + debug addr => _8; + scope 10 { + } + } + scope 11 (inlined ptr::const_ptr::::add) { + debug self => _4; + debug count => _6; + scope 12 { + } + } + } + } + scope 8 (inlined core::slice::::as_ptr) { + debug self => _1; + let mut _3: *const [T]; + } + } + } + scope 22 (inlined as Iterator>::enumerate) { + debug self => _13; + scope 23 (inlined Enumerate::>::new) { + debug iter => _13; + } + } + scope 24 (inlined > 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:: { 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::> { iter: move _13, count: const 0_usize }; + StorageDead(_13); + StorageLive(_15); + _15 = move _14; + goto -> bb4; + } + + bb4: { + StorageLive(_17); + _16 = &mut _15; + _17 = > 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 = >::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::::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; // 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::::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::::new_unchecked::runtime::) { // 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::::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::::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::::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::::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::) { // 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::::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::::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 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 = 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< as Iterator>::Item> { as Iterator>::next}, val: Value() } - } - - 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 = >::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,)) -> >::Output {>::call}, val: Value() } - } - - 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:: { 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() } - // 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::::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; + 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::::new_unchecked) { + debug ptr => _9; + let mut _10: *const T; + let mut _22: *mut T; + scope 14 { + scope 15 (inlined NonNull::::new_unchecked::runtime::) { + debug ptr => _22; + scope 16 (inlined ptr::mut_ptr::::is_null) { + debug self => _22; + let mut _23: *mut u8; + scope 17 { + scope 18 (inlined ptr::mut_ptr::::is_null::runtime_impl) { + debug ptr => _23; + scope 19 (inlined ptr::mut_ptr::::addr) { + debug self => _23; + scope 20 { + scope 21 (inlined ptr::mut_ptr::::cast::<()>) { + debug self => _23; + } + } + } + } + } + } + } + } + } + } + scope 9 (inlined invalid::) { + debug addr => _8; + scope 10 { + } + } + scope 11 (inlined ptr::const_ptr::::add) { + debug self => _4; + debug count => _6; + scope 12 { + } + } + } + } + scope 8 (inlined core::slice::::as_ptr) { + debug self => _1; + let mut _3: *const [T]; + } + } + } + scope 22 (inlined 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:: { 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 = 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 = >::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::::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; + 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::::new_unchecked) { + debug ptr => _9; + let mut _10: *const T; + let mut _22: *mut T; + scope 14 { + scope 15 (inlined NonNull::::new_unchecked::runtime::) { + debug ptr => _22; + scope 16 (inlined ptr::mut_ptr::::is_null) { + debug self => _22; + let mut _23: *mut u8; + scope 17 { + scope 18 (inlined ptr::mut_ptr::::is_null::runtime_impl) { + debug ptr => _23; + scope 19 (inlined ptr::mut_ptr::::addr) { + debug self => _23; + scope 20 { + scope 21 (inlined ptr::mut_ptr::::cast::<()>) { + debug self => _23; + } + } + } + } + } + } + } + } + } + } + scope 9 (inlined invalid::) { + debug addr => _8; + scope 10 { + } + } + scope 11 (inlined ptr::const_ptr::::add) { + debug self => _4; + debug count => _6; + scope 12 { + } + } + } + } + scope 8 (inlined core::slice::::as_ptr) { + debug self => _1; + let mut _3: *const [T]; + } + } + } + scope 22 (inlined 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:: { 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 = 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 = >::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; + let mut _5: std::ops::Range; + let mut _6: &mut std::ops::Range; + let mut _12: std::option::Option; + 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::>::next) { + debug self => _6; + scope 6 (inlined 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::::lt) { + debug self => _7; + debug other => _8; + let mut _9: usize; + let mut _10: usize; + } + } + } + } + scope 4 (inlined as IntoIterator>::into_iter) { + debug self => _4; + } + + bb0: { + StorageLive(_3); + _3 = Len((*_1)); + _4 = std::ops::Range:: { 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::::None; + goto -> bb5; + } + + bb3: { + _13 = ((*_6).0: usize); + StorageLive(_14); + _14 = ::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind unreachable]; + } + + bb4: { + ((*_6).0: usize) = move _14; + StorageDead(_14); + _12 = Option::::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 = >::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; + let mut _5: std::ops::Range; + let mut _6: &mut std::ops::Range; + let mut _12: std::option::Option; + 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::>::next) { + debug self => _6; + scope 6 (inlined 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::::lt) { + debug self => _7; + debug other => _8; + let mut _9: usize; + let mut _10: usize; + } + } + } + } + scope 4 (inlined as IntoIterator>::into_iter) { + debug self => _4; + } + + bb0: { + StorageLive(_3); + _3 = Len((*_1)); + _4 = std::ops::Range:: { 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::::None; + goto -> bb5; + } + + bb3: { + _13 = ((*_6).0: usize); + StorageLive(_14); + _14 = ::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind: bb12]; + } + + bb4: { + ((*_6).0: usize) = move _14; + StorageDead(_14); + _12 = Option::::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 = >::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>; // 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>; // 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>; // 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 > 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::::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; // 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::::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::::new_unchecked::runtime::) { // 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::::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::::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::::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::::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::) { // 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::::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::::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 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::>::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 > 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 = 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< as Iterator>::Item> { as DoubleEndedIterator>::next_back}, val: Value() } - } - - 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 = >::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,)) -> >::Output {>::call}, val: Value() } - } - - 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:: { 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() } - // 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::> { 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>; + let mut _15: std::iter::Rev>; + let mut _16: &mut std::iter::Rev>; + 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 > as Iterator>::next) { + debug self => _16; + let mut _17: &mut std::slice::Iter<'_, T>; + } + } + scope 3 (inlined core::slice::::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; + 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::::new_unchecked) { + debug ptr => _9; + let mut _10: *const T; + let mut _24: *mut T; + scope 14 { + scope 15 (inlined NonNull::::new_unchecked::runtime::) { + debug ptr => _24; + scope 16 (inlined ptr::mut_ptr::::is_null) { + debug self => _24; + let mut _25: *mut u8; + scope 17 { + scope 18 (inlined ptr::mut_ptr::::is_null::runtime_impl) { + debug ptr => _25; + scope 19 (inlined ptr::mut_ptr::::addr) { + debug self => _25; + scope 20 { + scope 21 (inlined ptr::mut_ptr::::cast::<()>) { + debug self => _25; + } + } + } + } + } + } + } + } + } + } + scope 9 (inlined invalid::) { + debug addr => _8; + scope 10 { + } + } + scope 11 (inlined ptr::const_ptr::::add) { + debug self => _4; + debug count => _6; + scope 12 { + } + } + } + } + scope 8 (inlined core::slice::::as_ptr) { + debug self => _1; + let mut _3: *const [T]; + } + } + } + scope 22 (inlined as Iterator>::rev) { + debug self => _13; + scope 23 (inlined Rev::>::new) { + debug iter => _13; + } + } + scope 24 (inlined > 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:: { 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::> { 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 = 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 = >::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>; + let mut _15: std::iter::Rev>; + let mut _16: &mut std::iter::Rev>; + 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 > as Iterator>::next) { + debug self => _16; + let mut _17: &mut std::slice::Iter<'_, T>; + } + } + scope 3 (inlined core::slice::::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; + 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::::new_unchecked) { + debug ptr => _9; + let mut _10: *const T; + let mut _24: *mut T; + scope 14 { + scope 15 (inlined NonNull::::new_unchecked::runtime::) { + debug ptr => _24; + scope 16 (inlined ptr::mut_ptr::::is_null) { + debug self => _24; + let mut _25: *mut u8; + scope 17 { + scope 18 (inlined ptr::mut_ptr::::is_null::runtime_impl) { + debug ptr => _25; + scope 19 (inlined ptr::mut_ptr::::addr) { + debug self => _25; + scope 20 { + scope 21 (inlined ptr::mut_ptr::::cast::<()>) { + debug self => _25; + } + } + } + } + } + } + } + } + } + } + scope 9 (inlined invalid::) { + debug addr => _8; + scope 10 { + } + } + scope 11 (inlined ptr::const_ptr::::add) { + debug self => _4; + debug count => _6; + scope 12 { + } + } + } + } + scope 8 (inlined core::slice::::as_ptr) { + debug self => _1; + let mut _3: *const [T]; + } + } + } + scope 22 (inlined as Iterator>::rev) { + debug self => _13; + scope 23 (inlined Rev::>::new) { + debug iter => _13; + } + } + scope 24 (inlined > 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:: { 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::> { 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 = 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 = >::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 = 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< as Iterator>::Item> { as DoubleEndedIterator>::next_back}, val: Value() } - } - - 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 = 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 = 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 = 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< as Iterator>::Item> { as Iterator>::next}, val: Value() } - } - - 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 = 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 = 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() } + } + + 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() } + } + + 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) -> Result { - debug x => _1; // in scope 0 at $DIR/try_identity.rs:+0:14: +0:15 - let mut _0: std::result::Result; // return place in scope 0 at $DIR/try_identity.rs:+0:34: +0:46 - let mut _2: std::ops::ControlFlow; // 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; + let mut _2: isize; + let _3: T; + let mut _4: std::ops::ControlFlow; + 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::::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::::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::::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::::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::::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::::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::::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::::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) -> Result { - debug x => _1; // in scope 0 at $DIR/try_identity.rs:+0:14: +0:15 - let mut _0: std::result::Result; // 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; + 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::::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::::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::::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::::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; // 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; + 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; // 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; 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::::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::::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, 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>::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>::Output {<[i32; 10] as Index>::index}, val: Value() } + 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>::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::(_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::}, val: Value() } + _5 = (*_2); + _0 = opaque::(_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::(_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::}, val: Value() } + StorageDead(_2); + StorageDead(_3); + _0 = opaque::(_6) -> [return: bb2, unwind continue]; } bb2: { - _7 = (*_4); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL - _0 = opaque::(_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::}, val: Value() } + _7 = (*_4); + _0 = opaque::(_7) -> [return: bb3, unwind continue]; } bb3: { - _8 = (*_5); // scope 0 at $SRC_DIR/core/src/intrinsics/mir.rs:LL:COL - _0 = opaque::(_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::}, val: Value() } + _8 = (*_5); + _0 = opaque::(_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::(_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::}, val: Value() } + StorageLive(_1); + _1 = const 5_i32; + _2 = &_1; + StorageDead(_1); + StorageLive(_1); + _3 = (*_2); + _0 = opaque::(_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() } +- 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } +- 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } +- 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } +- 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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() } + 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::(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::}, val: Value() } +- StorageLive(_1); + StorageLive(_2); + _2 = const 0_i32; +- StorageLive(_3); + _3 = &raw mut _2; + StorageLive(_4); + StorageLive(_5); + _5 = (*_3); + _4 = opaque::(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::(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::}, val: Value() } + StorageDead(_5); + StorageDead(_4); +- _1 = _3; +- StorageDead(_3); + StorageDead(_2); + StorageLive(_6); + StorageLive(_7); +- _7 = (*_1); ++ _7 = (*_3); + _6 = opaque::(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; // in scope 0 at $DIR/remove_storage_markers.rs:+2:14: +2:19 - let mut _3: std::ops::Range; // 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; // in scope 0 at $DIR/remove_storage_markers.rs:+2:14: +2:19 - let mut _8: &mut std::ops::Range; // in scope 0 at $DIR/remove_storage_markers.rs:+2:14: +2:19 - let mut _9: &mut std::ops::Range; // 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; // 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:: { start: const 0_i32, end: const 10_i32 }; // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19 - _2 = 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) -> as IntoIterator>::IntoIter { as IntoIterator>::into_iter}, val: Value() } - } - - 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 = 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) -> Option< as Iterator>::Item> { as Iterator>::next}, val: Value() } - } - - 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; + let mut _3: std::ops::Range; + let mut _5: (); + let _6: (); + let mut _7: std::option::Option; + let mut _8: &mut std::ops::Range; + let mut _9: &mut std::ops::Range; + let mut _10: isize; + let mut _11: !; + let mut _13: i32; + scope 1 { + debug sum => _1; + let mut _4: std::ops::Range; + 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:: { start: const 0_i32, end: const 10_i32 }; + _2 = 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 = 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; + let mut _3: std::ops::Range; + let mut _5: (); + let _6: (); + let mut _7: std::option::Option; + let mut _8: &mut std::ops::Range; + let mut _9: &mut std::ops::Range; + let mut _10: isize; + let mut _11: !; + let mut _13: i32; + scope 1 { + debug sum => _1; + let mut _4: std::ops::Range; + 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:: { start: const 0_i32, end: const 10_i32 }; + _2 = 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 = 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::) { // 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::) { + 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::) { + 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) -> () { - 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; // in scope 0 at $DIR/remove_unneeded_drops.rs:+1:10: +1:11 - scope 1 (inlined std::mem::drop::>) { // 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) -> () { + debug x => _1; + let mut _0: (); + let _2: (); + let mut _3: std::vec::Vec; + scope 1 (inlined std::mem::drop::>) { + 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) -> () { + debug x => _1; + let mut _0: (); + let _2: (); + let mut _3: std::vec::Vec; + scope 1 (inlined std::mem::drop::>) { + 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::) { // 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::) { + 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::) { + 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::) { // 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::) { + 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::) { + 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>; // 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::::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::::add}, val: Value() } - } - - 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::::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::::add}, val: Value() } - } - - 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::>::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::(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>) -> ! {core::panicking::assert_failed::}, val: Value() } - } - - 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>; + 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::::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::::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::>::None; + Retag(_34); + _28 = core::panicking::assert_failed::(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>; + 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::::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::::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::>::None; + Retag(_34); + _28 = core::panicking::assert_failed::(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 = ::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) {::drop}, val: Value() } - } - - 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 = ::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 = ::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() } - } - - 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() } - } - - 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() } - } - - 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 `::foo` after SimplifyCfg-elaborate-drops - -fn ::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 `::foo` after SimplifyCfg-elaborate-drops + +fn ::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 `::foo` after SimplifyCfg-elaborate-drops + +fn ::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 `::foo_shr` after SimplifyCfg-elaborate-drops - -fn ::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 `::foo_shr` after SimplifyCfg-elaborate-drops + +fn ::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 `::foo_shr` after SimplifyCfg-elaborate-drops + +fn ::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) -> Result { - debug x => _1; // in scope 0 at $DIR/separate_const_switch.rs:+0:13: +0:14 - let mut _0: std::result::Result; // 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, i32>; // in scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10 - let mut _4: std::result::Result; // 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; // 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; // 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; + let mut _2: i32; + let mut _3: std::ops::ControlFlow, i32>; + let mut _4: std::result::Result; + let mut _5: isize; + let _6: std::result::Result; + let mut _7: std::result::Result; + 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] as FromResidual>>::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] as FromResidual>>::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 >::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 >::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 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; // in scope 5 at $SRC_DIR/core/src/result.rs:LL:COL + scope 5 (inlined as Try>::branch) { + debug self => _1; + let mut _9: isize; + let _10: i32; + let _11: i32; + let mut _12: std::result::Result; 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::::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::::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); // 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::::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); + _13 = ((_6 as Err).0: i32); + _0 = Result::::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::::Err(move _12); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL - _3 = ControlFlow::, 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::::Err(move _11); + _3 = ControlFlow::, 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::, 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::, 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) -> Option { - debug x => _1; // in scope 0 at $DIR/separate_const_switch.rs:+0:16: +0:17 - let mut _0: std::option::Option; // return place in scope 0 at $DIR/separate_const_switch.rs:+0:42: +0:53 - let mut _2: std::ops::ControlFlow; // 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; + let mut _2: std::ops::ControlFlow; + 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::::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::::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::::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::::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::::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::::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::::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::::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() } +- 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() } + 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() } - } - - 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, std::option::Option); // in scope 0 at $DIR/simplify_locals_fixedpoint.rs:+1:30: +1:69 - let mut _2: std::option::Option; // in scope 0 at $DIR/simplify_locals_fixedpoint.rs:+1:31: +1:49 - let mut _3: std::option::Option; // 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::::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::::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)); // 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)); // 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) 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, std::option::Option); + let mut _2: std::option::Option; + let mut _3: std::option::Option; + let mut _4: isize; + let mut _5: isize; + scope 1 { + debug a => _6; + let _6: u8; + } + + bb0: { + StorageLive(_1); + StorageLive(_2); + _2 = Option::::None; + StorageLive(_3); + _3 = Option::::None; + _1 = (move _2, move _3); + StorageDead(_3); + StorageDead(_2); + _5 = discriminant((_1.0: std::option::Option)); + switchInt(move _5) -> [1: bb1, otherwise: bb3]; + } + + bb1: { + _4 = discriminant((_1.1: std::option::Option)); + switchInt(move _4) -> [0: bb2, otherwise: bb3]; + } + + bb2: { + StorageLive(_6); + _6 = (((_1.0: std::option::Option) 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, std::option::Option); + let mut _2: std::option::Option; + let mut _3: std::option::Option; + let mut _4: isize; + let mut _5: isize; + scope 1 { + debug a => _6; + let _6: u8; + } + + bb0: { + StorageLive(_1); + StorageLive(_2); + _2 = Option::::None; + StorageLive(_3); + _3 = Option::::None; + _1 = (move _2, move _3); + StorageDead(_3); + StorageDead(_2); + _5 = discriminant((_1.0: std::option::Option)); + switchInt(move _5) -> [1: bb1, otherwise: bb3]; + } + + bb1: { + _4 = discriminant((_1.1: std::option::Option)); + switchInt(move _4) -> [0: bb2, otherwise: bb3]; + } + + bb2: { + StorageLive(_6); + _6 = (((_1.0: std::option::Option) 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() { 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() } - } - - 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() } - } - - 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>) -> Option> { - 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>; // 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>; + 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::>::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::>::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::>::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::>::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() } - } - - 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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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::::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 @@ - + + spanview_block.main.built.after