> > Andrew Pinski <[EMAIL PROTECTED]> writes: > > > If we look at this testcase, we have a function like: > > int foo(unsigned short x) > > { > > unsigned short y; > > y = x > 32767 ? x - 32768 : 0; > > return y; > > } > > > > > > x is promoted to a signed int by the front-end as the type > > of 32768 is signed. So when we pass 65535 to foo (like in the testcase), > > we get some large negative number for (signed int)x > > That shouldn't happen. Promoting from unsigned short to int shouldn't > sign extend. If you see it happening, then that's a bug.
Actually I am not seeing that but instead I am seeing the subtraction done in short and not in int (which is far as I can tell and remember reading the promotion rules in C doing). -- Pinski