modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/ieee/mzero5.c (about)

     1  /* Test gcse handling of IEEE 0/-0 rules.  */
     2  static double zero = 0.0;
     3  
     4  int
     5  negzero_check (double d)
     6  {
     7    if (d == 0)
     8      return !!memcmp ((void *)&zero, (void *)&d, sizeof (double));
     9    return 0;
    10  }
    11  
    12  int
    13  sub (double d, double e)
    14  {
    15    if (d == 0.0 && e == 0.0
    16        && negzero_check (d) == 0 && negzero_check (e) == 0)
    17      return 1;
    18    else
    19      return 0;
    20  }
    21  
    22  int
    23  main (void)
    24  {
    25    double minus_zero = -0.0;
    26    if (sub (minus_zero, 0))
    27      abort ();
    28    return 0;
    29  }