OSDN Git Service

PR c++/37877
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Jan 2009 14:45:44 +0000 (14:45 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Jan 2009 14:45:44 +0000 (14:45 +0000)
* parser.c (cp_parser_class_specifier): Clear
parser->in_unbraced_linkage_specification_p while parsing class
specifiers.

* g++.dg/parse/linkage3.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@143206 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/linkage3.C [new file with mode: 0644]

index a0be740..6d09faf 100644 (file)
@@ -1,3 +1,10 @@
+2009-01-09  John F. Carr  <jfc@mit.edu>
+
+       PR c++/37877
+       * parser.c (cp_parser_class_specifier): Clear
+       parser->in_unbraced_linkage_specification_p while parsing class
+       specifiers.
+
 2009-01-07  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/38725
index 545d3dd..f497d66 100644 (file)
@@ -14873,6 +14873,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;
@@ -14924,6 +14925,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)
@@ -15036,6 +15041,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;
 }
index 199cd6e..a86c18c 100644 (file)
@@ -1,3 +1,8 @@
+2009-01-09  John F. Carr  <jfc@mit.edu>
+
+       PR c++/37877
+       * g++.dg/parse/linkage3.C: New test.
+
 2009-01-09  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/38771
diff --git a/gcc/testsuite/g++.dg/parse/linkage3.C b/gcc/testsuite/g++.dg/parse/linkage3.C
new file mode 100644 (file)
index 0000000..0d952d1
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/37877
+// { dg-do compile }
+
+extern "C++" struct S
+{
+  static int x;
+} s;