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 | a1a9ba11b78509dd11a2b69dae0c6049118f245c (patch) | |
| tree | 32de44932d30c793244fc0ea9b7d867e85c32357 /clang/lib/Checker/Environment.cpp | |
| parent | e0a1d2b32c5c070c0cdda9f50f9b8698745dc4cf (diff) | |
| download | bcm5719-llvm-a1a9ba11b78509dd11a2b69dae0c6049118f245c.tar.gz bcm5719-llvm-a1a9ba11b78509dd11a2b69dae0c6049118f245c.zip | |
Let StackFrameContext represent if the call expr is evaluated as lvalue.
This is required for supporting const reference to temporary objects.
llvm-svn: 120093
Diffstat (limited to 'clang/lib/Checker/Environment.cpp')
| -rw-r--r-- | clang/lib/Checker/Environment.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/clang/lib/Checker/Environment.cpp b/clang/lib/Checker/Environment.cpp index 914070e030b..0bbe40dc1a8 100644 --- a/clang/lib/Checker/Environment.cpp +++ b/clang/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; }; |

