diff options
author | Marcin Swiderski <marcin.sfider@gmail.com> | 2010-11-17 21:27:36 +0000 |
---|---|---|
committer | Marcin Swiderski <marcin.sfider@gmail.com> | 2010-11-17 21:27:36 +0000 |
commit | 82c63bfa0c5130e0cf274c1974b6157ebefc04fe (patch) | |
tree | f07e70e627cf84c0df0f29608ca76d818ea1bc8b /lib/Checker/GRCXXExprEngine.cpp | |
parent | 7f6458b7e265d1870f3bd5be2b49bc4d368446b3 (diff) |
In EvalArguments allow for evaluation of first argument always as a lvalue. Will be used for CXXOperatorCallExpr that represents method call.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@119567 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Checker/GRCXXExprEngine.cpp')
-rw-r--r-- | lib/Checker/GRCXXExprEngine.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/Checker/GRCXXExprEngine.cpp b/lib/Checker/GRCXXExprEngine.cpp index 50f2cb51c0..4c996bb22e 100644 --- a/lib/Checker/GRCXXExprEngine.cpp +++ b/lib/Checker/GRCXXExprEngine.cpp @@ -30,7 +30,8 @@ public: void GRExprEngine::EvalArguments(ConstExprIterator AI, ConstExprIterator AE, const FunctionProtoType *FnType, - ExplodedNode *Pred, ExplodedNodeSet &Dst) { + ExplodedNode *Pred, ExplodedNodeSet &Dst, + bool FstArgAsLValue) { llvm::SmallVector<CallExprWLItem, 20> WorkList; @@ -48,10 +49,15 @@ void GRExprEngine::EvalArguments(ConstExprIterator AI, ConstExprIterator AE, // Evaluate the argument. ExplodedNodeSet Tmp; - const unsigned ParamIdx = Item.I - AI; - const bool VisitAsLvalue = FnType && ParamIdx < FnType->getNumArgs() - ? FnType->getArgType(ParamIdx)->isReferenceType() - : false; + bool VisitAsLvalue = FstArgAsLValue; + if (FstArgAsLValue) { + FstArgAsLValue = false; + } else { + const unsigned ParamIdx = Item.I - AI; + VisitAsLvalue = FnType && ParamIdx < FnType->getNumArgs() + ? FnType->getArgType(ParamIdx)->isReferenceType() + : false; + } if (VisitAsLvalue) VisitLValue(*Item.I, Item.N, Tmp); |