On Mar 22, 2012, at 4:20 PM, Richard Trieu <[email protected]> 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
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to