[C++] PR c++/96440: ICE-on-invalid-code error recovery.
Commit Message
This patch fixes PR c++/96440 which is an ICE-on-invalid-code regression
affecting mainline.
This patch has been tested on x86_64-pc-linux-gnu, enabling languages
c and c++, with make bootstrap and make -k check with no new failures.
Ok for mainline?
2022-03-07 Roger Sayle <roger@nextmovesoftware.com>
gcc/cp/ChangeLog
PR c++/96440
* decl.cc (start_decl): Defend against prefix_attributes being
error_mark_node.
gcc/testsuite/ChangeLog
PR c++/96440
* g++.dg/pr96440.C: New test case.
Roger
--
Comments
On 3/7/22 08:55, Roger Sayle wrote:
>
> This patch fixes PR c++/96440 which is an ICE-on-invalid-code regression
> affecting mainline.
>
> This patch has been tested on x86_64-pc-linux-gnu, enabling languages
> c and c++, with make bootstrap and make -k check with no new failures.
> Ok for mainline?
>
> 2022-03-07 Roger Sayle <roger@nextmovesoftware.com>
>
> gcc/cp/ChangeLog
> PR c++/96440
> * decl.cc (start_decl): Defend against prefix_attributes being
> error_mark_node.
>
> gcc/testsuite/ChangeLog
> PR c++/96440
> * g++.dg/pr96440.C: New test case.
> +/* { dg-options "-O2" } */
Please remove this line and put the test in g++.dg/cpp0x/
OK with those changes.
Jason
@@ -5483,13 +5483,15 @@ start_decl (const cp_declarator *declarator,
*pushed_scope_p = NULL_TREE;
- attributes = chainon (attributes, prefix_attributes);
+ if (prefix_attributes != error_mark_node)
+ attributes = chainon (attributes, prefix_attributes);
decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
&attributes);
if (decl == NULL_TREE || VOID_TYPE_P (decl)
- || decl == error_mark_node)
+ || decl == error_mark_node
+ || prefix_attributes == error_mark_node)
return error_mark_node;
context = CP_DECL_CONTEXT (decl);
new file mode 100644
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-excess-errors "" } */
+
+auto alignas a [[]] [[const]] ();