__attribute__((noipa)) int foo (double a, double b) { double c = a - b; if (!__builtin_isfinite (c)) { if (__builtin_isnan (c)) { if (!__builtin_isnan (a) && !__builtin_isnan (b)) return 1; } else if (__builtin_isfinite (a) && __builtin_isfinite (b)) return 2; } else if (c == 0 && a != b) return 3; return 4; } int main () { double a = __builtin_inf (); if (foo (a, a) != 1) __builtin_abort (); }