diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/991228-1.c | 10 |
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e30ed60..e024646 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2001-01-05 Alexandre Oliva <aoliva@redhat.com> + + * gcc.c-torture/execute/991228-1.c: Take word endianness into + account. + 2001-01-05 Joseph S. Myers <jsm28@cam.ac.uk> * gcc.c-torture/execute/builtin-complex-1.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/execute/991228-1.c b/gcc/testsuite/gcc.c-torture/execute/991228-1.c index 31350eb..c6fe78e 100644 --- a/gcc/testsuite/gcc.c-torture/execute/991228-1.c +++ b/gcc/testsuite/gcc.c-torture/execute/991228-1.c @@ -1,15 +1,21 @@ __extension__ union { double d; int i[2]; } u = { d: -0.25 }; +/* This assumes the endianness of words in a long long is the same as + that for doubles, which doesn't hold for a few platforms, but we + can probably special case them here, as appropriate. */ +long long endianness_test = 1; +#define MSW (*(int*)&endianness_test) + int signbit(double x) { __extension__ union { double d; int i[2]; } u = { d: x }; - return u.i[0] < 0; + return u.i[MSW] < 0; } int main(void) { - if (2*sizeof(int) != sizeof(double) || u.i[0] >= 0) + if (2*sizeof(int) != sizeof(double) || u.i[MSW] >= 0) exit(0); if (!signbit(-0.25)) |