Szelethus added inline comments.

================
Comment at: clang/lib/Frontend/CompilerInvocation.cpp:483-504
+  if (!AnOpts.RawSilencedCheckersAndPackages.empty()) {
+    std::vector<StringRef> Checkers =
+        AnOpts.getRegisteredCheckers(/*IncludeExperimental=*/true);
+    std::vector<StringRef> Packages =
+        AnOpts.getRegisteredPackages(/*IncludeExperimental=*/true);
+
+    SmallVector<StringRef, 16> CheckersAndPackages;
----------------
Szelethus wrote:
> Charusso wrote:
> > NoQ wrote:
> > > Charusso wrote:
> > > > Szelethus wrote:
> > > > > Szelethus wrote:
> > > > > > Charusso wrote:
> > > > > > > Szelethus wrote:
> > > > > > > > Szelethus wrote:
> > > > > > > > > Szelethus wrote:
> > > > > > > > > > The reason why I suggested validating this in 
> > > > > > > > > > CheckerRegistry is that CheckerRegistry is the only class 
> > > > > > > > > > knowing the actual list of checkers and packages, and is 
> > > > > > > > > > able to emit diagnostics before the analysis starts. This 
> > > > > > > > > > solution wouldn't work with plugin checkers/packages.
> > > > > > > > > I don't see this being addressed actually?
> > > > > > > > > 
> > > > > > > > > I think it would be totally fine to just omit the validation 
> > > > > > > > > part as I said earlier, the patch will be leaner, and cases 
> > > > > > > > > in which we're using the silencing of checkers are very 
> > > > > > > > > exotic anyways.
> > > > > > > > Also, we should probably compliment such validation by actually 
> > > > > > > > writing tests for plugins.
> > > > > > > > 
> > > > > > > > I've been through that process once. It isn't fun. 
> > > > > > > > Really-really isn't :^) Let's just collectively agree to 
> > > > > > > > "forget" this :)
> > > > > > > Checker validation is in `CheckerRegistry`, configuration 
> > > > > > > validation is in `parseAnalyzerConfigs()`. I have made a 
> > > > > > > configuration, rather than a checker flag, so that I have not 
> > > > > > > found more appropriate place and its does the job well.  If it 
> > > > > > > will be needed externally, I hope someone could do better.
> > > > > > Well isn't this checker validation?
> > > > > In any case, could just throw in a FIXME before commiting please? :)
> > > > @NoQ, does the `AnalyzerOptions::getRegisteredCheckers()` contain the 
> > > > plugins?
> > > //*/me doesn't know much about plugins*//
> > > 
> > > Normally enable-disable flags do work on plugins, so plugin checkers must 
> > > make it into the registry at some point.
> > So do we need a FIXME or most likely it working with plugins?
> Which doesn't happen here. CheckerRegistry is the only class supplied with 
> this information.
> 
> A primitive way to demonstrate this is the following: 
> `AnalyzerOptions::getRegisteredCheckers()` is a static function without 
> parameters that doesn't use global variables, so it's a hair away from being 
> `constexpr` as well. Plugins are an inherently runtime thing. A more concrete 
> proof is that it only works with the inclusion of `Checkers.inc`, which is 
> generated compile time by TableGen.
> 
> This was the primary reason behind us struggling really hard with checker 
> dependencies and checker options, because we can't solve this problem with 
> the use of TableGen only (relieving us of any runtime overhead). This is also 
> the main reason behind my caution whenever this part of the project is 
> touched -- we're in an okay spot now compared to when these systems got 
> implemented, but we're quite a distance away from perfect.
> 
> You can read more about plugins and checker registration here, that I'll 
> promise myself to finish after GSoC is wrapped up: D58065
I know for a fact that this wouldn't work with plugins, believe me :)


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66042/new/

https://reviews.llvm.org/D66042



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to