20#ifndef LLVM_CLANG_ANALYSIS_ANALYSES_LIFETIMESAFETY_H
21#define LLVM_CLANG_ANALYSIS_ANALYSES_LIFETIMESAFETY_H
31#include "llvm/ADT/PointerUnion.h"
73 const Expr *MovedExpr,
78 const Expr *ReturnExpr,
79 const Expr *MovedExpr) {}
83 const Expr *MovedExpr,
84 bool IsCapturedByLambda,
89 const Expr *MovedExpr,
91 bool IsMain =
false) {}
97 const Expr *InvalidationExpr,
101 const Expr *InvalidationExpr,
105 const Expr *InvalidationExpr) {}
108 const Expr *InvalidationExpr) {}
111 const Expr *InvalidationExpr) {}
114 const Expr *InvalidationExpr) {}
117 llvm::PointerUnion<const Expr *, const FieldDecl *, const VarDecl *>;
126 const Expr *EscapeExpr) {}
133 const VarDecl *EscapeGlobal) {}
162 const Expr *EscapeExpr) {}
171 LifetimeSafetySemaHelper *SemaHelper,
172 const LifetimeSafetyOpts &Opts,
173 LifetimeSafetyStats &Stats,
bool CollectStats);
178 LifetimeSafetyStats &Stats);
201 return *LoanPropagation;
211 std::unique_ptr<FactManager> FactMgr;
212 std::unique_ptr<LiveOriginsAnalysis> LiveOrigins;
213 std::unique_ptr<LoanPropagationAnalysis> LoanPropagation;
214 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 reportInapplicableLifetimebound(const ParmVarDecl *PVD)
virtual void reportDanglingGlobal(const Expr *IssueExpr, const VarDecl *DanglingGlobal, const Expr *MovedExpr, SourceLocation ExpiryLoc, bool IsMain=false)
virtual void reportUseAfterInvalidation(const Expr *IssueExpr, const Expr *UseExpr, const Expr *InvalidationExpr, llvm::ArrayRef< const Expr * > ExprChain)
llvm::PointerUnion< const Expr *, const FieldDecl *, const VarDecl * > EscapingTarget
virtual void reportUseAfterInvalidation(const ParmVarDecl *PVD, const Expr *UseExpr, const Expr *InvalidationExpr, llvm::ArrayRef< const Expr * > ExprChain)
virtual void suggestLifetimeboundToParmVar(WarningScope Scope, const ParmVarDecl *ParmToAnnotate, EscapingTarget Target)
virtual void reportInvalidatedField(const ParmVarDecl *PVD, const FieldDecl *Field, const Expr *InvalidationExpr)
virtual void reportMisplacedLifetimebound(WarningScope Scope, const ParmVarDecl *PVDDef, const ParmVarDecl *PVDDecl)
virtual void reportDanglingField(const Expr *IssueExpr, const FieldDecl *Field, const Expr *MovedExpr, bool IsCapturedByLambda, SourceLocation ExpiryLoc)
virtual void reportNoescapeViolation(const ParmVarDecl *ParmWithNoescape, const VarDecl *EscapeGlobal)
virtual void reportNoescapeViolation(const ParmVarDecl *ParmWithNoescape, const FieldDecl *EscapeField)
virtual void reportLifetimeboundViolation(const ParmVarDecl *ParmWithLifetimebound)
virtual void reportUseAfterScope(const Expr *IssueExpr, const Expr *UseExpr, const Expr *MovedExpr, SourceLocation FreeLoc, llvm::ArrayRef< const Expr * > ExprChain)
virtual void addLifetimeBoundToImplicitThis(const CXXMethodDecl *MD)
virtual void reportNoescapeViolation(const ParmVarDecl *ParmWithNoescape, const Expr *EscapeExpr)
virtual void reportMisplacedLifetimebound(WarningScope Scope, const CXXMethodDecl *FDef, const CXXMethodDecl *FDecl)
virtual void suggestLifetimeboundToImplicitThis(WarningScope Scope, const CXXMethodDecl *MD, const Expr *EscapeExpr)
virtual void reportLifetimeboundViolation(const CXXMethodDecl *MDWithLifetimebound)
virtual void reportUseAfterReturn(const Expr *IssueExpr, const Expr *ReturnExpr, const Expr *MovedExpr)
virtual void reportInvalidatedGlobal(const ParmVarDecl *PVD, const VarDecl *Global, const Expr *InvalidationExpr)
virtual ~LifetimeSafetySemaHelper()=default
virtual void reportInvalidatedGlobal(const Expr *IssueExpr, const VarDecl *Global, const Expr *InvalidationExpr)
virtual void reportInvalidatedField(const Expr *IssueExpr, const FieldDecl *Field, const Expr *InvalidationExpr)
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)
void runLifetimeSafetyAnalysis(AnalysisDeclContext &AC, LifetimeSafetySemaHelper *SemaHelper, const LifetimeSafetyOpts &Opts, LifetimeSafetyStats &Stats, bool CollectStats)
The main entry point for the analysis.
WarningScope
Enum to track functions visible across or within TU.
bool SuggestAnnotations
Whether to suggest lifetime annotations.
bool CheckNoescapeViolations
size_t MaxCFGBlocks
Maximum number of CFG blocks to analyze.
bool CheckMisplacedLifetimebound
bool CheckInapplicableLifetimebound
bool CheckLifetimeboundViolations
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