diff options
| author | Vitaly Buka <vitalybuka@google.com> | 2016-10-27 21:02:32 +0000 |
|---|---|---|
| committer | Vitaly Buka <vitalybuka@google.com> | 2016-10-27 21:02:32 +0000 |
| commit | d6eee817901823e3cdc7138f87d1dfd8675575e5 (patch) | |
| tree | 3a26f94579a126d2689e93d99845011162292fb4 | |
| parent | bc5c29a65f5326484b12384a519945df341aa557 (diff) | |
| download | bcm5719-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.cc | 73 |
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; +} |

