mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 05:30:24 +08:00
re PR c++/13305 (Parser error with 'class __attribute__((dllimport)) Foo;' type specifier)
PR c++/13305 * parser.c (cp_parser_elaborated_type_specifier): Accept attributes. PR c++/13305 * g++.dg/ext/attrib9.C: New test. From-SVN: r74361
This commit is contained in:
parent
3b099d37f1
commit
360d1b9910
@ -1,3 +1,10 @@
|
||||
2003-12-05 Danny Smith <dannysmith@gcc.gnu.org>
|
||||
Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/13305
|
||||
* parser.c (cp_parser_elaborated_type_specifier): Accept
|
||||
attributes.
|
||||
|
||||
2003-12-05 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/13314
|
||||
|
@ -8647,6 +8647,14 @@ cp_parser_type_name (cp_parser* parser)
|
||||
typename :: [opt] nested-name-specifier template [opt]
|
||||
template-id
|
||||
|
||||
GNU extension:
|
||||
|
||||
elaborated-type-specifier:
|
||||
class-key attributes :: [opt] nested-name-specifier [opt] identifier
|
||||
class-key attributes :: [opt] nested-name-specifier [opt]
|
||||
template [opt] template-id
|
||||
enum attributes :: [opt] nested-name-specifier [opt] identifier
|
||||
|
||||
If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
|
||||
declared `friend'. If IS_DECLARATION is TRUE, then this
|
||||
elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
|
||||
@ -8662,6 +8670,7 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
|
||||
enum tag_types tag_type;
|
||||
tree identifier;
|
||||
tree type = NULL_TREE;
|
||||
tree attributes = NULL_TREE;
|
||||
|
||||
/* See if we're looking at the `enum' keyword. */
|
||||
if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
|
||||
@ -8670,6 +8679,8 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
|
||||
cp_lexer_consume_token (parser->lexer);
|
||||
/* Remember that it's an enumeration type. */
|
||||
tag_type = enum_type;
|
||||
/* Parse the attributes. */
|
||||
attributes = cp_parser_attributes_opt (parser);
|
||||
}
|
||||
/* Or, it might be `typename'. */
|
||||
else if (cp_lexer_next_token_is_keyword (parser->lexer,
|
||||
@ -8689,6 +8700,8 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
|
||||
tag_type = cp_parser_class_key (parser);
|
||||
if (tag_type == none_type)
|
||||
return error_mark_node;
|
||||
/* Parse the attributes. */
|
||||
attributes = cp_parser_attributes_opt (parser);
|
||||
}
|
||||
|
||||
/* Look for the `::' operator. */
|
||||
@ -8858,7 +8871,7 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
|
||||
declaration context. */
|
||||
|
||||
type = xref_tag (tag_type, identifier,
|
||||
/*attributes=*/NULL_TREE,
|
||||
attributes,
|
||||
(is_friend
|
||||
|| !is_declaration
|
||||
|| cp_lexer_next_token_is_not (parser->lexer,
|
||||
|
@ -1,3 +1,8 @@
|
||||
2003-12-05 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/13305
|
||||
* g++.dg/ext/attrib9.C: New test.
|
||||
|
||||
2003-12-05 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/13314
|
||||
|
5
gcc/testsuite/g++.dg/ext/attrib9.C
Normal file
5
gcc/testsuite/g++.dg/ext/attrib9.C
Normal file
@ -0,0 +1,5 @@
|
||||
class __attribute__((unused)) C;
|
||||
struct __attribute__((unused)) S;
|
||||
union __attribute__((unused)) U;
|
||||
enum e {};
|
||||
enum __attribute__((unused)) e;
|
Loading…
x
Reference in New Issue
Block a user