mirror of
https://github.com/intel/llvm.git
synced 2026-01-27 06:06:34 +08:00
[asan] Test jumps which bypass variables declaration
Summary: Clang should not generate lifetime intrinsics for such variables. D24693 PR28267 Reviewers: eugenis Subscribers: llvm-commits, kubabrecka Differential Revision: https://reviews.llvm.org/D24696 llvm-svn: 285343
This commit is contained in:
73
compiler-rt/test/asan/TestCases/use-after-scope-goto.cc
Normal file
73
compiler-rt/test/asan/TestCases/use-after-scope-goto.cc
Normal file
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user