| // RUN: %clang_cc1 -fsanitize=address -emit-llvm -o - -triple x86_64-linux %s \ |
| // RUN: | FileCheck %s --check-prefixes=CHECK-RUNTIME \ |
| // RUN: --implicit-check-not="__asan_stack_malloc_always_" |
| // RUN: %clang_cc1 -fsanitize=address -emit-llvm -o - -triple x86_64-linux %s \ |
| // RUN: -fsanitize-address-use-after-return=runtime \ |
| // RUN: | FileCheck %s --check-prefixes=CHECK-RUNTIME \ |
| // RUN: --implicit-check-not="__asan_stack_malloc_always_" |
| // RUN: %clang_cc1 -fsanitize=address -emit-llvm -o - -triple x86_64-linux %s \ |
| // RUN: -fsanitize-address-use-after-return=always \ |
| // RUN: | FileCheck %s --check-prefixes=CHECK-ALWAYS \ |
| // RUN: --implicit-check-not=__asan_option_detect_stack_use_after_return \ |
| // RUN: --implicit-check-not="__asan_stack_malloc_{{[0-9]}}" |
| // RUN: %clang_cc1 -fsanitize=address -emit-llvm -o - -triple x86_64-linux %s \ |
| // RUN: -fsanitize-address-use-after-return=never \ |
| // RUN: | FileCheck %s \ |
| // RUN: --implicit-check-not=__asan_option_detect_stack_use_after_return \ |
| // RUN: --implicit-check-not="__asan_stack_malloc_" |
| |
| // CHECK-RUNTIME: load{{.*}}@__asan_option_detect_stack_use_after_return |
| // CHECK-RUNTIME: call{{.*}}__asan_stack_malloc_0 |
| // CHECK-ALWAYS: call{{.*}}__asan_stack_malloc_always_0 |
| |
| int *function1() { |
| int x = 0; |
| |
| #pragma clang diagnostic ignored "-Wreturn-stack-address" |
| return &x; |
| } |
| |
| int main() { |
| auto px = function1(); |
| return 0; |
| } |