20#ifndef LLVM_CLANG_ANALYSIS_ANALYSES_LIFETIMESAFETY_H
21#define LLVM_CLANG_ANALYSIS_ANALYSES_LIFETIMESAFETY_H
31#include "llvm/ADT/PointerUnion.h"
74 const Expr *MovedExpr,
81 const Expr *MovedExpr,
88 const Expr *ReturnExpr,
89 const Expr *MovedExpr,
94 const Expr *MovedExpr,
95 bool IsCapturedByLambda,
100 const Expr *MovedExpr,
102 bool IsMain =
false) {}
108 const Expr *InvalidationExpr,
112 const Expr *InvalidationExpr,
116 const Expr *InvalidationExpr,
120 const Expr *InvalidationExpr,
124 const Expr *InvalidationExpr) {}
127 const Expr *InvalidationExpr) {}
130 const Expr *InvalidationExpr) {}
133 const Expr *InvalidationExpr) {}
136 llvm::PointerUnion<const Expr *, const FieldDecl *, const VarDecl *>;
145 const Expr *EscapeExpr) {}
152 const VarDecl *EscapeGlobal) {}
181 const Expr *EscapeExpr) {}
186 const Expr *EscapeExpr) {}
195 LifetimeSafetySemaHelper *SemaHelper,
196 const LifetimeSafetyOpts &Opts,
197 LifetimeSafetyStats &Stats,
bool CollectStats);
202 LifetimeSafetyStats &Stats);
225 return *LoanPropagation;
235 std::unique_ptr<FactManager> FactMgr;
236 std::unique_ptr<LiveOriginsAnalysis> LiveOrigins;
237 std::unique_ptr<LoanPropagationAnalysis> LoanPropagation;
238 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 reportUseAfterInvalidation(const Expr *IssueExpr, SourceLocation UseLoc, const Expr *InvalidationExpr, llvm::ArrayRef< const Expr * > ExprChain)
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 reportUseAfterInvalidation(const ParmVarDecl *PVD, SourceLocation UseLoc, const Expr *InvalidationExpr, llvm::ArrayRef< const Expr * > ExprChain)
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 reportFieldOriginEscape(const CXXMethodDecl *MD, const FieldDecl *FD, const Expr *EscapeExpr)
virtual void reportUseAfterScope(const Expr *IssueExpr, SourceLocation UseLoc, const Expr *MovedExpr, SourceLocation FreeLoc, llvm::ArrayRef< const Expr * > ExprChain)
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 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
virtual void reportUseAfterReturn(const Expr *IssueExpr, const Expr *ReturnExpr, const Expr *MovedExpr, llvm::ArrayRef< const Expr * > ExprChain)
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 CheckFieldOriginEscape
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