1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 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;
}
 
     |