<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/150189>150189</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang-tidy] Incorrect fix-it may cause runtime issue from performance-unnecessary-copy-initialization
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-tidy
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ChuanqiXu9
</td>
</tr>
</table>
<pre>
Reproducer: https://godbolt.org/z/11W68o11T
```C++
#include <vector>
struct S {
S();
~S();
S(const S &);
S &operator =(const S&);
int a, b, c, d;
};
bool cond();
void consume(const S&);
void func(std::vector<S> &Vecs) {
auto TargetIt(Vecs.end());
for (auto It = Vecs.begin(); It != Vecs.end(); It++)
if (cond())
TargetIt = It;
if (TargetIt != Vecs.end()) {
const S Value(*TargetIt);
if (cond()) {
Vecs.erase(TargetIt);
consume(Value);
}
}
}
```
The clang-tidy's auto-fix will add `&` to `const S Value(*TargetIt);`. This is problematic. Since if we erase the underlying iterator later, the new added reference will be a dangling pointer. This caused a failure in our CI.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEVE2P4ygQ_TX4UkqEcWLHBx8y6YmU63Zrdq8Yyg4rDFk-uidz2N--AqcTd--21kIkwCvee1WouPdqNIgd2X4j26eCx3C2rjucIzd_qT9iW_RWXrvf8OKsjAIdqfZwDuHiSbUn7EjYcbSytzqsrRsJO_4i7FiWv9c7W5YvhO7TqOk8DoR9S4PuCauUETpKBFIdXlEE60j1fcb74KII8AykSVh4JmxHWEuqvAKAv_-1kzaENT5HsfrjWdqxF3Q8WAekenpgl9AbWpkAnLAD9GkSaZI3QPN0R_bWahDWyKUQQvevVsm07-OEX9Jk0BCNIGzng0yJrPbvOTg8k-p7UvwDhSesfU8CAPAYLLxwN2I4BcJ2CbHGu4al5yE5ZbsccQrJNGR0j6Myd835iJX3U1z4gUSRq8Xa26U5PQPMvhasdH9XlZlO4WNGc8gD8Z-EH4ym772aP7iOmEH7h_WF0y9EfbotfTOj4x4Xch53Pap2o_xEkso_r-Z_t_n9bc9-X84IQnMzroKSV8Ian6u2GtRPeFNaA5cSEprVpKYQbFr8v9WaruHlrDwoDxdne40TD0qs4VkZgcn_G0K2BuGMEI1Ep6_KjKDC7d1rHtCl15wABt-SEpTgcECH6ZIsr0fgILkZdQq-WGUCuhu34NGjBA4DVzo6BGXARgeH07qQXSXbquUFdmWzrVhdbuq2OHes2dC63tKtoGXLemzoTjJW1W3VioH2VaE6RtmWNqyiLd2wdi1kQ3m7E5I1KDZVTzYUJ670WuvXKfWYQnkfsSu3tNy1heY9ap-7F2PLzLPUzVyXolZ9HD3ZUK188I97ggo6971F2PYJTkZY51AEGNTPlQow8evsHVw0QU0IWQEMzk5wQTdYN3EjcBWNQYHec3ddCXu5rpRRQXGtfvGgrCmi092n1qnCOfZrYSfCjknY7Wd1cfZPFIGwY-byqanOhl879k8AAAD__y_wqVU">