gamesh411 added a comment.

In D83717#2279263 <https://reviews.llvm.org/D83717#2279263>, @aaron.ballman 
wrote:

> One of the concerns I have with this not being a flow-sensitive check is that 
> most of the bad situations are not going to be caught by the clang-tidy 
> version of the check. The CERT rules show contrived code examples, but the 
> more frequent issue looks like:
>
>   void cleanup(struct whatever *ptr) {
>     assert(ptr); // This potentially calls abort()
>     free(ptr->buffer);
>     free(ptr);
>   }
>   
>   void some_cleanup_func(void) {
>     for (size_t idx = 0; idx < GlobalElementCount; ++idx) {
>       cleanup(GlobalElement[idx]);
>     }
>   }
>   
>   void some_exit_handler(void) {
>     ...
>     some_cleanup_func();
>     ...
>   }
>
> The fact that we're not looking through the call sites (even without cross-TU 
> support) means the check isn't going to catch the most problematic cases. You 
> could modify the called function collector to gather this a bit better, but 
> you'd issue false positives in flow-sensitive situations like:
>
>   void some_cleanup_func(void) {
>     for (size_t idx = 0; idx < GlobalElementCount; ++idx) {
>       struct whatever *ptr = GlobalElement[idx];
>       if (ptr) {
>         // Now we know abort() won't be called
>         cleanup(ptr);
>       }
>     }
>   }
>
> Have you run this check over any large code bases to see if it currently 
> catches any true positive diagnostics?

I have tried llvm, tmux, curl and tried codesearch.com to look for other 
sources containing `atexit`, but no results were found. So it is hard to see 
whether this flow-sensitive approach would result in many false positives.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D83717

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

Reply via email to