about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorTomasz Miąsko <tomasz.miasko@gmail.com>2020-05-13 00:00:00 +0000
committerTomasz Miąsko <tomasz.miasko@gmail.com>2020-05-14 15:23:24 +0200
commitbbb63d4554b03feee481bc799a04f183abaff1d4 (patch)
tree9350d4e05c20c9649ba506920b5710976be8afd2 /src/test
parent23ffeea307c31f0c20ebb5a15d5171e0c414629d (diff)
downloadrust-bbb63d4554b03feee481bc799a04f183abaff1d4.tar.gz
rust-bbb63d4554b03feee481bc799a04f183abaff1d4.zip
Consistently use LLVM lifetime markers during codegen
Ensure that inliner inserts lifetime markers if they have been emitted during
codegen. Otherwise if allocas from inlined functions are merged together,
lifetime markers from one function might invalidate load & stores performed
by the other one.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/sanitize/issue-72154-lifetime-markers.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/test/ui/sanitize/issue-72154-lifetime-markers.rs b/src/test/ui/sanitize/issue-72154-lifetime-markers.rs
new file mode 100644
index 00000000000..458f99143b6
--- /dev/null
+++ b/src/test/ui/sanitize/issue-72154-lifetime-markers.rs
@@ -0,0 +1,31 @@
+// Regression test for issue 72154, where the use of AddressSanitizer enabled
+// emission of lifetime markers during codegen, while at the same time asking
+// always inliner pass not to insert them.  This eventually lead to a
+// miscompilation which was subsequently detected by AddressSanitizer as UB.
+//
+// needs-sanitizer-support
+// only-x86_64
+//
+// compile-flags: -Copt-level=0 -Zsanitizer=address
+// run-pass
+
+pub struct Wrap {
+    pub t: [usize; 1]
+}
+
+impl Wrap {
+    #[inline(always)]
+    pub fn new(t: [usize; 1]) -> Self {
+        Wrap { t }
+    }
+}
+
+#[inline(always)]
+pub fn assume_init() -> [usize; 1] {
+    [1234]
+}
+
+fn main() {
+    let x: [usize; 1] = assume_init();
+    Wrap::new(x);
+}