[Bug middle-end/89726] New: Incorrect inlined version of 'ceil' for 32bit

xan at igalia dot com gcc-bugzilla@gcc.gnu.org
Fri Mar 15 11:12:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89726

            Bug ID: 89726
           Summary: Incorrect inlined version of 'ceil' for 32bit
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: xan at igalia dot com
  Target Milestone: ---

Using GCC 9.0.1 20190314 (experimental) (GCC) on GNU/Linux x86-64. When
compiling the following program:

#include <math.h>
#include <stdlib.h>

int main(int argc, const char* argv[])
{
    if (argc != 2) abort();
    return signbit(ceil(atof(argv[1])));
}

For 32bit the ceil operation for a negative number (say, -0.9) gives +0 instead
of -0, which is incorrect. As in:

niraikanai:~/js/32bit%/home/xan/gccbuild/bin/gcc -O2 -o ceil ceil.c -lm         
niraikanai:~/js/32bit%./ceil -0.9 && echo bad                          
niraikanai:~/js/32bit%/home/xan/gccbuild/bin/gcc -O2 -m32 -o ceil ceil.c -lm
niraikanai:~/js/32bit%./ceil -0.9 && echo bad                               
bad
niraikanai:~/js/32bit%

This is also present, at least, in the 8.x series.


More information about the Gcc-bugs mailing list