Chris' change to print an approximation to long doubles
authorDale Johannesen <dalej@apple.com>
Thu, 31 Jan 2008 18:34:01 +0000 (18:34 +0000)
committerDale Johannesen <dalej@apple.com>
Thu, 31 Jan 2008 18:34:01 +0000 (18:34 +0000)
exposed a bug in APFloat's long double->double conversion of
NaNs.  Broke several things in the ieee part of gcc testsuite.

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

lib/Support/APFloat.cpp

index 04e99149bb853a5d3c3205f7054678659a8502fd..3de709c86ed86ada2a072ff117c92315cfe6f09c 100644 (file)
@@ -1712,6 +1712,8 @@ APFloat::convert(const fltSemantics &toSemantics,
     fs = normalize(rounding_mode, lostFraction);
   } else if (category == fcNaN) {
     int shift = toSemantics.precision - semantics->precision;
+    // Do this now so significandParts gets the right answer
+    semantics = &toSemantics;
     // No normalization here, just truncate
     if (shift>0)
       APInt::tcShiftLeft(significandParts(), newPartCount, shift);
@@ -1721,7 +1723,6 @@ APFloat::convert(const fltSemantics &toSemantics,
     // does not give you back the same bits.  This is dubious, and we
     // don't currently do it.  You're really supposed to get
     // an invalid operation signal at runtime, but nobody does that.
-    semantics = &toSemantics;
     fs = opOK;
   } else {
     semantics = &toSemantics;