[PATCH] D78126: [analyzer][NFC] Don't allow dependency checkers to emit diagnostics

Kristóf Umann via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 14 09:38:52 PDT 2020


Szelethus created this revision.
Szelethus added reviewers: NoQ, xazax.hun, baloghadamsoftware, martong, balazske, dcoughlin.
Szelethus added a project: clang.
Herald added subscribers: cfe-commits, ASDenysPetrov, steakhal, Charusso, gamesh411, dkrupp, donat.nagy, mikhail.ramalho, a.sidorin, rnkovacs, szepet, whisperity.
Szelethus added parent revisions: D78101: [analyzer][StackAddressEscape] Tie warnings to the diagnostic checkers rather then core.StackAddrEscapeBase, D78099: [analyzer][RetainCount] Tie diagnostics to osx.cocoa.RetainCount rather then RetainCountBase, for the most part, D77866: [analyzer][CallAndMessage] Add checker options for each bug category, D77474: [analyzer][MallocChecker] Make NewDeleteLeaks depend on DynamicMemoryModeling rather than NewDelete, D78124: [analyzer][ObjCGenerics] Don't emit diagnostics under the name core.DynamicTypePropagation, D78123: [analyzer][NSOrCFError] Don't emit diagnostics under the name osx.NSOrCFErrorDerefChecker, D78122: [analyzer][Nullability] Don't emit under the checker name NullabilityBase, D78121: [analyzer][DirectIvarAssignment] Turn DirectIvarAssignmentForAnnotatedFunctions into a checker option, D78120: [analyzer][StreamChecker] Don't make StreamTestChecker depend on StreamChecker for the time being.

The thrilling conclusion to the barrage of patches I uploaded lately! This is a big milestone towards the goal set out in http://lists.llvm.org/pipermail/cfe-dev/2019-August/063070.html. I hope to accompany this with a patch where the a `coreModeling` package is added, from which package diagnostics aren't allowed either, is an implicit dependency of all checkers, and the `core` package for the first time can be safely disabled.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D78126

Files:
  clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h


Index: clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
===================================================================
--- clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
+++ clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
@@ -19,6 +19,7 @@
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Lex/Preprocessor.h"
 #include "clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h"
+#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
 #include "clang/StaticAnalyzer/Core/CheckerManager.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
@@ -135,12 +136,22 @@
   SmallVector<FixItHint, 4> Fixits;
 
   BugReport(Kind kind, const BugType &bt, StringRef desc)
-      : K(kind), BT(bt), Description(desc) {}
+      : BugReport(kind, bt, "", desc) {}
 
   BugReport(Kind K, const BugType &BT, StringRef ShortDescription,
             StringRef Description)
       : K(K), BT(BT), ShortDescription(ShortDescription),
-        Description(Description) {}
+        Description(Description) {
+#define GET_CHECKER_DEPENDENCIES
+#define CHECKER_DEPENDENCY(FULLNAME, DEPENDENCY)                               \
+  assert(BT.getCheckerName() != DEPENDENCY &&                                  \
+         "Some checkers depend on this one! We don't allow dependency "        \
+         "checkers to emit warnings, because checkers should depend on "       \
+         "*modeling*, not *diagnostics*.");
+#include "clang/StaticAnalyzer/Checkers/Checkers.inc"
+#undef CHECKER_DEPENDENCY
+#undef GET_CHECKER_DEPENDENCIES
+  }
 
 public:
   virtual ~BugReport() = default;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D78126.257379.patch
Type: text/x-patch
Size: 1719 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200414/f902e6a9/attachment-0001.bin>


More information about the cfe-commits mailing list