diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/ftrapv-2.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/ftrapv-2.c | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/ftrapv-2.c b/gcc/testsuite/gcc.dg/ftrapv-2.c new file mode 100644 index 000000000..d79b86dde --- /dev/null +++ b/gcc/testsuite/gcc.dg/ftrapv-2.c @@ -0,0 +1,108 @@ +/* Copyright (C) 2004 Free Software Foundation. + + PR other/18665 + Verify that -ftrapv doesn't produce bogus results + on 64-bit platforms. + + Written by Eric Botcazou */ + +/* { dg-do run } */ +/* { dg-options "-ftrapv" } */ + +extern void abort(void); +extern long labs(long); + +int __attribute__((noinline)) +iabsv(int a) +{ + return abs(a); +} + +int __attribute__((noinline)) +iaddv(int a, int b) +{ + return a + b; +} + +int __attribute__((noinline)) +isubv(int a, int b) +{ + return a - b; +} + +int __attribute__((noinline)) +imulv(int a, int b) +{ + return a * b; +} + +int __attribute__((noinline)) +inegv(int a) +{ + return -a; +} + +long __attribute__((noinline)) +labsv(long a) +{ + return labs(a); +} + +long __attribute__((noinline)) +laddv(long a, long b) +{ + return a + b; +} + +long __attribute__((noinline)) +lsubv(long a, long b) +{ + return a - b; +} + +long __attribute__((noinline)) +lmulv(long a, long b) +{ + return a * b; +} + +long __attribute__((noinline)) +lnegv(long a) +{ + return -a; +} + +int main(void) +{ + if (iabsv (-1) != 1) + abort (); + + if (iaddv (2,-3) != -1) + abort (); + + if (isubv (2,3) != -1) + abort (); + + if (imulv (-2,3) != -6) + abort (); + + if (inegv (-1) != 1) + abort (); + + if (labsv (-1L) != 1L) + abort (); + + if (laddv (2L,-3L) != -1L) + abort (); + + if (lsubv (2L,3L) != -1L) + abort (); + + if (lmulv (-2L,3L) != -6L) + abort (); + + if (lnegv (-1L) != 1L) + abort (); + + return 0; +} |