whisperity added a comment.

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

> Thanks to the new info, I think the check basically LGTM. Can you add some 
> negative tests and documentation wording to make it clear that the check 
> doesn't currently handle all logically equivalent predicates, like:
>
>   if (foo) {
>   } else {
>     if (!foo) {
>     }
>   }
>   
>   // or
>   if (foo > 5) {
>     if (foo > 3) {
>     }
>   }
>   
>   // or
>   if (foo > 5) {
>     if (5 < foo) {
>     }
>   }
>
> (I'm assuming these cases aren't handled currently and that handling them 
> isn't necessary to land the patch.)

I'm afraid handling such cases will eventually invoke the same problems the 
RangeConstraintSolver has, and then the discussion about whether this is good 
in Tidy instead of CSA will be resurrected... 😦

One could come up with even more elaborate cases. Just hit something like below 
a few minutes ago while working:

  const CallExpr* const C;
  
  if (auto* CalledFun = dyn_cast_or_null<FunctionDecl>(C->getCalleeDecl())) {
    // ...
    if (const auto* Fun = dyn_cast_or_null<FunctionDecl>(C->getCalleeDecl())) {
      // ...
    }
    // ...
  }

and the rabbit hole goes deeper. But it's pretty interesting how many cases the 
current check found as-is.


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

https://reviews.llvm.org/D81272

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

Reply via email to