We should write back the sign-extended value. Tested on x86_64-linux-gnu. OK to install?
Thanks, Richard Index: gcc/wide-int.cc =================================================================== --- gcc/wide-int.cc 2014-04-25 09:15:14.297359380 +0100 +++ gcc/wide-int.cc 2014-04-25 09:15:50.755637670 +0100 @@ -81,7 +81,7 @@ canonize (HOST_WIDE_INT *val, unsigned i top = val[len - 1]; if (len * HOST_BITS_PER_WIDE_INT > precision) - top = sext_hwi (top, precision % HOST_BITS_PER_WIDE_INT); + val[len - 1] = top = sext_hwi (top, precision % HOST_BITS_PER_WIDE_INT); if (top != 0 && top != (HOST_WIDE_INT)-1) return len;