NoQ added a comment.

> Yes, indeed very poorly. A C++ operator call is either implemented as 
> CXXOperatorCall or CXXMethodCall randomly. In the former case the this 
> parameter is explicit at the beginning, in the latter case it is implicit.

We have methods on `CallEvent` to handle this, namely 
`getAdjustedParameterIndex()` and `getASTArgumentIndex()`. They were added in 
D49443 <https://reviews.llvm.org/D49443>.

> But this is not the only problem with indices. I have no solution for the 
> following call (is it really a call?) resulting in an assertion because 
> overindexing in `nullability.mm`:
> 
>   Dummy *_Nonnull (^myblock)(void) = ^Dummy *_Nonnull(void) {
> 
> 
> Even if I try to get the `FunctionDecl` it still says that it has `0` 
> parameters, exactly what `CallExpr` says, but we //have// a parameter here 
> with index of `0`. How can it be? How should I handle this strange case? I 
> only have very basic //Objective-C// knowledge.

These are blocks. They are like lambdas, just different syntax. They aren't 
part of Objective-C; they're a non-standard extension to C supported by both 
gcc and clang.

The line you quoted is not a call, it only defines a block and assigns it into 
a variable of block pointer type. Here's the full code of the test:

  358 void testNilReturnWithBlock(Dummy *p) {
  359   p = 0;
  360   Dummy *_Nonnull (^myblock)(void) = ^Dummy *_Nonnull(void) {
  361     return p; // TODO: We should warn in blocks.
  362   };
  363   myblock();
  364 }

The block is invoked on line 363. Parameter `p` of the surrounding function is 
accessible from the block because it was captured; it is not a parameter of the 
block itself.

> As far as I know, you have more than 10 years experience in the Analyzer. I 
> work on the analyzer for less than 5 years, and not full time, because I also 
> create Tidy checkers sometimes, I also have our internal stuff (most of which 
> I would like to upstream).

I started in mid-2014. I too am regularly distracted to stuff that isn't 
particularly educational about the analyzer.


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

https://reviews.llvm.org/D77229



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

Reply via email to