http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46899
--- Comment #7 from Eskil Steenberg <eskil at obsession dot se> 2010-12-12 21:46:18 UTC --- Hi > No, it is undefined at runtime. This again is not an undefined behavior > at > compile time but rather at runtime. What that means is the behavior > cannot be > diagnosed (at least by the C standard definitions) at compile time and has > to > compile. There is no undefined at compile time behavior here, only at > runtime. Well the compiler does make assumptions about what the runtime will do. Have a look at this function: void my_func(unsigned short a, unsigned short b) { unsigned int c; c = a * b; printf("c = %u\n", c); if(f < 3000000000) /* 3 billion */ printf("foo bar\n"); } using gcc you can get the output (with the input ffff, and ffff): c = 4294836225 foo bar This output should not be possible and will be very confusing to the user (it was to me). My (limited) reading of the C spec should not support this even though i understand why it happens. At compile time the compiler decides that c can never be larger then max singned int, and therefor it thinks that it can optimize away the if statement. Cheers E PS sorry I dont have a compiler on this machine so excuse any typos.