/* { 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 } } } */ #if !defined(EXT) && !defined(TYPE) 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 #ifndef TYPE # 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 #endif #ifndef NANS # define NANS(x) FN (__builtin_nans) (x) #endif #ifndef NAN # define NAN(x) FN (__builtin_nan) (x) #endif #ifndef INF # define INF FN (__builtin_inf) () #endif int f1 (void) { return __builtin_issignaling (NANS ("")); } int f2 (void) { return __builtin_issignaling (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 (NANS ("0x123")) || f4 (CST (42.0)) || f4 (NAN ("0x234")) || f4 (INF) || f4 (-INF) || f4 (CST (-42.0)) || f4 (CST (-0.0)) || f4 (CST (0.0))) __builtin_abort (); w = NANS (""); asm volatile ("" : : : "memory"); if (!f4 (w)) __builtin_abort (); #endif return 0; }