зеркало из https://github.com/microsoft/clang-1.git
[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:
Родитель
84e480447a
Коммит
5062bb2270
|
@ -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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче