OSDN Git Service

Latest updates from FSF 4.7 branch
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / ftrapv-2.c
1 /* Copyright (C) 2004 Free Software Foundation.
2
3    PR other/18665
4    Verify that -ftrapv doesn't produce bogus results
5    on 64-bit platforms.
6
7    Written by Eric Botcazou  */
8
9 /* { dg-do run } */
10 /* { dg-options "-ftrapv" } */
11 /* { dg-skip-if "no HI mode trapping arith funcs" { xstormy16-*-* } { "*" } { "" } } */
12
13 extern void abort(void);
14 extern long labs(long);
15
16 int __attribute__((noinline))
17 iabsv(int a)
18 {
19   return abs(a);
20 }
21
22 int __attribute__((noinline))
23 iaddv(int a, int b)
24 {
25   return a + b;
26 }
27
28 int __attribute__((noinline))
29 isubv(int a, int b)
30 {
31   return a - b;
32 }
33
34 int __attribute__((noinline))
35 imulv(int a, int b)
36 {
37   return a * b;
38 }
39
40 int __attribute__((noinline))
41 inegv(int a)
42 {
43   return -a;
44 }
45
46 long __attribute__((noinline))
47 labsv(long a)
48 {
49   return labs(a);
50 }
51
52 long __attribute__((noinline))
53 laddv(long a, long b)
54 {
55   return a + b;
56 }
57
58 long __attribute__((noinline))
59 lsubv(long a, long b)
60 {
61   return a - b;
62 }
63
64 long __attribute__((noinline))
65 lmulv(long a, long b)
66 {
67   return a * b;
68 }
69
70 long __attribute__((noinline))
71 lnegv(long a)
72 {
73   return -a;
74 }
75
76 int main(void)
77 {
78   if (iabsv (-1) != 1)
79     abort ();
80
81   if (iaddv (2,-3) != -1)
82     abort ();
83
84   if (isubv (2,3) != -1)
85     abort ();
86
87   if (imulv (-2,3) != -6)
88     abort ();
89
90   if (inegv (-1) != 1)
91     abort ();
92
93   if (labsv (-1L) != 1L)
94     abort ();
95
96   if (laddv (2L,-3L) != -1L)
97     abort ();
98
99   if (lsubv (2L,3L) != -1L)
100     abort ();
101
102   if (lmulv (-2L,3L) != -6L)
103     abort ();
104
105   if (lnegv (-1L) != 1L)
106     abort ();
107
108   return 0;
109 }