55// RUN: %clang %s -target x86_64-unknown-linux-gnu -emit-llvm -S -fsanitize=thread -fsanitize-coverage=trace-pc,trace-cmp -o - | FileCheck %s --check-prefixes=CHECK,TSAN
66// RUN: %clang %s -target x86_64-unknown-linux-gnu -emit-llvm -S -fsanitize=undefined -fsanitize-coverage=trace-pc,trace-cmp -o - | FileCheck %s --check-prefixes=CHECK,UBSAN
77// RUN: %clang %s -target x86_64-unknown-linux-gnu -emit-llvm -S -fsanitize=kcfi -fsanitize-coverage=trace-pc,trace-cmp -o - | FileCheck %s --check-prefixes=CHECK,KCFI
8+ // RUN: %clang %s -target x86_64-unknown-linux-gnu -emit-llvm -S -fsanitize=cfi -fsanitize-coverage=trace-pc,trace-cmp -flto -fvisibility=default -fno-sanitize-trap=cfi -fno-sanitize-ignorelist -resource-dir=/dev/null -o - | FileCheck %s --check-prefixes=CHECK,CFI
89
910int x [10 ];
1011extern void (* f )(void );
@@ -21,6 +22,7 @@ void foo(int n) {
2122 if (n )
2223 x [n ] = 42 ;
2324 // KCFI-DAG: call void %[[#]]() [ "kcfi"(i32 {{.*}}) ]
25+ // CFI-DAG: call void @__ubsan_handle_cfi_check_fail_abort
2426 f ();
2527}
2628
@@ -47,6 +49,7 @@ __attribute__((no_sanitize("coverage"))) void test_no_sanitize_coverage(int n) {
4749 if (n )
4850 x [n ] = 42 ;
4951 // KCFI-DAG: call void %[[#]]() [ "kcfi"(i32 {{.*}}) ]
52+ // CFI-DAG: call void @__ubsan_handle_cfi_check_fail_abort
5053 f ();
5154}
5255
@@ -94,6 +97,14 @@ void test_no_sanitize_kcfi(void) {
9497 f ();
9598}
9699
100+ // CHECK-LABEL: define dso_local void @test_no_sanitize_cfi(
101+ __attribute__((no_sanitize ("cfi" , "coverage" )))
102+ void test_no_sanitize_cfi (void ) {
103+ // CHECK-NOT: call void @__sanitizer_cov_trace
104+ // CFI-NOT: call void @__ubsan_handle_cfi_check_fail_abort
105+ f ();
106+ }
107+
97108// CHECK-LABEL: define dso_local void @test_no_sanitize_always_inline(
98109__attribute__((no_sanitize ("coverage" )))
99110void test_no_sanitize_always_inline (int n ) {
0 commit comments