about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2020-01-29 07:44:36 +0000
committerbors <bors@rust-lang.org>2020-01-29 07:44:36 +0000
commitedb368491551a77d77a48446d4ee88b35490c565 (patch)
tree711d4b5a6e40ef4281b2a4b3f5c9cb9aa8c41f5f /src/test
parent343432a74d1b92e4d3e71de4271e68304e046da3 (diff)
parent47fd27a637b7311c81437f138932ddb426350ab7 (diff)
Auto merge of #68572 - tmiasko:sanitizer-use-after-scope, r=nikic
Detect use-after-scope bugs with AddressSanitizer

Enable use-after-scope checks by default when using AddressSanitizer.
They allow to detect incorrect use of stack objects after their scope
have already ended. The detection is based on LLVM lifetime intrinsics.

To facilitate the use of this functionality, the lifetime intrinsics are
now emitted regardless of optimization level if enabled sanitizer makes
use of them.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/sanitize/address.rs (renamed from src/test/ui/sanitizer-address.rs)0
-rw-r--r--src/test/ui/sanitize/cfg.rs (renamed from src/test/ui/sanitize-cfg.rs)0
-rw-r--r--src/test/ui/sanitize/leak.rs (renamed from src/test/ui/sanitizer-leak.rs)0
-rw-r--r--src/test/ui/sanitize/memory.rs (renamed from src/test/ui/sanitizer-memory.rs)0
-rw-r--r--src/test/ui/sanitize/unsupported-target.rs (renamed from src/test/ui/sanitizer-unsupported-target.rs)0
-rw-r--r--src/test/ui/sanitize/unsupported-target.stderr (renamed from src/test/ui/sanitizer-unsupported-target.stderr)0
-rw-r--r--src/test/ui/sanitize/use-after-scope.rs18
7 files changed, 18 insertions, 0 deletions
diff --git a/src/test/ui/sanitizer-address.rs b/src/test/ui/sanitize/address.rs
index d27a30a2dc5..d27a30a2dc5 100644
--- a/src/test/ui/sanitizer-address.rs
+++ b/src/test/ui/sanitize/address.rs
diff --git a/src/test/ui/sanitize-cfg.rs b/src/test/ui/sanitize/cfg.rs
index 9c198543a86..9c198543a86 100644
--- a/src/test/ui/sanitize-cfg.rs
+++ b/src/test/ui/sanitize/cfg.rs
diff --git a/src/test/ui/sanitizer-leak.rs b/src/test/ui/sanitize/leak.rs
index 5c2f2cb4e86..5c2f2cb4e86 100644
--- a/src/test/ui/sanitizer-leak.rs
+++ b/src/test/ui/sanitize/leak.rs
diff --git a/src/test/ui/sanitizer-memory.rs b/src/test/ui/sanitize/memory.rs
index 3e1cf4509a3..3e1cf4509a3 100644
--- a/src/test/ui/sanitizer-memory.rs
+++ b/src/test/ui/sanitize/memory.rs
diff --git a/src/test/ui/sanitizer-unsupported-target.rs b/src/test/ui/sanitize/unsupported-target.rs
index 444333c3f01..444333c3f01 100644
--- a/src/test/ui/sanitizer-unsupported-target.rs
+++ b/src/test/ui/sanitize/unsupported-target.rs
diff --git a/src/test/ui/sanitizer-unsupported-target.stderr b/src/test/ui/sanitize/unsupported-target.stderr
index 38be58dd4b3..38be58dd4b3 100644
--- a/src/test/ui/sanitizer-unsupported-target.stderr
+++ b/src/test/ui/sanitize/unsupported-target.stderr
diff --git a/src/test/ui/sanitize/use-after-scope.rs b/src/test/ui/sanitize/use-after-scope.rs
new file mode 100644
index 00000000000..6a2067e157a
--- /dev/null
+++ b/src/test/ui/sanitize/use-after-scope.rs
@@ -0,0 +1,18 @@
+// needs-sanitizer-support
+// only-x86_64
+//
+// compile-flags: -Zsanitizer=address
+// run-fail
+// error-pattern: ERROR: AddressSanitizer: stack-use-after-scope
+
+static mut P: *mut usize = std::ptr::null_mut();
+
+fn main() {
+    unsafe {
+        {
+            let mut x = 0;
+            P = &mut x;
+        }
+        std::ptr::write_volatile(P, 123);
+    }
+}