diff --git a/src/ansi-c/parser.y b/src/ansi-c/parser.y index 6665ca6279f..ca8bed9b86b 100644 --- a/src/ansi-c/parser.y +++ b/src/ansi-c/parser.y @@ -1008,7 +1008,7 @@ post_declarator_attribute: parser_stack($$).set(ID_flavor, ID_gcc); parser_stack($$).operands().swap(parser_stack($4).operands()); } - | gcc_attribute_specifier + | attribute_specifier ; post_declarator_attributes: @@ -1114,8 +1114,8 @@ declaration_qualifier_list: { $$=merge($1, $2); } - | gcc_attribute_specifier - | declaration_qualifier_list gcc_attribute_specifier + | attribute_specifier + | declaration_qualifier_list attribute_specifier { $$=merge($1, $2); } @@ -1134,7 +1134,7 @@ type_qualifier_list: /* The following is to allow mixing of type attributes with type qualifiers, but the list has to start with a proper type qualifier. */ - | type_qualifier_list gcc_attribute_specifier + | type_qualifier_list attribute_specifier { $$=merge($1, $2); } @@ -1180,12 +1180,12 @@ alignas_specifier: attribute_or_type_qualifier: type_qualifier - | gcc_attribute_specifier + | attribute_specifier ; attribute_or_type_qualifier_or_storage_class: type_qualifier - | gcc_attribute_specifier + | attribute_specifier | storage_class ; @@ -1671,11 +1671,15 @@ gcc_attribute_list: } ; +attribute_specifier: + gcc_attribute_specifier + | TOK_NORETURN + { $$=$1; set($$, ID_noreturn); } + ; + gcc_attribute_specifier: TOK_GCC_ATTRIBUTE '(' '(' gcc_attribute_list ')' ')' { $$=$4; } - | TOK_NORETURN - { $$=$1; set($$, ID_noreturn); } ; gcc_type_attribute_opt: