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> 2001-04-19 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (DECL_LANGUAGE): Don't assume DECL_LANG_SPECIFIC is * cp-tree.h (DECL_LANGUAGE): Don't assume DECL_LANG_SPECIFIC is
......
...@@ -1384,11 +1384,27 @@ lookup_field_r (binfo, data) ...@@ -1384,11 +1384,27 @@ lookup_field_r (binfo, data)
we ignore all non-types we find. */ we ignore all non-types we find. */
if (lfi->want_type && TREE_CODE (nval) != TYPE_DECL) if (lfi->want_type && TREE_CODE (nval) != TYPE_DECL)
{ {
nval = purpose_member (lfi->name, CLASSTYPE_TAGS (type)); if (lfi->name == TYPE_IDENTIFIER (type))
if (nval) {
nval = TYPE_MAIN_DECL (TREE_VALUE (nval)); /* If the aggregate has no user defined constructors, we allow
else it to have fields with the same name as the enclosing type.
return NULL_TREE; 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. */ /* You must name a template base class with a template-id. */
......
2001-04-20 Jakub Jelinek <jakub@redhat.com> 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. * gcc.c-torture/execute/20010403-1.c: New test.
2001-04-19 David Billinghurst <David.Billinghurst@riotinto.com> 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