<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62550>62550</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Improve `performance-move-const-arg` message when no move constructor is available
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
firewave
</td>
</tr>
</table>
<pre>
```
#include <string>
#include <utility>
struct S {
S();
S(const S&);
std::string s;
};
extern void cb1(S);
extern void cb2(const std::string&);
void f()
{
S s;
cb1(std::move(s));
std::string str;
cb2(std::move(str));
}
```
```
<source>:17:9: warning: passing result of std::move() as a const reference argument; no move will actually happen [performance-move-const-arg]
cb1(std::move(s));
^~~~~~~~~~ ~
<source>:20:9: warning: passing result of std::move() as a const reference argument; no move will actually happen [performance-move-const-arg]
cb2(std::move(str));
^~~~~~~~~~ ~
```
https://godbolt.org/z/Ga3hM5h6K
Both cases trigger the exactly same warning but for different reasons. It would be great if the first case could point out that no move constructor is available/accessible instead. It already provides more details e.g. if you try to move a trivally-copyable object, so the check already provides different messages.
The original code has a much bigger class and it took me some reducing to actually figure out what the issue is as the issue was not being triggered in all cases (still investigating that).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVc2S4jYQfhpx6YIyMjb44AOzLKmtVE6TF2jLbVtZWaKkNiw57LOnJJiBYahkr5maAltqff39tDGGoHtLVIviRRS7GU48OF932tMJjzRrXHuuRZld_7OdyLZC5toqM7UEIv8S2Gvbi_zrs82JtdF8vu2mz8B-UgyvINYvlxUAgFchN0JWIn9YU84Gjlfl_e61JnAr8q3ItxcaEG4F691DMf1g8haOTregmqWQm9d7xI_b8r3zQ4unPNKh7irg2v5exh2va-t31NEdKd7Hk5_1AXyWyP4eTD4DY_8It95dLx6yfLqYfwlu8opibvl2uRb5thL5Fk7obQp7C4c4ObYHT2EyDK6DRxJCVoABEC42eurIk1UE6PtpJMsifwHrIJbDSRsDqHhCY84w4OFAFkTxciDfOT-iVTSPhfMENkffi2J38-jXPAVRfP359gc_n4qV2f9A7K9l_lEuvAv-GPbAfAgRSe6F3PeubZzhhfO9kPu_hdz_hvnwRzGUv98PzIvjARQGCsBe9z154IGAfqBic4aAI735B83E0DkPre6SKdEdDM6GBXxjOLnJtNAQ9J6QQXcJqNM-cGoAKhUcnLYMbmLgAfndyWRQ_DFxHnQAPKI22BgSco9KUQi6MQTaBiZsUz80nrA9w8G7o24pwOg8QUuM2gSgRb-IHM5uAvZn4GsfjDKPMa65codzbAGu-YsUC_kFgkuk1UDq--cGN90jhYA9hcW9lX8OBM7rXls0oFxLMKRBGic1QHPxVhkMAdC2oBnYue8wEgQ3EnhqJxVdZnebqE73k6fk1im6FcnpECZKHoW7-xMGsI6hoYRxiZJa0BbQmGvCabjiyGp7pMC6R07VA7KQ1WLW1nlb5RXOqF6Wm1xmy02ZzYY6X62KvCg3RdXmxSYrlmvCsluumxVWm47WM13LTOZZka2WMlstq8WqyrKuUOuCiuVKrUuxymhEbRbGHMc4k7NEuy5lUWQzgw2ZkN5cUlo6XTQJKeOLzNfxzLyZ-iBWmdGBww2FNRuqv40xIwJRZv_y5JXZW25wGsj-5-jNJm_qh4dK8zA1C-VGIfeRxPVrfvDuMkP7RD0IuU_S_gkAAP__rVVf5Q">