mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 22:12:15 +00:00
simplify-locals: Remove unused assignments regardless of rvalue kind
This commit is contained in:
parent
52d3782685
commit
4c3e06a0ba
@ -439,31 +439,7 @@ impl Visitor<'_> for UsedLocals {
|
||||
StatementKind::StorageLive(_local) | StatementKind::StorageDead(_local) => {}
|
||||
|
||||
StatementKind::Assign(box (ref place, ref rvalue)) => {
|
||||
let can_skip = match rvalue {
|
||||
Rvalue::Use(_)
|
||||
| Rvalue::Discriminant(_)
|
||||
| Rvalue::BinaryOp(_, _, _)
|
||||
| Rvalue::CheckedBinaryOp(_, _, _)
|
||||
| Rvalue::Repeat(_, _)
|
||||
| Rvalue::AddressOf(_, _)
|
||||
| Rvalue::Len(_)
|
||||
| Rvalue::UnaryOp(_, _)
|
||||
| Rvalue::Aggregate(_, _) => true,
|
||||
|
||||
Rvalue::Ref(..)
|
||||
| Rvalue::ThreadLocalRef(..)
|
||||
| Rvalue::Cast(..)
|
||||
| Rvalue::NullaryOp(..) => false,
|
||||
};
|
||||
if can_skip {
|
||||
self.visit_lhs(place, location);
|
||||
} else {
|
||||
self.visit_place(
|
||||
place,
|
||||
PlaceContext::MutatingUse(MutatingUseContext::Store),
|
||||
location,
|
||||
);
|
||||
}
|
||||
self.visit_lhs(place, location);
|
||||
self.visit_rvalue(rvalue, location);
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
// ignore-tidy-linelength
|
||||
// compile-flags:-Zprint-mono-items=eager
|
||||
// compile-flags:-Zinline-in-all-cgus
|
||||
// compile-flags:-Zprint-mono-items=eager -Zinline-in-all-cgus -Zmir-opt-level=0
|
||||
|
||||
#![deny(dead_code)]
|
||||
#![feature(start)]
|
||||
|
@ -1,4 +1,4 @@
|
||||
// compile-flags: -O -C no-prepopulate-passes
|
||||
// compile-flags: -O -C no-prepopulate-passes -Zmir-opt-level=0
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
@ -18,10 +18,10 @@ pub fn test() {
|
||||
// CHECK: [[S_b:%[0-9]+]] = bitcast { i32, i32 }** %b to i8*
|
||||
// CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, i8* [[S_b]])
|
||||
|
||||
// CHECK: [[S__4:%[0-9]+]] = bitcast { i32, i32 }* %_4 to i8*
|
||||
// CHECK: [[S__4:%[0-9]+]] = bitcast { i32, i32 }* %_5 to i8*
|
||||
// CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, i8* [[S__4]])
|
||||
|
||||
// CHECK: [[E__4:%[0-9]+]] = bitcast { i32, i32 }* %_4 to i8*
|
||||
// CHECK: [[E__4:%[0-9]+]] = bitcast { i32, i32 }* %_5 to i8*
|
||||
// CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, i8* [[E__4]])
|
||||
|
||||
// CHECK: [[E_b:%[0-9]+]] = bitcast { i32, i32 }** %b to i8*
|
||||
|
@ -1,4 +1,4 @@
|
||||
// compile-flags: -C no-prepopulate-passes
|
||||
// compile-flags: -C no-prepopulate-passes -Zmir-opt-level=0
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
// compile-flags: -C no-prepopulate-passes
|
||||
// compile-flags: -C no-prepopulate-passes -Zmir-opt-level=0
|
||||
|
||||
#![crate_type = "lib"]
|
||||
#![feature(naked_functions)]
|
||||
|
@ -1,4 +1,4 @@
|
||||
// compile-flags: -C no-prepopulate-passes
|
||||
// compile-flags: -C no-prepopulate-passes -Zmir-opt-level=0
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
// build-pass (FIXME(62277): could be check-pass?)
|
||||
// revisions: cfail1 cfail2 cfail3
|
||||
// compile-flags: -Z query-dep-graph -Zincremental-ignore-spans
|
||||
// compile-flags: -Z query-dep-graph -Zincremental-ignore-spans -Zmir-opt-level=0
|
||||
|
||||
#![allow(warnings)]
|
||||
#![feature(rustc_attrs)]
|
||||
@ -53,7 +53,7 @@ pub fn change_parameter_pattern() {
|
||||
}
|
||||
|
||||
#[cfg(not(cfail1))]
|
||||
#[rustc_clean(cfg="cfail2", except="hir_owner_nodes, typeck")]
|
||||
#[rustc_clean(cfg="cfail2", except="hir_owner_nodes, typeck, optimized_mir")]
|
||||
#[rustc_clean(cfg="cfail3")]
|
||||
pub fn change_parameter_pattern() {
|
||||
let _ = |(x,): (u32,)| x;
|
||||
|
@ -4,8 +4,8 @@
|
||||
fn c() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/simplify-locals.rs:13:8: 13:8
|
||||
let _1: [u8; 10]; // in scope 0 at $DIR/simplify-locals.rs:14:9: 14:14
|
||||
let mut _2: &[u8]; // in scope 0 at $DIR/simplify-locals.rs:16:20: 16:26
|
||||
let mut _3: &[u8; 10]; // in scope 0 at $DIR/simplify-locals.rs:16:20: 16:26
|
||||
- let mut _2: &[u8]; // in scope 0 at $DIR/simplify-locals.rs:16:20: 16:26
|
||||
- let mut _3: &[u8; 10]; // in scope 0 at $DIR/simplify-locals.rs:16:20: 16:26
|
||||
- let _4: &[u8; 10]; // in scope 0 at $DIR/simplify-locals.rs:16:20: 16:26
|
||||
scope 1 {
|
||||
debug bytes => _1; // in scope 1 at $DIR/simplify-locals.rs:14:9: 14:14
|
||||
@ -16,10 +16,10 @@
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/simplify-locals.rs:14:9: 14:14
|
||||
_1 = [const 0_u8; 10]; // scope 0 at $DIR/simplify-locals.rs:14:17: 14:26
|
||||
StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:16:20: 16:26
|
||||
_3 = &_1; // scope 1 at $DIR/simplify-locals.rs:16:20: 16:26
|
||||
_2 = move _3 as &[u8] (Pointer(Unsize)); // scope 1 at $DIR/simplify-locals.rs:16:20: 16:26
|
||||
StorageDead(_2); // scope 1 at $DIR/simplify-locals.rs:16:26: 16:27
|
||||
- StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:16:20: 16:26
|
||||
- _3 = &_1; // scope 1 at $DIR/simplify-locals.rs:16:20: 16:26
|
||||
- _2 = move _3 as &[u8] (Pointer(Unsize)); // scope 1 at $DIR/simplify-locals.rs:16:20: 16:26
|
||||
- StorageDead(_2); // scope 1 at $DIR/simplify-locals.rs:16:26: 16:27
|
||||
_0 = const (); // scope 0 at $DIR/simplify-locals.rs:13:8: 17:2
|
||||
StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:17:1: 17:2
|
||||
return; // scope 0 at $DIR/simplify-locals.rs:17:2: 17:2
|
||||
|
@ -4,8 +4,8 @@
|
||||
fn r() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/simplify-locals.rs:32:8: 32:8
|
||||
let mut _1: i32; // in scope 0 at $DIR/simplify-locals.rs:33:9: 33:14
|
||||
let mut _2: &i32; // in scope 0 at $DIR/simplify-locals.rs:35:13: 35:15
|
||||
let mut _3: &mut i32; // in scope 0 at $DIR/simplify-locals.rs:36:13: 36:19
|
||||
- let mut _2: &i32; // in scope 0 at $DIR/simplify-locals.rs:35:13: 35:15
|
||||
- let mut _3: &mut i32; // in scope 0 at $DIR/simplify-locals.rs:36:13: 36:19
|
||||
scope 1 {
|
||||
debug a => _1; // in scope 1 at $DIR/simplify-locals.rs:33:9: 33:14
|
||||
scope 2 {
|
||||
@ -17,12 +17,12 @@
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/simplify-locals.rs:33:9: 33:14
|
||||
_1 = const 1_i32; // scope 0 at $DIR/simplify-locals.rs:33:17: 33:18
|
||||
StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:35:13: 35:15
|
||||
_2 = &_1; // scope 1 at $DIR/simplify-locals.rs:35:13: 35:15
|
||||
StorageDead(_2); // scope 1 at $DIR/simplify-locals.rs:35:15: 35:16
|
||||
StorageLive(_3); // scope 2 at $DIR/simplify-locals.rs:36:13: 36:19
|
||||
_3 = &mut _1; // scope 2 at $DIR/simplify-locals.rs:36:13: 36:19
|
||||
StorageDead(_3); // scope 2 at $DIR/simplify-locals.rs:36:19: 36:20
|
||||
- StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:35:13: 35:15
|
||||
- _2 = &_1; // scope 1 at $DIR/simplify-locals.rs:35:13: 35:15
|
||||
- StorageDead(_2); // scope 1 at $DIR/simplify-locals.rs:35:15: 35:16
|
||||
- StorageLive(_3); // scope 2 at $DIR/simplify-locals.rs:36:13: 36:19
|
||||
- _3 = &mut _1; // scope 2 at $DIR/simplify-locals.rs:36:13: 36:19
|
||||
- StorageDead(_3); // scope 2 at $DIR/simplify-locals.rs:36:19: 36:20
|
||||
_0 = const (); // scope 0 at $DIR/simplify-locals.rs:32:8: 37:2
|
||||
StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:37:1: 37:2
|
||||
return; // scope 0 at $DIR/simplify-locals.rs:37:2: 37:2
|
||||
|
@ -5,7 +5,6 @@
|
||||
let mut _0: (); // return place in scope 0 at $DIR/simplify-locals.rs:42:9: 42:9
|
||||
- let _1: u32; // in scope 0 at $DIR/simplify-locals.rs:44:14: 44:15
|
||||
- let mut _2: *mut u32; // in scope 0 at $DIR/simplify-locals.rs:44:14: 44:15
|
||||
+ let mut _1: *mut u32; // in scope 0 at $DIR/simplify-locals.rs:44:14: 44:15
|
||||
scope 1 {
|
||||
}
|
||||
|
||||
@ -15,9 +14,7 @@
|
||||
- _2 = &/*tls*/ mut X; // scope 1 at $DIR/simplify-locals.rs:44:14: 44:15
|
||||
- _1 = (*_2); // scope 1 at $DIR/simplify-locals.rs:44:14: 44:15
|
||||
- StorageDead(_2); // scope 0 at $DIR/simplify-locals.rs:44:17: 44:18
|
||||
+ StorageLive(_1); // scope 1 at $DIR/simplify-locals.rs:44:14: 44:15
|
||||
+ _1 = &/*tls*/ mut X; // scope 1 at $DIR/simplify-locals.rs:44:14: 44:15
|
||||
StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:44:17: 44:18
|
||||
- StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:44:17: 44:18
|
||||
_0 = const (); // scope 0 at $DIR/simplify-locals.rs:42:9: 45:2
|
||||
return; // scope 0 at $DIR/simplify-locals.rs:45:2: 45:2
|
||||
}
|
||||
|
@ -3,18 +3,18 @@
|
||||
|
||||
fn t2() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/simplify-locals.rs:48:9: 48:9
|
||||
let _1: &mut u32; // in scope 0 at $DIR/simplify-locals.rs:50:14: 50:20
|
||||
let mut _2: *mut u32; // in scope 0 at $DIR/simplify-locals.rs:50:19: 50:20
|
||||
- let _1: &mut u32; // in scope 0 at $DIR/simplify-locals.rs:50:14: 50:20
|
||||
- let mut _2: *mut u32; // in scope 0 at $DIR/simplify-locals.rs:50:19: 50:20
|
||||
scope 1 {
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/simplify-locals.rs:50:5: 50:22
|
||||
StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:50:19: 50:20
|
||||
_2 = &/*tls*/ mut X; // scope 1 at $DIR/simplify-locals.rs:50:19: 50:20
|
||||
_1 = &mut (*_2); // scope 1 at $DIR/simplify-locals.rs:50:14: 50:20
|
||||
StorageDead(_2); // scope 0 at $DIR/simplify-locals.rs:50:22: 50:23
|
||||
StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:50:22: 50:23
|
||||
- StorageLive(_1); // scope 0 at $DIR/simplify-locals.rs:50:5: 50:22
|
||||
- StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:50:19: 50:20
|
||||
- _2 = &/*tls*/ mut X; // scope 1 at $DIR/simplify-locals.rs:50:19: 50:20
|
||||
- _1 = &mut (*_2); // scope 1 at $DIR/simplify-locals.rs:50:14: 50:20
|
||||
- StorageDead(_2); // scope 0 at $DIR/simplify-locals.rs:50:22: 50:23
|
||||
- StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:50:22: 50:23
|
||||
_0 = const (); // scope 0 at $DIR/simplify-locals.rs:48:9: 51:2
|
||||
return; // scope 0 at $DIR/simplify-locals.rs:51:2: 51:2
|
||||
}
|
||||
|
@ -6,8 +6,6 @@
|
||||
- let _1: u32; // in scope 0 at $DIR/simplify-locals.rs:56:14: 56:21
|
||||
- let mut _2: &mut u32; // in scope 0 at $DIR/simplify-locals.rs:56:15: 56:21
|
||||
- let mut _3: *mut u32; // in scope 0 at $DIR/simplify-locals.rs:56:20: 56:21
|
||||
+ let mut _1: &mut u32; // in scope 0 at $DIR/simplify-locals.rs:56:15: 56:21
|
||||
+ let mut _2: *mut u32; // in scope 0 at $DIR/simplify-locals.rs:56:20: 56:21
|
||||
scope 1 {
|
||||
}
|
||||
|
||||
@ -19,12 +17,8 @@
|
||||
- _2 = &mut (*_3); // scope 1 at $DIR/simplify-locals.rs:56:15: 56:21
|
||||
- _1 = (*_2); // scope 1 at $DIR/simplify-locals.rs:56:14: 56:21
|
||||
- StorageDead(_3); // scope 0 at $DIR/simplify-locals.rs:56:23: 56:24
|
||||
+ StorageLive(_1); // scope 1 at $DIR/simplify-locals.rs:56:15: 56:21
|
||||
+ StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:56:20: 56:21
|
||||
+ _2 = &/*tls*/ mut X; // scope 1 at $DIR/simplify-locals.rs:56:20: 56:21
|
||||
+ _1 = &mut (*_2); // scope 1 at $DIR/simplify-locals.rs:56:15: 56:21
|
||||
StorageDead(_2); // scope 0 at $DIR/simplify-locals.rs:56:23: 56:24
|
||||
StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:56:23: 56:24
|
||||
- StorageDead(_2); // scope 0 at $DIR/simplify-locals.rs:56:23: 56:24
|
||||
- StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:56:23: 56:24
|
||||
_0 = const (); // scope 0 at $DIR/simplify-locals.rs:54:9: 57:2
|
||||
return; // scope 0 at $DIR/simplify-locals.rs:57:2: 57:2
|
||||
}
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
// build-fail
|
||||
// normalize-stderr-test: ".nll/" -> "/"
|
||||
// compile-flags: -Zmir-opt-level=0
|
||||
|
||||
struct S<T> {
|
||||
t: T,
|
||||
|
Loading…
Reference in New Issue
Block a user