| /* { dg-do run } */ |
| /* { dg-options "-O2 -fsignaling-nans" } */ |
| |
| #if __LDBL_MANT_DIG__ == 64 |
| union U { struct { unsigned long long m; unsigned short e; } p; long double l; }; |
| union U zero = { { 0, 0 } }; |
| union U mzero = { { 0, 0x8000 } }; |
| union U denorm = { { 42, 0 } }; |
| union U mdenorm = { { 42, 0x8000 } }; |
| union U pseudodenorm = { { 0x8000000000000000ULL, 0 } }; |
| union U mpseudodenorm = { { 0x8000000000000000ULL, 0x8000 } }; |
| union U pseudodenorm1 = { { 0x8000000000000042ULL, 0 } }; |
| union U mpseudodenorm1 = { { 0x8000000000000042ULL, 0x8000 } }; |
| union U pseudoinf = { { 0, 0x7fff } }; |
| union U mpseudoinf = { { 0, 0xffff } }; |
| union U pseudonan = { { 42, 0x7fff } }; |
| union U mpseudonan = { { 42, 0xffff } }; |
| union U pseudonan1 = { { 0x4000000000000000ULL, 0x7fff } }; |
| union U mpseudonan1 = { { 0x4000000000000000ULL, 0xffff } }; |
| union U pseudonan2 = { { 0x4000000000000042ULL, 0x7fff } }; |
| union U mpseudonan2 = { { 0x4000000000000042ULL, 0xffff } }; |
| union U inf = { { 0x8000000000000000ULL, 0x7fff } }; |
| union U minf = { { 0x8000000000000000ULL, 0xffff } }; |
| union U snan = { { 0x8000000000000042ULL, 0x7fff } }; |
| union U msnan = { { 0x8000000000000042ULL, 0xffff } }; |
| union U indefinite = { { 0xc000000000000000ULL, 0x7fff } }; |
| union U mindefinite = { { 0xc000000000000000ULL, 0xffff } }; |
| union U qnan = { { 0xc000000000000042ULL, 0x7fff } }; |
| union U mqnan = { { 0xc000000000000042ULL, 0xffff } }; |
| union U unnormal = { { 0, 0x42 } }; |
| union U munnormal = { { 0, 0x8042 } }; |
| union U unnormal1 = { { 42, 0x42 } }; |
| union U munnormal1 = { { 42, 0x8042 } }; |
| union U normal = { { 0x8000000000000000ULL, 0x42 } }; |
| union U mnormal = { { 0x8000000000000000ULL, 0x8042 } }; |
| union U normal1 = { { 0x8000000000000042ULL, 0x42 } }; |
| union U mnormal1 = { { 0x8000000000000042ULL, 0x8042 } }; |
| #endif |
| |
| int |
| main () |
| { |
| #if __LDBL_MANT_DIG__ == 64 |
| asm volatile ("" : : : "memory"); |
| if (__builtin_issignaling (zero.l) |
| || __builtin_issignaling (mzero.l) |
| || __builtin_issignaling (denorm.l) |
| || __builtin_issignaling (mdenorm.l) |
| || __builtin_issignaling (pseudodenorm.l) |
| || __builtin_issignaling (mpseudodenorm.l) |
| || __builtin_issignaling (pseudodenorm1.l) |
| || __builtin_issignaling (mpseudodenorm1.l) |
| || !__builtin_issignaling (pseudoinf.l) |
| || !__builtin_issignaling (mpseudoinf.l) |
| || !__builtin_issignaling (pseudonan.l) |
| || !__builtin_issignaling (mpseudonan.l) |
| || !__builtin_issignaling (pseudonan1.l) |
| || !__builtin_issignaling (mpseudonan1.l) |
| || !__builtin_issignaling (pseudonan2.l) |
| || !__builtin_issignaling (mpseudonan2.l) |
| || __builtin_issignaling (inf.l) |
| || __builtin_issignaling (minf.l) |
| || !__builtin_issignaling (snan.l) |
| || !__builtin_issignaling (msnan.l) |
| || __builtin_issignaling (indefinite.l) |
| || __builtin_issignaling (mindefinite.l) |
| || __builtin_issignaling (qnan.l) |
| || __builtin_issignaling (mqnan.l) |
| || !__builtin_issignaling (unnormal.l) |
| || !__builtin_issignaling (munnormal.l) |
| || !__builtin_issignaling (unnormal1.l) |
| || !__builtin_issignaling (munnormal1.l) |
| || __builtin_issignaling (normal.l) |
| || __builtin_issignaling (mnormal.l) |
| || __builtin_issignaling (normal1.l) |
| || __builtin_issignaling (mnormal1.l)) |
| __builtin_abort (); |
| #endif |
| return 0; |
| } |