From: H.J. Lu Date: Thu, 28 Apr 2011 20:29:44 +0000 (+0000) Subject: re PR c++/39219 (attribute doesn't work with enums properly) X-Git-Tag: releases/gcc-4.3.6~107 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8d7f69ce11fc939c8f830b04eb7f47b3b3ad6ddd;p=thirdparty%2Fgcc.git re PR c++/39219 (attribute doesn't work with enums properly) gcc/cp 2009-02-18 H.J. Lu PR c++/39219 * parser.c (cp_parser_enum_specifier): Apply all attributes. gcc/testsuite/ 2009-02-18 H.J. Lu PR c++/39219 * g++.dg/parse/attr3.C: New. From-SVN: r173133 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index dafef233d77b..3f0c07578062 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2009-02-18 H.J. Lu + + PR c++/39219 + * parser.c (cp_parser_enum_specifier): Apply all attributes. + 2011-03-08 Jason Merrill PR c++/45651 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index d13cf379a558..5fc93f5f87f1 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -11437,6 +11437,7 @@ cp_parser_enum_specifier (cp_parser* parser) if (cp_parser_allow_gnu_extensions_p (parser)) { tree trailing_attr = cp_parser_attributes_opt (parser); + trailing_attr = chainon (trailing_attr, attributes); cplus_decl_attributes (&type, trailing_attr, (int) ATTR_FLAG_TYPE_IN_PLACE); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b3f0d169331e..bc670dc75ec1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-02-18 H.J. Lu + + PR c++/39219 + * g++.dg/parse/attr3.C: New. + 2011-03-08 Jason Merrill * g++.dg/template/anon5.C: New. diff --git a/gcc/testsuite/g++.dg/parse/attr3.C b/gcc/testsuite/g++.dg/parse/attr3.C new file mode 100644 index 000000000000..848df055cedb --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/attr3.C @@ -0,0 +1,14 @@ +// PR c++/39219 + +enum __attribute__ ((deprecated)) E { e }; +struct S { enum __attribute__ ((deprecated)) F { f = e }; }; + +int main () { + E x; // { dg-warning "'E' is deprecated" "" } + x = e; + + S::F y; // { dg-warning "'F' is deprecated" "" } + y = S::f; + + return x + y; +}