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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:372

Parameters

til::MemRegionRef A

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)

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)

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)

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:460

Parameters

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:472

Parameters

const clang::CFGBlock* Last

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:467

Parameters

const clang::CFGBlock* B

const til::SCFG* getCFG() const

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:397

til::SCFG* getCFG()

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:398

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)

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:462

Parameters

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:465

Parameters

const clang::Stmt* S

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:470

Parameters

const clang::CFGBlock* Succ

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:393

Parameters

const clang::CFGBlock* B

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)

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)

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:487

Parameters

clang::threadSafety::SExprBuilder:: LVarDefinitionMap Map

void mergeEntryMapBackEdge()

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:488

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:388

Parameters

const clang::Stmt* S
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

const clang::AbstractConditionalOperator* C
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

const clang::ArraySubscriptExpr* E
clang::threadSafety::SExprBuilder::CallingContext* Ctx

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)

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)

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)

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:424

Parameters

const clang::BinaryOperator* BO
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

const clang::CXXMemberCallExpr* ME
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

const clang::CXXOperatorCallExpr* OCE
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

const clang::CXXThisExpr* TE
clang::threadSafety::SExprBuilder::CallingContext* Ctx

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:426

Parameters

const clang::CastExpr* CE
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

const clang::DeclRefExpr* DRE
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

const clang::DeclStmt* S
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

const clang::MemberExpr* ME
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

const clang::ObjCIvarRefExpr* IVRE
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

const clang::UnaryOperator* UO
clang::threadSafety::SExprBuilder::CallingContext* Ctx

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()

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:461

bool visitSuccessors()

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h:468