Teach FloatExprEvaluator to evaluate __builtin_huge_val and inf.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57154 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/ExprConstant.cpp b/lib/AST/ExprConstant.cpp
index 45724d3..c20cf4c 100644
--- a/lib/AST/ExprConstant.cpp
+++ b/lib/AST/ExprConstant.cpp
@@ -543,17 +543,19 @@
}
bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
- //Result.zextOrTrunc(getIntTypeSizeInBits(E->getType()));
+ const llvm::fltSemantics &Sem =
+ Info.Ctx.getFloatTypeSemantics(E->getType());
switch (E->isBuiltinCall()) {
+ default: return false;
case Builtin::BI__builtin_huge_val:
case Builtin::BI__builtin_huge_valf:
case Builtin::BI__builtin_huge_vall:
case Builtin::BI__builtin_inf:
case Builtin::BI__builtin_inff:
case Builtin::BI__builtin_infl:
- // FIXME: Implement me.
- default: return false;
+ Result = llvm::APFloat::getInf(Sem);
+ return true;
}
}