Make BlockEntrace program points taggable.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71280 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ted Kremenek 2009-05-08 23:08:34 +00:00
Родитель cbc8c791fd
Коммит ab422d17dc
3 изменённых файлов: 18 добавлений и 10 удалений

Просмотреть файл

@ -539,7 +539,9 @@ public:
return getBlockCounter().getNumVisited(B.getBlockID());
}
ExplodedNodeImpl* generateNodeImpl(const void* State);
ExplodedNodeImpl* generateNodeImpl(const void* State,
const void *tag = 0,
ExplodedNodeImpl *P = 0);
CFGBlock* getBlock() const { return &B; }
};
@ -571,9 +573,13 @@ public:
return getPredecessor()->getState();
}
NodeTy* MakeNode(const StateTy* St) {
return static_cast<NodeTy*>(NB.generateNodeImpl(St));
NodeTy* MakeNode(const StateTy* St, const void *tag = 0) {
return static_cast<NodeTy*>(NB.generateNodeImpl(St, tag));
}
NodeTy *generateNode(const StateTy *St, NodeTy *Pred, const void *tag = 0) {
return static_cast<NodeTy*>(NB.generateNodeImpl(St, tag, Pred));
}
};

Просмотреть файл

@ -131,7 +131,8 @@ public:
class BlockEntrance : public ProgramPoint {
public:
BlockEntrance(const CFGBlock* B) : ProgramPoint(B, BlockEntranceKind) {}
BlockEntrance(const CFGBlock* B, const void *tag = 0)
: ProgramPoint(B, BlockEntranceKind, tag) {}
CFGBlock* getBlock() const {
return reinterpret_cast<CFGBlock*>(getData1NoMask());

Просмотреть файл

@ -555,16 +555,17 @@ GREndPathNodeBuilderImpl::~GREndPathNodeBuilderImpl() {
if (!HasGeneratedNode) generateNodeImpl(Pred->State);
}
ExplodedNodeImpl* GREndPathNodeBuilderImpl::generateNodeImpl(const void* State){
HasGeneratedNode = true;
ExplodedNodeImpl*
GREndPathNodeBuilderImpl::generateNodeImpl(const void* State,
const void *tag,
ExplodedNodeImpl* P) {
HasGeneratedNode = true;
bool IsNew;
ExplodedNodeImpl* Node =
Eng.G->getNodeImpl(BlockEntrance(&B), State, &IsNew);
Eng.G->getNodeImpl(BlockEntrance(&B, tag), State, &IsNew);
Node->addPredecessor(Pred);
Node->addPredecessor(P ? P : Pred);
if (IsNew) {
Node->markAsSink();