The value of test should be 0x7ffffffe and is 0xfffffffe; Flags: none
(Also in 3.3.5) #include <stdio.h> signed char a=-4; int test(){ return (((unsigned int)(signed int) a ) / 2LL) ; } int main(void){ int r; r=test(); printf("test output: %#x == %d %x %x\n",r,r ,(r==0x7ffffffe),(r==0xfffffffe)); if(r == ( ((unsigned int)(signed int) (signed char) -4 ) / 2LL )) printf("test successful\n"); else printf("test failed\n"); return 0; } -- Summary: wrong code for arith.expr: (((unsigned int)(signed int) a ) / 2LL) with signed char a=-4 Product: gcc Version: 3.4.3 Status: UNCONFIRMED Severity: normal Priority: P2 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: heinrich dot brand at fujitsu-siemens dot com CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: Intel-Linux GCC host triplet: Intel-Linux GCC target triplet: Intel-Linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19606