modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/pr85582-3.c (about) 1 /* PR target/85582 */ 2 3 #ifdef __SIZEOF_INT128__ 4 typedef __int128 S; 5 typedef unsigned __int128 U; 6 #else 7 typedef long long S; 8 typedef unsigned long long U; 9 #endif 10 11 __attribute__((noipa)) U 12 f1 (U x, int y) 13 { 14 return x << (y & -2); 15 } 16 17 __attribute__((noipa)) S 18 f2 (S x, int y) 19 { 20 return x >> (y & -2); 21 } 22 23 __attribute__((noipa)) U 24 f3 (U x, int y) 25 { 26 return x >> (y & -2); 27 } 28 29 int 30 main () 31 { 32 U a = (U) 1 << (sizeof (U) * __CHAR_BIT__ - 7); 33 if (f1 (a, 5) != ((U) 1 << (sizeof (S) * __CHAR_BIT__ - 3))) 34 __builtin_abort (); 35 S b = (U) 0x101 << (sizeof (S) * __CHAR_BIT__ / 2 - 7); 36 if (f1 (b, sizeof (S) * __CHAR_BIT__ / 2) != (U) 0x101 << (sizeof (S) * __CHAR_BIT__ - 7)) 37 __builtin_abort (); 38 if (f1 (b, sizeof (S) * __CHAR_BIT__ / 2 + 2) != (U) 0x101 << (sizeof (S) * __CHAR_BIT__ - 5)) 39 __builtin_abort (); 40 S c = (U) 1 << (sizeof (S) * __CHAR_BIT__ - 1); 41 if ((U) f2 (c, 5) != ((U) 0x1f << (sizeof (S) * __CHAR_BIT__ - 5))) 42 __builtin_abort (); 43 if ((U) f2 (c, sizeof (S) * __CHAR_BIT__ / 2) != ((U) -1 << (sizeof (S) * __CHAR_BIT__ / 2 - 1))) 44 __builtin_abort (); 45 if ((U) f2 (c, sizeof (S) * __CHAR_BIT__ / 2 + 2) != ((U) -1 << (sizeof (S) * __CHAR_BIT__ / 2 - 3))) 46 __builtin_abort (); 47 U d = (U) 1 << (sizeof (S) * __CHAR_BIT__ - 1); 48 if (f3 (c, 5) != ((U) 0x1 << (sizeof (S) * __CHAR_BIT__ - 5))) 49 __builtin_abort (); 50 if (f3 (c, sizeof (S) * __CHAR_BIT__ / 2) != ((U) 1 << (sizeof (S) * __CHAR_BIT__ / 2 - 1))) 51 __builtin_abort (); 52 if (f3 (c, sizeof (S) * __CHAR_BIT__ / 2 + 2) != ((U) 1 << (sizeof (S) * __CHAR_BIT__ / 2 - 3))) 53 __builtin_abort (); 54 return 0; 55 }