about summary refs log tree commit diff
path: root/src/test/ui/llvm-asm/llvm-asm-out-assign.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/llvm-asm/llvm-asm-out-assign.rs')
-rw-r--r--src/test/ui/llvm-asm/llvm-asm-out-assign.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/test/ui/llvm-asm/llvm-asm-out-assign.rs b/src/test/ui/llvm-asm/llvm-asm-out-assign.rs
new file mode 100644
index 00000000000..321f28565ff
--- /dev/null
+++ b/src/test/ui/llvm-asm/llvm-asm-out-assign.rs
@@ -0,0 +1,25 @@
+// run-pass
+
+#![feature(llvm_asm)]
+
+#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
+pub fn main() {
+    let x: isize;
+    unsafe {
+        // Treat the output as initialization.
+        llvm_asm!("mov $1, $0" : "=r"(x) : "r"(5_usize));
+    }
+    assert_eq!(x, 5);
+
+    let mut x = x + 1;
+    assert_eq!(x, 6);
+
+    unsafe {
+        // Assignment to mutable.
+        llvm_asm!("mov $1, $0" : "=r"(x) : "r"(x + 7));
+    }
+    assert_eq!(x, 13);
+}
+
+#[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))]
+pub fn main() {}