| /* PR middle-end/120547 */ |
| /* { dg-do run { target bitint } } */ |
| /* { dg-options "-O2" } */ |
| /* { dg-add-options float64 } */ |
| /* { dg-require-effective-target float64 } */ |
| |
| #define CHECK(x, y) \ |
| if ((_Float64) x != (_Float64) y \ |
| || (_Float64) (x + 1) != (_Float64) (y + 1)) \ |
| __builtin_abort () |
| |
| int |
| main () |
| { |
| unsigned long long a = 0x20000000000001ULL << 7; |
| volatile unsigned long long b = a; |
| CHECK (a, b); |
| #if __BITINT_MAXWIDTH__ >= 4096 |
| unsigned _BitInt(4096) c = ((unsigned _BitInt(4096)) 0x20000000000001ULL) << 253; |
| volatile unsigned _BitInt(4096) d = c; |
| CHECK (c, d); |
| unsigned _BitInt(4096) e = ((unsigned _BitInt(4096)) 0x20000000000001ULL) << 931; |
| volatile unsigned _BitInt(4096) f = e; |
| CHECK (e, f); |
| #endif |
| } |