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  }