1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-optimized" } */
3 
4 #ifdef __SIZEOF_INT128__
5 #define T __int128
6 #else
7 #define T long long
8 #endif
9 
10 extern void impossible (void);
11 
f(T x)12 void f(T x)
13 {
14   unsigned T y;
15   unsigned T z;
16   if (x < -7)
17     return;
18   if (x > 2)
19     return;
20   y = x;
21   z = y * y;
22   if (z == 666)
23     impossible ();
24 }
25 
g(unsigned T x)26 void g(unsigned T x)
27 {
28   unsigned T y;
29   unsigned T z;
30   unsigned T m = -1;
31   m = m / 2;
32   if (x < m-2)
33     return;
34   if (x > m-1)
35     return;
36   y = x;
37   z = y * y;
38   /* The product (ignoring it is a square) has only 3 possible values:
39      4, 9 and 2^127+6.  At least one of the values 7, 666 and -666 is
40      known to be impossible.  7 is the most logical in the current
41      implementation.  */
42   if (z == 7)
43     impossible ();
44 }
45 
46 /* { dg-final { scan-tree-dump-not "impossible" "optimized" } } */
47