xref: /llvm-project/clang/test/CodeGen/asan-use-after-return.cpp (revision e0b469ffa142353fc90bfc6eadb638a805ebed75)
1 // RUN: %clang_cc1 -fsanitize=address -emit-llvm -o - -triple x86_64-linux %s \
2 // RUN:     | FileCheck %s --check-prefixes=CHECK-RUNTIME \
3 // RUN:         --implicit-check-not="__asan_stack_malloc_always_"
4 // RUN: %clang_cc1 -fsanitize=address -emit-llvm -o - -triple x86_64-linux %s \
5 // RUN:         -fsanitize-address-use-after-return=runtime \
6 // RUN:     | FileCheck %s --check-prefixes=CHECK-RUNTIME \
7 // RUN:         --implicit-check-not="__asan_stack_malloc_always_"
8 // RUN: %clang_cc1 -fsanitize=address -emit-llvm -o - -triple x86_64-linux %s \
9 // RUN:         -fsanitize-address-use-after-return=always \
10 // RUN:     | FileCheck %s --check-prefixes=CHECK-ALWAYS \
11 // RUN:         --implicit-check-not=__asan_option_detect_stack_use_after_return \
12 // RUN:         --implicit-check-not="__asan_stack_malloc_{{[0-9]}}"
13 // RUN: %clang_cc1 -fsanitize=address -emit-llvm -o - -triple x86_64-linux %s \
14 // RUN:         -fsanitize-address-use-after-return=never \
15 // RUN:     | FileCheck %s \
16 // RUN:         --implicit-check-not=__asan_option_detect_stack_use_after_return \
17 // RUN:         --implicit-check-not="__asan_stack_malloc_"
18 
19 // CHECK-RUNTIME: load{{.*}}@__asan_option_detect_stack_use_after_return
20 // CHECK-RUNTIME: call{{.*}}__asan_stack_malloc_0
21 // CHECK-ALWAYS: call{{.*}}__asan_stack_malloc_always_0
22 
function1()23 int *function1() {
24   int x = 0;
25 
26 #pragma clang diagnostic ignored "-Wreturn-stack-address"
27   return &x;
28 }
29 
main()30 int main() {
31   auto px = function1();
32   return 0;
33 }
34