OK.
On Thu, Mar 1, 2018 at 9:14 AM, Marek Polacek <pola...@redhat.com> wrote: > Here we were using pow2align as the right operand of <<. But for invalid > alignments pow2align can be -1 which makes the shifting invalid. Fixed by > moving the checking before using pow2align. > > Bootstrapped/regtested on x86_64-linux, ok for trunk? > > 2018-03-01 Marek Polacek <pola...@redhat.com> > > PR c++/84639 > * c-attribs.c (common_handle_aligned_attribute): Don't use invalid > alignment in computation. > > diff --git gcc/c-family/c-attribs.c gcc/c-family/c-attribs.c > index 0261a45ec98..3ebb2d6000c 100644 > --- gcc/c-family/c-attribs.c > +++ gcc/c-family/c-attribs.c > @@ -1817,6 +1817,12 @@ common_handle_aligned_attribute (tree *node, tree > name, tree args, int flags, > > /* Log2 of specified alignment. */ > int pow2align = check_user_alignment (align_expr, true); > + if (pow2align == -1 > + || !check_cxx_fundamental_alignment_constraints (*node, pow2align, > flags)) > + { > + *no_add_attrs = true; > + return NULL_TREE; > + } > > /* The alignment in bits corresponding to the specified alignment. */ > unsigned bitalign = (1U << pow2align) * BITS_PER_UNIT; > @@ -1826,10 +1832,7 @@ common_handle_aligned_attribute (tree *node, tree > name, tree args, int flags, > unsigned curalign = 0; > unsigned lastalign = 0; > > - if (pow2align == -1 > - || !check_cxx_fundamental_alignment_constraints (*node, pow2align, > flags)) > - *no_add_attrs = true; > - else if (is_type) > + if (is_type) > { > if ((flags & (int) ATTR_FLAG_TYPE_IN_PLACE)) > /* OK, modify the type in place. */; > > Marek