20#ifndef LLVM_CLANG_ANALYSIS_ANALYSES_LIFETIMESAFETY_H
21#define LLVM_CLANG_ANALYSIS_ANALYSES_LIFETIMESAFETY_H
31#include "llvm/ADT/PointerUnion.h"
65 const Expr *MovedExpr,
69 const Expr *ReturnExpr,
70 const Expr *MovedExpr) {}
74 const Expr *MovedExpr,
79 const Expr *MovedExpr,
86 const Expr *InvalidationExpr) {}
89 const Expr *InvalidationExpr) {}
92 const Expr *InvalidationExpr) {}
95 const Expr *InvalidationExpr) {}
98 const Expr *InvalidationExpr) {}
101 const Expr *InvalidationExpr) {}
104 llvm::PointerUnion<const Expr *, const FieldDecl *, const VarDecl *>;
113 const Expr *EscapeExpr) {}
120 const VarDecl *EscapeGlobal) {}
147 const Expr *EscapeExpr) {}
156 LifetimeSafetySemaHelper *SemaHelper,
157 LifetimeSafetyStats &Stats,
bool CollectStats);
162 LifetimeSafetyStats &Stats);
185 return *LoanPropagation;
195 std::unique_ptr<FactManager> FactMgr;
196 std::unique_ptr<LiveOriginsAnalysis> LiveOrigins;
197 std::unique_ptr<LoanPropagationAnalysis> LoanPropagation;
198 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 reportUseAfterInvalidation(const ParmVarDecl *PVD, const Expr *UseExpr, const Expr *InvalidationExpr)
llvm::PointerUnion< const Expr *, const FieldDecl *, const VarDecl * > EscapingTarget
virtual void suggestLifetimeboundToParmVar(WarningScope Scope, const ParmVarDecl *ParmToAnnotate, EscapingTarget Target)
virtual void reportDanglingGlobal(const Expr *IssueExpr, const VarDecl *DanglingGlobal, const Expr *MovedExpr, SourceLocation ExpiryLoc)
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 reportNoescapeViolation(const ParmVarDecl *ParmWithNoescape, const VarDecl *EscapeGlobal)
virtual void reportNoescapeViolation(const ParmVarDecl *ParmWithNoescape, const FieldDecl *EscapeField)
virtual void reportDanglingField(const Expr *IssueExpr, const FieldDecl *Field, const Expr *MovedExpr, SourceLocation ExpiryLoc)
virtual void reportLifetimeboundViolation(const ParmVarDecl *ParmWithLifetimebound)
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 reportUseAfterScope(const Expr *IssueExpr, const Expr *UseExpr, const Expr *MovedExpr, SourceLocation FreeLoc)
virtual void suggestLifetimeboundToImplicitThis(WarningScope Scope, const CXXMethodDecl *MD, const Expr *EscapeExpr)
virtual void reportLifetimeboundViolation(const CXXMethodDecl *MDWithLifetimebound)
virtual void reportUseAfterInvalidation(const Expr *IssueExpr, const Expr *UseExpr, const Expr *InvalidationExpr)
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)
WarningScope
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