2014-07-29 Ed Smith-Rowland <3dw4rd@verizon.net>
[official-gcc.git] / gcc / testsuite / gcc.dg / ftrapv-2.c
blob7d765747c9c3d0b34d136a863c4f7a19e2c85a1a
1 /* Copyright (C) 2004 Free Software Foundation.
3 PR other/18665
4 Verify that -ftrapv doesn't produce bogus results
5 on 64-bit platforms.
7 Written by Eric Botcazou */
9 /* { dg-do run } */
10 /* { dg-options "-ftrapv" } */
11 /* { dg-require-effective-target trapping } */
13 extern void abort(void);
14 extern long labs(long);
16 int __attribute__((noinline))
17 iabsv(int a)
19 return abs(a);
22 int __attribute__((noinline))
23 iaddv(int a, int b)
25 return a + b;
28 int __attribute__((noinline))
29 isubv(int a, int b)
31 return a - b;
34 int __attribute__((noinline))
35 imulv(int a, int b)
37 return a * b;
40 int __attribute__((noinline))
41 inegv(int a)
43 return -a;
46 long __attribute__((noinline))
47 labsv(long a)
49 return labs(a);
52 long __attribute__((noinline))
53 laddv(long a, long b)
55 return a + b;
58 long __attribute__((noinline))
59 lsubv(long a, long b)
61 return a - b;
64 long __attribute__((noinline))
65 lmulv(long a, long b)
67 return a * b;
70 long __attribute__((noinline))
71 lnegv(long a)
73 return -a;
76 int main(void)
78 if (iabsv (-1) != 1)
79 abort ();
81 if (iaddv (2,-3) != -1)
82 abort ();
84 if (isubv (2,3) != -1)
85 abort ();
87 if (imulv (-2,3) != -6)
88 abort ();
90 if (inegv (-1) != 1)
91 abort ();
93 if (labsv (-1L) != 1L)
94 abort ();
96 if (laddv (2L,-3L) != -1L)
97 abort ();
99 if (lsubv (2L,3L) != -1L)
100 abort ();
102 if (lmulv (-2L,3L) != -6L)
103 abort ();
105 if (lnegv (-1L) != 1L)
106 abort ();
108 return 0;