111
|
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-require-effective-target trapping } */
|
|
12
|
|
13 extern void abort(void);
|
|
14 extern int abs(int);
|
|
15 extern long labs(long);
|
|
16
|
|
17 int __attribute__((noinline))
|
|
18 iabsv(int a)
|
|
19 {
|
|
20 return abs(a);
|
|
21 }
|
|
22
|
|
23 int __attribute__((noinline))
|
|
24 iaddv(int a, int b)
|
|
25 {
|
|
26 return a + b;
|
|
27 }
|
|
28
|
|
29 int __attribute__((noinline))
|
|
30 isubv(int a, int b)
|
|
31 {
|
|
32 return a - b;
|
|
33 }
|
|
34
|
|
35 int __attribute__((noinline))
|
|
36 imulv(int a, int b)
|
|
37 {
|
|
38 return a * b;
|
|
39 }
|
|
40
|
|
41 int __attribute__((noinline))
|
|
42 inegv(int a)
|
|
43 {
|
|
44 return -a;
|
|
45 }
|
|
46
|
|
47 long __attribute__((noinline))
|
|
48 labsv(long a)
|
|
49 {
|
|
50 return labs(a);
|
|
51 }
|
|
52
|
|
53 long __attribute__((noinline))
|
|
54 laddv(long a, long b)
|
|
55 {
|
|
56 return a + b;
|
|
57 }
|
|
58
|
|
59 long __attribute__((noinline))
|
|
60 lsubv(long a, long b)
|
|
61 {
|
|
62 return a - b;
|
|
63 }
|
|
64
|
|
65 long __attribute__((noinline))
|
|
66 lmulv(long a, long b)
|
|
67 {
|
|
68 return a * b;
|
|
69 }
|
|
70
|
|
71 long __attribute__((noinline))
|
|
72 lnegv(long a)
|
|
73 {
|
|
74 return -a;
|
|
75 }
|
|
76
|
|
77 int main(void)
|
|
78 {
|
|
79 if (iabsv (-1) != 1)
|
|
80 abort ();
|
|
81
|
|
82 if (iaddv (2,-3) != -1)
|
|
83 abort ();
|
|
84
|
|
85 if (isubv (2,3) != -1)
|
|
86 abort ();
|
|
87
|
|
88 if (imulv (-2,3) != -6)
|
|
89 abort ();
|
|
90
|
|
91 if (inegv (-1) != 1)
|
|
92 abort ();
|
|
93
|
|
94 if (labsv (-1L) != 1L)
|
|
95 abort ();
|
|
96
|
|
97 if (laddv (2L,-3L) != -1L)
|
|
98 abort ();
|
|
99
|
|
100 if (lsubv (2L,3L) != -1L)
|
|
101 abort ();
|
|
102
|
|
103 if (lmulv (-2L,3L) != -6L)
|
|
104 abort ();
|
|
105
|
|
106 if (lnegv (-1L) != 1L)
|
|
107 abort ();
|
|
108
|
|
109 return 0;
|
|
110 }
|