aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-03-02 21:43:52 +0000
committerTed Kremenek <kremenek@apple.com>2010-03-02 21:43:52 +0000
commita804a68f5a1ad739eb17ff2fd942d12abbc30b08 (patch)
treefa1da655e613e89523533315e6fcd8a2999665d8
parent7b9a5aa7c0d76f577699d25ce6afe21ecccb60b7 (diff)
Don't conjure a symbol for DeclStmts when the variable is a C++ reference.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97590 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Checker/GRExprEngine.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/Checker/GRExprEngine.cpp b/lib/Checker/GRExprEngine.cpp
index 964f7fac89..ad229c7b8f 100644
--- a/lib/Checker/GRExprEngine.cpp
+++ b/lib/Checker/GRExprEngine.cpp
@@ -2358,8 +2358,9 @@ void GRExprEngine::VisitDeclStmt(DeclStmt *DS, ExplodedNode *Pred,
// Recover some path-sensitivity if a scalar value evaluated to
// UnknownVal.
- if (InitVal.isUnknown() ||
- !getConstraintManager().canReasonAbout(InitVal)) {
+ if ((InitVal.isUnknown() ||
+ !getConstraintManager().canReasonAbout(InitVal)) &&
+ !VD->getType()->isReferenceType()) {
InitVal = ValMgr.getConjuredSymbolVal(NULL, InitEx,
Builder->getCurrentBlockCount());
}
@@ -2901,9 +2902,8 @@ void GRExprEngine::VisitReturnStmt(ReturnStmt *RS, ExplodedNode *Pred,
if (Expr *RetE = RS->getRetValue()) {
// Record the returned expression in the state.
{
- static int Tag;
- SaveAndRestore<const void *> OldTag(Builder->Tag);
- Builder->Tag = &Tag;
+ static int Tag = 0;
+ SaveAndRestore<const void *> OldTag(Builder->Tag, &Tag);
const GRState *state = GetState(Pred);
state = state->set<ReturnExpr>(RetE);
Pred = Builder->generateNode(RetE, state, Pred);