re PR c++/15701 (ICE with friends and template template parameter)

PR c++/15701
	* friend.c (add_friend): Do not try to perform access checks for
	functions from dependent classes.

	PR c++/15701
	* g++.dg/template/friend29.C: New test.

From-SVN: r82516
This commit is contained in:
Mark Mitchell 2004-05-31 22:48:30 +00:00 committed by Mark Mitchell
parent 5847e53ee7
commit e17b3578a3
4 changed files with 27 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2004-05-31 Mark Mitchell <mark@codesourcery.com>
PR c++/15701
* friend.c (add_friend): Do not try to perform access checks for
functions from dependent classes.
2004-05-31 Gabriel Dos Reis <gdr@integrable-solutions.net>
* cxx-pretty-print.c (pp_cxx_colon_colon): Expor.

View File

@ -164,7 +164,11 @@ add_friend (tree type, tree decl, bool complain)
}
if (DECL_CLASS_SCOPE_P (decl))
perform_or_defer_access_check (TYPE_BINFO (DECL_CONTEXT (decl)), decl);
{
tree class_binfo = TYPE_BINFO (DECL_CONTEXT (decl));
if (!uses_template_parms (BINFO_TYPE (class_binfo)))
perform_or_defer_access_check (class_binfo, decl);
}
maybe_add_class_template_decl_list (type, decl, /*friend_p=*/1);

View File

@ -1,3 +1,8 @@
2004-05-31 Mark Mitchell <mark@codesourcery.com>
PR c++/15701
* g++.dg/template/friend29.C: New test.
2004-05-31 Joseph S. Myers <jsm@polyomino.org.uk>
PR c/15749

View File

@ -0,0 +1,11 @@
// PR c++/15701
template<template<int> class T> struct A : T<0>
{
void foo();
template<template<int> class U> friend void A<U>::foo();
};
template<int> struct B {};
A<B> a;