Commit 90abdde0 by Marek Polacek Committed by Marek Polacek

re PR c++/84639 (gcc/c-family/c-attribs.c:1822:27: runtime error: shift exponent -1 is negative)

	PR c++/84639
	* c-attribs.c (common_handle_aligned_attribute): Don't use invalid
	alignment in computation.

From-SVN: r258109
parent 4c9ce243
2018-03-01 Marek Polacek <polacek@redhat.com>
PR c++/84639
* c-attribs.c (common_handle_aligned_attribute): Don't use invalid
alignment in computation.
2018-02-28 Eric Botcazou <ebotcazou@adacore.com> 2018-02-28 Eric Botcazou <ebotcazou@adacore.com>
* c-ada-spec.c (dump_ada_node) <NULLPTR_TYPE>: New case. * c-ada-spec.c (dump_ada_node) <NULLPTR_TYPE>: New case.
......
...@@ -1817,6 +1817,12 @@ common_handle_aligned_attribute (tree *node, tree name, tree args, int flags, ...@@ -1817,6 +1817,12 @@ common_handle_aligned_attribute (tree *node, tree name, tree args, int flags,
/* Log2 of specified alignment. */ /* Log2 of specified alignment. */
int pow2align = check_user_alignment (align_expr, true); 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. */ /* The alignment in bits corresponding to the specified alignment. */
unsigned bitalign = (1U << pow2align) * BITS_PER_UNIT; unsigned bitalign = (1U << pow2align) * BITS_PER_UNIT;
...@@ -1826,10 +1832,7 @@ common_handle_aligned_attribute (tree *node, tree name, tree args, int flags, ...@@ -1826,10 +1832,7 @@ common_handle_aligned_attribute (tree *node, tree name, tree args, int flags,
unsigned curalign = 0; unsigned curalign = 0;
unsigned lastalign = 0; unsigned lastalign = 0;
if (pow2align == -1 if (is_type)
|| !check_cxx_fundamental_alignment_constraints (*node, pow2align, flags))
*no_add_attrs = true;
else if (is_type)
{ {
if ((flags & (int) ATTR_FLAG_TYPE_IN_PLACE)) if ((flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
/* OK, modify the type in place. */; /* OK, modify the type in place. */;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment