about summary refs log tree commit diff
diff options
context:
space:
mode:
authorOlivia Crain <olivia@olivia.dev>2020-10-18 23:52:15 -0500
committerOlivia Crain <olivia@olivia.dev>2020-10-18 23:52:15 -0500
commit8f0bceda13ac871dd452841d3b6aa049f9f649a1 (patch)
tree0df1093b26554b3a62fb4cf5954933897d6e85dd
parent17c6c5932c8de780fcd1d06aff230e8cc6bca9f8 (diff)
downloadrust-8f0bceda13ac871dd452841d3b6aa049f9f649a1.tar.gz
rust-8f0bceda13ac871dd452841d3b6aa049f9f649a1.zip
Refactor liveness-issue-77915 to liveness-asm and improve tests
-rw-r--r--src/test/ui/liveness/liveness-asm.rs43
-rw-r--r--src/test/ui/liveness/liveness-asm.stderr23
-rw-r--r--src/test/ui/liveness/liveness-issue-77915.rs36
3 files changed, 66 insertions, 36 deletions
diff --git a/src/test/ui/liveness/liveness-asm.rs b/src/test/ui/liveness/liveness-asm.rs
new file mode 100644
index 00000000000..e64335a8cc5
--- /dev/null
+++ b/src/test/ui/liveness/liveness-asm.rs
@@ -0,0 +1,43 @@
+// Ensure inout asm! operands are marked as used by the liveness pass
+
+// check-pass
+
+#![feature(asm)]
+#![allow(dead_code)]
+#![warn(unused_assignments)]
+#![warn(unused_variables)]
+
+// Test the single inout case
+unsafe fn f1(mut src: *const u8) {
+    asm!("/*{0}*/", inout(reg) src); //~ WARN value assigned to `src` is never read
+}
+
+unsafe fn f2(mut src: *const u8) -> *const u8 {
+    asm!("/*{0}*/", inout(reg) src);
+    src
+}
+
+// Test the split inout case
+unsafe fn f3(mut src: *const u8) {
+    asm!("/*{0}*/", inout(reg) src => src); //~ WARN value assigned to `src` is never read
+}
+
+unsafe fn f4(mut src: *const u8) -> *const u8 {
+    asm!("/*{0}*/", inout(reg) src => src);
+    src
+}
+
+// Tests the use of field projections
+struct S {
+    field: *mut u8,
+}
+
+unsafe fn f5(src: &mut S) {
+    asm!("/*{0}*/", inout(reg) src.field);
+}
+
+unsafe fn f6(src: &mut S) {
+    asm!("/*{0}*/", inout(reg) src.field => src.field);
+}
+
+fn main() {}
diff --git a/src/test/ui/liveness/liveness-asm.stderr b/src/test/ui/liveness/liveness-asm.stderr
new file mode 100644
index 00000000000..b8c04b5c442
--- /dev/null
+++ b/src/test/ui/liveness/liveness-asm.stderr
@@ -0,0 +1,23 @@
+warning: value assigned to `src` is never read
+  --> $DIR/liveness-asm.rs:12:32
+   |
+LL |     asm!("/*{0}*/", inout(reg) src);
+   |                                ^^^
+   |
+note: the lint level is defined here
+  --> $DIR/liveness-asm.rs:7:9
+   |
+LL | #![warn(unused_assignments)]
+   |         ^^^^^^^^^^^^^^^^^^
+   = help: maybe it is overwritten before being read?
+
+warning: value assigned to `src` is never read
+  --> $DIR/liveness-asm.rs:22:39
+   |
+LL |     asm!("/*{0}*/", inout(reg) src => src);
+   |                                       ^^^
+   |
+   = help: maybe it is overwritten before being read?
+
+warning: 2 warnings emitted
+
diff --git a/src/test/ui/liveness/liveness-issue-77915.rs b/src/test/ui/liveness/liveness-issue-77915.rs
deleted file mode 100644
index 300e4ad8b01..00000000000
--- a/src/test/ui/liveness/liveness-issue-77915.rs
+++ /dev/null
@@ -1,36 +0,0 @@
-// Ensure inout asm! operands are marked as used by the liveness pass
-
-// only-x86_64
-// check-pass
-
-#![feature(asm)]
-#![allow(dead_code)]
-#![deny(unused_variables)]
-
-// Tests the single variable inout case
-unsafe fn rep_movsb(mut dest: *mut u8, mut src: *const u8, mut n: usize) -> *mut u8 {
-    while n != 0 {
-        asm!(
-            "rep movsb",
-            inout("rcx") n,
-            inout("rsi") src,
-            inout("rdi") dest,
-        );
-    }
-    dest
-}
-
-// Tests the split inout case
-unsafe fn rep_movsb2(mut dest: *mut u8, mut src: *const u8, mut n: usize) -> *mut u8 {
-    while n != 0 {
-        asm!(
-            "rep movsb",
-            inout("rcx") n,
-            inout("rsi") src => src,
-            inout("rdi") dest,
-        );
-    }
-    dest
-}
-
-fn main() {}