1 | /// Fast unwinder does not work with Thumb code |
2 | // UNSUPPORTED: target=thumb{{.*}} |
3 | // UNSUPPORTED: android |
4 | |
5 | // RUN: %clangxx -fsanitize=return %gmlt -O2 -fno-omit-frame-pointer -fasynchronous-unwind-tables %s -o %t |
6 | // RUN: %env_ubsan_opts=print_stacktrace=1:fast_unwind_on_fatal=0 not %run %t 2>&1 | FileCheck %s |
7 | // RUN: %env_ubsan_opts=print_stacktrace=1:fast_unwind_on_fatal=1 not %run %t 2>&1 | FileCheck %s |
8 | // RUN: %clangxx -fsanitize=return %gmlt -O2 -fno-omit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables %s -o %t |
9 | // RUN: %env_ubsan_opts=print_stacktrace=1:fast_unwind_on_fatal=0 not %run %t 2>&1 | FileCheck %s |
10 | // RUN: %env_ubsan_opts=print_stacktrace=1:fast_unwind_on_fatal=1 not %run %t 2>&1 | FileCheck %s |
11 | |
12 | // CHECK: runtime error: execution reached the end of a value-returning function without returning a value |
13 | // CHECK-NEXT: #0 {{.*}}f() {{.*}}.cpp:[[#@LINE+1]] |
14 | __attribute__((noinline)) int f() {} |
15 | |
16 | // CHECK-NEXT: #1 {{.*}}g() {{.*}}.cpp:[[#@LINE+1]] |
17 | __attribute__((noinline)) void g() { f(); } |
18 | |
19 | // CHECK-NEXT: #2 {{.*}}h() {{.*}}.cpp:[[#@LINE+1]] |
20 | __attribute__((noinline)) void h() { g(); } |
21 | |
22 | // CHECK-NEXT: #3 {{.*}}main {{.*}}.cpp:[[#@LINE+1]] |
23 | int main() { h(); } |
24 | |