With GCC 4.4.0, the following program outputs 4294967295 instead of 2: #include <stdio.h>
int main (void) { int exp = -1; printf ("%u\n", exp < 2 ? 2U : (unsigned int) exp); return 0; } Note: I've tried with gcc-snapshot under a Debian/unstable x86_64 Linux machine, but the same bug was reported to me, with gcc-4.4.0 (it was found by Philippe Theveny, who works on MPFR, and the MPFR tests fail because of that). GCC 4.3.3 does not have this problem. -- Summary: [4.4 Regression] Wrong result of conditional operator exp < 2 ? 2U : (unsigned int) exp Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: major Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: vincent at vinc17 dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39867