ddkilzer wrote:

> I wonder why we don't use the `castExpr` matcher instead of the more specific 
> `cxxStaticCastExpr`. There is no semantic difference of C or C++ style casts, 
> so I wonder, why is one handled but not the other?

To build on what @steakhal said, the new matchers only fire when the relevant 
cast is written as a C++ `static_cast<>` expression (`CXXStaticCastExpr`), but 
not as a C-style cast.

The following equivalents use a C-style cast in a position that the matcher 
checks, but they are not currently flagged by this PR (resulting in false 
negatives):

```
  - (Derived*)(void*)base               — both casts are C-style
  - static_cast<Derived*>((void*)base)  — the inner void* cast is C-style
  - (Derived*)static_cast<void*>(base)  — the outer downcast is C-style
  - (Derived*)returnCast(base)          — outer C-style cast of a 
void*-returning call
  - fnArgCast((void*)base)              — C-style cast in the call-argument form
```

Note that I used AI to help me to review this PR in order to identify these 
test cases, and to verify these test cases are all missed by building llvm 
locally with the current PR applied.


https://github.com/llvm/llvm-project/pull/200294
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to