From 05ee406cc83d5498b94873f949ee1de1bba2869f Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Tue, 31 Jan 2023 17:16:16 +0000 Subject: [PATCH 1/3] Add test. --- .../copy-prop/issue_107511.main.CopyProp.diff | 146 ++++++++++++++++++ tests/mir-opt/copy-prop/issue_107511.rs | 15 ++ 2 files changed, 161 insertions(+) create mode 100644 tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff create mode 100644 tests/mir-opt/copy-prop/issue_107511.rs diff --git a/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff b/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff new file mode 100644 index 0000000000000..7759e50e55851 --- /dev/null +++ b/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff @@ -0,0 +1,146 @@ +- // 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 _3: (); // in scope 0 at $DIR/issue_107511.rs:+6:5: +8:6 + let mut _4: std::ops::Range; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24 + let mut _5: std::ops::Range; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24 + let mut _6: usize; // in scope 0 at $DIR/issue_107511.rs:+6:17: +6:24 + let mut _7: &[i32]; // in scope 0 at $DIR/issue_107511.rs:+6:17: +6:24 + let mut _8: &[i32; 4]; // in scope 0 at $DIR/issue_107511.rs:+6:17: +6:24 + let mut _10: (); // in scope 0 at $DIR/issue_107511.rs:+0:1: +11:2 + let _11: (); // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24 + let mut _12: std::option::Option; // 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: &mut std::ops::Range; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24 + let mut _15: isize; // in scope 0 at $DIR/issue_107511.rs:+6:5: +8:6 + let mut _16: !; // in scope 0 at $DIR/issue_107511.rs:+6:5: +8:6 + let mut _18: i32; // in scope 0 at $DIR/issue_107511.rs:+7:16: +7:20 + let _19: usize; // in scope 0 at $DIR/issue_107511.rs:+7:18: +7:19 + let mut _20: usize; // in scope 0 at $DIR/issue_107511.rs:+7:16: +7:20 + let mut _21: 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 _9: std::ops::Range; // in scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 + scope 3 { + debug iter => _9; // in scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 + let _17: usize; // in scope 3 at $DIR/issue_107511.rs:+6:9: +6:10 + scope 4 { + debug i => _17; // in scope 4 at $DIR/issue_107511.rs:+6:9: +6:10 + } + } + scope 5 { + } + } + } + + 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:5: +8:6 + StorageLive(_4); // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 + StorageLive(_5); // scope 2 at $DIR/issue_107511.rs:+6:14: +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 + StorageLive(_8); // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24 + _8 = &_2; // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24 + _7 = move _8 as &[i32] (Pointer(Unsize)); // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24 + StorageDead(_8); // scope 2 at $DIR/issue_107511.rs:+6:17: +6:18 + _6 = core::slice::::len(move _7) -> bb1; // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24 + // mir::Constant + // + span: $DIR/issue_107511.rs:10:19: 10:22 + // + literal: Const { ty: for<'a> fn(&'a [i32]) -> usize {core::slice::::len}, val: Value() } + } + + bb1: { + StorageDead(_7); // scope 2 at $DIR/issue_107511.rs:+6:23: +6:24 + Deinit(_5); // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 + (_5.0: usize) = const 0_usize; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 + (_5.1: usize) = move _6; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 + StorageDead(_6); // scope 2 at $DIR/issue_107511.rs:+6:23: +6:24 + _4 = as IntoIterator>::into_iter(move _5) -> bb2; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 + // mir::Constant + // + span: $DIR/issue_107511.rs:10:14: 10:24 + // + literal: Const { ty: fn(std::ops::Range) -> as IntoIterator>::IntoIter { as IntoIterator>::into_iter}, val: Value() } + } + + bb2: { + StorageDead(_5); // scope 2 at $DIR/issue_107511.rs:+6:23: +6:24 + StorageLive(_9); // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 + _9 = move _4; // 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(_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 + StorageLive(_14); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 + _14 = &mut _9; // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 + _13 = &mut (*_14); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 + _12 = as Iterator>::next(move _13) -> bb4; // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 + // mir::Constant + // + span: $DIR/issue_107511.rs:10:14: 10:24 + // + literal: Const { ty: for<'a> fn(&'a mut std::ops::Range) -> Option< as Iterator>::Item> { as Iterator>::next}, val: Value() } + } + + bb4: { + StorageDead(_13); // scope 3 at $DIR/issue_107511.rs:+6:23: +6:24 + _15 = discriminant(_12); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 + switchInt(move _15) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 + } + + bb5: { + StorageLive(_17); // scope 3 at $DIR/issue_107511.rs:+6:9: +6:10 + _17 = ((_12 as Some).0: usize); // scope 3 at $DIR/issue_107511.rs:+6:9: +6:10 + StorageLive(_18); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 +- StorageLive(_19); // scope 4 at $DIR/issue_107511.rs:+7:18: +7:19 +- _19 = _17; // scope 4 at $DIR/issue_107511.rs:+7:18: +7:19 + _20 = Len(_2); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 +- _21 = Lt(_19, _20); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 +- assert(move _21, "index out of bounds: the length is {} but the index is {}", move _20, _19) -> bb8; // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 ++ _21 = Lt(_17, _20); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 ++ assert(move _21, "index out of bounds: the length is {} but the index is {}", move _20, _17) -> 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: { +- _3 = const (); // scope 3 at $DIR/issue_107511.rs:+6:5: +8:6 + StorageDead(_14); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6 + StorageDead(_12); // 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(_9); // scope 2 at $DIR/issue_107511.rs:+8:5: +8:6 + StorageDead(_4); // scope 2 at $DIR/issue_107511.rs:+8:5: +8:6 +- StorageDead(_3); // scope 2 at $DIR/issue_107511.rs:+8:5: +8:6 + _0 = const (); // scope 0 at $DIR/issue_107511.rs:+0:11: +11:2 + StorageDead(_2); // scope 1 at $DIR/issue_107511.rs:+11:1: +11:2 + StorageDead(_1); // scope 0 at $DIR/issue_107511.rs:+11:1: +11:2 + return; // scope 0 at $DIR/issue_107511.rs:+11:2: +11:2 + } + + bb8: { +- _18 = _2[_19]; // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 ++ _18 = _2[_17]; // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 + _1 = Add(_1, move _18); // scope 4 at $DIR/issue_107511.rs:+7:9: +7:20 + StorageDead(_18); // scope 4 at $DIR/issue_107511.rs:+7:19: +7:20 +- StorageDead(_19); // scope 4 at $DIR/issue_107511.rs:+7:20: +7:21 +- _11 = const (); // scope 4 at $DIR/issue_107511.rs:+6:25: +8:6 +- StorageDead(_17); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6 + StorageDead(_14); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6 + StorageDead(_12); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6 +- StorageDead(_11); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6 +- _10 = 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.rs b/tests/mir-opt/copy-prop/issue_107511.rs new file mode 100644 index 0000000000000..0b872b89834ae --- /dev/null +++ b/tests/mir-opt/copy-prop/issue_107511.rs @@ -0,0 +1,15 @@ +// unit-test: CopyProp + +// EMIT_MIR issue_107511.main.CopyProp.diff +fn main() { + let mut sum = 0; + let a = [0, 10, 20, 30]; + + // `i` is assigned in a loop. Only removing its `StorageDead` would mean that + // execution sees repeated `StorageLive`. This would be UB. + for i in 0..a.len() { + sum += a[i]; + } + + let _ = sum; +} From 3c10cf088a36c0799c9ee70e6d16efe6020da6d0 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Tue, 31 Jan 2023 16:49:01 +0000 Subject: [PATCH 2/3] Remove both StorageLive and StorageDead in CopyProp. --- compiler/rustc_mir_transform/src/copy_prop.rs | 25 +++++++++++-------- .../const_debuginfo.main.ConstDebugInfo.diff | 3 --- .../bad_op_mod_by_zero.main.ConstProp.diff | 1 - ...ar_literal_propagation.main.ConstProp.diff | 1 - .../copy-prop/cycle.main.CopyProp.diff | 2 +- .../dead_stores_79191.f.CopyProp.after.mir | 1 - .../dead_stores_better.f.CopyProp.after.mir | 1 - .../copy-prop/issue_107511.main.CopyProp.diff | 2 +- ...herit_overflow.main.DataflowConstProp.diff | 2 -- ...float_to_exponential_common.ConstProp.diff | 1 - .../mir-opt/issue_101973.inner.ConstProp.diff | 2 -- ...76432.test.SimplifyComparisonIntegral.diff | 1 - .../simplify_match.main.ConstProp.diff | 1 - ...filter.variant_a-{closure#0}.CopyProp.diff | 8 +++--- ..._a-{closure#0}.DestinationPropagation.diff | 4 --- ...filter.variant_b-{closure#0}.CopyProp.diff | 8 +++--- ..._b-{closure#0}.DestinationPropagation.diff | 4 --- .../try_identity_e2e.new.PreCodegen.after.mir | 4 --- .../try_identity_e2e.old.PreCodegen.after.mir | 2 -- 19 files changed, 24 insertions(+), 49 deletions(-) diff --git a/compiler/rustc_mir_transform/src/copy_prop.rs b/compiler/rustc_mir_transform/src/copy_prop.rs index 182b3015dd7d7..4c7d45be0753e 100644 --- a/compiler/rustc_mir_transform/src/copy_prop.rs +++ b/compiler/rustc_mir_transform/src/copy_prop.rs @@ -162,17 +162,20 @@ impl<'tcx> MutVisitor<'tcx> for Replacer<'_, 'tcx> { } fn visit_statement(&mut self, stmt: &mut Statement<'tcx>, loc: Location) { - if let StatementKind::StorageDead(l) = stmt.kind - && self.storage_to_remove.contains(l) - { - stmt.make_nop(); - } else if let StatementKind::Assign(box (ref place, ref mut rvalue)) = stmt.kind - && place.as_local().is_some() - { - // Do not replace assignments. - self.visit_rvalue(rvalue, loc) - } else { - self.super_statement(stmt, loc); + match stmt.kind { + // When removing storage statements, we need to remove both (#107511). + StatementKind::StorageLive(l) | StatementKind::StorageDead(l) + if self.storage_to_remove.contains(l) => + { + stmt.make_nop() + } + StatementKind::Assign(box (ref place, ref mut rvalue)) + if place.as_local().is_some() => + { + // Do not replace assignments. + self.visit_rvalue(rvalue, loc) + } + _ => self.super_statement(stmt, loc), } } } diff --git a/tests/mir-opt/const_debuginfo.main.ConstDebugInfo.diff b/tests/mir-opt/const_debuginfo.main.ConstDebugInfo.diff index 5e587be1f1653..4405b55875ed9 100644 --- a/tests/mir-opt/const_debuginfo.main.ConstDebugInfo.diff +++ b/tests/mir-opt/const_debuginfo.main.ConstDebugInfo.diff @@ -56,11 +56,8 @@ } bb0: { - StorageLive(_1); // scope 0 at $DIR/const_debuginfo.rs:+1:9: +1:10 _1 = const 1_u8; // scope 0 at $DIR/const_debuginfo.rs:+1:13: +1:16 - StorageLive(_2); // scope 1 at $DIR/const_debuginfo.rs:+2:9: +2:10 _2 = const 2_u8; // scope 1 at $DIR/const_debuginfo.rs:+2:13: +2:16 - StorageLive(_3); // scope 2 at $DIR/const_debuginfo.rs:+3:9: +3:10 _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 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 index e085a88b2da8b..ae9ffd519a148 100644 --- 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 @@ -18,7 +18,6 @@ } 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 - _4 = Eq(_1, const 0_i32); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19 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 index e3f5b120a3234..22f710387db71 100644 --- a/tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.diff +++ b/tests/mir-opt/const_prop/scalar_literal_propagation.main.ConstProp.diff @@ -11,7 +11,6 @@ } 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 - _2 = consume(_1) -> bb1; // scope 1 at $DIR/scalar_literal_propagation.rs:+2:5: +2:15 diff --git a/tests/mir-opt/copy-prop/cycle.main.CopyProp.diff b/tests/mir-opt/copy-prop/cycle.main.CopyProp.diff index bc5083e1ad01a..3e61869e82f11 100644 --- a/tests/mir-opt/copy-prop/cycle.main.CopyProp.diff +++ b/tests/mir-opt/copy-prop/cycle.main.CopyProp.diff @@ -29,7 +29,7 @@ } bb1: { - StorageLive(_2); // scope 1 at $DIR/cycle.rs:+2:9: +2:10 +- 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 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 index 918817da56ce4..d48b04e2de273 100644 --- 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 @@ -11,7 +11,6 @@ fn f(_1: usize) -> usize { } bb0: { - StorageLive(_2); // scope 0 at $DIR/dead_stores_79191.rs:+1:9: +1:10 _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 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 index cf21fadd43790..727791f50a4ef 100644 --- 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 @@ -11,7 +11,6 @@ fn f(_1: usize) -> usize { } bb0: { - StorageLive(_2); // scope 0 at $DIR/dead_stores_better.rs:+1:9: +1:10 _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 diff --git a/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff b/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff index 7759e50e55851..a9a0830e55c59 100644 --- a/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff +++ b/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff @@ -98,7 +98,7 @@ } bb5: { - StorageLive(_17); // scope 3 at $DIR/issue_107511.rs:+6:9: +6:10 +- StorageLive(_17); // scope 3 at $DIR/issue_107511.rs:+6:9: +6:10 _17 = ((_12 as Some).0: usize); // scope 3 at $DIR/issue_107511.rs:+6:9: +6:10 StorageLive(_18); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 - StorageLive(_19); // scope 4 at $DIR/issue_107511.rs:+7:18: +7:19 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 index 6870d7d6c45b4..9c3f87f47c12c 100644 --- a/tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.diff +++ b/tests/mir-opt/dataflow-const-prop/inherit_overflow.main.DataflowConstProp.diff @@ -16,9 +16,7 @@ } bb0: { - StorageLive(_1); // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47 _1 = const u8::MAX; // 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 1_u8; // scope 0 at $DIR/inherit_overflow.rs:+3:13: +3:47 _5 = CheckedAdd(const u8::MAX, const 1_u8); // scope 2 at $SRC_DIR/core/src/ops/arith.rs:LL:COL assert(!move (_5.1: bool), "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 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 index df9f8dcf1a407..7c5d28069d59d 100644 --- a/tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.diff +++ b/tests/mir-opt/funky_arms.float_to_exponential_common.ConstProp.diff @@ -79,7 +79,6 @@ } bb6: { - StorageLive(_10); // scope 3 at $DIR/funky_arms.rs:+13:17: +13:26 _10 = ((_7 as Some).0: usize); // scope 3 at $DIR/funky_arms.rs:+13:17: +13:26 StorageLive(_11); // scope 3 at $DIR/funky_arms.rs:+15:43: +15:46 _11 = &mut (*_1); // scope 3 at $DIR/funky_arms.rs:+15:43: +15:46 diff --git a/tests/mir-opt/issue_101973.inner.ConstProp.diff b/tests/mir-opt/issue_101973.inner.ConstProp.diff index 30bf2c0684e52..002392c5cf81a 100644 --- a/tests/mir-opt/issue_101973.inner.ConstProp.diff +++ b/tests/mir-opt/issue_101973.inner.ConstProp.diff @@ -33,7 +33,6 @@ 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(_12); // scope 2 at $DIR/issue_101973.rs:7:12: 7:27 StorageLive(_13); // scope 2 at $DIR/issue_101973.rs:7:12: 7:20 _14 = CheckedShr(_1, const 0_i32); // scope 2 at $DIR/issue_101973.rs:7:12: 7:20 @@ -63,7 +62,6 @@ StorageDead(_13); // scope 2 at $DIR/issue_101973.rs:7:26: 7:27 _4 = BitOr(const 0_u32, move _12); // scope 2 at $DIR/issue_101973.rs:7:5: 7:27 StorageDead(_12); // scope 2 at $DIR/issue_101973.rs:7:26: 7: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 = CheckedShr(_1, const 8_i32); // scope 0 at $DIR/issue_101973.rs:+1:32: +1:45 diff --git a/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.diff b/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.diff index c14780052fb09..cc4f7cc06991f 100644 --- a/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.diff +++ b/tests/mir-opt/issue_76432.test.SimplifyComparisonIntegral.diff @@ -29,7 +29,6 @@ bb0: { StorageLive(_2); // scope 0 at $DIR/issue_76432.rs:+1:9: +1:10 - StorageLive(_4); // scope 0 at $DIR/issue_76432.rs:+1:19: +1:29 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 diff --git a/tests/mir-opt/simplify_match.main.ConstProp.diff b/tests/mir-opt/simplify_match.main.ConstProp.diff index 35ffc4963cb63..b700adfb105b0 100644 --- a/tests/mir-opt/simplify_match.main.ConstProp.diff +++ b/tests/mir-opt/simplify_match.main.ConstProp.diff @@ -10,7 +10,6 @@ } bb0: { - StorageLive(_2); // scope 0 at $DIR/simplify_match.rs:+1:17: +1:18 _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 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 index d1f6fd97dc7c6..da6389676f0d4 100644 --- a/tests/mir-opt/slice_filter.variant_a-{closure#0}.CopyProp.diff +++ b/tests/mir-opt/slice_filter.variant_a-{closure#0}.CopyProp.diff @@ -101,16 +101,16 @@ } bb0: { - StorageLive(_3); // scope 0 at $DIR/slice_filter.rs:+0:27: +0:28 +- 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 +- 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 +- 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 +- 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 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 index 259cd41189608..294c3272f4f10 100644 --- a/tests/mir-opt/slice_filter.variant_a-{closure#0}.DestinationPropagation.diff +++ b/tests/mir-opt/slice_filter.variant_a-{closure#0}.DestinationPropagation.diff @@ -85,16 +85,12 @@ } 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 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 index c3b8e7d2eba25..5e4bdbdfa2e2f 100644 --- a/tests/mir-opt/slice_filter.variant_b-{closure#0}.CopyProp.diff +++ b/tests/mir-opt/slice_filter.variant_b-{closure#0}.CopyProp.diff @@ -33,16 +33,16 @@ } bb0: { - StorageLive(_3); // scope 0 at $DIR/slice_filter.rs:+0:29: +0:30 +- 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 +- 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 +- 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 +- 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 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 index a43e84d29c7ad..45af6600cd4e8 100644 --- a/tests/mir-opt/slice_filter.variant_b-{closure#0}.DestinationPropagation.diff +++ b/tests/mir-opt/slice_filter.variant_b-{closure#0}.DestinationPropagation.diff @@ -25,16 +25,12 @@ } bb0: { - StorageLive(_3); // scope 0 at $DIR/slice_filter.rs:+0:29: +0:30 _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 - StorageLive(_4); // scope 0 at $DIR/slice_filter.rs:+0:32: +0:33 _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 - StorageLive(_5); // scope 0 at $DIR/slice_filter.rs:+0:35: +0:36 _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 - StorageLive(_6); // scope 0 at $DIR/slice_filter.rs:+0:38: +0:39 _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 diff --git a/tests/mir-opt/try_identity_e2e.new.PreCodegen.after.mir b/tests/mir-opt/try_identity_e2e.new.PreCodegen.after.mir index 7c67d2abcf7c3..a4d2660ca6aeb 100644 --- a/tests/mir-opt/try_identity_e2e.new.PreCodegen.after.mir +++ b/tests/mir-opt/try_identity_e2e.new.PreCodegen.after.mir @@ -30,7 +30,6 @@ fn new(_1: Result) -> Result { } bb1: { - StorageLive(_5); // scope 0 at $DIR/try_identity_e2e.rs:+5:21: +5:22 _5 = move ((_1 as Err).0: E); // scope 0 at $DIR/try_identity_e2e.rs:+5:21: +5:22 Deinit(_2); // scope 2 at $DIR/try_identity_e2e.rs:+5:27: +5:48 ((_2 as Break).0: E) = move _5; // scope 2 at $DIR/try_identity_e2e.rs:+5:27: +5:48 @@ -40,7 +39,6 @@ fn new(_1: Result) -> Result { } bb2: { - StorageLive(_4); // scope 0 at $DIR/try_identity_e2e.rs:+4:20: +4:21 _4 = move ((_1 as Ok).0: T); // scope 0 at $DIR/try_identity_e2e.rs:+4:20: +4:21 Deinit(_2); // scope 1 at $DIR/try_identity_e2e.rs:+4:26: +4:50 ((_2 as Continue).0: T) = move _4; // scope 1 at $DIR/try_identity_e2e.rs:+4:26: +4:50 @@ -50,7 +48,6 @@ fn new(_1: Result) -> Result { } bb3: { - StorageLive(_8); // scope 0 at $DIR/try_identity_e2e.rs:+9:32: +9:33 _8 = move ((_2 as Break).0: E); // scope 0 at $DIR/try_identity_e2e.rs:+9:32: +9:33 Deinit(_0); // scope 4 at $DIR/try_identity_e2e.rs:+9:45: +9:51 ((_0 as Err).0: E) = move _8; // scope 4 at $DIR/try_identity_e2e.rs:+9:45: +9:51 @@ -64,7 +61,6 @@ fn new(_1: Result) -> Result { } bb5: { - StorageLive(_7); // scope 0 at $DIR/try_identity_e2e.rs:+8:35: +8:36 _7 = move ((_2 as Continue).0: T); // scope 0 at $DIR/try_identity_e2e.rs:+8:35: +8:36 Deinit(_0); // scope 0 at $DIR/try_identity_e2e.rs:+1:5: +11:6 ((_0 as Ok).0: T) = move _7; // scope 0 at $DIR/try_identity_e2e.rs:+1:5: +11:6 diff --git a/tests/mir-opt/try_identity_e2e.old.PreCodegen.after.mir b/tests/mir-opt/try_identity_e2e.old.PreCodegen.after.mir index 4a838e140262e..37851c66a6076 100644 --- a/tests/mir-opt/try_identity_e2e.old.PreCodegen.after.mir +++ b/tests/mir-opt/try_identity_e2e.old.PreCodegen.after.mir @@ -19,7 +19,6 @@ fn old(_1: Result) -> Result { } bb1: { - StorageLive(_4); // scope 0 at $DIR/try_identity_e2e.rs:+4:17: +4:18 _4 = move ((_1 as Err).0: E); // scope 0 at $DIR/try_identity_e2e.rs:+4:17: +4:18 Deinit(_0); // scope 2 at $DIR/try_identity_e2e.rs:+4:30: +4:36 ((_0 as Err).0: E) = move _4; // scope 2 at $DIR/try_identity_e2e.rs:+4:30: +4:36 @@ -32,7 +31,6 @@ fn old(_1: Result) -> Result { } bb3: { - StorageLive(_3); // scope 0 at $DIR/try_identity_e2e.rs:+3:16: +3:17 _3 = move ((_1 as Ok).0: T); // scope 0 at $DIR/try_identity_e2e.rs:+3:16: +3:17 Deinit(_0); // scope 0 at $DIR/try_identity_e2e.rs:+1:5: +6:6 ((_0 as Ok).0: T) = move _3; // scope 0 at $DIR/try_identity_e2e.rs:+1:5: +6:6 From e8ac0404bdff209b9c542e772bf391800924ebf8 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Tue, 31 Jan 2023 18:07:57 +0000 Subject: [PATCH 3/3] Remove assignment. --- .../copy-prop/issue_107511.main.CopyProp.diff | 146 +++++++++--------- tests/mir-opt/copy-prop/issue_107511.rs | 2 - 2 files changed, 70 insertions(+), 78 deletions(-) diff --git a/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff b/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff index a9a0830e55c59..28ba651ad4ae0 100644 --- a/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff +++ b/tests/mir-opt/copy-prop/issue_107511.main.CopyProp.diff @@ -4,38 +4,35 @@ 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 _3: (); // in scope 0 at $DIR/issue_107511.rs:+6:5: +8:6 + 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: std::ops::Range; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24 - let mut _6: usize; // in scope 0 at $DIR/issue_107511.rs:+6:17: +6:24 - let mut _7: &[i32]; // in scope 0 at $DIR/issue_107511.rs:+6:17: +6:24 - let mut _8: &[i32; 4]; // in scope 0 at $DIR/issue_107511.rs:+6:17: +6:24 - let mut _10: (); // in scope 0 at $DIR/issue_107511.rs:+0:1: +11:2 - let _11: (); // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24 - let mut _12: std::option::Option; // 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: &mut std::ops::Range; // in scope 0 at $DIR/issue_107511.rs:+6:14: +6:24 - let mut _15: isize; // in scope 0 at $DIR/issue_107511.rs:+6:5: +8:6 - let mut _16: !; // in scope 0 at $DIR/issue_107511.rs:+6:5: +8:6 - let mut _18: i32; // in scope 0 at $DIR/issue_107511.rs:+7:16: +7:20 - let _19: usize; // in scope 0 at $DIR/issue_107511.rs:+7:18: +7:19 - let mut _20: usize; // in scope 0 at $DIR/issue_107511.rs:+7:16: +7:20 - let mut _21: bool; // in scope 0 at $DIR/issue_107511.rs:+7:16: +7:20 + 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 _9: std::ops::Range; // in scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 + let mut _8: std::ops::Range; // in scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 scope 3 { - debug iter => _9; // in scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 - let _17: usize; // in scope 3 at $DIR/issue_107511.rs:+6:9: +6:10 + 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 => _17; // in scope 4 at $DIR/issue_107511.rs:+6:9: +6:10 + debug i => _16; // in scope 4 at $DIR/issue_107511.rs:+6:9: +6:10 } } - scope 5 { - } } } @@ -44,70 +41,69 @@ _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:5: +8:6 + 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: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 - StorageLive(_8); // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24 - _8 = &_2; // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24 - _7 = move _8 as &[i32] (Pointer(Unsize)); // scope 2 at $DIR/issue_107511.rs:+6:17: +6:24 - StorageDead(_8); // scope 2 at $DIR/issue_107511.rs:+6:17: +6:18 - _6 = core::slice::::len(move _7) -> bb1; // 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:10:19: 10:22 // + literal: Const { ty: for<'a> fn(&'a [i32]) -> usize {core::slice::::len}, val: Value() } } bb1: { - StorageDead(_7); // scope 2 at $DIR/issue_107511.rs:+6:23: +6:24 - Deinit(_5); // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 - (_5.0: usize) = const 0_usize; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 - (_5.1: usize) = move _6; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 StorageDead(_6); // scope 2 at $DIR/issue_107511.rs:+6:23: +6:24 - _4 = as IntoIterator>::into_iter(move _5) -> bb2; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 + Deinit(_4); // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 + (_4.0: usize) = const 0_usize; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 + (_4.1: usize) = 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:10:14: 10:24 // + literal: Const { ty: fn(std::ops::Range) -> as IntoIterator>::IntoIter { as IntoIterator>::into_iter}, val: Value() } } bb2: { - StorageDead(_5); // scope 2 at $DIR/issue_107511.rs:+6:23: +6:24 - StorageLive(_9); // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 - _9 = move _4; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24 + 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(_11); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 +- 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 - StorageLive(_14); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 - _14 = &mut _9; // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 - _13 = &mut (*_14); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 - _12 = as Iterator>::next(move _13) -> bb4; // 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:10:14: 10:24 // + literal: Const { ty: for<'a> fn(&'a mut std::ops::Range) -> Option< as Iterator>::Item> { as Iterator>::next}, val: Value() } } bb4: { - StorageDead(_13); // scope 3 at $DIR/issue_107511.rs:+6:23: +6:24 - _15 = discriminant(_12); // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 - switchInt(move _15) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 3 at $DIR/issue_107511.rs:+6:14: +6:24 + 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(_17); // scope 3 at $DIR/issue_107511.rs:+6:9: +6:10 - _17 = ((_12 as Some).0: usize); // scope 3 at $DIR/issue_107511.rs:+6:9: +6:10 - StorageLive(_18); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 -- StorageLive(_19); // scope 4 at $DIR/issue_107511.rs:+7:18: +7:19 -- _19 = _17; // scope 4 at $DIR/issue_107511.rs:+7:18: +7:19 - _20 = Len(_2); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 -- _21 = Lt(_19, _20); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 -- assert(move _21, "index out of bounds: the length is {} but the index is {}", move _20, _19) -> bb8; // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 -+ _21 = Lt(_17, _20); // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 -+ assert(move _21, "index out of bounds: the length is {} but the index is {}", move _20, _17) -> bb8; // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 +- 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: { @@ -115,31 +111,29 @@ } bb7: { -- _3 = const (); // scope 3 at $DIR/issue_107511.rs:+6:5: +8:6 - StorageDead(_14); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6 - StorageDead(_12); // 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(_9); // scope 2 at $DIR/issue_107511.rs:+8:5: +8:6 - StorageDead(_4); // scope 2 at $DIR/issue_107511.rs:+8:5: +8:6 -- StorageDead(_3); // scope 2 at $DIR/issue_107511.rs:+8:5: +8:6 - _0 = const (); // scope 0 at $DIR/issue_107511.rs:+0:11: +11:2 - StorageDead(_2); // scope 1 at $DIR/issue_107511.rs:+11:1: +11:2 - StorageDead(_1); // scope 0 at $DIR/issue_107511.rs:+11:1: +11:2 - return; // scope 0 at $DIR/issue_107511.rs:+11:2: +11:2 + _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: { -- _18 = _2[_19]; // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 -+ _18 = _2[_17]; // scope 4 at $DIR/issue_107511.rs:+7:16: +7:20 - _1 = Add(_1, move _18); // scope 4 at $DIR/issue_107511.rs:+7:9: +7:20 - StorageDead(_18); // scope 4 at $DIR/issue_107511.rs:+7:19: +7:20 -- StorageDead(_19); // scope 4 at $DIR/issue_107511.rs:+7:20: +7:21 -- _11 = const (); // scope 4 at $DIR/issue_107511.rs:+6:25: +8:6 -- StorageDead(_17); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6 - StorageDead(_14); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6 - StorageDead(_12); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6 -- StorageDead(_11); // scope 3 at $DIR/issue_107511.rs:+8:5: +8:6 -- _10 = const (); // scope 3 at $DIR/issue_107511.rs:+6:5: +8:6 +- _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.rs b/tests/mir-opt/copy-prop/issue_107511.rs index 0b872b89834ae..d593f2872ea40 100644 --- a/tests/mir-opt/copy-prop/issue_107511.rs +++ b/tests/mir-opt/copy-prop/issue_107511.rs @@ -10,6 +10,4 @@ fn main() { for i in 0..a.len() { sum += a[i]; } - - let _ = sum; }