57 llvm::TimeTraceScope TimeProfile(
"LifetimeSafetyAnalysis");
59 const CFG &Cfg = *AC.getCFG();
60 if (LSOpts.MaxCFGBlocks > 0 && Cfg.
getNumBlockIDs() > LSOpts.MaxCFGBlocks) {
62 "LifetimeSafety", std::string FuncName =
"<unknown>";
63 if (
const Decl *D = AC.getDecl())
if (
const auto *ND =
64 dyn_cast<NamedDecl>(D))
65 FuncName = ND->getQualifiedNameAsString();
66 llvm::dbgs() <<
"LifetimeSafety: Skipping function " << FuncName
68 <<
" blocks (threshold: " << LSOpts.MaxCFGBlocks <<
")\n");
72 FactMgr = std::make_unique<FactManager>(AC, Cfg);
88 LoanPropagation = std::make_unique<LoanPropagationAnalysis>(
89 Cfg, AC, *FactMgr, Factory.OriginMapFactory, Factory.LoanSetFactory);
91 LiveOrigins = std::make_unique<LiveOriginsAnalysis>(
92 Cfg, AC, *FactMgr, Factory.LivenessMapFactory);
94 MovedLoans = std::make_unique<MovedLoansAnalysis>(
95 Cfg, AC, *FactMgr, *LoanPropagation, *LiveOrigins, FactMgr->getLoanMgr(),
96 Factory.MovedLoansMapFactory);
101 DEBUG_WITH_TYPE(
"PrintCFG", Cfg.
dump(AC.getASTContext().getLangOpts(),
104 DEBUG_WITH_TYPE(
"LifetimeFacts",
105 FactMgr->dump(Cfg, AC, LoanPropagation.get()));
109 DEBUG_WITH_TYPE(
"EnableFilterByFunctionName",
111 DEBUG_WITH_TYPE(
"LiveOrigins",
112 LiveOrigins->dump(llvm::dbgs(), FactMgr->getTestPoints()));
This file defines AnalysisDeclContext, a class that manages the analysis context data for context sen...
const LangOptions & getLangOpts() const
AnalysisDeclContext contains the context data for the function, method or block under analysis.
const Decl * getDecl() const
ASTContext & getASTContext() const
void runLifetimeChecker(const LoanPropagationAnalysis &LoanPropagation, const MovedLoansAnalysis &MovedLoans, const LiveOriginsAnalysis &LiveOrigins, FactManager &FactMgr, AnalysisDeclContext &ADC, LifetimeSafetySemaHelper *SemaHelper, const LifetimeSafetyOpts &LSOpts)
Runs the lifetime checker, which detects use-after-free errors by examining loan expiration points an...
void runLifetimeSafetyAnalysis(AnalysisDeclContext &AC, LifetimeSafetySemaHelper *SemaHelper, const LifetimeSafetyOpts &Opts, LifetimeSafetyStats &Stats, bool CollectStats)
The main entry point for the analysis.