re PR c++/78344 (ICE on invalid c++ code on x86_64-linux-gnu (internal compiler error: tree check: expected tree_list, have error_mark in cp_check_const_attributes, at cp/decl2.c:1347))

/cp
2018-01-17  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/78344
	* decl.c (grokdeclarator): Do not append the error_mark_node
	due to an erroneous optional attribute-specifier-seq.

/testsuite
2018-01-17  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/78344
	* g++.dg/cpp0x/alignas13.C: New.

From-SVN: r256821
This commit is contained in:
Paolo Carlini 2018-01-17 21:29:59 +00:00 committed by Paolo Carlini
parent 06b6c63064
commit a533fc7635
4 changed files with 25 additions and 3 deletions

View file

@ -1,3 +1,9 @@
2018-01-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/78344
* decl.c (grokdeclarator): Do not append the error_mark_node
due to an erroneous optional attribute-specifier-seq.
2018-01-17 Jakub Jelinek <jakub@redhat.com>
PR c++/83897

View file

@ -11491,9 +11491,15 @@ grokdeclarator (const cp_declarator *declarator,
&& declarator->kind == cdk_id
&& declarator->std_attributes
&& attrlist != NULL)
/* [dcl.meaning]/1: The optional attribute-specifier-seq following
a declarator-id appertains to the entity that is declared. */
*attrlist = chainon (*attrlist, declarator->std_attributes);
{
/* [dcl.meaning]/1: The optional attribute-specifier-seq following
a declarator-id appertains to the entity that is declared. */
if (declarator->std_attributes != error_mark_node)
*attrlist = chainon (*attrlist, declarator->std_attributes);
else
/* We should have already diagnosed the issue (c++/78344). */
gcc_assert (seen_error ());
}
/* Handle parameter packs. */
if (parameter_pack_p)

View file

@ -1,3 +1,8 @@
2018-01-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/78344
* g++.dg/cpp0x/alignas13.C: New.
2018-01-17 Jakub Jelinek <jakub@redhat.com>
PR c++/83897

View file

@ -0,0 +1,5 @@
// PR c++/78344
// { dg-do compile { target c++11 } }
alignas(double) int f alignas; // { dg-error "30:expected '\\('" }
alignas(double) int g alignas(double; // { dg-error "37:expected '\\)'" }