<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/71976>71976</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] -Wshadow option produces a warning when explicitly capturing class member using the same name
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
flotsamarch
</td>
</tr>
</table>
<pre>
Starting from Clang 17.0.0 (built from source, but this also reproduces on Compiler Explorer) using -Wshadow flag now produces diagnostics for this code:
```
struct A
{
int b = 5;
int foo()
{
return [b = b] ()
{
return b;
} ();
}
};
```
I couldn't find this change in changelogs and there is no test for this type of capture in [warn-shadow-in-lambdas.cpp](https://github.com/llvm/llvm-project/blob/main/clang/test/SemaCXX/warn-shadow-in-lambdas.cpp), so I think this is a bug that was introduced by the [commit](https://github.com/llvm/llvm-project/commit/0fb84bc7fdec1c20c2461e54d5c994939fe5b47f) that fixes #61105.
While technically this might be the case of 'shadowing' (I can't make any references to standard that either support or contradict my opinion), I don't think it has ever been considered a 'shadowing' case which should produce diagnostics and has been a somewhat common C++ pattern.
I don't see much value in that warning, since the name `b` referring to original class member is not available inside lambda body, and and the name `b` referring to the lambda member becomes available only when the other `b` is already not. Should it be considered shadowing?
Expected behavior: No warning generated
Actual behavior: `warning: declaration shadows a field of 'A' [-Wshadow]` diagnostics produced
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVcFu47oO_RplQzSw5diuF1k0zRjo5m26mNlSEm3rjSwZktw0f38h22kaDDDAvUWROJZIHh4ekhiC7i3RkZUnVp53OMfB-WNnXAw4opfDTjh1Pb5H9FHbHjrvRng1aHvI6322z4DxZzFrE9ej4GYvifFXEHOEOOgAaIIDT5N3apYUwFl4deOkDXn48TkZ58kz3sAcUoCnn2FA5S7QGezBugt8GSqNvXUhahmgc371Lp0iVryw7MyyF1Zl2__yM0Q_ywi3w_q0PgAAaBtBACvOULJie_942jnH-DPjzfb6wTz9eYqzt8DK0-pIsPIMqwk83vzD9Ju5-AoPrL7Z398t1udbAuc71sdM1883kG42yjJeR-i0VRtFA9qeQNvtybg-AC6n5Al0AOsgUoh3VuN1InAdSJzi7BdbVp4u6O3TWp4nbZ8MjkJh2MtpYuWZ8echximkYvCW8bbXcZjFXrqR8daYj9vX0-Td_0lGxlthnGC8HVFbxluZZMV4m6Aw3r7TiK-_fjHe_iUub5LWgoO3BNz-XuEn1YGYe4gDRrhgSBVdZaRAXFPiKR_pxlHH_4h9M-Zt1onng5B1p0jmkmeSH6qcyoMqZdMcmqLpqBSHuku6WPB0-pMCMF5UeZ6V--8V_DloQxBJDlZLNOa65jPqfoggaAEuMSy1YbxeOdGJtTpJ5w0krtUf8TcB2it46siTTf0THYSIVqFXKxDSSQEQ5mlyPoLzIJ2NHpWWEcYruElb7exG8hsotzpfmdYRBgxAH-RBENlkHLQiTwrwD3QL6sug5QBhSCq99fVDWydVJqeLP4TgRrokpInsNDcYPzF-ggljJG_3j-K_wQtEMM5ygA8086LdTQbeLmBeIWgrVzItjgSsygSrspUrn6ZQdOC87rVFA9JgCDDSKMivzRIBP1AbFCZ5TznDqklIwzIFSHlsHfaXEOl0M9zcC5JupPDNv7PmCpeB7HLbLQW7OVuGqydU1wRqD-8rsXqRyrdq3AtRtN8p-_E5kYypJWjAD-08K17gf-7GFPRkyWMktV5_kXFG83CZVdmN1uIFFEmDHqN2douZ-rDTZNQm2JdFqOXpNuVT71XZgwQ2WWwxd-pYqKZocEfHvGqa6lBl-WE3HIlnDVWoqrKrBOayrHnd1VWToyioLOVOH3nGizzPs7wpi-KwzyuJDdaiE5JEgR07ZDSiNvvU2Hvn-50OYaZjnTd1tTMoyIRlL3K-TSaeVqQ_LoNAzH1gh8zoEMPdQ9TRLMt0tSjP933mpoWXr22GXzQv1aXPyWipo7luQzedPEhv3Y9JBSEpKslqN3tz_NeTa0kzMN4umf4TAAD__xsdlpo">