[PATCH] D24696: [asan] Add tests to make to test jump bypass of variables declaration

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 16 18:11:32 PDT 2016


vitalybuka created this revision.
vitalybuka added a reviewer: eugenis.
vitalybuka added a subscriber: llvm-commits.
Herald added a subscriber: kubabrecka.

Clang should not generate lifetime intrinsics for such variables.

PR28267

https://reviews.llvm.org/D24696

Files:
  test/asan/TestCases/use-after-scope-goto.cc

Index: test/asan/TestCases/use-after-scope-goto.cc
===================================================================
--- /dev/null
+++ test/asan/TestCases/use-after-scope-goto.cc
@@ -0,0 +1,87 @@
+// RUN: %clangxx_asan -O0 -fsanitize-address-use-after-scope %s -o %t
+// RUN: %run %t 1
+// RUN: %run %t 2
+// RUN: %run %t 3
+// RUN: %run %t 4
+
+// 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(int argc, char **argv) {
+  if (argc != 2)
+    return 1;
+  switch (atoi(argv[1])) {
+    case 1:
+      f1(1); break;
+    case 2:
+      f2(1); break;
+    case 3:
+      f3(1); break;
+    case 4:
+      f4(); break;
+    default:
+      return 1;
+  }
+  return 0;
+}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D24696.71722.patch
Type: text/x-patch
Size: 1424 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160917/14122673/attachment.bin>


More information about the llvm-commits mailing list