From: Richard Guenther Date: Fri, 10 Jul 2009 15:56:52 +0000 (+0000) Subject: backport: re PR c++/37877 (Invalid "invalid use of static" error) X-Git-Tag: releases/gcc-4.3.4~82 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=07a2f9ed9462167e86171220771a0f71ee2e54d9;p=thirdparty%2Fgcc.git backport: re PR c++/37877 (Invalid "invalid use of static" error) 2009-07-10 Richard Guenther Backport from mainline 2009-01-09 John F. Carr PR c++/37877 * parser.c (cp_parser_class_specifier): Clear parser->in_unbraced_linkage_specification_p while parsing class specifiers. * g++.dg/parse/linkage3.C: New test. From-SVN: r149485 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7cd01de33016..4ae784d17137 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,13 @@ +2009-07-10 Richard Guenther + + Backport from mainline + 2009-01-09 John F. Carr + + PR c++/37877 + * parser.c (cp_parser_class_specifier): Clear + parser->in_unbraced_linkage_specification_p while parsing class + specifiers. + 2009-07-10 Richard Guenther Backport from mainline diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index d72793a2b966..644fd708521c 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -14207,6 +14207,7 @@ cp_parser_class_specifier (cp_parser* parser) bool nested_name_specifier_p; unsigned saved_num_template_parameter_lists; bool saved_in_function_body; + bool saved_in_unbraced_linkage_specification_p; tree old_scope = NULL_TREE; tree scope = NULL_TREE; tree bases; @@ -14258,6 +14259,10 @@ cp_parser_class_specifier (cp_parser* parser) /* We are not in a function body. */ saved_in_function_body = parser->in_function_body; parser->in_function_body = false; + /* We are not immediately inside an extern "lang" block. */ + saved_in_unbraced_linkage_specification_p + = parser->in_unbraced_linkage_specification_p; + parser->in_unbraced_linkage_specification_p = false; /* Start the class. */ if (nested_name_specifier_p) @@ -14370,6 +14375,8 @@ cp_parser_class_specifier (cp_parser* parser) parser->in_function_body = saved_in_function_body; parser->num_template_parameter_lists = saved_num_template_parameter_lists; + parser->in_unbraced_linkage_specification_p + = saved_in_unbraced_linkage_specification_p; return type; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 250ae1f209e6..bef72f362331 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2009-07-10 Richard Guenther + + Backport from mainline + 2009-01-09 John F. Carr + + PR c++/37877 + * g++.dg/parse/linkage3.C: New test. + 2009-07-10 Richard Guenther Backport from mainline diff --git a/gcc/testsuite/g++.dg/parse/linkage3.C b/gcc/testsuite/g++.dg/parse/linkage3.C new file mode 100644 index 000000000000..0d952d1e642a --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/linkage3.C @@ -0,0 +1,7 @@ +// PR c++/37877 +// { dg-do compile } + +extern "C++" struct S +{ + static int x; +} s;