re PR c++/3761 (ICE in check_template_shadow, at cp/pt.c:2013, with friend and strange class hierarchy)

PR c++/3761
	* name-lookup.c (push_class_level_binding): Don't pass a
	TREE_LIST of ambiguous names to check_template_shadow as it
	only handles declarations. Instead, pull the declaration
	out and pass that.

	PR c++/3761
	* g++.dg/lookup/crash4.C: New test.

From-SVN: r84045
This commit is contained in:
Scott Brumbaugh 2004-07-03 02:19:27 +00:00 committed by Giovanni Bajo
parent 50c6431753
commit ece95d900e
4 changed files with 43 additions and 1 deletions

View File

@ -1,3 +1,11 @@
2004-07-03 Scott Brumbaugh <scottb.lists@verizon.net>
PR c++/3761
* name-lookup.c (push_class_level_binding): Don't pass a
TREE_LIST of ambiguous names to check_template_shadow as it
only handles declarations. Instead, pull the declaration
out and pass that.
2004-07-03 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/14971

View File

@ -2777,7 +2777,18 @@ push_class_level_binding (tree name, tree x)
/* Make sure that this new member does not have the same name
as a template parameter. */
if (TYPE_BEING_DEFINED (current_class_type))
check_template_shadow (x);
{
tree decl = x;
/* We could have been passed a tree list if this is an ambiguous
declaration. If so, pull the declaration out because
check_template_shadow will not handle a TREE_LIST. */
if (TREE_CODE (decl) == TREE_LIST
&& TREE_TYPE (decl) == error_mark_node)
decl = TREE_VALUE (decl);
check_template_shadow (decl);
}
/* [class.mem]

View File

@ -1,3 +1,8 @@
2004-07-03 Scott Brumbaugh <scottb.lists@verizon.net>
PR c++/3761
* g++.dg/lookup/crash4.C: New test.
2004-07-02 Zack Weinberg <zack@codesourcery.com>
* gcc.c-torture/execute/builtin-abs-1.c

View File

@ -0,0 +1,18 @@
// { dg-do compile }
//
// PR 3761
struct A {};
struct B {};
template <class T>
struct Foo : A, B
{
void func(void);
struct Nested
{
friend void Foo::func(void);
};
};