forked from OSchip/llvm-project
unique_ptrify the result of CFG::buildCFG/CFGBuilder::buildCFG
llvm-svn: 216755
This commit is contained in:
parent
759548b5a6
commit
e90195c09b
|
@ -1396,10 +1396,7 @@ body by single call to a static class method:
|
|||
.. code-block:: c++
|
||||
|
||||
Stmt *FooBody = ...
|
||||
CFG *FooCFG = CFG::buildCFG(FooBody);
|
||||
|
||||
It is the responsibility of the caller of ``CFG::buildCFG`` to ``delete`` the
|
||||
returned ``CFG*`` when the CFG is no longer needed.
|
||||
std::unique_ptr<CFG> FooCFG = CFG::buildCFG(FooBody);
|
||||
|
||||
Along with providing an interface to iterate over its ``CFGBlocks``, the
|
||||
``CFG`` class also provides methods that are useful for debugging and
|
||||
|
|
|
@ -811,10 +811,9 @@ public:
|
|||
ImplTy I;
|
||||
};
|
||||
|
||||
/// buildCFG - Builds a CFG from an AST. The responsibility to free the
|
||||
/// constructed CFG belongs to the caller.
|
||||
static CFG* buildCFG(const Decl *D, Stmt *AST, ASTContext *C,
|
||||
const BuildOptions &BO);
|
||||
/// buildCFG - Builds a CFG from an AST.
|
||||
static std::unique_ptr<CFG> buildCFG(const Decl *D, Stmt *AST, ASTContext *C,
|
||||
const BuildOptions &BO);
|
||||
|
||||
/// createBlock - Create a new block in the CFG. The CFG owns the block;
|
||||
/// the caller should not directly free it.
|
||||
|
|
|
@ -189,8 +189,7 @@ CFG *AnalysisDeclContext::getCFG() {
|
|||
return getUnoptimizedCFG();
|
||||
|
||||
if (!builtCFG) {
|
||||
cfg.reset(CFG::buildCFG(D, getBody(),
|
||||
&D->getASTContext(), cfgBuildOptions));
|
||||
cfg = CFG::buildCFG(D, getBody(), &D->getASTContext(), cfgBuildOptions);
|
||||
// Even when the cfg is not successfully built, we don't
|
||||
// want to try building it again.
|
||||
builtCFG = true;
|
||||
|
@ -208,8 +207,8 @@ CFG *AnalysisDeclContext::getUnoptimizedCFG() {
|
|||
if (!builtCompleteCFG) {
|
||||
SaveAndRestore<bool> NotPrune(cfgBuildOptions.PruneTriviallyFalseEdges,
|
||||
false);
|
||||
completeCFG.reset(CFG::buildCFG(D, getBody(), &D->getASTContext(),
|
||||
cfgBuildOptions));
|
||||
completeCFG =
|
||||
CFG::buildCFG(D, getBody(), &D->getASTContext(), cfgBuildOptions);
|
||||
// Even when the cfg is not successfully built, we don't
|
||||
// want to try building it again.
|
||||
builtCompleteCFG = true;
|
||||
|
|
|
@ -349,7 +349,7 @@ public:
|
|||
cachedEntry(nullptr), lastLookup(nullptr) {}
|
||||
|
||||
// buildCFG - Used by external clients to construct the CFG.
|
||||
CFG* buildCFG(const Decl *D, Stmt *Statement);
|
||||
std::unique_ptr<CFG> buildCFG(const Decl *D, Stmt *Statement);
|
||||
|
||||
bool alwaysAdd(const Stmt *stmt);
|
||||
|
||||
|
@ -971,7 +971,7 @@ static const VariableArrayType *FindVA(const Type *t) {
|
|||
/// body (compound statement). The ownership of the returned CFG is
|
||||
/// transferred to the caller. If CFG construction fails, this method returns
|
||||
/// NULL.
|
||||
CFG* CFGBuilder::buildCFG(const Decl *D, Stmt *Statement) {
|
||||
std::unique_ptr<CFG> CFGBuilder::buildCFG(const Decl *D, Stmt *Statement) {
|
||||
assert(cfg.get());
|
||||
if (!Statement)
|
||||
return nullptr;
|
||||
|
@ -1043,7 +1043,7 @@ CFG* CFGBuilder::buildCFG(const Decl *D, Stmt *Statement) {
|
|||
// Create an empty entry block that has no predecessors.
|
||||
cfg->setEntry(createBlock());
|
||||
|
||||
return cfg.release();
|
||||
return std::move(cfg);
|
||||
}
|
||||
|
||||
/// createBlock - Used to lazily create blocks that are connected
|
||||
|
@ -3775,10 +3775,9 @@ CFGBlock *CFG::createBlock() {
|
|||
return &back();
|
||||
}
|
||||
|
||||
/// buildCFG - Constructs a CFG from an AST. Ownership of the returned
|
||||
/// CFG is returned to the caller.
|
||||
CFG* CFG::buildCFG(const Decl *D, Stmt *Statement, ASTContext *C,
|
||||
const BuildOptions &BO) {
|
||||
/// buildCFG - Constructs a CFG from an AST.
|
||||
std::unique_ptr<CFG> CFG::buildCFG(const Decl *D, Stmt *Statement,
|
||||
ASTContext *C, const BuildOptions &BO) {
|
||||
CFGBuilder Builder(C, BO);
|
||||
return Builder.buildCFG(D, Statement);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue