From f0a7c00bfe8a7e2af956eedfbdbb5cf63d28a1dc Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 4 Dec 2015 13:18:27 -0500 Subject: [PATCH] re PR c++/68645 (FAIL: c-c++-common/attr-simd-3.c -std=gnu++11 (test for excess errors)) PR c++/68645 * parser.c (cp_parser_direct_declarator) (cp_parser_late_return_type_opt): Put Cilk+ attributes on declarator->attributes, not std_attributes. From-SVN: r231294 --- gcc/cp/ChangeLog | 7 +++++++ gcc/cp/parser.c | 16 +++++++++------- gcc/testsuite/c-c++-common/attr-simd-3.c | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index dd56155b349..4568fb8c87a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2015-12-04 Jason Merrill + + PR c++/68645 + * parser.c (cp_parser_direct_declarator) + (cp_parser_late_return_type_opt): Put Cilk+ attributes on + declarator->attributes, not std_attributes. + 2015-12-04 David Malcolm * cp-tree.h (class cp_expr): New class. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 17dba0d0dc6..b28d17a9b49 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -18714,6 +18714,7 @@ cp_parser_direct_declarator (cp_parser* parser, /* In here, we handle cases where attribute is used after the function declaration. For example: void func (int x) __attribute__((vector(..))); */ + tree gnu_attrs = NULL_TREE; if (flag_cilkplus && cp_next_tokens_can_be_gnu_attribute_p (parser)) { @@ -18727,7 +18728,7 @@ cp_parser_direct_declarator (cp_parser* parser, else if (!cp_parser_parse_definitely (parser)) ; else - attrs = chainon (attr, attrs); + gnu_attrs = attr; } tree requires_clause = NULL_TREE; late_return = (cp_parser_late_return_type_opt @@ -18748,6 +18749,7 @@ cp_parser_direct_declarator (cp_parser* parser, late_return, requires_clause); declarator->std_attributes = attrs; + declarator->attributes = gnu_attrs; /* Any subsequent parameter lists are to do with return type, so are not those of the declared function. */ @@ -19547,17 +19549,17 @@ cp_parser_late_return_type_opt (cp_parser* parser, cp_declarator *declarator, requires_clause = cp_parser_requires_clause_opt (parser); if (cilk_simd_fn_vector_p) - declarator->std_attributes + declarator->attributes = cp_parser_late_parsing_cilk_simd_fn_info (parser, - declarator->std_attributes); + declarator->attributes); if (declare_simd_p) - declarator->std_attributes + declarator->attributes = cp_parser_late_parsing_omp_declare_simd (parser, - declarator->std_attributes); + declarator->attributes); if (oacc_routine_p) - declarator->std_attributes + declarator->attributes = cp_parser_late_parsing_oacc_routine (parser, - declarator->std_attributes); + declarator->attributes); if (quals >= 0) { diff --git a/gcc/testsuite/c-c++-common/attr-simd-3.c b/gcc/testsuite/c-c++-common/attr-simd-3.c index 35dd4c00563..d61ba82de3c 100644 --- a/gcc/testsuite/c-c++-common/attr-simd-3.c +++ b/gcc/testsuite/c-c++-common/attr-simd-3.c @@ -2,4 +2,4 @@ /* { dg-options "-fcilkplus" } */ /* { dg-prune-output "undeclared here \\(not in a function\\)|\[^\n\r\]* was not declared in this scope" } */ -void f () __attribute__((__simd__, __vector__)); /* { dg-error "in the same function marked as a Cilk Plus" "PR68158" { xfail c++ } } */ +void f () __attribute__((__simd__, __vector__)); /* { dg-error "in the same function marked as a Cilk Plus" "PR68158" } */ -- 2.30.2