summaryrefslogtreecommitdiffstats
path: root/clang/lib/Checker
diff options
context:
space:
mode:
authorZhongxing Xu <xuzhongxing@gmail.com>2010-04-14 06:29:29 +0000
committerZhongxing Xu <xuzhongxing@gmail.com>2010-04-14 06:29:29 +0000
commit3fd05096cef29bada562929db9a1d0d8fb4bbf5b (patch)
tree1dcad66a2d50ff5494aef7ac1549bf86a23be591 /clang/lib/Checker
parentcc924c74837b871bd870e1545222229f051335e2 (diff)
downloadbcm5719-llvm-3fd05096cef29bada562929db9a1d0d8fb4bbf5b.tar.gz
bcm5719-llvm-3fd05096cef29bada562929db9a1d0d8fb4bbf5b.zip
Add support for CXXBoolLiteralExpr.
llvm-svn: 101238
Diffstat (limited to 'clang/lib/Checker')
-rw-r--r--clang/lib/Checker/Environment.cpp7
-rw-r--r--clang/lib/Checker/GRExprEngine.cpp3
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Checker/Environment.cpp b/clang/lib/Checker/Environment.cpp
index be1a677d911..addfc21c180 100644
--- a/clang/lib/Checker/Environment.cpp
+++ b/clang/lib/Checker/Environment.cpp
@@ -37,6 +37,13 @@ SVal Environment::GetSVal(const Stmt *E, ValueManager& ValMgr) const {
return ValMgr.makeIntVal(C->getValue(), C->getType());
}
+ case Stmt::CXXBoolLiteralExprClass: {
+ const SVal *X = ExprBindings.lookup(E);
+ if (X)
+ return *X;
+ else
+ return ValMgr.makeIntVal(cast<CXXBoolLiteralExpr>(E));
+ }
case Stmt::IntegerLiteralClass: {
// In C++, this expression may have been bound to a temporary object.
SVal const *X = ExprBindings.lookup(E);
diff --git a/clang/lib/Checker/GRExprEngine.cpp b/clang/lib/Checker/GRExprEngine.cpp
index 88c42108561..8f74a5b1e80 100644
--- a/clang/lib/Checker/GRExprEngine.cpp
+++ b/clang/lib/Checker/GRExprEngine.cpp
@@ -587,7 +587,6 @@ void GRExprEngine::Visit(Stmt* S, ExplodedNode* Pred, ExplodedNodeSet& Dst) {
llvm_unreachable("Unhandled stmt class");
// C++ stuff we don't support yet.
case Stmt::CXXTypeidExprClass:
- case Stmt::CXXBoolLiteralExprClass:
case Stmt::CXXNullPtrLiteralExprClass:
case Stmt::CXXThrowExprClass:
case Stmt::CXXDefaultArgExprClass:
@@ -616,6 +615,7 @@ void GRExprEngine::Visit(Stmt* S, ExplodedNode* Pred, ExplodedNodeSet& Dst) {
case Stmt::AddrLabelExprClass:
case Stmt::IntegerLiteralClass:
case Stmt::CharacterLiteralClass:
+ case Stmt::CXXBoolLiteralExprClass:
case Stmt::FloatingLiteralClass:
case Stmt::ImplicitValueInitExprClass:
case Stmt::ObjCSuperExprClass:
@@ -945,6 +945,7 @@ void GRExprEngine::VisitLValue(Expr* Ex, ExplodedNode* Pred,
return;
// In C++, binding an rvalue to a reference requires to create an object.
+ case Stmt::CXXBoolLiteralExprClass:
case Stmt::IntegerLiteralClass:
CreateCXXTemporaryObject(Ex, Pred, Dst);
return;
OpenPOWER on IntegriCloud