[lto/pph] Do not pack more bits than requested (issue4415044)

Jakub Jelinek jakub@redhat.com
Thu Apr 14 19:40:00 GMT 2011


On Thu, Apr 14, 2011 at 02:50:53PM -0400, Diego Novillo wrote:
> @@ -1190,8 +1190,19 @@ bitpack_create (struct lto_output_stream *s)
>  static inline void
>  bp_pack_value (struct bitpack_d *bp, bitpack_word_t val, unsigned nbits)
>  {
> -  bitpack_word_t word = bp->word;
> +  bitpack_word_t mask, word;
>    int pos = bp->pos;
> +
> +  word = bp->word;
> +
> +  gcc_assert (nbits > 0 && nbits <= BITS_PER_BITPACK_WORD);
> +
> +  /* Make sure that VAL only has the lower NBITS set.  Generate a
> +     mask with the lower NBITS set and use it to filter the upper
> +     bits from VAL.  */
> +  mask = ((bitpack_word_t) 1 << nbits) - 1;

If bitpack_word_t has BITS_PER_BITPACK_WORD bits, then for
nbits = BITS_PER_BITPACK_WORD this will be undefined.
Use say
mask = ((bitpack_word_t) 2 << (nbits - 1)) - 1;
or something similar (assertion ensures that nbits isn't 0).

	Jakub



More information about the Gcc-patches mailing list