https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67570
Bug ID: 67570 Summary: comparison rules fails Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: ka_bena at yahoo dot fr Target Milestone: --- #include <stdio.h> int main(void) { int pos ; int pos1 ; int pos2 ; long double A = 0.L ; union { long double X ; char unsigned mask[sizeof(A)] ; } alfa ; alfa.X = A ; pos = 32 ; pos1 = 11 - ( pos - 1 ) / 8 ; pos2 = 8 ; alfa.mask[pos1] =((char unsigned )1 << (sizeof(char unsigned) * 8 - pos2)) ^ alfa.mask[pos1] ; printf ( " [alfa.X] = %LE \n" , alfa.X ) ; printf ( " [alfa.X == 0.L] = %i \n" , alfa.X == 0.L ) ; printf ( " [alfa.X != 0.L] = %i \n" , alfa.X != 0.L ) ; printf ( " [alfa.X <= 0.L] = %i \n" , alfa.X <= 0.L ) ; printf ( " [alfa.X >= 0.L] = %i \n" , alfa.X >= 0.L ) ; printf ( " [alfa.X < 0.L] = %i \n" , alfa.X < 0.L ) ; printf ( " [alfa.X > 0.L] = %i \n" , alfa.X > 0.L ) ; return 0 ; } /* Results: [alfa.X] = 0.000000E+000 [alfa.X == 0.L] = 0 [alfa.X != 0.L] = 1 [alfa.X <= 0.L] = 0 [alfa.X >= 0.L] = 0 [alfa.X < 0.L] = 0 [alfa.X > 0.L] = 0 Note: Binary representation IEEE 754 of alfa.X is: 0000000000000000 0 000000000000001 0000000000000000000000000000000000000000000000000000000000000000 It seems that comparison rules fails in this case. Microsoft Windows XP Profesional version2002 Service Pack 3. Gcc 4.8.0 win32 mingw32 -std=C99 */