1 /* PR target/85095 */
2
3 __attribute__((noipa)) unsigned long
f1(unsigned long a,unsigned long b)4 f1 (unsigned long a, unsigned long b)
5 {
6 unsigned long i = __builtin_add_overflow (a, b, &a);
7 return a + i;
8 }
9
10 __attribute__((noipa)) unsigned long
f2(unsigned long a,unsigned long b)11 f2 (unsigned long a, unsigned long b)
12 {
13 unsigned long i = __builtin_add_overflow (a, b, &a);
14 return a - i;
15 }
16
17 __attribute__((noipa)) unsigned long
f3(unsigned int a,unsigned int b)18 f3 (unsigned int a, unsigned int b)
19 {
20 unsigned int i = __builtin_add_overflow (a, b, &a);
21 return a + i;
22 }
23
24 __attribute__((noipa)) unsigned long
f4(unsigned int a,unsigned int b)25 f4 (unsigned int a, unsigned int b)
26 {
27 unsigned int i = __builtin_add_overflow (a, b, &a);
28 return a - i;
29 }
30
31 int
main()32 main ()
33 {
34 if (f1 (16UL, -18UL) != -2UL
35 || f1 (16UL, -17UL) != -1UL
36 || f1 (16UL, -16UL) != 1UL
37 || f1 (16UL, -15UL) != 2UL
38 || f2 (24UL, -26UL) != -2UL
39 || f2 (24UL, -25UL) != -1UL
40 || f2 (24UL, -24UL) != -1UL
41 || f2 (24UL, -23UL) != 0UL
42 || f3 (32U, -34U) != -2U
43 || f3 (32U, -33U) != -1U
44 || f3 (32U, -32U) != 1U
45 || f3 (32U, -31U) != 2U
46 || f4 (35U, -37U) != -2U
47 || f4 (35U, -36U) != -1U
48 || f4 (35U, -35U) != -1U
49 || f4 (35U, -34U) != 0U)
50 __builtin_abort ();
51 return 0;
52 }
53