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

Richard Trieu rtrieu at google.com
Mon Apr 30 13:22:21 PDT 2012


On Tue, Apr 17, 2012 at 3:32 PM, Richard Trieu <rtrieu at google.com> wrote:

> On Thu, Apr 5, 2012 at 10:25 AM, Douglas Gregor <dgregor at apple.com> wrote:
>
>>
>> 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?
>>
>
> I remember why now.  Besides cast expressions and paren expressions,
> conditional operators can get between an lvalue-to-rvalue cast and a
> DeclRefExpr.
>
>>
>> Otherwise, this patch seems fine. I'm curious to see how it works out in
>> practice.
>>
>>        - Doug
>>
>
> Couple of updates:
> Got rid EvalDecl and changed how lvalue-to-rvalue casts are handled.
> Moved caret location to first decl in conditional expression.
> If too many things need to be underlined, underline the whole condition
> expression.
> Skip checking if there is a dereference in the conditional.
>

Committed at r155835
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120430/01727c00/attachment.html>


More information about the cfe-commits mailing list