diff options
Diffstat (limited to 'test/asan/TestCases/use-after-scope-goto.cpp')
-rw-r--r-- | test/asan/TestCases/use-after-scope-goto.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/test/asan/TestCases/use-after-scope-goto.cpp b/test/asan/TestCases/use-after-scope-goto.cpp new file mode 100644 index 000000000..351cbe995 --- /dev/null +++ b/test/asan/TestCases/use-after-scope-goto.cpp @@ -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; +} |