------- Comment #9 from pinskia at gcc dot gnu dot org 2006-08-10 16:44 ------- Here is a testcase which makes this a regression: extern void abort (void); int foo (unsigned int u) { unsigned t; for (t=0;t!=u;t++) ; return (int)(t + 4) < (int)u; }
int main (int argc, char *argv[]) { unsigned int u; /* Run with no arguments so u will be MAX_INT and the optimizers won't know its value. */ if (argc > 1) u = 1; else u = 0x7fffffff; if (foo (u) == 0) abort(); return 0; } -- pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|signed compare incorrectly |[4.0/4.1 Regression] signed |false for (int)(U+4)<(int)U |compare incorrectly false |where U is unsigned INT_MAX |for (int)(U+4)<(int)U where |(for optimized x86) |U is unsigned INT_MAX (for | |optimized x86) Target Milestone|--- |4.0.4 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28651