aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2020-02-28 10:06:57 -0500
committerDavid Malcolm <dmalcolm@redhat.com>2020-03-02 16:45:04 -0500
commit13b7691238f189c7a233aedec49306a7cb2b0a15 (patch)
tree5dc52bca9a149f2ca48fd9d35c8159014e21c4dd
parent6e4444078aec716aa8214c13d7d20292aa232b5b (diff)
downloadgcc-13b7691238f189c7a233aedec49306a7cb2b0a15.zip
gcc-13b7691238f189c7a233aedec49306a7cb2b0a15.tar.gz
gcc-13b7691238f189c7a233aedec49306a7cb2b0a15.tar.bz2
analyzer: don't print the duplicate count by default
The note about duplicates attached to analyzer diagnostics feels like an implementation detail; it's likely just noise from the perspective of an end-user. This patch disables it by default, introducing a flag to re-enable it. gcc/analyzer/ChangeLog: * analyzer.opt (fanalyzer-show-duplicate-count): New option. * diagnostic-manager.cc (diagnostic_manager::emit_saved_diagnostic): Use the above to guard the printing of the duplicate count. gcc/ChangeLog: * doc/invoke.texi (-fanalyzer-show-duplicate-count): New. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/CVE-2005-1689-dedupe-issue.c: Add -fanalyzer-show-duplicate-count.
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/analyzer/ChangeLog7
-rw-r--r--gcc/analyzer/analyzer.opt4
-rw-r--r--gcc/analyzer/diagnostic-manager.cc2
-rw-r--r--gcc/doc/invoke.texi8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue.c2
7 files changed, 31 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2944f8f..d8ac9f8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2020-03-02 David Malcolm <dmalcolm@redhat.com>
+ * doc/invoke.texi (-fanalyzer-show-duplicate-count): New.
+
+2020-03-02 David Malcolm <dmalcolm@redhat.com>
+
* doc/invoke.texi (Static Analyzer Options): Add
-Wanalyzer-stale-setjmp-buffer to the list of options enabled
by -fanalyzer.
diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog
index e5d7bdb..fa0fbcd 100644
--- a/gcc/analyzer/ChangeLog
+++ b/gcc/analyzer/ChangeLog
@@ -1,5 +1,12 @@
2020-03-02 David Malcolm <dmalcolm@redhat.com>
+ * analyzer.opt (fanalyzer-show-duplicate-count): New option.
+ * diagnostic-manager.cc
+ (diagnostic_manager::emit_saved_diagnostic): Use the above to
+ guard the printing of the duplicate count.
+
+2020-03-02 David Malcolm <dmalcolm@redhat.com>
+
PR analyzer/93959
* analyzer.cc (is_std_function_p): New function.
(is_std_named_call_p): New functions.
diff --git a/gcc/analyzer/analyzer.opt b/gcc/analyzer/analyzer.opt
index 4d122f3..22cf4b0 100644
--- a/gcc/analyzer/analyzer.opt
+++ b/gcc/analyzer/analyzer.opt
@@ -114,6 +114,10 @@ fanalyzer-fine-grained
Common Var(flag_analyzer_fine_grained) Init(0)
Avoid combining multiple statements into one exploded edge.
+fanalyzer-show-duplicate-count
+Common Var(flag_analyzer_show_duplicate_count) Init(0)
+Issue a note when diagnostics are deduplicated.
+
fanalyzer-state-purge
Common Var(flag_analyzer_state_purge) Init(1)
Purge unneeded state during analysis.
diff --git a/gcc/analyzer/diagnostic-manager.cc b/gcc/analyzer/diagnostic-manager.cc
index b8e5933..7435092 100644
--- a/gcc/analyzer/diagnostic-manager.cc
+++ b/gcc/analyzer/diagnostic-manager.cc
@@ -541,7 +541,7 @@ diagnostic_manager::emit_saved_diagnostic (const exploded_graph &eg,
auto_cfun sentinel (sd.m_snode->m_fun);
if (sd.m_d->emit (&rich_loc))
{
- if (num_dupes > 0)
+ if (flag_analyzer_show_duplicate_count && num_dupes > 0)
inform_n (stmt->location, num_dupes,
"%i duplicate", "%i duplicates",
num_dupes);
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index dc7440d..54375eb 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -8477,6 +8477,14 @@ By default, an edge in this graph can contain the effects of a run
of multiple statements within a basic block. With
@option{-fanalyzer-fine-grained}, each statement gets its own edge.
+@item -fanalyzer-show-duplicate-count
+@opindex fanalyzer-show-duplicate-count
+@opindex fno-analyzer-show-duplicate-count
+This option is intended for analyzer developers: if multiple diagnostics
+have been detected as being duplicates of each other, it emits a note when
+reporting the best diagnostic, giving the number of additional diagnostics
+that were suppressed by the deduplication logic.
+
@item -fno-analyzer-state-merge
@opindex fanalyzer-state-merge
@opindex fno-analyzer-state-merge
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 33fa9bc..5eae7d8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2020-03-02 David Malcolm <dmalcolm@redhat.com>
+ * gcc.dg/analyzer/CVE-2005-1689-dedupe-issue.c: Add
+ -fanalyzer-show-duplicate-count.
+
+2020-03-02 David Malcolm <dmalcolm@redhat.com>
+
PR analyzer/93959
* g++.dg/analyzer/cstdlib-2.C: New test.
* g++.dg/analyzer/cstdlib.C: New test.
diff --git a/gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue.c b/gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue.c
index 53c046e..b43148c 100644
--- a/gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue.c
+++ b/gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue.c
@@ -1,3 +1,5 @@
+/* { dg-additional-options "-fanalyzer-show-duplicate-count" } */
+
#include <stdlib.h>
typedef struct _krb5_data {