<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/80617>80617</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-tidy: readability-simplify-boolean-expr does not work for sth like `if ((a = b) == true)`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-tidy
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
e-kwsm
</td>
</tr>
</table>
<pre>
Prepare `/tmp/a.cpp`:
```cpp
void readability_simplify_boolean_expr() {
bool b;
auto pred = []() -> bool { return false; };
if ((b = pred()) != true) {
}
}
template <typename T> void readability_simplify_boolean_expr(T &&pred) {
bool b;
if ((b = pred()) == false) {
}
do {
} while ((b = pred()) == true);
}
```
and `/tmp/compile_commands.json`:
```json
[ { "directory": "/tmp", "command": "clang++ -std=c++11 -c -o a.o a.cpp", "file": "a.cpp", "output": "a.o" } ]
```
clang-tidy fe94ae83ecf356fd2d63b7cd15f37aaafdbc14ef fixes the file as follows:
```
3 warnings generated.
a.cpp:4:23: warning: redundant boolean literal supplied to boolean operator [readability-simplify-boolean-expr]
4 | if ((b = pred()) != true) {
| ~~~~~~~~~~~~~~~^~~~
| !(b = pred())
a.cpp:4:8: note: FIX-IT applied suggested code changes
4 | if ((b = pred()) != true) {
| ^
a.cpp:10:23: warning: redundant boolean literal supplied to boolean operator [readability-simplify-boolean-expr]
10 | if ((b = pred()) == false) {
| ~~~~~~~~~~~~~~~^~~~~
| !static_cast<bool>(b = pred())
a.cpp:10:8: note: FIX-IT applied suggested code changes
10 | if ((b = pred()) == false) {
| ^
a.cpp:13:28: warning: redundant boolean literal supplied to boolean operator [readability-simplify-boolean-expr]
13 | } while ((b = pred()) == true);
| ~~~~~~~~~~~~~~~^~~~
| static_cast<bool>(b = pred())
a.cpp:13:13: note: FIX-IT applied suggested code changes
13 | } while ((b = pred()) == true);
| ^
clang-tidy applied 3 of 3 suggested fixes.
```
which results in:
```cpp
void readability_simplify_boolean_expr() {
bool b;
auto pred = []() -> bool { return false; };
if ((!(b = pred())) {
}
}
template <typename T> void readability_simplify_boolean_expr(T &&pred) {
bool b;
if ((!static_cast<bool>(b = pred())) {
}
do {
} while ((static_cast<bool>(b = pred()));
}
```
Here `(`’s are not removed; it should be:
```diff
@@ -3,3 +3,3 @@
auto pred = []() -> bool { return false; };
- if ((b = pred()) != true) {
+ if (!(b = pred())) {
}
@@ -9,6 +9,6 @@
bool b;
- if ((b = pred()) == false) {
+ if (!(b = static_cast<bool>(pred()))) {
}
do {
- } while ((b = pred()) == true);
+ } while ((b = static_cast<bool>(pred())));
}
```
https://godbolt.org/z/3zaPxxoT4
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMV01zozgQ_TXypQsXSIDtgw9xHNfObQ457C0lUGNrRiBWEuN4DvvbtySw448448lkapZKZJDo1ut-T1LDrZXrBnFOsgXJliPeuY02c4y-bm09KrTYzT8bbLlBIHlM6MrVLaErPi7b1newOxIvSbxv87j_86Oh55uWAgxywQuppNs9WVm3Sla7p0Jrhbx5wufWEDoldAZksuitwA9CQdj-GXjnNLQGBRC2hB7sYBUR9tAbkMkCDLrONFBxZZGwBZDJ8siNrCBYTYvgxzvsvYTpaeI7nenwFE1w0gd4uAmtw7pV3CEQdu92LTa8Rnj0eG6O-xEIzQnNeygns14k4W30bOk7-8CvwAcQ-mwAthup8Md-h6wc0LxkYs_5cWJ4I070Uuq6lQqfSl3XvBF2_MXq5g39hOG-K1sEXgmlQhosnTY7Qilhd75rPwEl9N4_D_5fXigVb9aELghdQGSdIGxZ9o9JAlEJkQY-9v9esQc3lVT44uNsUHeu7dzxsCaUhlx6UV5PSsASOSl2UOEs5ThlWFYsyytBRc6KSSmSrGITznklijJJsYJKPqMFt0HwmIBbqLRSemuvZa5_ZLDlppHN2sIaGzTcoRgP1IRo2F1K2B1lPobhVX9rUHSN4I2DQaagpEPDFdiubZVEAU4fxnTrPWvj1-OR1qO91qPhxShoPTuIECAFMrmHd69Hf_UOwvXv6UWyB9--_q53-up0l9mZ-ow02qH_XX36O_r0CHzIgu3Wa7QOBZRaIJQb3qzRngf4MeGR7OEUXBL_Qe6S-Cburu9Gt5B3wR6hiXXcyfKp5NYRdu_hEfZwC5chXb9A5odFfEmk55BO_xCRbAjrF06BCzZvX4_vp5Ptm_fy-RGBn8d84PZol9_jYaArYEewwq4-fuOo2G5kuQGDtlPOgmx-V531-wut6_vtCZD_W4X1k_vNtXrr7XLr52a4sfT6C_e1-jS0ubH_dJqwhQVfxTfagcFaf0PhWZMO7EZ3SkCB10QmZFUNXWlM0hgiRug9A0IXw03oPqyvD5FQ9M7iwBd6B8ubpHdc3g_xzQi9z318w81pfGeq-SHSawfDFajXVHGhh2tRwGmZH_1ane9Bvm7_E0CP9823xLtxrg2lLV0RulprUWjlxtqsCV19J3TFvvPPz8_6MR2JORMzNuMjnCeTeBJP45hNRps5p7NKJJgXGS3z6SyZzaZZWhZ5Mit4UiGO5JzGNI1pnNI4Y9lknPAc86ysphlLOOOUpDHWXKqxUt9qP_dIWtvhfBrnyWSkeIHKhs_l4esi7PX-cyBbjszcG0VFt7YkjZW0zr64cdIpnB_ZhLP-Byc2CI02rNqtNl-h0gas24CSX8MqPyiPB0qKV5jM41Fn1PwstdJtumJc6prQlUc4_ESt0V-wdISuQtSW0FUI_L8AAAD__6aRbz0">