diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-03-02 21:43:52 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-03-02 21:43:52 +0000 |
commit | a804a68f5a1ad739eb17ff2fd942d12abbc30b08 (patch) | |
tree | fa1da655e613e89523533315e6fcd8a2999665d8 /lib/Checker/GRExprEngine.cpp | |
parent | 7b9a5aa7c0d76f577699d25ce6afe21ecccb60b7 (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
Diffstat (limited to 'lib/Checker/GRExprEngine.cpp')
-rw-r--r-- | lib/Checker/GRExprEngine.cpp | 10 |
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); |