Commit 881cae05 by Jakub Jelinek Committed by Jakub Jelinek

search.c (lookup_field_r): If looking for type and non-TYPE_DECL is found...

	* search.c (lookup_field_r): If looking for type and non-TYPE_DECL
	is found, look first if name does not match the structure name.

	* g++.old-deja/g++.other/lookup23.C: New test.

From-SVN: r41447
parent d40cd80a
2001-04-20 Jakub Jelinek <jakub@redhat.com>
* search.c (lookup_field_r): If looking for type and non-TYPE_DECL
is found, look first if name does not match the structure name.
2001-04-19 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (DECL_LANGUAGE): Don't assume DECL_LANG_SPECIFIC is
......
......@@ -1384,11 +1384,27 @@ lookup_field_r (binfo, data)
we ignore all non-types we find. */
if (lfi->want_type && TREE_CODE (nval) != TYPE_DECL)
{
nval = purpose_member (lfi->name, CLASSTYPE_TAGS (type));
if (nval)
nval = TYPE_MAIN_DECL (TREE_VALUE (nval));
else
return NULL_TREE;
if (lfi->name == TYPE_IDENTIFIER (type))
{
/* If the aggregate has no user defined constructors, we allow
it to have fields with the same name as the enclosing type.
If we are looking for that name, find the corresponding
TYPE_DECL. */
for (nval = TREE_CHAIN (nval); nval; nval = TREE_CHAIN (nval))
if (DECL_NAME (nval) == lfi->name
&& TREE_CODE (nval) == TYPE_DECL)
break;
}
else
nval = NULL_TREE;
if (!nval)
{
nval = purpose_member (lfi->name, CLASSTYPE_TAGS (type));
if (nval)
nval = TYPE_MAIN_DECL (TREE_VALUE (nval));
else
return NULL_TREE;
}
}
/* You must name a template base class with a template-id. */
......
2001-04-20 Jakub Jelinek <jakub@redhat.com>
* g++.old-deja/g++.other/lookup23.C: New test.
2001-04-20 Jakub Jelinek <jakub@redhat.com>
* gcc.c-torture/execute/20010403-1.c: New test.
2001-04-19 David Billinghurst <David.Billinghurst@riotinto.com>
......
// Test for proper handling of type lookup if base class has field with the
// same name as the containing class.
// Build don't link:
struct a { int a; };
struct b : a {};
b x;
void foo ()
{
x.a = 22;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment