Index: test/asan/TestCases/use-after-scope-goto.c =================================================================== --- test/asan/TestCases/use-after-scope-goto.c +++ /dev/null @@ -1,21 +0,0 @@ -// RUN: %clang_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. - -int *ptr; - -void f(int cond) { - if (cond) - goto label; - int tmp = 1; - -label: - ptr = &tmp; - *ptr = 5; -} - -int main() { - f(1); - return 0; -} Index: test/asan/TestCases/use-after-scope-goto.cc =================================================================== --- /dev/null +++ test/asan/TestCases/use-after-scope-goto.cc @@ -0,0 +1,54 @@ +// RUN: %clangxx_asan -O0 -fsanitize-address-use-after-scope %s -o %t + +// Function jumps over variable initialization making lifetime analysis +// ambiguous. Asan should ignore such variable and program must not fail. + +#include + +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; +} + +int main() { + f1(1); + f2(1); + f3(1); + return 0; +}