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.  */
6long long endianness_test = 1;
7#define MSW (*(int*)&endianness_test)
8
9int
10signbit(double x)
11{
12  __extension__ union { double d; int i[2]; } u = { d: x };
13  return u.i[MSW] < 0;
14}
15
16int 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}
26