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:
Ted Kremenek 2008-03-05 05:05:04 +00:00
parent 3bd59641ac
commit 7ae17203f8
2 changed files with 5 additions and 40 deletions

View File

@ -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) {}

View File

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