clang 23.0.0git
clang::lifetimes::internal::FactsGenerator Class Reference

#include "clang/Analysis/Analyses/LifetimeSafety/FactsGenerator.h"

Inheritance diagram for clang::lifetimes::internal::FactsGenerator:
[legend]

Public Member Functions

 FactsGenerator (FactManager &FactMgr, AnalysisDeclContext &AC)
void run ()
void VisitDeclStmt (const DeclStmt *DS)
void VisitDeclRefExpr (const DeclRefExpr *DRE)
void VisitCXXConstructExpr (const CXXConstructExpr *CCE)
void VisitCXXDefaultInitExpr (const CXXDefaultInitExpr *DIE)
void VisitCXXMemberCallExpr (const CXXMemberCallExpr *MCE)
void VisitMemberExpr (const MemberExpr *ME)
void VisitCallExpr (const CallExpr *CE)
void VisitCXXNullPtrLiteralExpr (const CXXNullPtrLiteralExpr *N)
void VisitCastExpr (const CastExpr *CE)
void VisitUnaryOperator (const UnaryOperator *UO)
void VisitReturnStmt (const ReturnStmt *RS)
void VisitBinaryOperator (const BinaryOperator *BO)
void VisitAbstractConditionalOperator (const AbstractConditionalOperator *CO)
 Visits conditional operators (e.g., cond ?
void VisitCXXOperatorCallExpr (const CXXOperatorCallExpr *OCE)
void VisitCXXFunctionalCastExpr (const CXXFunctionalCastExpr *FCE)
void VisitInitListExpr (const InitListExpr *ILE)
void VisitCXXBindTemporaryExpr (const CXXBindTemporaryExpr *BTE)
void VisitMaterializeTemporaryExpr (const MaterializeTemporaryExpr *MTE)
void VisitLambdaExpr (const LambdaExpr *LE)
void VisitArraySubscriptExpr (const ArraySubscriptExpr *ASE)
void VisitCXXNewExpr (const CXXNewExpr *NE)
void VisitCXXDeleteExpr (const CXXDeleteExpr *DE)
void VisitStmtExpr (const StmtExpr *SE)
Public Member Functions inherited from clang::StmtVisitorBase< Ptr, ImplClass, RetTy, ParamTys >
RetTy Visit (PTR(Stmt) S, ParamTys... P)
 BINOP_FALLBACK (PtrMemD) BINOP_FALLBACK(PtrMemI) BINOP_FALLBACK(Mul) BINOP_FALLBACK(Div) BINOP_FALLBACK(Rem) BINOP_FALLBACK(Add) BINOP_FALLBACK(Sub) BINOP_FALLBACK(Shl) BINOP_FALLBACK(LT) BINOP_FALLBACK(GT) BINOP_FALLBACK(LE) BINOP_FALLBACK(GE) BINOP_FALLBACK(EQ) BINOP_FALLBACK(NE) BINOP_FALLBACK(And) BINOP_FALLBACK(Xor) BINOP_FALLBACK(Or) BINOP_FALLBACK(LAnd) BINOP_FALLBACK(LOr) CAO_FALLBACK(MulAssign) CAO_FALLBACK(DivAssign) CAO_FALLBACK(RemAssign) CAO_FALLBACK(AddAssign) CAO_FALLBACK(SubAssign) CAO_FALLBACK(ShlAssign) CAO_FALLBACK(ShrAssign) CAO_FALLBACK(AndAssign) CAO_FALLBACK(OrAssign) UNARYOP_FALLBACK(PostInc) UNARYOP_FALLBACK(PostDec) UNARYOP_FALLBACK(PreInc) UNARYOP_FALLBACK(PreDec) UNARYOP_FALLBACK(AddrOf) UNARYOP_FALLBACK(Deref) UNARYOP_FALLBACK(Plus) UNARYOP_FALLBACK(Minus) UNARYOP_FALLBACK(Not) UNARYOP_FALLBACK(LNot) UNARYOP_FALLBACK(Real) UNARYOP_FALLBACK(Imag) UNARYOP_FALLBACK(Extension) UNARYOP_FALLBACK(Coawait) LLVM_ATTRIBUTE_ALWAYS_INLINE RetTy VisitStmt(PTR(Stmt) Node

Additional Inherited Members

Public Attributes inherited from clang::StmtVisitorBase< Ptr, ImplClass, RetTy, ParamTys >
ParamTys P

Detailed Description

Definition at line 27 of file FactsGenerator.h.

Constructor & Destructor Documentation

◆ FactsGenerator()

clang::lifetimes::internal::FactsGenerator::FactsGenerator ( FactManager & FactMgr,
AnalysisDeclContext & AC )
inline

Definition at line 31 of file FactsGenerator.h.

References clang::CPlusPlus, and clang::ObjC.

Member Function Documentation

◆ run()

◆ VisitAbstractConditionalOperator()

void clang::lifetimes::internal::FactsGenerator::VisitAbstractConditionalOperator ( const AbstractConditionalOperator * CO)

Visits conditional operators (e.g., cond ?

a : b).

To prevent liveness leakage across loop backedges (which causes false positives like in while (...) { int x; consume(cond ? &x : nullptr); }), we generate the flow facts in the respective predecessor blocks of the arms rather than in the merge block. This ensures that the liveness of the temporary origin from one arm does not propagate into the other arm's path.

Definition at line 596 of file FactsGenerator.cpp.

References clang::lifetimes::internal::findPredBlockForExpr(), clang::AbstractConditionalOperator::getFalseExpr(), and clang::AbstractConditionalOperator::getTrueExpr().

◆ VisitArraySubscriptExpr()

void clang::lifetimes::internal::FactsGenerator::VisitArraySubscriptExpr ( const ArraySubscriptExpr * ASE)

◆ VisitBinaryOperator()

◆ VisitCallExpr()

void clang::lifetimes::internal::FactsGenerator::VisitCallExpr ( const CallExpr * CE)

Definition at line 291 of file FactsGenerator.cpp.

References clang::CallExpr::getDirectCallee().

◆ VisitCastExpr()

◆ VisitCXXBindTemporaryExpr()

void clang::lifetimes::internal::FactsGenerator::VisitCXXBindTemporaryExpr ( const CXXBindTemporaryExpr * BTE)

Definition at line 671 of file FactsGenerator.cpp.

References clang::CXXBindTemporaryExpr::getSubExpr().

◆ VisitCXXConstructExpr()

◆ VisitCXXDefaultInitExpr()

void clang::lifetimes::internal::FactsGenerator::VisitCXXDefaultInitExpr ( const CXXDefaultInitExpr * DIE)

Definition at line 240 of file FactsGenerator.cpp.

References clang::CXXDefaultInitExpr::getExpr(), and clang::Init.

◆ VisitCXXDeleteExpr()

void clang::lifetimes::internal::FactsGenerator::VisitCXXDeleteExpr ( const CXXDeleteExpr * DE)

◆ VisitCXXFunctionalCastExpr()

void clang::lifetimes::internal::FactsGenerator::VisitCXXFunctionalCastExpr ( const CXXFunctionalCastExpr * FCE)

Definition at line 648 of file FactsGenerator.cpp.

References VisitCastExpr().

◆ VisitCXXMemberCallExpr()

◆ VisitCXXNewExpr()

◆ VisitCXXNullPtrLiteralExpr()

void clang::lifetimes::internal::FactsGenerator::VisitCXXNullPtrLiteralExpr ( const CXXNullPtrLiteralExpr * N)

TODO: Handle nullptr expr as a special 'null' loan. Uninitialized pointers can use the same type of loan.

Definition at line 296 of file FactsGenerator.cpp.

◆ VisitCXXOperatorCallExpr()

◆ VisitDeclRefExpr()

◆ VisitDeclStmt()

void clang::lifetimes::internal::FactsGenerator::VisitDeclStmt ( const DeclStmt * DS)

Definition at line 168 of file FactsGenerator.cpp.

References clang::DeclStmt::decls().

◆ VisitInitListExpr()

void clang::lifetimes::internal::FactsGenerator::VisitInitListExpr ( const InitListExpr * ILE)

◆ VisitLambdaExpr()

void clang::lifetimes::internal::FactsGenerator::VisitLambdaExpr ( const LambdaExpr * LE)

◆ VisitMaterializeTemporaryExpr()

◆ VisitMemberExpr()

◆ VisitReturnStmt()

void clang::lifetimes::internal::FactsGenerator::VisitReturnStmt ( const ReturnStmt * RS)

◆ VisitStmtExpr()

void clang::lifetimes::internal::FactsGenerator::VisitStmtExpr ( const StmtExpr * SE)

◆ VisitUnaryOperator()


The documentation for this class was generated from the following files: