|
@@ -55,6 +55,8 @@ STATISTIC(NumTimesRetriedWithoutInlining,
|
|
// Engine construction and deletion.
|
|
// Engine construction and deletion.
|
|
//===----------------------------------------------------------------------===//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
+static const char* TagProviderName = "ExprEngine";
|
|
|
|
+
|
|
ExprEngine::ExprEngine(AnalysisManager &mgr, bool gcEnabled,
|
|
ExprEngine::ExprEngine(AnalysisManager &mgr, bool gcEnabled,
|
|
SetOfConstDecls *VisitedCalleesIn,
|
|
SetOfConstDecls *VisitedCalleesIn,
|
|
FunctionSummariesTy *FS,
|
|
FunctionSummariesTy *FS,
|
|
@@ -366,7 +368,7 @@ void ExprEngine::removeDead(ExplodedNode *Pred, ExplodedNodeSet &Out,
|
|
|
|
|
|
// Process any special transfer function for dead symbols.
|
|
// Process any special transfer function for dead symbols.
|
|
// A tag to track convenience transitions, which can be removed at cleanup.
|
|
// A tag to track convenience transitions, which can be removed at cleanup.
|
|
- static SimpleProgramPointTag cleanupTag("ExprEngine : Clean Node");
|
|
|
|
|
|
+ static SimpleProgramPointTag cleanupTag(TagProviderName, "Clean Node");
|
|
if (!SymReaper.hasDeadSymbols()) {
|
|
if (!SymReaper.hasDeadSymbols()) {
|
|
// Generate a CleanedNode that has the environment and store cleaned
|
|
// Generate a CleanedNode that has the environment and store cleaned
|
|
// up. Since no symbols are dead, we can optimize and not clean out
|
|
// up. Since no symbols are dead, we can optimize and not clean out
|
|
@@ -1273,7 +1275,7 @@ void ExprEngine::processCFGBlockEntrance(const BlockEdge &L,
|
|
|
|
|
|
// FIXME: Refactor this into a checker.
|
|
// FIXME: Refactor this into a checker.
|
|
if (nodeBuilder.getContext().blockCount() >= AMgr.options.maxBlockVisitOnPath) {
|
|
if (nodeBuilder.getContext().blockCount() >= AMgr.options.maxBlockVisitOnPath) {
|
|
- static SimpleProgramPointTag tag("ExprEngine : Block count exceeded");
|
|
|
|
|
|
+ static SimpleProgramPointTag tag(TagProviderName, "Block count exceeded");
|
|
const ExplodedNode *Sink =
|
|
const ExplodedNode *Sink =
|
|
nodeBuilder.generateSink(Pred->getState(), Pred, &tag);
|
|
nodeBuilder.generateSink(Pred->getState(), Pred, &tag);
|
|
|
|
|
|
@@ -2067,7 +2069,7 @@ void ExprEngine::evalLoad(ExplodedNodeSet &Dst,
|
|
QualType ValTy = TR->getValueType();
|
|
QualType ValTy = TR->getValueType();
|
|
if (const ReferenceType *RT = ValTy->getAs<ReferenceType>()) {
|
|
if (const ReferenceType *RT = ValTy->getAs<ReferenceType>()) {
|
|
static SimpleProgramPointTag
|
|
static SimpleProgramPointTag
|
|
- loadReferenceTag("ExprEngine : Load Reference");
|
|
|
|
|
|
+ loadReferenceTag(TagProviderName, "Load Reference");
|
|
ExplodedNodeSet Tmp;
|
|
ExplodedNodeSet Tmp;
|
|
evalLoadCommon(Tmp, NodeEx, BoundEx, Pred, state,
|
|
evalLoadCommon(Tmp, NodeEx, BoundEx, Pred, state,
|
|
location, &loadReferenceTag,
|
|
location, &loadReferenceTag,
|
|
@@ -2150,7 +2152,7 @@ void ExprEngine::evalLocation(ExplodedNodeSet &Dst,
|
|
// instead "int *p" is noted as
|
|
// instead "int *p" is noted as
|
|
// "Variable 'p' initialized to a null pointer value"
|
|
// "Variable 'p' initialized to a null pointer value"
|
|
|
|
|
|
- static SimpleProgramPointTag tag("ExprEngine: Location");
|
|
|
|
|
|
+ static SimpleProgramPointTag tag(TagProviderName, "Location");
|
|
Bldr.generateNode(NodeEx, Pred, state, &tag);
|
|
Bldr.generateNode(NodeEx, Pred, state, &tag);
|
|
}
|
|
}
|
|
ExplodedNodeSet Tmp;
|
|
ExplodedNodeSet Tmp;
|
|
@@ -2162,8 +2164,10 @@ void ExprEngine::evalLocation(ExplodedNodeSet &Dst,
|
|
std::pair<const ProgramPointTag *, const ProgramPointTag*>
|
|
std::pair<const ProgramPointTag *, const ProgramPointTag*>
|
|
ExprEngine::geteagerlyAssumeBinOpBifurcationTags() {
|
|
ExprEngine::geteagerlyAssumeBinOpBifurcationTags() {
|
|
static SimpleProgramPointTag
|
|
static SimpleProgramPointTag
|
|
- eagerlyAssumeBinOpBifurcationTrue("ExprEngine : Eagerly Assume True"),
|
|
|
|
- eagerlyAssumeBinOpBifurcationFalse("ExprEngine : Eagerly Assume False");
|
|
|
|
|
|
+ eagerlyAssumeBinOpBifurcationTrue(TagProviderName,
|
|
|
|
+ "Eagerly Assume True"),
|
|
|
|
+ eagerlyAssumeBinOpBifurcationFalse(TagProviderName,
|
|
|
|
+ "Eagerly Assume False");
|
|
return std::make_pair(&eagerlyAssumeBinOpBifurcationTrue,
|
|
return std::make_pair(&eagerlyAssumeBinOpBifurcationTrue,
|
|
&eagerlyAssumeBinOpBifurcationFalse);
|
|
&eagerlyAssumeBinOpBifurcationFalse);
|
|
}
|
|
}
|