brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 5c8567e Raw
84 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s -fsanitize=unreachable | FileCheck %s2 3void abort() __attribute__((noreturn));4 5// CHECK-LABEL: define{{.*}} void @_Z14calls_noreturnv()6void calls_noreturn() {7  // Check absence (ptr) of call site attributes (including noreturn)8  // CHECK: call void @_Z5abortv(){{[^#]*}}9  abort();10 11  // CHECK: __ubsan_handle_builtin_unreachable12  // CHECK: unreachable13}14 15struct A {16  // CHECK: declare void @_Z5abortv() [[EXTERN_FN_ATTR:#[0-9]+]]17 18  // CHECK-LABEL: define linkonce_odr void @_ZN1A5call1Ev19  void call1() {20    // CHECK: call void @_ZN1A16does_not_return2Ev({{.*}}){{[^#]*}}21    does_not_return2();22 23    // CHECK: __ubsan_handle_builtin_unreachable24    // CHECK: unreachable25  }26 27  // Test static members. Checks are below after `struct A` scope ends.28  static void does_not_return1() __attribute__((noreturn)) {29    abort();30  }31 32  // CHECK-LABEL: define linkonce_odr void @_ZN1A5call2Ev33  void call2() {34    // CHECK: call void @_ZN1A16does_not_return1Ev(){{[^#]*}}35    does_not_return1();36 37    // CHECK: __ubsan_handle_builtin_unreachable38    // CHECK: unreachable39  }40 41  // Test calls through pointers to non-static member functions.42  typedef void (A::*MemFn)() __attribute__((noreturn));43 44  // CHECK-LABEL: define linkonce_odr void @_ZN1A5call3Ev45  void call3() {46    MemFn MF = &A::does_not_return2;47    // CHECK: call void %{{[0-9]+\(.*}}){{[^#]*}}48    (this->*MF)();49 50    // CHECK: __ubsan_handle_builtin_unreachable51    // CHECK: unreachable52  }53 54  // Test regular members.55  // CHECK-LABEL: define linkonce_odr void @_ZN1A16does_not_return2Ev({{.*}})56  // CHECK-SAME: [[USER_FN_ATTR:#[0-9]+]]57  void does_not_return2() __attribute__((noreturn)) {58    // CHECK: call void @_Z5abortv(){{[^#]*}}59    abort();60 61    // CHECK: call void @__ubsan_handle_builtin_unreachable62    // CHECK: unreachable63 64    // CHECK: call void @__ubsan_handle_builtin_unreachable65    // CHECK: unreachable66  }67};68 69// CHECK-LABEL: define linkonce_odr void @_ZN1A16does_not_return1Ev()70// CHECK-SAME: [[USER_FN_ATTR]]71// CHECK: call void @_Z5abortv(){{[^#]*}}72 73void force_irgen() {74  A a;75  a.call1();76  a.call2();77  a.call3();78}79 80// `noreturn` should be removed from functions and call sites81// CHECK-LABEL: attributes82// CHECK-NOT: [[USER_FN_ATTR]] = { {{.*noreturn.*}} }83// CHECK-NOT: [[EXTERN_FN_ATTR]] = { {{.*noreturn.*}} }84