https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81110
--- Comment #5 from Ada Liu <qian.liu at ingenic dot com> --- (In reply to Andrew Pinski from comment #3) > 65536*d[1] will overflow if d[1] is 65535 (0xffff). > > If you did this instead it would be defined: > 65536u*d[1] > > as that is an unsigned * unsigned short so the unsigned short is implicitly > converted into unsigned; in the original case, the unsigned short is > implicitly converted into signed int. But (65536*d[1]+d[0]) is convered to (unsigned long), should not be treated as unsigned? On gcc4.7.2 I can get expected result.