<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62206>62206</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang-tidy] bugprone-use-after-move false positive
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Hedede
</td>
</tr>
</table>
<pre>
clang-tidy 15.0.7 produces a warning in the following code on the commented line.
I believe it is a false positive because it is being reassigned.
```cpp
#include <memory>
#include <variant>
struct expression;
struct identifier_expression {};
struct binary_expression {
binary_operator op;
std::shared_ptr<expression> lhs;
std::shared_ptr<expression> rhs;
};
using expression_variant = std::variant<identifier_expression, binary_expression>;
struct expression : expression_variant {
using expression_variant::expression_variant;
using expression_variant::operator=;
};
template<typename Value, typename T = std::remove_reference_t<Value>>
auto wrap(Value&& init) -> std::unique_ptr<T>
{
return std::make_unique<T>(std::forward<Value>(init));
}
expression parse_expr();
binary_expression simplify_binary_expr(binary_operator op)
{
expression lhs = parse_expr();
expression rhs = parse_expr();
if (op == binary_operator::assign_add) {
rhs = binary_expression{ // 'rhs' used after it was moved [bugprone-use-after-move]
.op = binary_operator::add,
.lhs = wrap(lhs),
.rhs = wrap(std::move(rhs)),
};
op = binary_operator::assign;
}
return {
.op = op,
.lhs = wrap(std::move(lhs)),
.rhs = wrap(std::move(rhs)),
};
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVk2v6jYQ_TXDZgRKHPK1yOJeeKjdP3WLnHgAt46d2g6Uf185BAgf9-q1UpRInjnjM2dm7HDn5F4TVZB-Qrqe8d4fjK1-I0GCZrUR56pRXO_nXoozxukiWuTYWSP6hhxyPHGrpd6j1OgPhDujlDmFhcYIQnNZbUzbkvYkUElNC4jWEH38jjUpSUdC6VGGWDuuHGFnnPTySFhTw3t3NdcUoloaCYsxCl4-kEWXp-m6cYUlUjeqF4SQrFpqjT1D8uOd8cit5NrfrcPbeds3HumfzpJz0mhIPt_YpSDt5U6S3d5dEfJPyNfvEbXU3J6fvUe_crSajiz3xqLpJlFK5wUkH5B8uAO3JLadt5Csphx_oDq4_wqxU8gL794F6e-I7SgYQrLGW_ibiqu3kgBbvWYeJL_u9aI3QvLxdteJWl9Ru1B6t_6r2GsBIFl_I42ntlPcEyQrf-5I85bwD656CuneVn4-KmWpNUfaWtqRJd3QNoh2QQU9xi7kvTd4srwDVowhM2AZSi09sBLnoXC3mL2Wf_c0FvfnvZUnWlnyvdV3SMv_ou0Fd8Ww4mbdGXviVkyZsWLcOzxTTSaCTMrXcetoKDaw4gEyvF_HwMm2U3J33k5MwIo3E8HK1_QmgdTBDYp_w2Dqbn_BXe4QWGE6HPphjU-kLppdzqYtFyIUaEouyD_u8joE-ScC2wDbILA8jCLLsXckkO882XD-nbjD0DMCIf2s-31njaZ572g-uMyDDdL1dDuIysWF7hdcA8nVM-Kq3Nh34SgJ5X7xs49-954KRFhhR9wL9GGAwsq3FAc5HwCPzXZv6ietr5mHVnkg8JzgM3H1BfH_l3C-fjMm15tqJqpElEnJZ1TFWREXcVamyexQsWgZxVmaiTQr4iZqyjSuWRI1y5yafFnnM1mxiCXRMi7imLEkWTDGeMmjhpjIeVZzWEbUcqkWSh3bhbH7mXSupypjLMpmitek3HDhM6bphIMRGAv3v60CZl73ewfLSEnn3T2Kl14Nfwr3XwJI1_hFQz7d57PequrgfeeCckO_76U_9PWiMS2wTdhl_Mw7a_6kxgPbDNwcsM3A_d8AAAD__8fBp3E">