http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52699
--- Comment #7 from Paolo Carlini <paolo.carlini at oracle dot com> 2012-04-12 13:09:39 UTC --- And the problem seems pretty clear: we have computations like: __s0 = result_type(1) << __w0; with __w0 which can be 32, result_type 32 bits, thus definitely we aren't handling a mathematical 2^32, as we should per 26.5.4.3. A fix should be relatively easy.