re PR c++/58584 ([c++11] ICE with invalid argument for alignas)
/cp 2013-10-04 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58584 * decl2.c (save_template_attributes): Handle error_mark_node as *attr_p argument. (cp_check_const_attributes): Likewise for attributes. * parser.c (cp_parser_std_attribute_spec): When alignas_expr is an error_mark_node call cp_parser_skip_to_end_of_statement. /testsuite 2013-10-04 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58584 * g++.dg/cpp0x/gen-attrs-55.C: New. From-SVN: r203193
This commit is contained in:
parent
d9d60b6feb
commit
2765f89725
|
@ -1,3 +1,12 @@
|
|||
2013-10-04 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/58584
|
||||
* decl2.c (save_template_attributes): Handle error_mark_node as
|
||||
*attr_p argument.
|
||||
(cp_check_const_attributes): Likewise for attributes.
|
||||
* parser.c (cp_parser_std_attribute_spec): When alignas_expr is an
|
||||
error_mark_node call cp_parser_skip_to_end_of_statement.
|
||||
|
||||
2013-10-03 Easwaran Raman <eraman@google.com>
|
||||
|
||||
PR c++/33911
|
||||
|
|
|
@ -1218,10 +1218,12 @@ splice_template_attributes (tree *attr_p, tree decl)
|
|||
static void
|
||||
save_template_attributes (tree *attr_p, tree *decl_p)
|
||||
{
|
||||
tree late_attrs = splice_template_attributes (attr_p, *decl_p);
|
||||
tree *q;
|
||||
tree old_attrs = NULL_TREE;
|
||||
|
||||
if (attr_p && *attr_p == error_mark_node)
|
||||
return;
|
||||
|
||||
tree late_attrs = splice_template_attributes (attr_p, *decl_p);
|
||||
if (!late_attrs)
|
||||
return;
|
||||
|
||||
|
@ -1230,7 +1232,7 @@ save_template_attributes (tree *attr_p, tree *decl_p)
|
|||
else
|
||||
q = &TYPE_ATTRIBUTES (*decl_p);
|
||||
|
||||
old_attrs = *q;
|
||||
tree old_attrs = *q;
|
||||
|
||||
/* Merge the late attributes at the beginning with the attribute
|
||||
list. */
|
||||
|
@ -1318,6 +1320,9 @@ cp_reconstruct_complex_type (tree type, tree bottom)
|
|||
static void
|
||||
cp_check_const_attributes (tree attributes)
|
||||
{
|
||||
if (attributes == error_mark_node)
|
||||
return;
|
||||
|
||||
tree attr;
|
||||
for (attr = attributes; attr; attr = TREE_CHAIN (attr))
|
||||
{
|
||||
|
|
|
@ -21458,6 +21458,8 @@ cp_parser_std_attribute_spec (cp_parser *parser)
|
|||
alignas_expr =
|
||||
cp_parser_assignment_expression (parser, /*cast_p=*/false,
|
||||
/**cp_id_kind=*/NULL);
|
||||
if (alignas_expr == error_mark_node)
|
||||
cp_parser_skip_to_end_of_statement (parser);
|
||||
if (alignas_expr == NULL_TREE
|
||||
|| alignas_expr == error_mark_node)
|
||||
return alignas_expr;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2013-10-04 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/58584
|
||||
* g++.dg/cpp0x/gen-attrs-55.C: New.
|
||||
|
||||
2013-10-03 Easwaran Raman <eraman@google.com>
|
||||
|
||||
PR c++/33911
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
// PR c++/58584
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
struct A
|
||||
{
|
||||
int i alignas(this); // { dg-error "17:invalid use of 'this'" }
|
||||
};
|
||||
|
||||
template<int> struct B
|
||||
{
|
||||
int j alignas(this); // { dg-error "17:invalid use of 'this'" }
|
||||
};
|
Loading…
Reference in New Issue