[PATCH] D81272: [clang-tidy] New check `misc-redundant-condition`

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 11 09:28:05 PDT 2020


aaron.ballman added inline comments.


================
Comment at: clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp:46
+    CheckFactories.registerCheck<RedundantConditionCheck>(
+        "misc-redundant-condition");
     CheckFactories.registerCheck<RedundantExpressionCheck>(
----------------
I think this check should probably live in the `bugprone` module, WDYT?


================
Comment at: clang-tools-extra/clang-tidy/misc/RedundantConditionCheck.cpp:32
+  const auto &SM = Context->getSourceManager();
+  if (const Stmt *MutS = MutAn.findMutation(Var)) {
+    if (SM.isBeforeInTranslationUnit(MutS->getEndLoc(), NextS->getBeginLoc()))
----------------
This code can be simplified into:
```
const Stmt *MutS = MutAn.findMutation(Var);
return MutS && SM.isBeforeInTranslationUnit(MutS->getEndLoc(), NextS->getBeginLoc());
```


================
Comment at: clang-tools-extra/clang-tidy/misc/RedundantConditionCheck.cpp:73
+  // If the variable has an alias then it can be changed by that alias as well.
+  // FIXME: Track pointers and references.
+  if (hasPtrOrReferenceInFunc(Func, CondVar))
----------------
This FIXME makes me worried that what we really want is a clang static analyzer check, since the check is already flow sensitive and needs to be data sensitive as well. Have you considered implementing this as a static analyzer check?


================
Comment at: clang-tools-extra/test/clang-tidy/checkers/misc-redundant-condition.cpp:1097
+  }
+}
----------------
Can you add some tests that exercise GNU expression statements, just to make sure we get the behavior correct?
```
if (({foo;})) {
} else if (({foo;})) {
}

if (foo) ({bar;});
else if (foo) ({bar;});
```
Another thing that's interesting to test is whether the redundant expression is in a subexpression which doesn't contribute to the value of the control expression:
```
if (foo(), val) {
} else if (foo(), other_val) {
}
```
(Similar can be tested with GNU statement expressions.)


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D81272/new/

https://reviews.llvm.org/D81272



More information about the cfe-commits mailing list