[cfg] Always guard (when AddStaticInitBranches == true) DeclStmts for static variables, not just ones with explicit initializers

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178322 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ted Kremenek 2013-03-29 00:42:56 +00:00
Родитель 84e480447a
Коммит 5062bb2270
1 изменённых файлов: 15 добавлений и 15 удалений

Просмотреть файл

@ -1654,24 +1654,24 @@ CFGBlock *CFGBuilder::VisitDeclSubExpr(DeclStmt *DS) {
bool HasTemporaries = false;
// Guard static initializers under a branch.
CFGBlock *blockBeforeInit = 0;
CFGBlock *blockAfterStaticInit = 0;
if (BuildOpts.AddStaticInitBranches && VD->isStaticLocal()) {
// For static variables, we need to create a branch to track
// whether or not they are initialized.
if (Block) {
Succ = Block;
Block = 0;
if (badCFG)
return 0;
}
blockAfterStaticInit = Succ;
}
// Destructors of temporaries in initialization expression should be called
// after initialization finishes.
Expr *Init = VD->getInit();
if (Init) {
if (BuildOpts.AddStaticInitBranches && VD->isStaticLocal()) {
// For static variables, we need to create a branch to track
// whether or not they are initialized.
if (Block) {
Succ = Block;
Block = 0;
if (badCFG)
return 0;
}
blockBeforeInit = Succ;
}
IsReference = VD->getType()->isReferenceType();
HasTemporaries = isa<ExprWithCleanups>(Init);
@ -1716,11 +1716,11 @@ CFGBlock *CFGBuilder::VisitDeclSubExpr(DeclStmt *DS) {
++ScopePos;
CFGBlock *B = LastBlock;
if (blockBeforeInit) {
if (blockAfterStaticInit) {
Succ = B;
Block = createBlock(false);
Block->setTerminator(DS);
addSuccessor(Block, blockBeforeInit);
addSuccessor(Block, blockAfterStaticInit);
addSuccessor(Block, B);
B = Block;
}