<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/74154>74154</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Bad error message when trying to assign to member of reference type returned from function with deduced return type
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
davidstone
</td>
</tr>
</table>
<pre>
The following ill-formed translation unit
```cpp
struct s {
int m;
};
auto get(s const & x) {
return &x;
}
void f(s const & x) {
auto const ptr = get(x);
ptr->m = 3;
}
```
causes clang to give an error message of
```console
<source>:11:9: error: cannot assign to variable 'ptr' with const-qualified type 'const const s *'
11 | ptr->m = 3;
| ~~~~~~ ^
<source>:10:13: note: variable 'ptr' declared const here
10 | auto const ptr = get(x);
| ~~~~~~~~~~~^~~~~~~~~~~~
1 error generated.
Compiler returned: 1
```
See it live: https://godbolt.org/z/WMMKo7hYe
This has multiple issues:
1. The type is printed incorrectly: it should print `const s * const`.
2. It claims I'm assigning to the variable `ptr`, when I am assigning to a member of the structure pointed to by `ptr`. This causes...
3. It says `ptr` was declared at a location other than its declaration.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVF2PqzYQ_TXOy2gRNiRsHnjIfkRaVfepV6r6aPAQXBmb2kP2pg_97ZVt0mRX2w8rMsQcZs7MOYwMQZ8sYsu2T2z7spELjc63Sp61CuQsbjqnLu33EWFwxrh3bU-gjXkYnJ9QAXlpg5GknYXFamLlCysP674r86-f53wSyC89QQDWPF2Re20JJlZdD5qX233a5UIOTkhMPAbonQ0ETOzgBxP7D3E80uJtfPbjQ7S7UGenFQz_FSglzM9n8sCqlzV9RN6R28_kH1j1OiVI9UXSawPuOfRyCRigN9KeIFamzwjSAnrvPEwYgjwhuOHrTjobnMH1tHoObvE9suqVVQfOWXXYs-qQQ8WbXlrrCLLIMdlZei07g8BEM5NnooF3TWOu9uH3RRo96CjrZU6Y3IW8B2DiwESTkwMA58CaZ_iHLkBaEXBdf6YFbPv6Nf8yblXkbR1hvH5BV2FvpEe1khrR441Q-SHf_9PxC4ppse3r_b-E5atKJ7ToJaEq8vmzm2Zt0EP2IKpInv-LCX5GBE1g9DnVORLNgVUHJo5MHE9Odc5Q4fyJieMfTBx_-fbtJ9eMv-J9jO-jDjDKANNiSM8GQYewYIpzB-MFxK83KaoDzF5bQgXa9s577MlcIgNNEEa3GJUBsHptVT13ke3KtV5RwBtFC-spwBsTzbR6TGdP04h32u3KqN2uZOIZ3ke08Aby0wsSJpw69OCG9HIeFItHmF3mSw66yy1WLEoHyB9TUay8qsQryEu4IeFdhptrJIEE4_o8sRyN6IFGaUHTFZUeFRvVVmpf7eUGW96UvG6E4Hwztlzudltel-pRCYkdDn1d1Qp3fb9VWKluo1tRioqLkouKl5wX9bZ7LBVveL3vmmFXsbrESWpTGHOeosqbJFzb1Hxbb4zs0IQ0j4Ww-J5VZULE8ezb-M5Dt5wCq0ujA4VbFNJksH2S6tMsST0nf7n2-u9pcOu5xwE92n71ydXGMHg3wbDYPrUrjQqFaulRrZiE3yzetJ88rGlcuqJ3ExPHyHC9PMze_YY9MXFc3SqOqe6_AgAA__8bl__H">