[cfe-commits] [Patch] Add a warning for for loops with conditions that do not change

Douglas Gregor dgregor at apple.com
Thu Apr 5 10:25:23 PDT 2012

On Mar 22, 2012, at 4:20 PM, Richard Trieu <rtrieu at google.com> wrote:

> New patch for the for-loop warning.
> Changes:
> Both visitors are now EvaluatedExprVisitor
> The DeclExtractor, used on the conditional, works on a whitelist of Expr's instead of a blacklist.
> Fixed edge cases in the DeclMatcher with respect to LValueToRValue conversions.  Some casts aren't directly on DeclRefExprs.
> Added variable names to the warning.  Up to 4 variable names will be displayed.
> <loop-analysis3.patch>

+  void VisitCastExpr(CastExpr *E) {
+    if (E->getCastKind() == CK_LValueToRValue)
+      EvalDecl = true;
+    Visit(E->getSubExpr());
+  }

The use of EvalDecl here and here:

+  void VisitDeclRefExpr(DeclRefExpr *E) {
+    if (EvalDecl) return;
+    if (VarDecl *VD = dyn_cast<VarDecl>(E->getDecl()))
+      if (Decls.count(VD)) {
+        FoundDecl = true;
+        return;
+      }
+  }

feels a bit hacky. Why not look at the subexpression of an lvalue-to-rvalue cast, looking through any implicitly-generated nodes, and skip visitation if it is a DeclRefExpr?

Otherwise, this patch seems fine. I'm curious to see how it works out in practice.

	- Doug

More information about the cfe-commits mailing list