NagyDonat wrote:

> I'd recommend you to look at the `Checkers.inc` file in the build folder 
> somewhere - the file that gets generated from the `Checkers.td`. Notice that 
> every checker has a `registerXXX` and `shouldRegisterXXX` function where XXX 
> is the verbatim spelling of the checker class implementing it. We should just 
> expose XXX just like we currently expose the similar 
> `CheckerManager::getCurrentCheckerName()` (I haven't checked this, its just a 
> strong suspicion). We could call this `getCurrentCheckerClassName` or 
> something along these lines. This should be 5-10 lines of change 
> approximately.
> 
> Just have a look at `Checkers.inc` and you will see what I'm talking about.

For a moment I was very happy to see this solution, but unfortunately XXX is 
**not** the name of the checker class (= backend = full family), but instead it 
is just yet another kind of "internal" name that is assigned to each individual 
checker (= frontend = one checker from the family).

You're right that for the simple single-part checkers this kind of name usually 
coincides with the checker class name, but it is still not a single name for 
the full checker family. For example consider the class `DivZeroChecker` which 
implements `core.DivideZero` and `optin.taint.TaintedDiv` -- this is introduced 
in `Checkers.td` as
```
let ParentPackage = Core in {
//...
def DivZeroChecker : Checker<"DivideZero">,
  HelpText<"Check for division by zero">,  
  Documentation<HasDocumentation>;      
//...
}
let ParentPackage = TaintOptIn in {
//...
 def TaintedDivChecker: Checker<"TaintedDiv">,                     
   HelpText<"Check for divisions where the denominator is tainted "
            "(attacker controlled) and might be 0.">,              
   Dependencies<[TaintPropagationChecker]>,                        
   Documentation<HasDocumentation>;
//...                           
}
```
In this particular case using "debug name = internal name of the _first_ 
checker part" would work (and it is a core checker so we can say that it won't 
be disabled), but if we have a checker family where all the parts are non-core 
checkers, then this solution cannot assign a single stable name to the whole 
family.

> And thanks again for sticking around. I can understand if this thread already 
> got far longer than it should have taken. I admit I failed to give enough 
> attention to this thread, and now I'm pushing back because I believe the 
> desired solution is right on the corner.

Don't worry about this -- your feedback is valuable (and it's completely 
understandable that you also need to work on different things) and I agree with 
you that it is important to implement this framework _well_ even if it takes a 
bit more time.

https://github.com/llvm/llvm-project/pull/139256
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to