class SExprBuilder
Declaration
class SExprBuilder { /* full declaration omitted */ };
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:338
Member Variables
- private til::MemRegionRef Arena
- private til::Variable* SelfVar = nullptr
- private til::SCFG* Scfg = nullptr
- private clang::threadSafety::SExprBuilder::StatementMap SMap
- private clang::threadSafety::SExprBuilder::LVarIndexMap LVarIdxMap
- private std::vector<til::BasicBlock*> BlockMap
- private std::vector<BlockInfo> BBInfo
- private clang::threadSafety::SExprBuilder:: LVarDefinitionMap CurrentLVarMap
- private std::vector<til::Phi*> CurrentArguments
- private std::vector<til::SExpr*> CurrentInstructions
- private std::vector<til::Phi*> IncompleteArgs
- private til::BasicBlock* CurrentBB = nullptr
- private clang::threadSafety::SExprBuilder::BlockInfo* CurrentBlockInfo = nullptr
- private static const bool CapabilityExprMode = true
Method Overview
- public SExprBuilder(til::MemRegionRef A)
- private til::SExpr * addStatement(til::SExpr * E, const clang::Stmt * S, const clang::ValueDecl * VD = nullptr)
- private til::SExpr * addVarDecl(const clang::ValueDecl * VD, til::SExpr * E)
- public til::SCFG * buildCFG(clang::threadSafety::CFGWalker & Walker)
- private void enterCFG(clang::CFG * Cfg, const clang::NamedDecl * D, const clang::CFGBlock * First)
- private void enterCFGBlock(const clang::CFGBlock * B)
- private void enterCFGBlockBody(const clang::CFGBlock * B)
- private void exitCFG(const clang::CFGBlock * Last)
- private void exitCFGBlock(const clang::CFGBlock * B)
- private void exitCFGBlockBody(const clang::CFGBlock * B)
- public const til::SCFG * getCFG() const
- public til::SCFG * getCFG()
- private til::SExpr * getCurrentLVarDefinition(const clang::ValueDecl * VD)
- private void handleDestructorCall(const clang::VarDecl * VD, const clang::CXXDestructorDecl * DD)
- private void handlePredecessor(const clang::CFGBlock * Pred)
- private void handlePredecessorBackEdge(const clang::CFGBlock * Pred)
- private void handleStatement(const clang::Stmt * S)
- private void handleSuccessor(const clang::CFGBlock * Succ)
- private void handleSuccessorBackEdge(const clang::CFGBlock * Succ)
- private void insertStmt(const clang::Stmt * S, til::SExpr * E)
- public til::BasicBlock * lookupBlock(const clang::CFGBlock * B)
- public til::SExpr * lookupStmt(const clang::Stmt * S)
- private til::SExpr * lookupVarDecl(const clang::ValueDecl * VD)
- private void makePhiNodeVar(unsigned int i, unsigned int NPreds, til::SExpr * E)
- private void mergeEntryMap(clang::threadSafety::SExprBuilder::LVarDefinitionMap Map)
- private void mergeEntryMapBackEdge()
- private void mergePhiNodesBackEdge(const clang::CFGBlock * Blk)
- public til::SExpr * translate(const clang::Stmt * S, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * translateAbstractConditionalOperator(const clang::AbstractConditionalOperator * C, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * translateArraySubscriptExpr(const clang::ArraySubscriptExpr * E, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- public clang::threadSafety::CapabilityExpr translateAttrExpr(const clang::Expr * AttrExp, const clang::NamedDecl * D, const clang::Expr * DeclExp, clang::VarDecl * SelfD = nullptr)
- public clang::threadSafety::CapabilityExpr translateAttrExpr(const clang::Expr * AttrExp, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * translateBinAssign(til::TIL_BinaryOpcode Op, const clang::BinaryOperator * BO, clang::threadSafety::SExprBuilder::CallingContext * Ctx, bool Assign = false)
- private til::SExpr * translateBinOp(til::TIL_BinaryOpcode Op, const clang::BinaryOperator * BO, clang::threadSafety::SExprBuilder::CallingContext * Ctx, bool Reverse = false)
- private til::SExpr * translateBinaryOperator(const clang::BinaryOperator * BO, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * translateCXXMemberCallExpr(const clang::CXXMemberCallExpr * ME, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * translateCXXOperatorCallExpr(const clang::CXXOperatorCallExpr * OCE, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * translateCXXThisExpr(const clang::CXXThisExpr * TE, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * translateCallExpr(const clang::CallExpr * CE, clang::threadSafety::SExprBuilder::CallingContext * Ctx, const clang::Expr * SelfE = nullptr)
- private til::SExpr * translateCastExpr(const clang::CastExpr * CE, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * translateDeclRefExpr(const clang::DeclRefExpr * DRE, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * translateDeclStmt(const clang::DeclStmt * S, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * translateMemberExpr(const clang::MemberExpr * ME, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * translateObjCIVarRefExpr(const clang::ObjCIvarRefExpr * IVRE, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * translateUnaryOperator(const clang::UnaryOperator * UO, clang::threadSafety::SExprBuilder::CallingContext * Ctx)
- private til::SExpr * updateVarDecl(const clang::ValueDecl * VD, til::SExpr * E)
- private bool visitPredecessors()
- private bool visitSuccessors()
Methods
¶SExprBuilder(til::MemRegionRef A)
SExprBuilder(til::MemRegionRef A)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:372
Parameters
¶til::SExpr* addStatement(
til::SExpr* E,
const clang::Stmt* S,
const clang::ValueDecl* VD = nullptr)
til::SExpr* addStatement(
til::SExpr* E,
const clang::Stmt* S,
const clang::ValueDecl* VD = nullptr)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:480
Parameters
- til::SExpr* E
- const clang::Stmt* S
- const clang::ValueDecl* VD = nullptr
¶til::SExpr* addVarDecl(const clang::ValueDecl* VD,
til::SExpr* E)
til::SExpr* addVarDecl(const clang::ValueDecl* VD,
til::SExpr* E)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:483
Parameters
- const clang::ValueDecl* VD
- til::SExpr* E
¶til::SCFG* buildCFG(
clang::threadSafety::CFGWalker& Walker)
til::SCFG* buildCFG(
clang::threadSafety::CFGWalker& Walker)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:389
Parameters
- clang::threadSafety::CFGWalker& Walker
¶void enterCFG(clang::CFG* Cfg,
const clang::NamedDecl* D,
const clang::CFGBlock* First)
void enterCFG(clang::CFG* Cfg,
const clang::NamedDecl* D,
const clang::CFGBlock* First)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:459
Parameters
- clang::CFG* Cfg
- const clang::NamedDecl* D
- const clang::CFGBlock* First
¶void enterCFGBlock(const clang::CFGBlock* B)
void enterCFGBlock(const clang::CFGBlock* B)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:460
Parameters
- const clang::CFGBlock* B
¶void enterCFGBlockBody(const clang::CFGBlock* B)
void enterCFGBlockBody(const clang::CFGBlock* B)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:464
Parameters
- const clang::CFGBlock* B
¶void exitCFG(const clang::CFGBlock* Last)
void exitCFG(const clang::CFGBlock* Last)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:472
Parameters
- const clang::CFGBlock* Last
¶void exitCFGBlock(const clang::CFGBlock* B)
void exitCFGBlock(const clang::CFGBlock* B)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:471
Parameters
- const clang::CFGBlock* B
¶void exitCFGBlockBody(const clang::CFGBlock* B)
void exitCFGBlockBody(const clang::CFGBlock* B)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:467
Parameters
- const clang::CFGBlock* B
¶const til::SCFG* getCFG() const
const til::SCFG* getCFG() const
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:397
¶til::SCFG* getCFG()
til::SCFG* getCFG()
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:398
¶til::SExpr* getCurrentLVarDefinition(
const clang::ValueDecl* VD)
til::SExpr* getCurrentLVarDefinition(
const clang::ValueDecl* VD)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:478
Parameters
- const clang::ValueDecl* VD
¶void handleDestructorCall(
const clang::VarDecl* VD,
const clang::CXXDestructorDecl* DD)
void handleDestructorCall(
const clang::VarDecl* VD,
const clang::CXXDestructorDecl* DD)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:466
Parameters
- const clang::VarDecl* VD
- const clang::CXXDestructorDecl* DD
¶void handlePredecessor(
const clang::CFGBlock* Pred)
void handlePredecessor(
const clang::CFGBlock* Pred)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:462
Parameters
- const clang::CFGBlock* Pred
¶void handlePredecessorBackEdge(
const clang::CFGBlock* Pred)
void handlePredecessorBackEdge(
const clang::CFGBlock* Pred)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:463
Parameters
- const clang::CFGBlock* Pred
¶void handleStatement(const clang::Stmt* S)
void handleStatement(const clang::Stmt* S)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:465
Parameters
- const clang::Stmt* S
¶void handleSuccessor(const clang::CFGBlock* Succ)
void handleSuccessor(const clang::CFGBlock* Succ)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:469
Parameters
- const clang::CFGBlock* Succ
¶void handleSuccessorBackEdge(
const clang::CFGBlock* Succ)
void handleSuccessorBackEdge(
const clang::CFGBlock* Succ)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:470
Parameters
- const clang::CFGBlock* Succ
¶void insertStmt(const clang::Stmt* S,
til::SExpr* E)
void insertStmt(const clang::Stmt* S,
til::SExpr* E)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:474
Parameters
- const clang::Stmt* S
- til::SExpr* E
¶til::BasicBlock* lookupBlock(
const clang::CFGBlock* B)
til::BasicBlock* lookupBlock(
const clang::CFGBlock* B)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:393
Parameters
- const clang::CFGBlock* B
¶til::SExpr* lookupStmt(const clang::Stmt* S)
til::SExpr* lookupStmt(const clang::Stmt* S)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:391
Parameters
- const clang::Stmt* S
¶til::SExpr* lookupVarDecl(
const clang::ValueDecl* VD)
til::SExpr* lookupVarDecl(
const clang::ValueDecl* VD)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:482
Parameters
- const clang::ValueDecl* VD
¶void makePhiNodeVar(unsigned int i,
unsigned int NPreds,
til::SExpr* E)
void makePhiNodeVar(unsigned int i,
unsigned int NPreds,
til::SExpr* E)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:486
Parameters
- unsigned int i
- unsigned int NPreds
- til::SExpr* E
¶void mergeEntryMap(
clang::threadSafety::SExprBuilder::
LVarDefinitionMap Map)
void mergeEntryMap(
clang::threadSafety::SExprBuilder::
LVarDefinitionMap Map)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:487
Parameters
- clang::threadSafety::SExprBuilder:: LVarDefinitionMap Map
¶void mergeEntryMapBackEdge()
void mergeEntryMapBackEdge()
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:488
¶void mergePhiNodesBackEdge(
const clang::CFGBlock* Blk)
void mergePhiNodesBackEdge(
const clang::CFGBlock* Blk)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:489
Parameters
- const clang::CFGBlock* Blk
¶til::SExpr* translate(
const clang::Stmt* S,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translate(
const clang::Stmt* S,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:388
Parameters
¶til::SExpr* translateAbstractConditionalOperator(
const clang::AbstractConditionalOperator* C,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translateAbstractConditionalOperator(
const clang::AbstractConditionalOperator* C,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:429
Parameters
¶til::SExpr* translateArraySubscriptExpr(
const clang::ArraySubscriptExpr* E,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translateArraySubscriptExpr(
const clang::ArraySubscriptExpr* E,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:427
Parameters
¶clang::threadSafety::CapabilityExpr
translateAttrExpr(const clang::Expr* AttrExp,
const clang::NamedDecl* D,
const clang::Expr* DeclExp,
clang::VarDecl* SelfD = nullptr)
clang::threadSafety::CapabilityExpr
translateAttrExpr(const clang::Expr* AttrExp,
const clang::NamedDecl* D,
const clang::Expr* DeclExp,
clang::VarDecl* SelfD = nullptr)
Description
Translate a clang expression in an attribute to a til::SExpr. Constructs the context from D, DeclExp, and SelfDecl.
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:380
Parameters
- const clang::Expr* AttrExp
- The expression to translate.
- const clang::NamedDecl* D
- The declaration to which the attribute is attached.
- const clang::Expr* DeclExp
- An expression involving the Decl to which the attribute is attached. E.g. the call to a function.
- clang::VarDecl* SelfD = nullptr
¶clang::threadSafety::CapabilityExpr
translateAttrExpr(
const clang::Expr* AttrExp,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
clang::threadSafety::CapabilityExpr
translateAttrExpr(
const clang::Expr* AttrExp,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Description
Translate a clang expression in an attribute to a til::SExpr.
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:383
Parameters
- const clang::Expr* AttrExp
- clang::threadSafety::SExprBuilder::CallingContext* Ctx
¶til::SExpr* translateBinAssign(
til::TIL_BinaryOpcode Op,
const clang::BinaryOperator* BO,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx,
bool Assign = false)
til::SExpr* translateBinAssign(
til::TIL_BinaryOpcode Op,
const clang::BinaryOperator* BO,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx,
bool Assign = false)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:421
Parameters
- til::TIL_BinaryOpcode Op
- const clang::BinaryOperator* BO
- clang::threadSafety::SExprBuilder::CallingContext* Ctx
- bool Assign = false
¶til::SExpr* translateBinOp(
til::TIL_BinaryOpcode Op,
const clang::BinaryOperator* BO,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx,
bool Reverse = false)
til::SExpr* translateBinOp(
til::TIL_BinaryOpcode Op,
const clang::BinaryOperator* BO,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx,
bool Reverse = false)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:418
Parameters
- til::TIL_BinaryOpcode Op
- const clang::BinaryOperator* BO
- clang::threadSafety::SExprBuilder::CallingContext* Ctx
- bool Reverse = false
¶til::SExpr* translateBinaryOperator(
const clang::BinaryOperator* BO,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translateBinaryOperator(
const clang::BinaryOperator* BO,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:424
Parameters
¶til::SExpr* translateCXXMemberCallExpr(
const clang::CXXMemberCallExpr* ME,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translateCXXMemberCallExpr(
const clang::CXXMemberCallExpr* ME,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:412
Parameters
¶til::SExpr* translateCXXOperatorCallExpr(
const clang::CXXOperatorCallExpr* OCE,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translateCXXOperatorCallExpr(
const clang::CXXOperatorCallExpr* OCE,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:414
Parameters
¶til::SExpr* translateCXXThisExpr(
const clang::CXXThisExpr* TE,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translateCXXThisExpr(
const clang::CXXThisExpr* TE,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:406
Parameters
¶til::SExpr* translateCallExpr(
const clang::CallExpr* CE,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx,
const clang::Expr* SelfE = nullptr)
til::SExpr* translateCallExpr(
const clang::CallExpr* CE,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx,
const clang::Expr* SelfE = nullptr)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:410
Parameters
- const clang::CallExpr* CE
- clang::threadSafety::SExprBuilder::CallingContext* Ctx
- const clang::Expr* SelfE = nullptr
¶til::SExpr* translateCastExpr(
const clang::CastExpr* CE,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translateCastExpr(
const clang::CastExpr* CE,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:426
Parameters
¶til::SExpr* translateDeclRefExpr(
const clang::DeclRefExpr* DRE,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translateDeclRefExpr(
const clang::DeclRefExpr* DRE,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:404
Parameters
¶til::SExpr* translateDeclStmt(
const clang::DeclStmt* S,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translateDeclStmt(
const clang::DeclStmt* S,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:432
Parameters
¶til::SExpr* translateMemberExpr(
const clang::MemberExpr* ME,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translateMemberExpr(
const clang::MemberExpr* ME,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:407
Parameters
¶til::SExpr* translateObjCIVarRefExpr(
const clang::ObjCIvarRefExpr* IVRE,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translateObjCIVarRefExpr(
const clang::ObjCIvarRefExpr* IVRE,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:408
Parameters
¶til::SExpr* translateUnaryOperator(
const clang::UnaryOperator* UO,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
til::SExpr* translateUnaryOperator(
const clang::UnaryOperator* UO,
clang::threadSafety::SExprBuilder::
CallingContext* Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:416
Parameters
¶til::SExpr* updateVarDecl(
const clang::ValueDecl* VD,
til::SExpr* E)
til::SExpr* updateVarDecl(
const clang::ValueDecl* VD,
til::SExpr* E)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:484
Parameters
- const clang::ValueDecl* VD
- til::SExpr* E
¶bool visitPredecessors()
bool visitPredecessors()
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:461
¶bool visitSuccessors()
bool visitSuccessors()
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:468