summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2016-10-27 21:02:32 +0000
committerVitaly Buka <vitalybuka@google.com>2016-10-27 21:02:32 +0000
commitd6eee817901823e3cdc7138f87d1dfd8675575e5 (patch)
tree3a26f94579a126d2689e93d99845011162292fb4
parentbc5c29a65f5326484b12384a519945df341aa557 (diff)
downloadbcm5719-llvm-d6eee817901823e3cdc7138f87d1dfd8675575e5.tar.gz
bcm5719-llvm-d6eee817901823e3cdc7138f87d1dfd8675575e5.zip
[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 llvm-svn: 285343
-rw-r--r--compiler-rt/test/asan/TestCases/use-after-scope-goto.cc73
1 files changed, 73 insertions, 0 deletions
diff --git a/compiler-rt/test/asan/TestCases/use-after-scope-goto.cc b/compiler-rt/test/asan/TestCases/use-after-scope-goto.cc
new file mode 100644
index 00000000000..351cbe995ef
--- /dev/null
+++ b/compiler-rt/test/asan/TestCases/use-after-scope-goto.cc
@@ -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;
+}
OpenPOWER on IntegriCloud