This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, rs6000] Fix PR78556 - left shift of negative values


Hi Markus,

On Mon, Nov 28, 2016 at 02:58:19PM +0100, Markus Trippelsdorf wrote:
> Running bootstrap-ubsan on ppc64le shows many instances of e.g.:
>  config/rs6000/rs6000.c:6217:36: runtime error: left shift of negative value -12301
> 
> The attached patch fixes the issue and was tested on ppc64le.

Thanks for the patch.


  for (i = 2; i <= copies; i *= 2)
    {
      HOST_WIDE_INT small_val;
      bitsize /= 2;
      small_val = splat_val >> bitsize;

>        bitsize /= 2;
>        small_val = splat_val >> bitsize;
>        mask >>= bitsize;
> -      if (splat_val != ((small_val << bitsize) | (small_val & mask)))
> +      if (splat_val != ((HOST_WIDE_INT)
> +          ((unsigned HOST_WIDE_INT) small_val << bitsize)
> +          | (small_val & mask)))
>  	return false;
>        splat_val = small_val;
>      }

Can't you just make small_val an unsigned WIDE_INT, instead?


Segher


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]