diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 29888c7b2bcaa9236e9eb6d806ecebf73cb59985..896749ede5d379717c5c5a92885b3c02884b2d3d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2006-07-01  Jason Merrill  <jason@redhat.com>
+
+	PR c++/28215
+	* method.c (make_thunk): Unset DECL_USE_TEMPLATE and 
+	DECL_TEMPLATE_INFO.
+
 2006-06-30  Jason Merrill  <jason@redhat.com>
 
 	PR c++/26577
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index 1f06229eb1ce23a079791aeadb4d3e11ea781108..9029e85a653ac31de32977dac44473324209714d 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -161,6 +161,9 @@ make_thunk (tree function, bool this_adjusting,
   DECL_DECLARED_INLINE_P (thunk) = 0;
   /* Nor has it been deferred.  */
   DECL_DEFERRED_FN (thunk) = 0;
+  /* Nor is it a template instantiation.  */
+  DECL_USE_TEMPLATE (thunk) = 0;
+  DECL_TEMPLATE_INFO (thunk) = NULL;
 
   /* Add it to the list of thunks associated with FUNCTION.  */
   TREE_CHAIN (thunk) = DECL_THUNKS (function);
diff --git a/gcc/cp/search.c b/gcc/cp/search.c
index 21d1b7762465cc44b0ffa4b9bbe38599abb67506..2af5e04d3631fb94268a5e12f8a9b0f24a46887f 100644
--- a/gcc/cp/search.c
+++ b/gcc/cp/search.c
@@ -792,11 +792,12 @@ friend_accessible_p (tree scope, tree decl, tree binfo)
     if (protected_accessible_p (decl, TREE_VALUE (t), binfo))
       return 1;
 
-  /* Nested classes are implicitly friends of their enclosing types, as
+  /* Nested classes have the same access as their enclosing types, as
      per core issue 45 (this is a change from the standard).  */
   if (TYPE_P (scope))
     for (t = TYPE_CONTEXT (scope); t && TYPE_P (t); t = TYPE_CONTEXT (t))
-      if (protected_accessible_p (decl, t, binfo))
+      if (protected_accessible_p (decl, t, binfo)
+	  || friend_accessible_p (t, decl, binfo))
 	return 1;
 
   if (TREE_CODE (scope) == FUNCTION_DECL