1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
int __attribute__((noinline,noclone)) copysign_bug (double x) { if (x != 0.0 && (x * 0.5 == x)) return 1; if (__builtin_copysign(1.0, x) < 0.0) return 2; else return 3; } int main(void) { double x = -0.0; if (copysign_bug (x) != 2) __builtin_abort (); return 0; }