diff options
author | Julian Lettner <jlettner@apple.com> | 2019-01-24 18:04:21 +0000 |
---|---|---|
committer | Julian Lettner <jlettner@apple.com> | 2019-01-24 18:04:21 +0000 |
commit | b62e9dc46b353f8832516f60c9ea13c82d1ea183 (patch) | |
tree | 653fe1ed67d8ccfeaf394f7e8a889dfddbd9c4f2 /clang/test/CodeGenCXX/ubsan-unreachable.cpp | |
parent | 1fa239f5002934f36b3de53989052bc9071e15fd (diff) | |
download | bcm5719-llvm-b62e9dc46b353f8832516f60c9ea13c82d1ea183.tar.gz bcm5719-llvm-b62e9dc46b353f8832516f60c9ea13c82d1ea183.zip |
Revert "[Sanitizers] UBSan unreachable incompatible with ASan in the presence of `noreturn` calls"
This reverts commit cea84ab93aeb079a358ab1c8aeba6d9140ef8b47.
llvm-svn: 352069
Diffstat (limited to 'clang/test/CodeGenCXX/ubsan-unreachable.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/ubsan-unreachable.cpp | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/clang/test/CodeGenCXX/ubsan-unreachable.cpp b/clang/test/CodeGenCXX/ubsan-unreachable.cpp index 9ef613e630c..32a78048cfd 100644 --- a/clang/test/CodeGenCXX/ubsan-unreachable.cpp +++ b/clang/test/CodeGenCXX/ubsan-unreachable.cpp @@ -2,35 +2,38 @@ extern void __attribute__((noreturn)) abort(); -// CHECK-LABEL: define void @_Z14calls_noreturnv() +// CHECK-LABEL: define void @_Z14calls_noreturnv void calls_noreturn() { - // CHECK: call void @_Z5abortv() [[CALL_SITE_ATTR:#[0-9]+]] abort(); + // Check that there are no attributes on the call site. + // CHECK-NOT: call void @_Z5abortv{{.*}}# + // CHECK: __ubsan_handle_builtin_unreachable // CHECK: unreachable } struct A { - // CHECK: declare void @_Z5abortv() [[EXTERN_FN_ATTR:#[0-9]+]] + // CHECK: declare void @_Z5abortv{{.*}} [[ABORT_ATTR:#[0-9]+]] // CHECK-LABEL: define linkonce_odr void @_ZN1A5call1Ev void call1() { - // CHECK: call void @_ZN1A16does_not_return2Ev({{.*}}) [[CALL_SITE_ATTR]] + // CHECK-NOT: call void @_ZN1A16does_not_return2Ev{{.*}}# does_not_return2(); // CHECK: __ubsan_handle_builtin_unreachable // CHECK: unreachable } - // Test static members. Checks are below after `struct A` scope ends. + // Test static members. static void __attribute__((noreturn)) does_not_return1() { + // CHECK-NOT: call void @_Z5abortv{{.*}}# abort(); } // CHECK-LABEL: define linkonce_odr void @_ZN1A5call2Ev void call2() { - // CHECK: call void @_ZN1A16does_not_return1Ev() [[CALL_SITE_ATTR]] + // CHECK-NOT: call void @_ZN1A16does_not_return1Ev{{.*}}# does_not_return1(); // CHECK: __ubsan_handle_builtin_unreachable @@ -43,18 +46,18 @@ struct A { // CHECK-LABEL: define linkonce_odr void @_ZN1A5call3Ev void call3() { MemFn MF = &A::does_not_return2; - // CHECK: call void %{{[0-9]+\(.*}}) [[CALL_SITE_ATTR]] (this->*MF)(); + // CHECK-NOT: call void %{{.*}}# // CHECK: __ubsan_handle_builtin_unreachable // CHECK: unreachable } // Test regular members. // CHECK-LABEL: define linkonce_odr void @_ZN1A16does_not_return2Ev({{.*}}) - // CHECK-SAME: [[USER_FN_ATTR:#[0-9]+]] + // CHECK-SAME: [[DOES_NOT_RETURN_ATTR:#[0-9]+]] void __attribute__((noreturn)) does_not_return2() { - // CHECK: call void @_Z5abortv() [[CALL_SITE_ATTR]] + // CHECK-NOT: call void @_Z5abortv(){{.*}}# abort(); // CHECK: call void @__ubsan_handle_builtin_unreachable @@ -65,9 +68,7 @@ struct A { } }; -// CHECK-LABEL: define linkonce_odr void @_ZN1A16does_not_return1Ev() -// CHECK-SAME: [[USER_FN_ATTR]] -// CHECK: call void @_Z5abortv() [[CALL_SITE_ATTR]] +// CHECK: define linkonce_odr void @_ZN1A16does_not_return1Ev() [[DOES_NOT_RETURN_ATTR]] void force_irgen() { A a; @@ -76,9 +77,5 @@ void force_irgen() { a.call3(); } -// 1) 'noreturn' should be removed from functions and call sites -// 2) 'expect_noreturn' added to call sites -// CHECK-LABEL: attributes -// CHECK: [[USER_FN_ATTR]] = { {{.*[^noreturn].*}} } -// CHECK: [[EXTERN_FN_ATTR]] = { {{.*[^noreturn].*}} } -// CHECK: [[CALL_SITE_ATTR]] = { expect_noreturn } +// CHECK-NOT: [[ABORT_ATTR]] = {{[^}]+}}noreturn +// CHECK-NOT: [[DOES_NOT_RETURN_ATTR]] = {{[^}]+}}noreturn |