From 56b722459a756a283e97c8508c8e187a1c813333 Mon Sep 17 00:00:00 2001
From: Maximilian Downey Twiss <creatorsmithmdt@gmail.com>
Date: Fri, 18 Nov 2022 09:23:33 +1100
Subject: [PATCH 18/56] Fix regression around friend declarations in local
 classes [PR69410].

gcc/cp/ChangeLog:

	* name-lookup.cc (pop_local_binding): Remove checking assert.
	(pushdecl): Remove overzealous check for friend declarations finding a matching declaration in a nearby scope.
---
 gcc/cp/name-lookup.cc | 20 +-------------------
 1 file changed, 1 insertion(+), 19 deletions(-)

diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc
index dfa6fb40675..b5f6e84cad9 100644
--- a/gcc/cp/name-lookup.cc
+++ b/gcc/cp/name-lookup.cc
@@ -2481,7 +2481,6 @@ pop_local_binding (tree id, tree decl)
     binding->value = NULL_TREE;
   else
     {
-      gcc_checking_assert (binding->type == decl);
       binding->type = NULL_TREE;
     }
 
@@ -3746,24 +3745,7 @@ pushdecl (tree decl, bool hiding)
       check_template_shadow (decl);
 
       if (DECL_DECLARES_FUNCTION_P (decl))
-	{
-	  check_default_args (decl);
-
-	  if (hiding)
-	    {
-	      if (level->kind != sk_namespace)
-		{
-		  /* In a local class, a friend function declaration must
-		     find a matching decl in the innermost non-class scope.
-		     [class.friend/11] */
-		  error_at (DECL_SOURCE_LOCATION (decl),
-			    "friend declaration %qD in local class without "
-			    "prior local declaration", decl);
-		  /* Don't attempt to push it.  */
-		  return error_mark_node;
-		}
-	    }
-	}
+	check_default_args (decl);
 
       if (level->kind != sk_namespace)
 	{
-- 
2.38.1

Reply via email to