From dabfea85fcca49e8bb4a2690621c1fcea30bd4f3 Mon Sep 17 00:00:00 2001 From: Kristof Umann Date: Fri, 23 Aug 2019 14:57:27 +0000 Subject: [PATCH] [clang-tidy] Possibility of displaying duplicate warnings Summary: In case a checker is registered multiple times as an alias, the emitted warnings are uniqued by the report message. However, it is random which checker name is included in the warning. When processing the output of clang-tidy this behavior caused some problems. In this commit the uniquing key contains the checker name too. Reviewers: alexfh, xazax.hun, Szelethus, aaron.ballman, lebedev.ri, JonasToth, gribozavr Reviewed By: alexfh Subscribers: dkrupp, whisperity, rnkovacs, mgrang, cfe-commits Patch by Tibor Brunner! Tags: #clang Differential Revision: https://reviews.llvm.org/D65065 llvm-svn: 369763 --- .../clang-tidy/ClangTidyDiagnosticConsumer.cpp | 5 +++-- .../test/clang-tidy/duplicate-reports.cpp | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 clang-tools-extra/test/clang-tidy/duplicate-reports.cpp diff --git a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp index 1074af977864..ef1c8ef486e3 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp @@ -742,8 +742,9 @@ struct LessClangTidyError { const tooling::DiagnosticMessage &M1 = LHS.Message; const tooling::DiagnosticMessage &M2 = RHS.Message; - return std::tie(M1.FilePath, M1.FileOffset, M1.Message) < - std::tie(M2.FilePath, M2.FileOffset, M2.Message); + return + std::tie(M1.FilePath, M1.FileOffset, LHS.DiagnosticName, M1.Message) < + std::tie(M2.FilePath, M2.FileOffset, RHS.DiagnosticName, M2.Message); } }; struct EqualClangTidyError { diff --git a/clang-tools-extra/test/clang-tidy/duplicate-reports.cpp b/clang-tools-extra/test/clang-tidy/duplicate-reports.cpp new file mode 100644 index 000000000000..c825c2ca243d --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/duplicate-reports.cpp @@ -0,0 +1,15 @@ +// RUN: %check_clang_tidy %s cert-err09-cpp,cert-err61-cpp %t + +void alwaysThrows() { + int ex = 42; + // CHECK-MESSAGES: warning: throw expression should throw anonymous temporary values instead [cert-err09-cpp] + // CHECK-MESSAGES: warning: throw expression should throw anonymous temporary values instead [cert-err61-cpp] + throw ex; +} + +void doTheJob() { + try { + alwaysThrows(); + } catch (int&) { + } +}