From 9bb238bbf3f876917decea780d08d03461a6dba4 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 30 May 2017 09:27:33 +0200 Subject: [PATCH] backport: re PR c++/77637 (ICE on x86_64-linux-gnu (Segmentation fault, tree_check, cp_parser_std_attribute_list...)) Backported from mainline 2016-09-20 Jakub Jelinek PR c++/77637 * parser.c (cp_parser_std_attribute_list): Reject ... without preceding attribute. * g++.dg/cpp0x/gen-attrs-62.C: New test. From-SVN: r248611 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/parser.c | 8 ++++++-- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/cpp0x/gen-attrs-62.C | 5 +++++ 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/gen-attrs-62.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 487e2c7bb97b..7770101444ea 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,6 +1,12 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2016-09-20 Jakub Jelinek + + PR c++/77637 + * parser.c (cp_parser_std_attribute_list): Reject ... without + preceding attribute. + 2016-09-16 Jakub Jelinek PR c++/77375 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 03b93ab2d751..2cfcd79d0505 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -22528,8 +22528,12 @@ cp_parser_std_attribute_list (cp_parser *parser) if (token->type == CPP_ELLIPSIS) { cp_lexer_consume_token (parser->lexer); - TREE_VALUE (attribute) - = make_pack_expansion (TREE_VALUE (attribute)); + if (attribute == NULL_TREE) + error_at (token->location, + "expected attribute before %<...%>"); + else + TREE_VALUE (attribute) + = make_pack_expansion (TREE_VALUE (attribute)); token = cp_lexer_peek_token (parser->lexer); } if (token->type != CPP_COMMA) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7a2b4bc8c682..0192f663886a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -3,6 +3,9 @@ Backported from mainline 2016-09-20 Jakub Jelinek + PR c++/77637 + * g++.dg/cpp0x/gen-attrs-62.C: New test. + PR middle-end/77624 * c-c++-common/pr77624-1.c: New test. * c-c++-common/pr77624-2.c: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-62.C b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-62.C new file mode 100644 index 000000000000..5bd8778707b3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-62.C @@ -0,0 +1,5 @@ +// PR c++/77637 +// { dg-do compile { target c++11 } } + +int [[...]] a; // { dg-error "expected attribute before '...'" } +int [[,,...]] b; // { dg-error "expected attribute before '...'" } -- 2.47.2