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; + } + } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits