diff options
| author | bors <bors@rust-lang.org> | 2019-12-21 01:02:54 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-12-21 01:02:54 +0000 |
| commit | 9ff30a7810c586819a78188c173a7b74adbb9730 (patch) | |
| tree | accbdc8fc8c5cfb005fce2904071db26b97ac171 /src/test | |
| parent | ccd238309f9dce92a05a23c2959e2819668c69a4 (diff) | |
| parent | f465f95b4b9302434246209c968c90b8704b8099 (diff) | |
Auto merge of #67464 - Centril:rollup-j3mkl1m, r=Centril
Rollup of 6 pull requests Successful merges: - #67130 (Const prop should finish propagation into user defined variables) - #67163 (Split up ptr/mod.rs in libcore...) - #67314 (Don't suppress move errors for union fields) - #67392 (Fix unresolved type span inside async object) - #67404 (Separate region inference logic from error handling better) - #67428 (`is_binding_pat`: use explicit match & include or-pats in grammar) Failed merges: r? @ghost
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/mir-opt/const_prop/aggregate.rs | 2 | ||||
| -rw-r--r-- | src/test/mir-opt/const_prop/array_index.rs | 2 | ||||
| -rw-r--r-- | src/test/mir-opt/const_prop/optimizes_into_variable.rs | 149 | ||||
| -rw-r--r-- | src/test/mir-opt/const_prop/read_immutable_static.rs | 2 | ||||
| -rw-r--r-- | src/test/mir-opt/const_prop/repeat.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/borrowck/move-from-union-field-issue-66500.rs | 30 | ||||
| -rw-r--r-- | src/test/ui/borrowck/move-from-union-field-issue-66500.stderr | 27 | ||||
| -rw-r--r-- | src/test/ui/consts/offset_from_ub.stderr | 20 |
8 files changed, 220 insertions, 14 deletions
diff --git a/src/test/mir-opt/const_prop/aggregate.rs b/src/test/mir-opt/const_prop/aggregate.rs index 0937d37be6b..d04dcc6a05c 100644 --- a/src/test/mir-opt/const_prop/aggregate.rs +++ b/src/test/mir-opt/const_prop/aggregate.rs @@ -19,7 +19,7 @@ fn main() { // ... // _3 = (const 0i32, const 1i32, const 2i32); // _2 = const 1i32; -// _1 = Add(move _2, const 0i32); +// _1 = const 1i32; // ... // } // END rustc.main.ConstProp.after.mir diff --git a/src/test/mir-opt/const_prop/array_index.rs b/src/test/mir-opt/const_prop/array_index.rs index dd22eb5d604..406585b5cab 100644 --- a/src/test/mir-opt/const_prop/array_index.rs +++ b/src/test/mir-opt/const_prop/array_index.rs @@ -26,7 +26,7 @@ fn main() { // assert(const true, "index out of bounds: the len is move _4 but the index is _3") -> bb1; // } // bb1: { -// _1 = _2[_3]; +// _1 = const 2u32; // ... // return; // } diff --git a/src/test/mir-opt/const_prop/optimizes_into_variable.rs b/src/test/mir-opt/const_prop/optimizes_into_variable.rs new file mode 100644 index 00000000000..93a53db9093 --- /dev/null +++ b/src/test/mir-opt/const_prop/optimizes_into_variable.rs @@ -0,0 +1,149 @@ +// compile-flags: -C overflow-checks=on + +struct Point { + x: u32, + y: u32, +} + +fn main() { + let x = 2 + 2; + let y = [0, 1, 2, 3, 4, 5][3]; + let z = (Point { x: 12, y: 42}).y; +} + +// END RUST SOURCE +// START rustc.main.ConstProp.before.mir +// 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; +// 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 2i32, const 2i32); +// assert(!move (_2.1: bool), "attempt to add with overflow") -> bb1; +// } +// bb1: { +// _1 = move (_2.0: i32); +// StorageLive(_3); +// StorageLive(_4); +// _4 = [const 0i32, const 1i32, const 2i32, const 3i32, const 4i32, const 5i32]; +// StorageLive(_5); +// _5 = const 3usize; +// _6 = const 6usize; +// _7 = Lt(_5, _6); +// assert(move _7, "index out of bounds: the len is move _6 but the index is _5") -> bb2; +// } +// bb2: { +// _3 = _4[_5]; +// StorageDead(_5); +// StorageDead(_4); +// StorageLive(_8); +// StorageLive(_9); +// _9 = Point { x: const 12u32, y: const 42u32 }; +// _8 = (_9.1: u32); +// StorageDead(_9); +// _0 = (); +// StorageDead(_8); +// StorageDead(_3); +// StorageDead(_1); +// return; +// } +// END rustc.main.ConstProp.before.mir +// START rustc.main.ConstProp.after.mir +// 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; +// 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 = (const 4i32, const false); +// assert(!const false, "attempt to add with overflow") -> bb1; +// } +// bb1: { +// _1 = const 4i32; +// StorageLive(_3); +// StorageLive(_4); +// _4 = [const 0i32, const 1i32, const 2i32, const 3i32, const 4i32, const 5i32]; +// StorageLive(_5); +// _5 = const 3usize; +// _6 = const 6usize; +// _7 = const true; +// assert(const true, "index out of bounds: the len is move _6 but the index is _5") -> bb2; +// } +// bb2: { +// _3 = const 3i32; +// StorageDead(_5); +// StorageDead(_4); +// StorageLive(_8); +// StorageLive(_9); +// _9 = Point { x: const 12u32, y: const 42u32 }; +// _8 = const 42u32; +// StorageDead(_9); +// _0 = (); +// StorageDead(_8); +// StorageDead(_3); +// StorageDead(_1); +// return; +// } +// END rustc.main.ConstProp.after.mir +// START rustc.main.SimplifyLocals.after.mir +// let mut _0: (); +// let _1: i32; +// let mut _3: [i32; 6]; +// scope 1 { +// debug x => _1; +// let _2: i32; +// scope 2 { +// debug y => _2; +// let _4: u32; +// scope 3 { +// debug z => _4; +// } +// } +// } +// bb0: { +// StorageLive(_1); +// _1 = const 4i32; +// StorageLive(_2); +// StorageLive(_3); +// _3 = [const 0i32, const 1i32, const 2i32, const 3i32, const 4i32, const 5i32]; +// _2 = const 3i32; +// StorageDead(_3); +// StorageLive(_4); +// _4 = const 42u32; +// StorageDead(_4); +// StorageDead(_2); +// StorageDead(_1); +// return; +// } +// END rustc.main.SimplifyLocals.after.mir diff --git a/src/test/mir-opt/const_prop/read_immutable_static.rs b/src/test/mir-opt/const_prop/read_immutable_static.rs index d14ec039716..d9e0eb623af 100644 --- a/src/test/mir-opt/const_prop/read_immutable_static.rs +++ b/src/test/mir-opt/const_prop/read_immutable_static.rs @@ -25,7 +25,7 @@ fn main() { // _2 = const 2u8; // ... // _4 = const 2u8; -// _1 = Add(move _2, move _4); +// _1 = const 4u8; // ... // } // END rustc.main.ConstProp.after.mir diff --git a/src/test/mir-opt/const_prop/repeat.rs b/src/test/mir-opt/const_prop/repeat.rs index fb091ad2a3d..48c06290cec 100644 --- a/src/test/mir-opt/const_prop/repeat.rs +++ b/src/test/mir-opt/const_prop/repeat.rs @@ -30,7 +30,7 @@ fn main() { // } // bb1: { // _2 = const 42u32; -// _1 = Add(move _2, const 0u32); +// _1 = const 42u32; // ... // return; // } diff --git a/src/test/ui/borrowck/move-from-union-field-issue-66500.rs b/src/test/ui/borrowck/move-from-union-field-issue-66500.rs new file mode 100644 index 00000000000..8fbf120fc1c --- /dev/null +++ b/src/test/ui/borrowck/move-from-union-field-issue-66500.rs @@ -0,0 +1,30 @@ +// Moving from a reference/raw pointer should be an error, even when they're +// the field of a union. + +#![feature(untagged_unions)] + +union Pointers { + a: &'static String, + b: &'static mut String, + c: *const String, + d: *mut String, +} + +unsafe fn move_ref(u: Pointers) -> String { + *u.a + //~^ ERROR cannot move out of `*u.a` +} +unsafe fn move_ref_mut(u: Pointers) -> String { + *u.b + //~^ ERROR cannot move out of `*u.b` +} +unsafe fn move_ptr(u: Pointers) -> String { + *u.c + //~^ ERROR cannot move out of `*u.c` +} +unsafe fn move_ptr_mut(u: Pointers) -> String { + *u.d + //~^ ERROR cannot move out of `*u.d` +} + +fn main() {} diff --git a/src/test/ui/borrowck/move-from-union-field-issue-66500.stderr b/src/test/ui/borrowck/move-from-union-field-issue-66500.stderr new file mode 100644 index 00000000000..a7cb1c9e221 --- /dev/null +++ b/src/test/ui/borrowck/move-from-union-field-issue-66500.stderr @@ -0,0 +1,27 @@ +error[E0507]: cannot move out of `*u.a` which is behind a shared reference + --> $DIR/move-from-union-field-issue-66500.rs:14:5 + | +LL | *u.a + | ^^^^ move occurs because `*u.a` has type `std::string::String`, which does not implement the `Copy` trait + +error[E0507]: cannot move out of `*u.b` which is behind a mutable reference + --> $DIR/move-from-union-field-issue-66500.rs:18:5 + | +LL | *u.b + | ^^^^ move occurs because `*u.b` has type `std::string::String`, which does not implement the `Copy` trait + +error[E0507]: cannot move out of `*u.c` which is behind a raw pointer + --> $DIR/move-from-union-field-issue-66500.rs:22:5 + | +LL | *u.c + | ^^^^ move occurs because `*u.c` has type `std::string::String`, which does not implement the `Copy` trait + +error[E0507]: cannot move out of `*u.d` which is behind a raw pointer + --> $DIR/move-from-union-field-issue-66500.rs:26:5 + | +LL | *u.d + | ^^^^ move occurs because `*u.d` has type `std::string::String`, which does not implement the `Copy` trait + +error: aborting due to 4 previous errors + +For more information about this error, try `rustc --explain E0507`. diff --git a/src/test/ui/consts/offset_from_ub.stderr b/src/test/ui/consts/offset_from_ub.stderr index 1bd09034bfc..ac08b2f2427 100644 --- a/src/test/ui/consts/offset_from_ub.stderr +++ b/src/test/ui/consts/offset_from_ub.stderr @@ -1,11 +1,11 @@ error: any use of this value will cause an error - --> $SRC_DIR/libcore/ptr/mod.rs:LL:COL + --> $SRC_DIR/libcore/ptr/const_ptr.rs:LL:COL | LL | intrinsics::ptr_offset_from(self, origin) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | | | ptr_offset_from cannot compute offset of pointers into different allocations. - | inside call to `std::ptr::<impl *const Struct>::offset_from` at $DIR/offset_from_ub.rs:19:27 + | inside call to `std::ptr::const_ptr::<impl *const Struct>::offset_from` at $DIR/offset_from_ub.rs:19:27 | ::: $DIR/offset_from_ub.rs:13:1 | @@ -21,13 +21,13 @@ LL | | }; = note: `#[deny(const_err)]` on by default error: any use of this value will cause an error - --> $SRC_DIR/libcore/ptr/mod.rs:LL:COL + --> $SRC_DIR/libcore/ptr/const_ptr.rs:LL:COL | LL | intrinsics::ptr_offset_from(self, origin) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | | | a memory access tried to interpret some bytes as a pointer - | inside call to `std::ptr::<impl *const u8>::offset_from` at $DIR/offset_from_ub.rs:25:14 + | inside call to `std::ptr::const_ptr::<impl *const u8>::offset_from` at $DIR/offset_from_ub.rs:25:14 | ::: $DIR/offset_from_ub.rs:23:1 | @@ -38,13 +38,13 @@ LL | | }; | |__- error: any use of this value will cause an error - --> $SRC_DIR/libcore/ptr/mod.rs:LL:COL + --> $SRC_DIR/libcore/ptr/const_ptr.rs:LL:COL | LL | intrinsics::ptr_offset_from(self, origin) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | | | exact_div: 1 cannot be divided by 2 without remainder - | inside call to `std::ptr::<impl *const u16>::offset_from` at $DIR/offset_from_ub.rs:33:14 + | inside call to `std::ptr::const_ptr::<impl *const u16>::offset_from` at $DIR/offset_from_ub.rs:33:14 | ::: $DIR/offset_from_ub.rs:28:1 | @@ -58,13 +58,13 @@ LL | | }; | |__- error: any use of this value will cause an error - --> $SRC_DIR/libcore/ptr/mod.rs:LL:COL + --> $SRC_DIR/libcore/ptr/const_ptr.rs:LL:COL | LL | intrinsics::ptr_offset_from(self, origin) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | | | invalid use of NULL pointer - | inside call to `std::ptr::<impl *const u8>::offset_from` at $DIR/offset_from_ub.rs:39:14 + | inside call to `std::ptr::const_ptr::<impl *const u8>::offset_from` at $DIR/offset_from_ub.rs:39:14 | ::: $DIR/offset_from_ub.rs:36:1 | @@ -76,13 +76,13 @@ LL | | }; | |__- error: any use of this value will cause an error - --> $SRC_DIR/libcore/ptr/mod.rs:LL:COL + --> $SRC_DIR/libcore/ptr/const_ptr.rs:LL:COL | LL | intrinsics::ptr_offset_from(self, origin) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | | | a memory access tried to interpret some bytes as a pointer - | inside call to `std::ptr::<impl *const u8>::offset_from` at $DIR/offset_from_ub.rs:46:14 + | inside call to `std::ptr::const_ptr::<impl *const u8>::offset_from` at $DIR/offset_from_ub.rs:46:14 | ::: $DIR/offset_from_ub.rs:42:1 | |
