diff options
author | Raphael Isemann <teemperor@gmail.com> | 2017-09-04 05:56:36 +0000 |
---|---|---|
committer | Raphael Isemann <teemperor@gmail.com> | 2017-09-04 05:56:36 +0000 |
commit | 561f0de6d96eff6efc53e6e8b07bc9408304b381 (patch) | |
tree | 0596804573054c4cd9ddfbdc3a8db6c274fbc25f | |
parent | dd8b5337e9da480640598008de6211dab68c20dc (diff) | |
download | bcm5719-llvm-561f0de6d96eff6efc53e6e8b07bc9408304b381.tar.gz bcm5719-llvm-561f0de6d96eff6efc53e6e8b07bc9408304b381.zip |
[analyzer] Increase minimum complexity filter of the CloneChecker.
Summary:
So far we used a value of 10 which was useful for testing but produces many false-positives in real programs. The usual suspicious clones we find seem to be at around a complexity value of 70 and for normal clone-reporting everything above 50 seems to be a valid normal clone for users, so let's just go with 50 for now and set this as the new default value.
This patch also explicitly sets the complexity value for the regression tests as they serve more of a regression testing/debugging purpose and shouldn't really be reported by default in real programs. I'll add more tests that reflect actual found bugs that then need to pass with the default setting in the future.
Reviewers: NoQ
Subscribers: cfe-commits, javed.absar, xazax.hun, v.g.vassilev
Differential Revision: https://reviews.llvm.org/D34178
llvm-svn: 312468
24 files changed, 24 insertions, 24 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/CloneChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/CloneChecker.cpp index efcb8662a66..ee517ed9777 100644 --- a/clang/lib/StaticAnalyzer/Checkers/CloneChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/CloneChecker.cpp @@ -64,7 +64,7 @@ void CloneChecker::checkEndOfTranslationUnit(const TranslationUnitDecl *TU, // the CloneDetector. The only thing left to do is to report the found clones. int MinComplexity = Mgr.getAnalyzerOptions().getOptionAsInteger( - "MinimumCloneComplexity", 10, this); + "MinimumCloneComplexity", 50, this); assert(MinComplexity >= 0); bool ReportSuspiciousClones = Mgr.getAnalyzerOptions().getBooleanOption( diff --git a/clang/test/Analysis/copypaste/asm.cpp b/clang/test/Analysis/copypaste/asm.cpp index 2e3613dfca4..1d93469aa3c 100644 --- a/clang/test/Analysis/copypaste/asm.cpp +++ b/clang/test/Analysis/copypaste/asm.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -triple x86_64-unknown-linux -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -triple x86_64-unknown-linux -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // expected-no-diagnostics diff --git a/clang/test/Analysis/copypaste/attributes.cpp b/clang/test/Analysis/copypaste/attributes.cpp index 083be74436d..f71545130cb 100644 --- a/clang/test/Analysis/copypaste/attributes.cpp +++ b/clang/test/Analysis/copypaste/attributes.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // expected-no-diagnostics diff --git a/clang/test/Analysis/copypaste/autogenerated_automoc.cpp b/clang/test/Analysis/copypaste/autogenerated_automoc.cpp index 55963c4545c..0f7f9c9e456 100644 --- a/clang/test/Analysis/copypaste/autogenerated_automoc.cpp +++ b/clang/test/Analysis/copypaste/autogenerated_automoc.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:IgnoredFilesPattern="moc_|.*_automoc.cpp" -verify %s +// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -analyzer-config alpha.clone.CloneChecker:IgnoredFilesPattern="moc_|.*_automoc.cpp" -verify %s // Because files that have `_automoc.' in their names are most likely autogenerated, // we suppress copy-paste warnings here. diff --git a/clang/test/Analysis/copypaste/blocks.cpp b/clang/test/Analysis/copypaste/blocks.cpp index 10467b7248c..23821560ea3 100644 --- a/clang/test/Analysis/copypaste/blocks.cpp +++ b/clang/test/Analysis/copypaste/blocks.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -fblocks -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -fblocks -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // This tests if we search for clones in blocks. diff --git a/clang/test/Analysis/copypaste/call.cpp b/clang/test/Analysis/copypaste/call.cpp index 046229a30a4..c5ddae5a65f 100644 --- a/clang/test/Analysis/copypaste/call.cpp +++ b/clang/test/Analysis/copypaste/call.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // expected-no-diagnostics diff --git a/clang/test/Analysis/copypaste/catch.cpp b/clang/test/Analysis/copypaste/catch.cpp index cf3e8076bd5..edcf44ae6fc 100644 --- a/clang/test/Analysis/copypaste/catch.cpp +++ b/clang/test/Analysis/copypaste/catch.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -fcxx-exceptions -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -fcxx-exceptions -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // expected-no-diagnostics diff --git a/clang/test/Analysis/copypaste/delete.cpp b/clang/test/Analysis/copypaste/delete.cpp index 394226bedf1..4edb46035a3 100644 --- a/clang/test/Analysis/copypaste/delete.cpp +++ b/clang/test/Analysis/copypaste/delete.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // expected-no-diagnostics diff --git a/clang/test/Analysis/copypaste/dependent-exist.cpp b/clang/test/Analysis/copypaste/dependent-exist.cpp index 9046353d0f0..28f2ceb21ad 100644 --- a/clang/test/Analysis/copypaste/dependent-exist.cpp +++ b/clang/test/Analysis/copypaste/dependent-exist.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -fms-extensions -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -fms-extensions -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // expected-no-diagnostics diff --git a/clang/test/Analysis/copypaste/expr-types.cpp b/clang/test/Analysis/copypaste/expr-types.cpp index 601f0b192ac..6062be306e2 100644 --- a/clang/test/Analysis/copypaste/expr-types.cpp +++ b/clang/test/Analysis/copypaste/expr-types.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // expected-no-diagnostics diff --git a/clang/test/Analysis/copypaste/fold.cpp b/clang/test/Analysis/copypaste/fold.cpp index 0aed11bcf07..fadcb49fa0b 100644 --- a/clang/test/Analysis/copypaste/fold.cpp +++ b/clang/test/Analysis/copypaste/fold.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // expected-no-diagnostics diff --git a/clang/test/Analysis/copypaste/function-try-block.cpp b/clang/test/Analysis/copypaste/function-try-block.cpp index d77714591b9..d0fbc50f67e 100644 --- a/clang/test/Analysis/copypaste/function-try-block.cpp +++ b/clang/test/Analysis/copypaste/function-try-block.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -fcxx-exceptions -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -fcxx-exceptions -std=c++1z -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // Tests if function try blocks are correctly handled. diff --git a/clang/test/Analysis/copypaste/functions.cpp b/clang/test/Analysis/copypaste/functions.cpp index d2c607b2171..2bfe591a50b 100644 --- a/clang/test/Analysis/copypaste/functions.cpp +++ b/clang/test/Analysis/copypaste/functions.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // This tests if we search for clones in functions. diff --git a/clang/test/Analysis/copypaste/generic.c b/clang/test/Analysis/copypaste/generic.c index d4d45647362..2fa6c302da1 100644 --- a/clang/test/Analysis/copypaste/generic.c +++ b/clang/test/Analysis/copypaste/generic.c @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c11 -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -std=c11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // expected-no-diagnostics diff --git a/clang/test/Analysis/copypaste/labels.cpp b/clang/test/Analysis/copypaste/labels.cpp index eff3330a0f3..18c5b22d3b1 100644 --- a/clang/test/Analysis/copypaste/labels.cpp +++ b/clang/test/Analysis/copypaste/labels.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=gnu++11 -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -std=gnu++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // expected-no-diagnostics diff --git a/clang/test/Analysis/copypaste/lambda.cpp b/clang/test/Analysis/copypaste/lambda.cpp index 17c87489431..456d83a995b 100644 --- a/clang/test/Analysis/copypaste/lambda.cpp +++ b/clang/test/Analysis/copypaste/lambda.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // expected-no-diagnostics diff --git a/clang/test/Analysis/copypaste/macros.cpp b/clang/test/Analysis/copypaste/macros.cpp index bdacd4839a6..ea05bbd4281 100644 --- a/clang/test/Analysis/copypaste/macros.cpp +++ b/clang/test/Analysis/copypaste/macros.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // Tests that macros and non-macro clones aren't mixed into the same hash // group. This is currently necessary as all clones in a hash group need diff --git a/clang/test/Analysis/copypaste/not-autogenerated.cpp b/clang/test/Analysis/copypaste/not-autogenerated.cpp index 765e7aaf2aa..d54ee176fa8 100644 --- a/clang/test/Analysis/copypaste/not-autogenerated.cpp +++ b/clang/test/Analysis/copypaste/not-autogenerated.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:IgnoredFilesPattern="moc_|ui_|dbus_|.*_automoc" -verify %s +// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -analyzer-config alpha.clone.CloneChecker:IgnoredFilesPattern="moc_|ui_|dbus_|.*_automoc" -verify %s void f1() { int *p1 = new int[1]; diff --git a/clang/test/Analysis/copypaste/objc-methods.m b/clang/test/Analysis/copypaste/objc-methods.m index e63c7f6288b..0a843707937 100644 --- a/clang/test/Analysis/copypaste/objc-methods.m +++ b/clang/test/Analysis/copypaste/objc-methods.m @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -Wno-objc-root-class -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -Wno-objc-root-class -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // This tests if we search for clones in Objective-C methods. diff --git a/clang/test/Analysis/copypaste/plist-diagnostics-notes-as-events.cpp b/clang/test/Analysis/copypaste/plist-diagnostics-notes-as-events.cpp index 7c4f35525fe..d4402a9dd58 100644 --- a/clang/test/Analysis/copypaste/plist-diagnostics-notes-as-events.cpp +++ b/clang/test/Analysis/copypaste/plist-diagnostics-notes-as-events.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -analyzer-output=plist -analyzer-config notes-as-events=true -o %t.plist -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -analyzer-output=plist -analyzer-config notes-as-events=true -o %t.plist -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // RUN: FileCheck --input-file=%t.plist %s void log(); diff --git a/clang/test/Analysis/copypaste/plist-diagnostics.cpp b/clang/test/Analysis/copypaste/plist-diagnostics.cpp index e2fa7597caf..c138c6f1f92 100644 --- a/clang/test/Analysis/copypaste/plist-diagnostics.cpp +++ b/clang/test/Analysis/copypaste/plist-diagnostics.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -analyzer-output=plist -o %t.plist -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -analyzer-output=plist -o %t.plist -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // RUN: FileCheck --input-file=%t.plist %s void log(); diff --git a/clang/test/Analysis/copypaste/sub-sequences.cpp b/clang/test/Analysis/copypaste/sub-sequences.cpp index 798662d2566..d2c08350ab4 100644 --- a/clang/test/Analysis/copypaste/sub-sequences.cpp +++ b/clang/test/Analysis/copypaste/sub-sequences.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // This tests if sub-sequences can match with normal sequences. diff --git a/clang/test/Analysis/copypaste/suspicious-clones.cpp b/clang/test/Analysis/copypaste/suspicious-clones.cpp index 3a760e25627..ae29b0e16d1 100644 --- a/clang/test/Analysis/copypaste/suspicious-clones.cpp +++ b/clang/test/Analysis/copypaste/suspicious-clones.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:ReportSuspiciousClones=true -analyzer-config alpha.clone.CloneChecker:ReportNormalClones=false -verify %s +// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:ReportSuspiciousClones=true -analyzer-config alpha.clone.CloneChecker:ReportNormalClones=false -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s // Tests finding a suspicious clone that references local variables. diff --git a/clang/test/Analysis/copypaste/text-diagnostics.cpp b/clang/test/Analysis/copypaste/text-diagnostics.cpp index a6e358cc853..a3132e9534c 100644 --- a/clang/test/Analysis/copypaste/text-diagnostics.cpp +++ b/clang/test/Analysis/copypaste/text-diagnostics.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -analyzer-output=text -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -verify %s +// RUN: %clang_analyze_cc1 -analyzer-output=text -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s void log(); |