mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 03:40:26 +08:00
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:
parent
50c6431753
commit
ece95d900e
@ -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
|
||||
|
@ -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]
|
||||
|
||||
|
@ -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
|
||||
|
18
gcc/testsuite/g++.dg/lookup/crash4.C
Normal file
18
gcc/testsuite/g++.dg/lookup/crash4.C
Normal 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);
|
||||
};
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user