How to change the Clang Static Analyzer checking way

Hi, Dear cfe-dev,

For Clang Static Analyzer, we are interested in it very much. I’m planning to implements such checking ways for my projects:

(1) When there are two same defects in the same function, we hope to find and report them all out, for example, if there are two divided by zero errors:

int main() {
int n = 0;
int a = 10;
a = a/n; // Clang Static Analyzer will report div zero bug here, and will stop to check the following codes.
a = 10/n; // I hope to report this div zero bug also, how to do?

(2) I hope to continue to complete the static analysis, even if the source code has compling errors, how to deal with it?



When there is a fatal error found in the code there is no way to meaningfully update the analysis state and continue the analysis. This implies once the analyzer finds a fatal error on a path the analysis will stop there and no additional bugs will be reported from that path. This is by design and the alternatives we have would introduce additional false positives.

If you have compilation errors, you do not have a complete representation of the code in Clang. The static analyzer does not support the analysis of incomplete ASTs. Running the analyzer on incomplete AST would result in spurious warnings and bad user experience.


Thanks for your answer, Gabor. I understand what you are saying. In my situation, it can be acceptable to have some false positives. The most important is, to report as many bugs in one time analysis would be much more efficient for a quick development-testing cycle, such as in a CI environment. So, I want to hacking it to make some change based on the standard Clang Static Analyzer. I’m reading the source code now, but I need some guide on this, where should I start the work.


If you want a quick hack, you may want to take a look at CheckerContext::generateErrorNode, and redirect it to CheckerContext::generateNonFatalErrorNode. Though who knows what mighty demons will that unleash :slight_smile:

Yes, I tried it, it works :slight_smile: and, I didn’t see the unleashed demons until now yet…