diff options
author | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-11-24 13:08:51 +0000 |
---|---|---|
committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-11-24 13:08:51 +0000 |
commit | d706434b0231c76fd9acf30060646a7aa8f69aef (patch) | |
tree | 84ea6bde3550736b956941dfe3ed50fb377cf1ee /lib/Checker/Environment.cpp | |
parent | 13cf5e2e223ebfc8ec0459913b2fc9ec1e5fa760 (diff) |
Let StackFrameContext represent if the call expr is evaluated as lvalue.
This is required for supporting const reference to temporary objects.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120093 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Checker/Environment.cpp')
-rw-r--r-- | lib/Checker/Environment.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/Checker/Environment.cpp b/lib/Checker/Environment.cpp index 914070e030..0bbe40dc1a 100644 --- a/lib/Checker/Environment.cpp +++ b/lib/Checker/Environment.cpp @@ -65,11 +65,22 @@ SVal Environment::GetSVal(const Stmt *E, ValueManager& ValMgr) const { if (CT->isVoidType()) return UnknownVal(); + if (C->getCastKind() == CK_NoOp) { + E = C->getSubExpr(); + continue; + } break; } - // Handle all other Stmt* using a lookup. + case Stmt::CXXExprWithTemporariesClass: + E = cast<CXXExprWithTemporaries>(E)->getSubExpr(); + continue; + case Stmt::CXXBindTemporaryExprClass: + E = cast<CXXBindTemporaryExpr>(E)->getSubExpr(); + continue; + + // Handle all other Stmt* using a lookup. default: break; }; |