]> granicus.if.org Git - clang/commitdiff
Fix test suite regression, getFloatTypeSemantics shouldn't be called
authorDaniel Dunbar <daniel@zuster.org>
Tue, 14 Oct 2008 05:41:12 +0000 (05:41 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Tue, 14 Oct 2008 05:41:12 +0000 (05:41 +0000)
on non-float types.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57477 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ExprConstant.cpp

index 2b94964a9189a216b9331c3b4fb3e914826b4913..cc2b4e6735731ffe43590ed898336ca4fac4c744 100644 (file)
@@ -596,9 +596,6 @@ static bool EvaluateFloat(const Expr* E, APFloat& Result, EvalInfo &Info) {
 }
 
 bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
-  const llvm::fltSemantics &Sem =
-    Info.Ctx.getFloatTypeSemantics(E->getType());
-  
   switch (E->isBuiltinCall()) {
   default: return false;
   case Builtin::BI__builtin_huge_val:
@@ -606,9 +603,12 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
   case Builtin::BI__builtin_huge_vall:
   case Builtin::BI__builtin_inf:
   case Builtin::BI__builtin_inff:
-  case Builtin::BI__builtin_infl:
+  case Builtin::BI__builtin_infl: {
+    const llvm::fltSemantics &Sem =
+      Info.Ctx.getFloatTypeSemantics(E->getType());
     Result = llvm::APFloat::getInf(Sem);
     return true;
+  }
       
   case Builtin::BI__builtin_nan:
   case Builtin::BI__builtin_nanf:
@@ -618,6 +618,8 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
     if (const StringLiteral *S = 
         dyn_cast<StringLiteral>(E->getArg(0)->IgnoreParenCasts())) {
       if (!S->isWide() && S->getByteLength() == 0) { // empty string.
+        const llvm::fltSemantics &Sem =
+          Info.Ctx.getFloatTypeSemantics(E->getType());
         Result = llvm::APFloat::getNaN(Sem);
         return true;
       }