[PATCH] D146520: [clang-tidy] Fix checks filter with warnings-as-errors

kiwixz via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 21 05:44:43 PDT 2023


kiwixz created this revision.
kiwixz added a reviewer: njames93.
kiwixz added a project: clang-tools-extra.
Herald added subscribers: PiotrZSL, carlosgalvezp, xazax.hun.
Herald added a project: All.
kiwixz requested review of this revision.
Herald added a subscriber: cfe-commits.

Since commit 5d12b13b0b26bc58b02ee23c369da8b83240cceb <https://reviews.llvm.org/rG5d12b13b0b26bc58b02ee23c369da8b83240cceb>, warnings are internally classified as errors which skip the check filters (see ClangTidyDiagnosticConsumer.cpp:324).

One usecase is particularly affected: you cannot selectively disable clang-analyzer-core checks, they are force-enabled because required by others.  So enabling warning as errors will show new (and unwanted) errors !

Good:

  32693 warnings generated.
  Suppressed 32693 warnings (32692 in non-user code, 1 with check filters).
  Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.

Bad (`-warnings-as-errors=*`):

  33057 warnings generated.
  ...
  error: Called C++ object pointer is uninitialized [clang-analyzer-core.CallAndMessage,-warnings-as-errors]
  ...
  Suppressed 33054 warnings (33054 in non-user code).
  Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
  1 warning treated as error

As this is a regression from LLVM 15 to LLVM 16, and a simple patch, I hope we can backport it to 16.x series.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D146520

Files:
  clang-tools-extra/clang-tidy/ClangTidy.cpp
  clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp


Index: clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
===================================================================
--- clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
+++ clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
@@ -421,8 +421,6 @@
 
     bool IsWarningAsError = DiagLevel == DiagnosticsEngine::Warning &&
                             Context.treatAsError(CheckName);
-    if (IsWarningAsError)
-      Level = ClangTidyError::Error;
     Errors.emplace_back(CheckName, Level, Context.getCurrentBuildDirectory(),
                         IsWarningAsError);
   }
Index: clang-tools-extra/clang-tidy/ClangTidy.cpp
===================================================================
--- clang-tools-extra/clang-tidy/ClangTidy.cpp
+++ clang-tools-extra/clang-tidy/ClangTidy.cpp
@@ -615,6 +615,8 @@
   TUD.MainSourceFile = std::string(MainFilePath);
   for (const auto &Error : Errors) {
     tooling::Diagnostic Diag = Error;
+    if (Error.IsWarningAsError)
+      Diag.DiagLevel = tooling::Diagnostic::Error;
     TUD.Diagnostics.insert(TUD.Diagnostics.end(), Diag);
   }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146520.506922.patch
Type: text/x-patch
Size: 1125 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230321/decfba22/attachment.bin>


More information about the cfe-commits mailing list