[Bug libgcc/59412] New: __fixunsdfDI triggers wrong inexact exceptions

aurelien at aurel32 dot net gcc-bugzilla@gcc.gnu.org
Fri Dec 6 17:42:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59412

            Bug ID: 59412
           Summary: __fixunsdfDI triggers wrong inexact exceptions
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libgcc
          Assignee: unassigned at gcc dot gnu.org
          Reporter: aurelien at aurel32 dot net

__fixunsdfDI triggers an inexact exception even when converting an integer
number from double to long long, while it shouldn't. This is due to this part
of the code:

UDWtype
__fixunsdfDI (DFtype a)
{
  /* Get high part of result.  The division here will just moves the radix
     point and will not cause any rounding.  Then the conversion to integral
     type chops result as desired.  */
  const UWtype hi = a / Wtype_MAXp1_F;

As said in the comment, the division just moves the radix, so it doesn't
triggers an inexact exception. However then the value then have some decimal
parts and the convertsion from double to int triggers the inexact exception.
This is reproducible for example on powerpc32 and causes errors in the glibc
testsuite.



More information about the Gcc-bugs mailing list