[PATCH] D50488: [Analyzer] Checker for non-determinism caused by sorting of pointer-like elements

Mandeep Singh Grang via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 20 16:53:20 PST 2019


mgrang added a comment.

In D50488#1403653 <https://reviews.llvm.org/D50488#1403653>, @Szelethus wrote:

> In D50488#1403197 <https://reviews.llvm.org/D50488#1403197>, @mgrang wrote:
>
> > > It's because it invokes CodeChecker, which by default enables valist.Uninitialized, but not ValistBase. Do you have assert failures after my hotfix?
> >
> > @Szelethus Thanks. I run into this assert when run through CodeChecker:
> >
> >   Assertion `CheckerTags.count(tag) != 0 && "Requested checker is not registered! Maybe you should add it as a " "dependency in Checkers.td?"'
> >
> >
> > Is there a workaround?
>
>
> Uhh, I'm afraid the only way out is to actually fix the problem :) couple questions:
>
> 1. Are you *sure* that you rebased to rC354235 <https://reviews.llvm.org/rC354235> (which is the hotfix I mentioned), CodeChecker runs *that* clang when the assert failure happens?


I guess, I totally missed your hotfix. After sync'ing to the latest sources I no longer hit the assert. Thanks!

> 2. Can you provide a stacktrace? Luckily, that would for sure point me to the problematic checker.
> 
> In D50488#1403199 <https://reviews.llvm.org/D50488#1403199>, @mgrang wrote:
> 
>> Also I don't see the helptext for PointerSorting when I run:
>>
>>   clang -cc1 -analyzer-checker-help | grep Pointer
>>  
>>     alpha.core.PointerArithm        Check for pointer arithmetic on locations other than array elements
>>     alpha.core.PointerSub           Check for pointer subtractions on two pointers pointing to different memory chunks
>>     alpha.nondeterminism.PointerSorting
>>     cplusplus.InnerPointer          Check for inner pointers of C++ containers used after re/deallocation
>>
> 
> 
> How about `clang -cc1 -analyzer-checker-help | grep Pointer -A3`? There could be a linebreak after the ckecker's name (raises the question though whether it should be there).

Yep, line break it was. I see the help text with -A1.

> In D50488#1403212 <https://reviews.llvm.org/D50488#1403212>, @mgrang wrote:
> 
>> > There is a revision to solve this problem here: D58065 <https://reviews.llvm.org/D58065>. I guess your input, as someone who didn't participate in the checker dependency related patch reviews would be invaluable, in terms of whether my description is understandable enough.
>>
>> Thanks. I took a look at the documentation and it looks fine to me (modulo the comments from other reviewers and a couple of minor typos). I feel the csa-testbench documentation (https://github.com/Xazax-hun/csa-testbench) is very minimal and does not document a lot of intricacies which I had to figure out by trial-and-error.
> 
> 
> Due to an upcoming conference, I didn't bother with it much, i just used CodeChecker on its own, which is fairly well documented.
>  I'm trying to move my checker out of alpha, and my testing goes as follows:
> 
> 1. Clone LLVM+Clang, cppcheck, rtags, bitcoin, xerces (~~you could throw in vim, tmux, as your checker isnt C++ exclusive~~ (see edit), or whatever else)
> 2. Create compile_commands.json either with CMake (-DCANE_GENERATE_COMPILE_COMMANDS, or smt similar), or `CodeChecker log`
> 3. `CodeChecker analyze` projects, paying attention to not forgetting the CodeChecker flag `--verbose debug_analyzer` (and enabling your checker ofc), and piping the output to a file
> 4. Create a `CodeChecker server`, `CodeChecker store` the results, and stare at the web gui for hours. Its very pretty btw ;)
> 
>   Csa-testbench is a work in progress, so I guess you can expect more in the future :)
> 
>   Thanks for your work, even through a few annoyances, very much appreciated!
> 
>   Edit: Since your checker **is** C++ exclusive, please return true only if `LangOpts.CPlusPlus` is true in the `shouldRegister` function. Didn't catch my eye at first.

Done.


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

https://reviews.llvm.org/D50488





More information about the cfe-commits mailing list