blob: fddca6cdd2111b7a356cd7bcc5420bbe7e565c1f [file] [log] [blame]
/* { dg-do run } */
/* { dg-add-options ieee } */
/* { dg-additional-options "-fsignaling-nans" } */
/* Workaround for PR57484 on ia32: */
/* { dg-additional-options "-msse2 -mfpmath=sse" { target { ia32 && sse2_runtime } } } */
#ifndef EXT
int
f1 (void)
{
return __builtin_issignaling (__builtin_nansf (""));
}
int
f2 (void)
{
return __builtin_issignaling (__builtin_nan (""));
}
int
f3 (void)
{
return __builtin_issignaling (0.0L);
}
int
f4 (float x)
{
return __builtin_issignaling (x);
}
int
f5 (double x)
{
return __builtin_issignaling (x);
}
int
f6 (long double x)
{
return __builtin_issignaling (x);
}
#else
#define CONCATX(X, Y) X ## Y
#define CONCAT(X, Y) CONCATX (X, Y)
#define CONCAT3(X, Y, Z) CONCAT (CONCAT (X, Y), Z)
#define CONCAT4(W, X, Y, Z) CONCAT (CONCAT (CONCAT (W, X), Y), Z)
#if EXT
# define TYPE CONCAT3 (_Float, WIDTH, x)
# define CST(C) CONCAT4 (C, f, WIDTH, x)
# define FN(F) CONCAT4 (F, f, WIDTH, x)
#else
# define TYPE CONCAT (_Float, WIDTH)
# define CST(C) CONCAT3 (C, f, WIDTH)
# define FN(F) CONCAT3 (F, f, WIDTH)
#endif
int
f1 (void)
{
return __builtin_issignaling (FN (__builtin_nans) (""));
}
int
f2 (void)
{
return __builtin_issignaling (FN (__builtin_nan) (""));
}
int
f3 (void)
{
return __builtin_issignaling (CST (0.0));
}
int
f4 (TYPE x)
{
return __builtin_issignaling (x);
}
#endif
#ifndef EXT
float x;
double y;
long double z;
#else
TYPE w;
#endif
int
main ()
{
if (!f1 () || f2 () || f3 ())
__builtin_abort ();
asm volatile ("" : : : "memory");
#ifndef EXT
if (f4 (x) || !f4 (__builtin_nansf ("0x123")) || f4 (42.0f) || f4 (__builtin_nanf ("0x234"))
|| f4 (__builtin_inff ()) || f4 (-__builtin_inff ()) || f4 (-42.0f) || f4 (-0.0f) || f4 (0.0f))
__builtin_abort ();
x = __builtin_nansf ("");
asm volatile ("" : : : "memory");
if (!f4 (x))
__builtin_abort ();
if (f5 (y) || !f5 (__builtin_nans ("0x123")) || f5 (42.0) || f5 (__builtin_nan ("0x234"))
|| f5 (__builtin_inf ()) || f5 (-__builtin_inf ()) || f5 (-42.0) || f5 (-0.0) || f5 (0.0))
__builtin_abort ();
y = __builtin_nans ("");
asm volatile ("" : : : "memory");
if (!f5 (y))
__builtin_abort ();
if (f6 (z) || !f6 (__builtin_nansl ("0x123")) || f6 (42.0L) || f6 (__builtin_nanl ("0x234"))
|| f6 (__builtin_infl ()) || f6 (-__builtin_infl ()) || f6 (-42.0L) || f6 (-0.0L) || f6 (0.0L))
__builtin_abort ();
z = __builtin_nansl ("");
asm volatile ("" : : : "memory");
if (!f6 (z))
__builtin_abort ();
#else
if (f4 (w) || !f4 (FN (__builtin_nans) ("0x123")) || f4 (CST (42.0)) || f4 (FN (__builtin_nan) ("0x234"))
|| f4 (FN (__builtin_inf) ()) || f4 (-FN (__builtin_inf) ()) || f4 (CST (-42.0)) || f4 (CST (-0.0)) || f4 (CST (0.0)))
__builtin_abort ();
w = FN (__builtin_nans) ("");
asm volatile ("" : : : "memory");
if (!f4 (w))
__builtin_abort ();
#endif
return 0;
}