[Bug tree-optimization/93681] New: Wrong optimization: instability of x87 floating-point results leads to nonsense

ch3root at openwall dot com gcc-bugzilla@gcc.gnu.org
Tue Feb 11 16:32:00 GMT 2020


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

            Bug ID: 93681
           Summary: Wrong optimization: instability of x87 floating-point
                    results leads to nonsense
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ch3root at openwall dot com
  Target Milestone: ---

x87 floating-point results are effectively unstable due to possible excess
precision. Without -fexcess-precision=standard, this instability can taint
everything around and lead to nonsense.

Instability is not limited to FP numbers, it extends to integers too:

----------------------------------------------------------------------
#include <stdio.h>

__attribute__((noipa,optnone)) // imagine it in a separate TU
static int opaque(int i) { return i; }

int main()
{
    int z = opaque(1) + 0x1p-60 == 1;

    printf("z = %d\n", z);
    if (z) 
        puts("z is one");
}
----------------------------------------------------------------------
$ gcc -std=gnu11 -pedantic -Wall -Wextra -Wno-attributes -m32 -march=i686 -O3
test.c && ./a.out
z = 0
z is one
----------------------------------------------------------------------
gcc x86-64 version: gcc (GCC) 10.0.1 20200211 (experimental)
----------------------------------------------------------------------


More information about the Gcc-bugs mailing list