20#ifndef LLVM_CLANG_ANALYSIS_ANALYSES_LIFETIMESAFETY_H
21#define LLVM_CLANG_ANALYSIS_ANALYSES_LIFETIMESAFETY_H
64 const Expr *MovedExpr,
68 const Expr *ReturnExpr,
69 const Expr *MovedExpr,
74 const Expr *MovedExpr,
79 const Expr *MovedExpr,
86 const Expr *InvalidationExpr) {}
89 const Expr *InvalidationExpr) {}
94 const Expr *EscapeExpr) {}
98 const Expr *EscapeExpr) {}
105 const VarDecl *EscapeGlobal) {}
110 const Expr *EscapeExpr) {}
119 LifetimeSafetySemaHelper *SemaHelper,
120 LifetimeSafetyStats &Stats,
bool CollectStats);
125 LifetimeSafetyStats &Stats);
148 return *LoanPropagation;
158 std::unique_ptr<FactManager> FactMgr;
159 std::unique_ptr<LiveOriginsAnalysis> LiveOrigins;
160 std::unique_ptr<LoanPropagationAnalysis> LoanPropagation;
161 std::unique_ptr<MovedLoansAnalysis> MovedLoans;
This file defines AnalysisDeclContext, a class that manages the analysis context data for context sen...
AnalysisDeclContext contains the context data for the function, method or block under analysis.
Represents a static or instance method of a struct/union/class.
This represents one expression.
Represents a member of a struct/union/class.
Represents a parameter to a function.
Scope - A scope is a transient data structure that is used while parsing the program.
Encodes a location in the source.
Represents a variable declaration or definition.
Abstract interface for operations requiring Sema access.
virtual void reportUseAfterReturn(const Expr *IssueExpr, const Expr *ReturnExpr, const Expr *MovedExpr, SourceLocation ExpiryLoc)
virtual void reportUseAfterInvalidation(const ParmVarDecl *PVD, const Expr *UseExpr, const Expr *InvalidationExpr)
virtual void reportDanglingGlobal(const Expr *IssueExpr, const VarDecl *DanglingGlobal, const Expr *MovedExpr, SourceLocation ExpiryLoc)
virtual void reportNoescapeViolation(const ParmVarDecl *ParmWithNoescape, const VarDecl *EscapeGlobal)
virtual void suggestLifetimeboundToImplicitThis(SuggestionScope Scope, const CXXMethodDecl *MD, const Expr *EscapeExpr)
virtual void reportNoescapeViolation(const ParmVarDecl *ParmWithNoescape, const FieldDecl *EscapeField)
virtual void suggestLifetimeboundToParmVar(SuggestionScope Scope, const ParmVarDecl *ParmToAnnotate, const Expr *EscapeExpr)
virtual void reportDanglingField(const Expr *IssueExpr, const FieldDecl *Field, const Expr *MovedExpr, SourceLocation ExpiryLoc)
virtual void addLifetimeBoundToImplicitThis(const CXXMethodDecl *MD)
virtual void reportNoescapeViolation(const ParmVarDecl *ParmWithNoescape, const Expr *EscapeExpr)
virtual void reportUseAfterFree(const Expr *IssueExpr, const Expr *UseExpr, const Expr *MovedExpr, SourceLocation FreeLoc)
virtual void reportUseAfterInvalidation(const Expr *IssueExpr, const Expr *UseExpr, const Expr *InvalidationExpr)
virtual ~LifetimeSafetySemaHelper()=default
LifetimeSafetySemaHelper()=default
FactManager & getFactManager()
LifetimeSafetyAnalysis(AnalysisDeclContext &AC, LifetimeSafetySemaHelper *SemaHelper, const LifetimeSafetyOpts &LSOpts)
LoanPropagationAnalysis & getLoanPropagation() const
LiveOriginsAnalysis & getLiveOrigins() const
void collectLifetimeStats(AnalysisDeclContext &AC, OriginManager &OM, LifetimeSafetyStats &Stats)
SuggestionScope
Enum to track functions visible across or within TU.
void runLifetimeSafetyAnalysis(AnalysisDeclContext &AC, LifetimeSafetySemaHelper *SemaHelper, LifetimeSafetyStats &Stats, bool CollectStats)
The main entry point for the analysis.
size_t MaxCFGBlocks
Maximum number of CFG blocks to analyze.
An object to hold the factories for immutable collections, ensuring that all created states share the...
LivenessMap::Factory LivenessMapFactory
MovedLoansMap::Factory MovedLoansMapFactory
OriginLoanMap::Factory OriginMapFactory
LoanSet::Factory LoanSetFactory