diff options
| author | Dylan MacKenzie <ecstaticmorse@gmail.com> | 2020-04-10 11:00:48 -0700 |
|---|---|---|
| committer | Dylan MacKenzie <ecstaticmorse@gmail.com> | 2020-05-03 11:36:11 -0700 |
| commit | c530b2d8ef33f4c7fe6c9341aad8f5b6a3c3f033 (patch) | |
| tree | fa72f3c4e37021a1c1cc251ecdc7995a32933832 /src | |
| parent | a6a87e8bfc3e10df7eb09ad0e03997191b9936b6 (diff) | |
Add `rustc_peek` test for liveness with borrows
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/mir-dataflow/liveness-ptr.rs | 28 | ||||
| -rw-r--r-- | src/test/ui/mir-dataflow/liveness-ptr.stderr | 10 |
2 files changed, 38 insertions, 0 deletions
diff --git a/src/test/ui/mir-dataflow/liveness-ptr.rs b/src/test/ui/mir-dataflow/liveness-ptr.rs new file mode 100644 index 00000000000..34097d7526a --- /dev/null +++ b/src/test/ui/mir-dataflow/liveness-ptr.rs @@ -0,0 +1,28 @@ +#![feature(core_intrinsics, rustc_attrs)] + +use std::intrinsics::rustc_peek; + +#[rustc_mir(rustc_peek_liveness, stop_after_dataflow)] +fn foo() -> i32 { + let mut x: i32; + let mut p: *const i32; + + x = 0; + + // `x` is live here since it is used in the next statement... + unsafe { rustc_peek(x); } + + p = &x; + + // ... but not here, even while it can be accessed through `p`. + unsafe { rustc_peek(x); } //~ ERROR rustc_peek: bit not set + let tmp = unsafe { *p }; + + x = tmp + 1; + + unsafe { rustc_peek(x); } + + x +} + +fn main() {} diff --git a/src/test/ui/mir-dataflow/liveness-ptr.stderr b/src/test/ui/mir-dataflow/liveness-ptr.stderr new file mode 100644 index 00000000000..3397d0c5a12 --- /dev/null +++ b/src/test/ui/mir-dataflow/liveness-ptr.stderr @@ -0,0 +1,10 @@ +error: rustc_peek: bit not set + --> $DIR/liveness-ptr.rs:18:14 + | +LL | unsafe { rustc_peek(x); } + | ^^^^^^^^^^^^^ + +error: stop_after_dataflow ended compilation + +error: aborting due to 2 previous errors + |
