| // RUN: %clangxx_asan -O0 %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; |
| } |