[compiler-rt] 595e484 - [rtsan] Add option to allow printing of duplicate stacks (suppress_equal_stacks) (#117069)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 21 06:32:09 PST 2024
Author: Chris Apple
Date: 2024-11-21T06:32:05-08:00
New Revision: 595e484c0808f2410fa7f1ac4d630c1871c447fb
URL: https://github.com/llvm/llvm-project/commit/595e484c0808f2410fa7f1ac4d630c1871c447fb
DIFF: https://github.com/llvm/llvm-project/commit/595e484c0808f2410fa7f1ac4d630c1871c447fb.diff
LOG: [rtsan] Add option to allow printing of duplicate stacks (suppress_equal_stacks) (#117069)
Following the example of tsan, where we took the name
This would allow users to determine if they want to see ALL output from
rtsan.
Additionally, remove the UNLIKELY hint, as it is now up to the flag whether or
not it is likely that we go through this conditional.
Added:
Modified:
compiler-rt/lib/rtsan/rtsan.cpp
compiler-rt/lib/rtsan/rtsan_flags.inc
compiler-rt/test/rtsan/deduplicate_errors.cpp
Removed:
################################################################################
diff --git a/compiler-rt/lib/rtsan/rtsan.cpp b/compiler-rt/lib/rtsan/rtsan.cpp
index 70edcc546219fa..81cedb3b5114f0 100644
--- a/compiler-rt/lib/rtsan/rtsan.cpp
+++ b/compiler-rt/lib/rtsan/rtsan.cpp
@@ -55,11 +55,7 @@ static void OnViolation(const BufferedStackTrace &stack,
StackDepotHandle handle = StackDepotPut_WithHandle(stack);
const bool is_stack_novel = handle.use_count() == 0;
-
- // Marked UNLIKELY as if user is runing with halt_on_error=false
- // we expect a high number of duplicate stacks. We are willing
- // To pay for the first insertion.
- if (UNLIKELY(is_stack_novel)) {
+ if (is_stack_novel || !flags().suppress_equal_stacks) {
IncrementUniqueErrorCount();
{
diff --git a/compiler-rt/lib/rtsan/rtsan_flags.inc b/compiler-rt/lib/rtsan/rtsan_flags.inc
index 5c3eb3f53a5eb4..104fac8f770406 100644
--- a/compiler-rt/lib/rtsan/rtsan_flags.inc
+++ b/compiler-rt/lib/rtsan/rtsan_flags.inc
@@ -19,3 +19,6 @@
RTSAN_FLAG(bool, halt_on_error, true, "Exit after first reported error.")
RTSAN_FLAG(bool, print_stats_on_exit, false, "Print stats on exit.")
RTSAN_FLAG(const char *, suppressions, "", "Suppressions file name.")
+RTSAN_FLAG(bool, suppress_equal_stacks, true,
+ "Suppress a report if we've already output another report "
+ "with the same stack.")
diff --git a/compiler-rt/test/rtsan/deduplicate_errors.cpp b/compiler-rt/test/rtsan/deduplicate_errors.cpp
index 7d60d4d7da7dda..6fcd749cf63ee3 100644
--- a/compiler-rt/test/rtsan/deduplicate_errors.cpp
+++ b/compiler-rt/test/rtsan/deduplicate_errors.cpp
@@ -1,5 +1,6 @@
// RUN: %clangxx -fsanitize=realtime %s -o %t
// RUN: env RTSAN_OPTIONS="halt_on_error=false,print_stats_on_exit=true" %run %t 2>&1 | FileCheck %s
+// RUN: env RTSAN_OPTIONS="halt_on_error=false,suppress_equal_stacks=false" %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-DUPLICATES
// UNSUPPORTED: ios
@@ -37,3 +38,6 @@ int main() {
// CHECK: RealtimeSanitizer exit stats:
// CHECK-NEXT: Total error count: 220
// CHECK-NEXT: Unique error count: 4
+
+// CHECK-DUPLICATES-COUNT-220: ==ERROR:
+// CHECK-DUPLICATES-NOT: ==ERROR:
More information about the llvm-commits
mailing list