diff options
| -rw-r--r-- | clang/lib/Analysis/CFG.cpp | 4 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 2 | ||||
| -rw-r--r-- | clang/test/Analysis/PR9741.cpp | 8 |
3 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp index bfe2247fba1..eaab487d959 100644 --- a/clang/lib/Analysis/CFG.cpp +++ b/clang/lib/Analysis/CFG.cpp @@ -2629,8 +2629,8 @@ CFGBlock* CFGBuilder::VisitCXXForRangeStmt(CXXForRangeStmt* S) { // 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, diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index 407618219fb..e6609c08e21 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -1029,6 +1029,7 @@ static VarDecl *BuildForRangeVarDecl(Sema &SemaRef, SourceLocation Loc, 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 @@ static bool FinishForRangeVarDecl(Sema &SemaRef, VarDecl *Decl, Expr *Init, SemaRef.AddInitializerToDecl(Decl, Init, /*DirectInit=*/false, /*TypeMayContainAuto=*/false); SemaRef.FinalizeDeclaration(Decl); + SemaRef.CurContext->addHiddenDecl(Decl); return false; } diff --git a/clang/test/Analysis/PR9741.cpp b/clang/test/Analysis/PR9741.cpp new file mode 100644 index 00000000000..e20e56c9406 --- /dev/null +++ b/clang/test/Analysis/PR9741.cpp @@ -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) + ; +} |

