diff options
| author | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-04-14 06:29:29 +0000 |
|---|---|---|
| committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-04-14 06:29:29 +0000 |
| commit | 3fd05096cef29bada562929db9a1d0d8fb4bbf5b (patch) | |
| tree | 1dcad66a2d50ff5494aef7ac1549bf86a23be591 /clang/lib/Checker | |
| parent | cc924c74837b871bd870e1545222229f051335e2 (diff) | |
| download | bcm5719-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.cpp | 7 | ||||
| -rw-r--r-- | clang/lib/Checker/GRExprEngine.cpp | 3 |
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; |

