[cfe-commits] r129700 - in /cfe/trunk: lib/Analysis/CFG.cpp lib/Sema/SemaStmt.cpp test/Analysis/PR9741.cpp

Richard Smith richard-llvm at metafoo.co.uk
Mon Apr 18 08:49:25 PDT 2011


Author: rsmith
Date: Mon Apr 18 10:49:25 2011
New Revision: 129700

URL: http://llvm.org/viewvc/llvm-project?rev=129700&view=rev
Log:
Fix PR9741. The implicit declarations created for range-based for loops weren't being added to the DeclContext (nor were they being marked as implicit). Also, the declarations were being emitted in the wrong order when building the CFG.

Added:
    cfe/trunk/test/Analysis/PR9741.cpp
Modified:
    cfe/trunk/lib/Analysis/CFG.cpp
    cfe/trunk/lib/Sema/SemaStmt.cpp

Modified: cfe/trunk/lib/Analysis/CFG.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CFG.cpp?rev=129700&r1=129699&r2=129700&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/CFG.cpp (original)
+++ cfe/trunk/lib/Analysis/CFG.cpp Mon Apr 18 10:49:25 2011
@@ -2629,8 +2629,8 @@
 
   // Add the initialization statements.
   Block = createBlock();
-  addStmt(S->getRangeStmt());
-  return addStmt(S->getBeginEndStmt());
+  addStmt(S->getBeginEndStmt());
+  return addStmt(S->getRangeStmt());
 }
 
 CFGBlock *CFGBuilder::VisitExprWithCleanups(ExprWithCleanups *E,

Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=129700&r1=129699&r2=129700&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
+++ cfe/trunk/lib/Sema/SemaStmt.cpp Mon Apr 18 10:49:25 2011
@@ -1029,6 +1029,7 @@
   TypeSourceInfo *TInfo = SemaRef.Context.getTrivialTypeSourceInfo(Type, Loc);
   VarDecl *Decl = VarDecl::Create(SemaRef.Context, DC, Loc, Loc, II, Type,
                                   TInfo, SC_Auto, SC_None);
+  Decl->setImplicit();
   return Decl;
 }
 
@@ -1052,6 +1053,7 @@
   SemaRef.AddInitializerToDecl(Decl, Init, /*DirectInit=*/false,
                                /*TypeMayContainAuto=*/false);
   SemaRef.FinalizeDeclaration(Decl);
+  SemaRef.CurContext->addHiddenDecl(Decl);
   return false;
 }
 

Added: cfe/trunk/test/Analysis/PR9741.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/PR9741.cpp?rev=129700&view=auto
==============================================================================
--- cfe/trunk/test/Analysis/PR9741.cpp (added)
+++ cfe/trunk/test/Analysis/PR9741.cpp Mon Apr 18 10:49:25 2011
@@ -0,0 +1,8 @@
+// RUN: %clang_cc1 -cc1 -std=c++0x -Wuninitialized -verify %s
+
+void f() {
+  int a[] = { 1, 2, 3 };
+  unsigned int u = 0;
+  for (auto x : a)
+    ;
+}





More information about the cfe-commits mailing list