[cfe-commits] r156148 - in /cfe/trunk: lib/Sema/SemaStmt.cpp test/SemaCXX/warn-loop-analysis.cpp

Richard Trieu rtrieu at google.com
Fri May 4 11:35:07 PDT 2012


I don't have a strong opinion either way.  This change was mainly to
exclude global variables and statics just came along for the ride.

On Thu, May 3, 2012 at 8:53 PM, Jordy Rose <jediknil at belkadan.com> wrote:

> Should static local variables be excepted from this exception? I can
> contrive a case where it wouldn't be a problem, but in general it's
> probably just as bad.
>
> > void bad() {
> >       static int x = 5;
> >       for (;x;) { printf("hi"); }
> >       x = 0;
> > }
> >
> > void okay() {
> >       static int x = 5;
> >       --x;
> >       for (;x;) { printf("hi"); okay(); }
> > }
> >
> > void badButHardToCatch() {
> >       static int x = 5;
> >       for (;x;) { printf("hi"); badButHardToCatch(); }
> >       --x;
> > }
>
> Jordy
>
>
> On May 3, 2012, at 23:01, Richard Trieu wrote:
>
> > Author: rtrieu
> > Date: Thu May  3 22:01:54 2012
> > New Revision: 156148
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=156148&view=rev
> > Log:
> > Skip checking for infinite for-loops if there are global or static
> variables
> > in the conditional.
> >
> > Modified:
> >    cfe/trunk/lib/Sema/SemaStmt.cpp
> >    cfe/trunk/test/SemaCXX/warn-loop-analysis.cpp
> >
> > Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=156148&r1=156147&r2=156148&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
> > +++ cfe/trunk/lib/Sema/SemaStmt.cpp Thu May  3 22:01:54 2012
> > @@ -1214,11 +1214,12 @@
> >     // No decls found.
> >     if (Decls.size() == 0) return;
> >
> > -    // Don't warn on volatile decls.
> > +    // Don't warn on volatile, static, or global variables.
> >     for (llvm::SmallPtrSet<VarDecl*, 8>::iterator I = Decls.begin(),
> >                                                   E = Decls.end();
> >          I != E; ++I)
> > -      if ((*I)->getType().isVolatileQualified()) return;
> > +      if ((*I)->getType().isVolatileQualified() ||
> > +          (*I)->hasGlobalStorage()) return;
> >
> >     if (DeclMatcher(S, Decls, Second).FoundDeclInUse() ||
> >         DeclMatcher(S, Decls, Third).FoundDeclInUse() ||
> >
> > Modified: cfe/trunk/test/SemaCXX/warn-loop-analysis.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-loop-analysis.cpp?rev=156148&r1=156147&r2=156148&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/test/SemaCXX/warn-loop-analysis.cpp (original)
> > +++ cfe/trunk/test/SemaCXX/warn-loop-analysis.cpp Thu May  3 22:01:54
> 2012
> > @@ -144,3 +144,11 @@
> >   for (int a;
> a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a;);//\
> >    // expected-warning {{variable 'a' used in loop condition not
> modified in loop body}}
> > }
> > +
> > +// Ignore global variables and static variables.
> > +int x6;
> > +void test6() {
> > +  static int y;
> > +  for (;x6;);
> > +  for (;y;);
> > +}
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120504/57802738/attachment.html>


More information about the cfe-commits mailing list