diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2009-12-04 02:12:53 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2009-12-04 02:12:53 +0000 |
commit | f3da334da6f95d47419b04f1a865010c59da8616 (patch) | |
tree | 44a5a3f148c322bfc9e7338a063ae4d7324fc4e6 /clang/lib/AST/ExprConstant.cpp | |
parent | 1c21aaca06ce6d19b9c7927e46aabf17bba3aab7 (diff) | |
download | bcm5719-llvm-f3da334da6f95d47419b04f1a865010c59da8616.tar.gz bcm5719-llvm-f3da334da6f95d47419b04f1a865010c59da8616.zip |
Fix for PR5447: teach Evaluate to deal with floating-point conditionals.
llvm-svn: 90521
Diffstat (limited to 'clang/lib/AST/ExprConstant.cpp')
-rw-r--r-- | clang/lib/AST/ExprConstant.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 15a9a06be86..670753ca15f 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -1515,6 +1515,7 @@ public: bool VisitFloatingLiteral(const FloatingLiteral *E); bool VisitCastExpr(CastExpr *E); bool VisitCXXZeroInitValueExpr(CXXZeroInitValueExpr *E); + bool VisitConditionalOperator(ConditionalOperator *E); bool VisitChooseExpr(const ChooseExpr *E) { return Visit(E->getChosenSubExpr(Info.Ctx)); } @@ -1522,8 +1523,7 @@ public: { return Visit(E->getSubExpr()); } // FIXME: Missing: __real__/__imag__, array subscript of vector, - // member of vector, ImplicitValueInitExpr, - // conditional ?: + // member of vector, ImplicitValueInitExpr }; } // end anonymous namespace @@ -1682,6 +1682,14 @@ bool FloatExprEvaluator::VisitCXXZeroInitValueExpr(CXXZeroInitValueExpr *E) { return true; } +bool FloatExprEvaluator::VisitConditionalOperator(ConditionalOperator *E) { + bool Cond; + if (!HandleConversionToBool(E->getCond(), Cond, Info)) + return false; + + return Visit(Cond ? E->getTrueExpr() : E->getFalseExpr()); +} + //===----------------------------------------------------------------------===// // Complex Evaluation (for float and integer) //===----------------------------------------------------------------------===// |