5
5
// 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
6
6
// 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
7
7
// 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
8
9
9
10
int x [10 ];
10
11
extern void (* f )(void );
@@ -21,6 +22,7 @@ void foo(int n) {
21
22
if (n )
22
23
x [n ] = 42 ;
23
24
// KCFI-DAG: call void %[[#]]() [ "kcfi"(i32 {{.*}}) ]
25
+ // CFI-DAG: call void @__ubsan_handle_cfi_check_fail_abort
24
26
f ();
25
27
}
26
28
@@ -47,6 +49,7 @@ __attribute__((no_sanitize("coverage"))) void test_no_sanitize_coverage(int n) {
47
49
if (n )
48
50
x [n ] = 42 ;
49
51
// KCFI-DAG: call void %[[#]]() [ "kcfi"(i32 {{.*}}) ]
52
+ // CFI-DAG: call void @__ubsan_handle_cfi_check_fail_abort
50
53
f ();
51
54
}
52
55
@@ -94,6 +97,14 @@ void test_no_sanitize_kcfi(void) {
94
97
f ();
95
98
}
96
99
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
+
97
108
// CHECK-LABEL: define dso_local void @test_no_sanitize_always_inline(
98
109
__attribute__((no_sanitize ("coverage" )))
99
110
void test_no_sanitize_always_inline (int n ) {
0 commit comments