[Clang][Driver] Add Bounds and Thread to SupportsCoverage list
Summary:
This permits combining -fsanitize-coverage with -fsanitize=bounds or
-fsanitize=thread. Note that, GCC already supports combining these.
Tested:
- Add Clang end-to-end test checking IR is generated for both combinations
of sanitizers.
- Several previously failing TSAN tests now pass.
Bugzilla: https://bugs.llvm.org/show_bug.cgi?id=45831
Reviewers: vitalybuka
Reviewed By: vitalybuka
Subscribers: #sanitizers, dvyukov, nickdesaulniers, cfe-commits
Tags: #clang, #sanitizers
Differential Revision: https://reviews.llvm.org/D79628
diff --git a/clang/test/CodeGen/sanitize-coverage.c b/clang/test/CodeGen/sanitize-coverage.c
new file mode 100644
index 0000000..6fc8e39
--- /dev/null
+++ b/clang/test/CodeGen/sanitize-coverage.c
@@ -0,0 +1,22 @@
+// RUN: %clang %s -target x86_64-unknown-linux-gnu -emit-llvm -S -fsanitize-coverage=trace-pc,trace-cmp -o - | FileCheck %s --check-prefixes=CHECK
+// RUN: %clang %s -target x86_64-unknown-linux-gnu -emit-llvm -S -fsanitize=address -fsanitize-coverage=trace-pc,trace-cmp -o - | FileCheck %s --check-prefixes=CHECK,ASAN
+// RUN: %clang %s -target x86_64-unknown-linux-gnu -emit-llvm -S -fsanitize=bounds -fsanitize-coverage=trace-pc,trace-cmp -o - | FileCheck %s --check-prefixes=CHECK,BOUNDS
+// RUN: %clang %s -target x86_64-unknown-linux-gnu -emit-llvm -S -fsanitize=memory -fsanitize-coverage=trace-pc,trace-cmp -o - | FileCheck %s --check-prefixes=CHECK,MSAN
+// 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
+// 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
+
+int x[10];
+
+// CHECK-LABEL: define dso_local void @foo(
+void foo(int n) {
+ // CHECK-DAG: call void @__sanitizer_cov_trace_pc
+ // CHECK-DAG: call void @__sanitizer_cov_trace_const_cmp
+ // ASAN-DAG: call void @__asan_report_store
+ // MSAN-DAG: call void @__msan_warning
+ // BOUNDS-DAG: call void @__ubsan_handle_out_of_bounds
+ // TSAN-DAG: call void @__tsan_func_entry
+ // UBSAN-DAG: call void @__ubsan_handle
+ if (n)
+ x[n] = 42;
+}
+// CHECK-LABEL: declare void