forked from OSchip/llvm-project
Reverted patch 47926 for ProgramPoint.h because it is currently buggy. May add back (fixed) later.
Updated CFGStmtVisitor to be in accord with rr47913: CallExprs are no longer (automatically) block-level expressions in the CFG. llvm-svn: 47935
This commit is contained in:
parent
3bd59641ac
commit
7ae17203f8
|
@ -25,13 +25,8 @@ namespace clang {
|
||||||
|
|
||||||
class ProgramPoint {
|
class ProgramPoint {
|
||||||
public:
|
public:
|
||||||
enum Kind { LayeredNodeKind = 0x0,
|
enum Kind { BlockEntranceKind=0, PostStmtKind=1, BlockExitKind=2,
|
||||||
BlockEntranceKind = 0x1,
|
BlockEdgeSrcKind=3, BlockEdgeDstKind=4, BlockEdgeAuxKind=5 };
|
||||||
PostStmtKind = 0x2,
|
|
||||||
BlockExitKind = 0x3,
|
|
||||||
BlockEdgeSrcKind = 0x5, // Skip 0x4.
|
|
||||||
BlockEdgeDstKind = 0x6,
|
|
||||||
BlockEdgeAuxKind = 0x7 };
|
|
||||||
protected:
|
protected:
|
||||||
uintptr_t Data;
|
uintptr_t Data;
|
||||||
|
|
||||||
|
@ -45,16 +40,8 @@ protected:
|
||||||
ProgramPoint() : Data(0) {}
|
ProgramPoint() : Data(0) {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
unsigned getKind() const { return Data & 0x7; }
|
||||||
unsigned getKind() const {
|
void* getRawPtr() const { return reinterpret_cast<void*>(Data & ~0x7); }
|
||||||
unsigned x = Data & 0x7;
|
|
||||||
return x & 0x3 ? x : 0; // Use only lower 2 bits for 0x0.
|
|
||||||
}
|
|
||||||
|
|
||||||
void* getRawPtr() const {
|
|
||||||
return (void*) (getKind() ? Data & ~0x7 : Data & ~0x3);
|
|
||||||
}
|
|
||||||
|
|
||||||
void* getRawData() const { return reinterpret_cast<void*>(Data); }
|
void* getRawData() const { return reinterpret_cast<void*>(Data); }
|
||||||
|
|
||||||
static bool classof(const ProgramPoint*) { return true; }
|
static bool classof(const ProgramPoint*) { return true; }
|
||||||
|
@ -67,27 +54,6 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ExplodedNodeImpl;
|
|
||||||
template <typename StateTy> class ExplodedNode;
|
|
||||||
|
|
||||||
class LayeredNode : public ProgramPoint {
|
|
||||||
public:
|
|
||||||
LayeredNode(ExplodedNodeImpl* N) : ProgramPoint(N, LayeredNodeKind) {
|
|
||||||
assert (reinterpret_cast<uintptr_t>(N) & 0x3 == 0 &&
|
|
||||||
"Address of ExplodedNode must have 4-byte alignment.");
|
|
||||||
}
|
|
||||||
|
|
||||||
ExplodedNodeImpl* getNodeImpl() const {
|
|
||||||
return (ExplodedNodeImpl*) getRawPtr();
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename StateTy>
|
|
||||||
ExplodedNode<StateTy>* getNode() const {
|
|
||||||
return (ExplodedNode<StateTy>*) getRawPtr();
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
class BlockEntrance : public ProgramPoint {
|
class BlockEntrance : public ProgramPoint {
|
||||||
public:
|
public:
|
||||||
BlockEntrance(const CFGBlock* B) : ProgramPoint(B, BlockEntranceKind) {}
|
BlockEntrance(const CFGBlock* B) : ProgramPoint(B, BlockEntranceKind) {}
|
||||||
|
|
|
@ -65,7 +65,7 @@ public:
|
||||||
NullifyStmt cleanup(CurrentBlkStmt);
|
NullifyStmt cleanup(CurrentBlkStmt);
|
||||||
|
|
||||||
switch (S->getStmtClass()) {
|
switch (S->getStmtClass()) {
|
||||||
DISPATCH_CASE(CallExpr)
|
|
||||||
DISPATCH_CASE(StmtExpr)
|
DISPATCH_CASE(StmtExpr)
|
||||||
DISPATCH_CASE(ConditionalOperator)
|
DISPATCH_CASE(ConditionalOperator)
|
||||||
|
|
||||||
|
@ -87,7 +87,6 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFAULT_BLOCKSTMT_VISIT(CallExpr)
|
|
||||||
DEFAULT_BLOCKSTMT_VISIT(StmtExpr)
|
DEFAULT_BLOCKSTMT_VISIT(StmtExpr)
|
||||||
DEFAULT_BLOCKSTMT_VISIT(ConditionalOperator)
|
DEFAULT_BLOCKSTMT_VISIT(ConditionalOperator)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue