blob: 8f170c475a174beb1a4bced62d00a4ff36c7a01d [file] [log] [blame]
/* { 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;
}