summaryrefslogtreecommitdiffstats
path: root/clang/lib/Checker/Environment.cpp
diff options
context:
space:
mode:
authorZhongxing Xu <xuzhongxing@gmail.com>2010-11-24 13:08:51 +0000
committerZhongxing Xu <xuzhongxing@gmail.com>2010-11-24 13:08:51 +0000
commita1a9ba11b78509dd11a2b69dae0c6049118f245c (patch)
tree32de44932d30c793244fc0ea9b7d867e85c32357 /clang/lib/Checker/Environment.cpp
parente0a1d2b32c5c070c0cdda9f50f9b8698745dc4cf (diff)
downloadbcm5719-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.cpp13
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;
};
OpenPOWER on IntegriCloud