[clang-tools-extra] 42c83e3 - [clang-tidy] Ignore implicit code in bugprone-branch-clone
Piotr Zegar via cfe-commits
cfe-commits at lists.llvm.org
Tue May 23 12:32:51 PDT 2023
Author: Piotr Zegar
Date: 2023-05-23T19:32:36Z
New Revision: 42c83e32706e2284acb880468295701743d437c6
URL: https://github.com/llvm/llvm-project/commit/42c83e32706e2284acb880468295701743d437c6
DIFF: https://github.com/llvm/llvm-project/commit/42c83e32706e2284acb880468295701743d437c6.diff
LOG: [clang-tidy] Ignore implicit code in bugprone-branch-clone
Implicit code like, template instances, compiler generated
code are not excluded in this check by using
TK_IgnoreUnlessSpelledInSource.
Fixes #62693
Reviewed By: donat.nagy
Differential Revision: https://reviews.llvm.org/D151133
Added:
Modified:
clang-tools-extra/clang-tidy/bugprone/BranchCloneCheck.h
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/test/clang-tidy/checkers/bugprone/branch-clone.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-tidy/bugprone/BranchCloneCheck.h b/clang-tools-extra/clang-tidy/bugprone/BranchCloneCheck.h
index 03486cc40d876..599da14c136fd 100644
--- a/clang-tools-extra/clang-tidy/bugprone/BranchCloneCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/BranchCloneCheck.h
@@ -27,6 +27,9 @@ class BranchCloneCheck : public ClangTidyCheck {
: ClangTidyCheck(Name, Context) {}
void registerMatchers(ast_matchers::MatchFinder *Finder) override;
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
+ std::optional<TraversalKind> getCheckTraversalKind() const override {
+ return TK_IgnoreUnlessSpelledInSource;
+ }
};
} // namespace clang::tidy::bugprone
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index a024bd604d16e..7fe2b97de8643 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -202,9 +202,10 @@ New check aliases
Changes in existing checks
^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Fixed false-positive in :doc:`bugprone-branch-clone
- <clang-tidy/checks/bugprone/branch-clone>` check by ignoring duplicated
- switch cases marked with the ``[[fallthrough]]`` attribute.
+- Fixed false-positives in :doc:`bugprone-branch-clone
+ <clang-tidy/checks/bugprone/branch-clone>` check by ignoring auto-generated
+ code, template instances, implicit code patterns and duplicated switch cases
+ marked with the ``[[fallthrough]]`` attribute.
- Improved :doc:`readability-redundant-string-cstr
<clang-tidy/checks/readability/redundant-string-cstr>` check to recognise
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/branch-clone.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/branch-clone.cpp
index 1525ba2802d16..42231746149f2 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/branch-clone.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/branch-clone.cpp
@@ -1024,3 +1024,48 @@ void dontCrash() {
SEMICOLON_CASE_COLON(3);
}
}
+
+namespace PR62693 {
+ class Object {
+ public:
+ template <typename T>
+ bool ConvertableTo() const;
+
+ template <typename T>
+ void Handle();
+ };
+
+ template <typename T>
+ void update(Object &a) {
+ if (a.ConvertableTo<char *>()) {
+ a.Handle<char *>();
+ } else {
+ a.Handle<T>();
+ }
+ }
+
+ template <typename T>
+ void update2(Object &a) {
+ if (a.ConvertableTo<char *>()) {
+ a.Handle<char *>();
+ } else {
+ a.Handle<T>();
+ }
+ }
+
+ void foo(Object &a) {
+ update<int>(a);
+ update2<char *>(a);
+ }
+
+ template <typename T>
+ int branch_clone_in_template(T t) {
+ // CHECK-MESSAGES: :[[@LINE+2]]:5: warning: if with identical then and else branches [bugprone-branch-clone]
+ // CHECK-MESSAGES: :[[@LINE+3]]:7: note: else branch starts here
+ if (t) {
+ return 42;
+ } else {
+ return 42;
+ }
+ }
+}
More information about the cfe-commits
mailing list