You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
874 B
74 lines
874 B
// 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;
|
|
}
|