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