re PR c++/19608 (ICE after friend function definition in local class)
authorNathan Sidwell <nathan@codesourcery.com>
Mon, 14 Feb 2005 17:50:58 +0000 (17:50 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Mon, 14 Feb 2005 17:50:58 +0000 (17:50 +0000)
cp:
PR c++/19608
* parser.c (cp_parser_late_parsing_for_member): Use
current_function_decl as scope to push to and from.
testsuite:
PR c++/19608
* g++.dg/parse/local-class1.C: New.

From-SVN: r95036

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

index add1476e0d86c36d7a388c7db8752f16fbb65260..b8f356fd7582294f5cdb89f07fb9284c7f738098 100644 (file)
@@ -1,5 +1,9 @@
 2005-02-14  Nathan Sidwell  <nathan@codesourcery.com>
 
+       PR c++/19608
+       * parser.c (cp_parser_late_parsing_for_member): Use
+       current_function_decl as scope to push to and from.
+
        PR c++/19884
        * pt.c (check_explicit_specialization): Make sure namespace
        binding lookup found an overloaded function.
index 453bc693665a536237b1bd9263949d78ccbfc7d4..f38f6fbc78f1fa13909a0982e3818965b6a8280b 100644 (file)
@@ -15286,9 +15286,10 @@ cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
       tokens = DECL_PENDING_INLINE_INFO (member_function);
       DECL_PENDING_INLINE_INFO (member_function) = NULL;
       DECL_PENDING_INLINE_P (member_function) = 0;
-      /* If this was an inline function in a local class, enter the scope
-        of the containing function.  */
-      function_scope = decl_function_context (member_function);
+      
+      /* If this is a local class, enter the scope of the containing
+        function.  */
+      function_scope = current_function_decl;
       if (function_scope)
        push_function_context_to (function_scope);
 
index 61fef177c4188536e3a1de25cb6b6bf0ffe85ebd..8384855351f20b2b183ad24f19628119176ee61d 100644 (file)
@@ -1,5 +1,8 @@
 2005-02-14  Nathan Sidwell  <nathan@codesourcery.com>
 
+       PR c++/19608
+       * g++.dg/parse/local-class1.C: New.
+
        PR c++/19895
        * g++.dg/parse/ptrmem3.C: New.
 
diff --git a/gcc/testsuite/g++.dg/parse/local-class1.C b/gcc/testsuite/g++.dg/parse/local-class1.C
new file mode 100644 (file)
index 0000000..4fc7e6e
--- /dev/null
@@ -0,0 +1,14 @@
+ // Copyright (C) 2005 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 14 Feb 2005 <nathan@codesourcery.com>
+
+// Origin: Jorn Wolfgang Rennecke <amylaar@gcc.gnu.org>
+// Bug 19608: ICE on invalid
+
+
+void f ()
+{
+  class c
+    {
+      friend void g () { } // { dg-error "local class definition" "" }
+    };
+}