1 /* PR middle-end/91450 */
2
3 __attribute__((noipa)) unsigned long long
foo(int a,int b)4 foo (int a, int b)
5 {
6 unsigned long long r;
7 if (!__builtin_mul_overflow (a, b, &r))
8 __builtin_abort ();
9 return r;
10 }
11
12 __attribute__((noipa)) unsigned long long
bar(int a,int b)13 bar (int a, int b)
14 {
15 unsigned long long r;
16 if (a >= 0)
17 return 0;
18 if (!__builtin_mul_overflow (a, b, &r))
19 __builtin_abort ();
20 return r;
21 }
22
23 __attribute__((noipa)) unsigned long long
baz(int a,int b)24 baz (int a, int b)
25 {
26 unsigned long long r;
27 if (b >= 0)
28 return 0;
29 if (!__builtin_mul_overflow (a, b, &r))
30 __builtin_abort ();
31 return r;
32 }
33
34 __attribute__((noipa)) unsigned long long
qux(int a,int b)35 qux (int a, int b)
36 {
37 unsigned long long r;
38 if (a >= 0)
39 return 0;
40 if (b < 0)
41 return 0;
42 if (!__builtin_mul_overflow (a, b, &r))
43 __builtin_abort ();
44 return r;
45 }
46
47 __attribute__((noipa)) unsigned long long
quux(int a,int b)48 quux (int a, int b)
49 {
50 unsigned long long r;
51 if (a < 0)
52 return 0;
53 if (b >= 0)
54 return 0;
55 if (!__builtin_mul_overflow (a, b, &r))
56 __builtin_abort ();
57 return r;
58 }
59
60 int
main()61 main ()
62 {
63 if (foo (-4, 2) != -8ULL)
64 __builtin_abort ();
65 if (foo (2, -4) != -8ULL)
66 __builtin_abort ();
67 if (bar (-4, 2) != -8ULL)
68 __builtin_abort ();
69 if (baz (2, -4) != -8ULL)
70 __builtin_abort ();
71 if (qux (-4, 2) != -8ULL)
72 __builtin_abort ();
73 if (quux (2, -4) != -8ULL)
74 __builtin_abort ();
75 if (foo (-2, 1) != -2ULL)
76 __builtin_abort ();
77 if (foo (1, -2) != -2ULL)
78 __builtin_abort ();
79 if (bar (-2, 1) != -2ULL)
80 __builtin_abort ();
81 if (baz (1, -2) != -2ULL)
82 __builtin_abort ();
83 if (qux (-2, 1) != -2ULL)
84 __builtin_abort ();
85 if (quux (1, -2) != -2ULL)
86 __builtin_abort ();
87 return 0;
88 }
89