commit 860bfe6aaf2470540a1280f127f20174d280f344 Author: Jason Merrill Date: Wed Dec 2 23:02:28 2015 -0500 PR c++/68645 * parser.c (cp_parser_direct_declarator) (cp_parser_late_return_type_opt): Put Cilk+ attributes on declarator->attributes, not std_attributes. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 1c14354..f4b23fd 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -18492,6 +18492,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)) { @@ -18505,7 +18506,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 @@ -18526,6 +18527,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. */ @@ -19325,17 +19327,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 35dd4c0..d61ba82 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" } */