[compiler-rt] r285343 - [asan] Test jumps which bypass variables declaration

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 27 14:02:32 PDT 2016


Author: vitalybuka
Date: Thu Oct 27 16:02:32 2016
New Revision: 285343

URL: http://llvm.org/viewvc/llvm-project?rev=285343&view=rev
Log:
[asan] Test jumps which bypass variables declaration

Summary:
Clang should not generate lifetime intrinsics for such variables. D24693

PR28267

Reviewers: eugenis

Subscribers: llvm-commits, kubabrecka

Differential Revision: https://reviews.llvm.org/D24696

Added:
    compiler-rt/trunk/test/asan/TestCases/use-after-scope-goto.cc

Added: compiler-rt/trunk/test/asan/TestCases/use-after-scope-goto.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/use-after-scope-goto.cc?rev=285343&view=auto
==============================================================================
--- compiler-rt/trunk/test/asan/TestCases/use-after-scope-goto.cc (added)
+++ compiler-rt/trunk/test/asan/TestCases/use-after-scope-goto.cc Thu Oct 27 16:02:32 2016
@@ -0,0 +1,73 @@
+// RUN: %clangxx_asan -O0 -fsanitize-address-use-after-scope %s -o %t && %run %t
+
+// Function jumps over variable initialization making lifetime analysis
+// ambiguous. Asan should ignore such variable and program must not fail.
+
+#include <stdlib.h>
+
+int *ptr;
+
+void f1(int cond) {
+  if (cond)
+    goto label;
+  int tmp;
+
+ label:
+  ptr = &tmp;
+  *ptr = 5;
+}
+
+void f2(int cond) {
+  switch (cond) {
+  case 1: {
+    ++cond;
+    int tmp;
+    ptr = &tmp;
+    exit(0);
+  case 2:
+    ptr = &tmp;
+    *ptr = 5;
+    exit(0);
+  }
+  }
+}
+
+void f3(int cond) {
+  {
+    int tmp;
+    goto l2;
+  l1:
+    ptr = &tmp;
+    *ptr = 5;
+
+    exit(0);
+  }
+ l2:
+  goto l1;
+}
+
+void use(int *x) {
+  static int c = 10;
+  if (--c == 0)
+    exit(0);
+  (*x)++;
+}
+
+void f4() {
+  {
+    int x;
+ l2:
+    use(&x);
+    goto l1;
+  }
+ l1:
+  goto l2;
+}
+
+int main() {
+  f1(1);
+  f2(1);
+  f3(1);
+  f4();
+  return 0;
+}




More information about the llvm-commits mailing list