| 1 | // RUN: %clang -target x86_64-linux-gnu -S -emit-llvm -o - -O0 %s | FileCheck %s -check-prefix=CHECK-O0 |
| 2 | // RUN: %clang -target x86_64-linux-gnu -S -emit-llvm -o - -O0 \ |
| 3 | // RUN: -fsanitize=address -fsanitize-address-use-after-scope %s | \ |
| 4 | // RUN: FileCheck %s -check-prefix=CHECK-ASAN-USE-AFTER-SCOPE |
| 5 | |
| 6 | extern int bar(char *A, int n); |
| 7 | |
| 8 | // CHECK-O0-NOT: @llvm.lifetime.start |
| 9 | int foo(int n) { |
| 10 | if (n) { |
| 11 | // CHECK-ASAN-USE-AFTER-SCOPE: @llvm.lifetime.start.p0i8(i64 10, i8* {{.*}}) |
| 12 | char A[10]; |
| 13 | return bar(A, 1); |
| 14 | // CHECK-ASAN-USE-AFTER-SCOPE: @llvm.lifetime.end.p0i8(i64 10, i8* {{.*}}) |
| 15 | } else { |
| 16 | // CHECK-ASAN-USE-AFTER-SCOPE: @llvm.lifetime.start.p0i8(i64 20, i8* {{.*}}) |
| 17 | char A[20]; |
| 18 | return bar(A, 2); |
| 19 | // CHECK-ASAN-USE-AFTER-SCOPE: @llvm.lifetime.end.p0i8(i64 20, i8* {{.*}}) |
| 20 | } |
| 21 | } |
| 22 | |