AhmedKamel10 wrote:

> Careful, I think this fix drops some true-positive -Wshadow warnings as well. 
> Consider this:
> 
> ```
> struct Foo {
>   int a;
>   int x = [this] {
>     int a = 0;            // shadows Foo::a
>     return a;
>   }();
> };
> ```
> 
> Currently we give a warning about this: https://godbolt.org/z/9xsedberW When 
> I test this example in the PR, the warning is gone.

Yup, I tested that example and the error was indeed gone, thanks for testing 
that. My original (flawed) implementation assumed  that if casting to a 
`CXXMethodDecl` returned a nullptr, then the function should not fire the warn, 
but looking at your provided example, I found that casting returned nullptr but 
the actual type was `CXXRecordDecl`, therefore, it did not fire the warn.
I pushed a fix that distinguishes the two: it only suppresses when the context 
is a `FunctionDecl` but not a `CXXMethodDecl` (like a free/friend function), 
and falls through the normal check otherwise. Also added your example in the 
regression test alongside the friend-function test and both are passing now.


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

Reply via email to