1 /* { dg-do run } */
2 /* { dg-options -O2 } */
3
4 extern void abort (void);
5 extern void link_error (void);
6
7 int
foo_div(int i,int j)8 foo_div (int i, int j)
9 {
10 int k;
11
12 /* [-INF, -1] / [1, +INF] should not give [-1, -1]. */
13 if (i <= -1)
14 if (j >= 1)
15 {
16 k = i / j;
17 if (k == -1)
18 abort ();
19
20 return k;
21 }
22
23 /* [-20, -10] / [2, 10] should give [-10, -1]. */
24 if (i >= -20)
25 if (i <= -10)
26 if (j >= 2)
27 if (j <= 10)
28 {
29 k = i / j;
30 if (k < -10)
31 link_error ();
32 if (k > -1)
33 link_error ();
34
35 return k;
36 }
37
38 /* [-20, -10] / [-10, -2] should give [1, 10]. */
39 if (i >= -20)
40 if (i <= -10)
41 if (j >= -10)
42 if (j <= -2)
43 {
44 k = i / j;
45 if (k < 1)
46 link_error ();
47 if (k > 10)
48 link_error ();
49
50 return k;
51 }
52
53 /* [-20, 10] / [2, 10] should give [-10, 5]. */
54 if (i >= -20)
55 if (i <= 10)
56 if (j >= 2)
57 if (j <= 10)
58 {
59 k = i / j;
60 if (k < -10)
61 link_error ();
62 if (k > 5)
63 link_error ();
64
65 return k;
66 }
67
68 /* [-20, 10] / [-10, -2] should give [-5, 10]. */
69 if (i >= -20)
70 if (i <= 10)
71 if (j >= -10)
72 if (j <= -2)
73 {
74 k = i / j;
75 if (k < -5)
76 link_error ();
77 if (k > 10)
78 link_error ();
79
80 return k;
81 }
82
83 /* [10, 20] / [2, 10] should give [1, 10]. */
84 if (i >= 10)
85 if (i <= 20)
86 if (j >= 2)
87 if (j <= 10)
88 {
89 k = i / j;
90 if (k < 1)
91 link_error ();
92 if (k > 10)
93 link_error ();
94
95 return k;
96 }
97
98 /* [10, 20] / [-10, -2] should give [-10, -1]. */
99 if (i >= 10)
100 if (i <= 20)
101 if (j >= -10)
102 if (j <= -2)
103 {
104 k = i / j;
105 if (k > -1)
106 link_error ();
107 if (k < -10)
108 link_error ();
109
110 return k;
111 }
112
113 abort ();
114 }
115
116 int
foo_mult(int i,int j)117 foo_mult (int i, int j)
118 {
119 int k;
120
121 /* [-20, -10] * [2, 10] should give [-200, -20]. */
122 if (i >= -20)
123 if (i <= -10)
124 if (j >= 2)
125 if (j <= 10)
126 {
127 k = i * j;
128 if (k < -200)
129 link_error ();
130 if (k > -20)
131 link_error ();
132
133 return k;
134 }
135
136 /* [-20, -10] * [-10, -2] should give [20, 200]. */
137 if (i >= -20)
138 if (i <= -10)
139 if (j >= -10)
140 if (j <= -2)
141 {
142 k = i * j;
143 if (k < 20)
144 link_error ();
145 if (k > 200)
146 link_error ();
147
148 return k;
149 }
150
151 /* [-20, 10] * [2, 10] should give [-200, 100]. */
152 if (i >= -20)
153 if (i <= 10)
154 if (j >= 2)
155 if (j <= 10)
156 {
157 k = i * j;
158 if (k < -200)
159 link_error ();
160 if (k > 100)
161 link_error ();
162
163 return k;
164 }
165
166 /* [-20, 10] * [-10, -2] should give [-100, 200]. */
167 if (i >= -20)
168 if (i <= 10)
169 if (j >= -10)
170 if (j <= -2)
171 {
172 k = i * j;
173 if (k < -100)
174 link_error ();
175 if (k > 200)
176 link_error ();
177
178 return k;
179 }
180
181 /* [10, 20] * [2, 10] should give [20, 200]. */
182 if (i >= 10)
183 if (i <= 20)
184 if (j >= 2)
185 if (j <= 10)
186 {
187 k = i * j;
188 if (k < 20)
189 link_error ();
190 if (k > 200)
191 link_error ();
192
193 return k;
194 }
195
196 /* [10, 20] * [-10, -2] should give [-200, -20]. */
197 if (i >= 10)
198 if (i <= 20)
199 if (j >= -10)
200 if (j <= -2)
201 {
202 k = i * j;
203 if (k < -200)
204 link_error ();
205 if (k > -20)
206 link_error ();
207
208 return k;
209 }
210
211 abort ();
212 }
213
214 int
main()215 main()
216 {
217 if (foo_div (-10, 5) != -2)
218 abort ();
219
220 if (foo_div (-16, 4) != -4)
221 abort ();
222
223 if (foo_div (-15, -5) != 3)
224 abort ();
225
226 if (foo_div (8, 2) != 4)
227 abort ();
228
229 if (foo_div (10, -2) != -5)
230 abort ();
231
232 if (foo_div (20, 5) != 4)
233 abort ();
234
235 if (foo_div (15, -3) != -5)
236 abort ();
237
238 if (foo_mult (-10, 5) != -50)
239 abort ();
240
241 if (foo_mult (-16, 4) != -64)
242 abort ();
243
244 if (foo_mult (-15, -5) != 75)
245 abort ();
246
247 if (foo_mult (8, 2) != 16)
248 abort ();
249
250 if (foo_mult (10, -2) != -20)
251 abort ();
252
253 if (foo_mult (20, 5) != 100)
254 abort ();
255
256 if (foo_mult (15, -3) != -45)
257 abort ();
258
259 return 0;
260 }
261