diff options
Diffstat (limited to 'clang/lib/AST')
| -rw-r--r-- | clang/lib/AST/Expr.cpp | 16 | ||||
| -rw-r--r-- | clang/lib/AST/ExprConstant.cpp | 2 |
2 files changed, 15 insertions, 3 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 2edf62ab397..cc209a458a1 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -798,9 +798,19 @@ const char *CastExpr::getCastKindName() const { return "AnyPointerToBlockPointerCast"; case CK_ObjCObjectLValueCast: return "ObjCObjectLValueCast"; - } - - assert(0 && "Unhandled cast kind!"); + case CK_FloatingRealToComplex: + return "FloatingRealToComplex"; + case CK_FloatingComplexCast: + return "FloatingComplexCast"; + case CK_IntegralRealToComplex: + return "IntegralRealToComplex"; + case CK_IntegralComplexCast: + return "IntegralComplexCast"; + case CK_IntegralToFloatingComplex: + return "IntegralToFloatingComplex"; + } + + llvm_unreachable("Unhandled cast kind!"); return 0; } diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index dfeb32df3d3..172a811bee1 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -2165,6 +2165,8 @@ bool ComplexExprEvaluator::VisitCastExpr(CastExpr *E) { QualType EltType = E->getType()->getAs<ComplexType>()->getElementType(); QualType SubType = SubExpr->getType(); + // TODO: just trust CastKind + if (SubType->isRealFloatingType()) { APFloat &Real = Result.FloatReal; if (!EvaluateFloat(SubExpr, Real, Info)) |

