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