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

     1  __extension__ union { double d; int i[2]; } u = { d: -0.25 };
     2  
     3  /* This assumes the endianness of words in a long long is the same as
     4     that for doubles, which doesn't hold for a few platforms, but we
     5     can probably special case them here, as appropriate.  */
     6  long long endianness_test = 1;
     7  #define MSW (*(int*)&endianness_test)
     8  
     9  int
    10  signbit(double x)
    11  {
    12    __extension__ union { double d; int i[2]; } u = { d: x };
    13    return u.i[MSW] < 0;
    14  }
    15      
    16  int main(void)
    17  {
    18    if (2*sizeof(int) != sizeof(double) || u.i[MSW] >= 0)
    19      exit(0);
    20  
    21    if (!signbit(-0.25))
    22      abort();
    23  
    24    exit(0);
    25  }