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.