* tree.c (cp_tree_equal): Fix CONSTRUCTOR handling.

From-SVN: r162378
This commit is contained in:
Jason Merrill 2010-07-21 10:38:12 -04:00 committed by Jason Merrill
parent 557165ae94
commit 31d06664e6
2 changed files with 16 additions and 4 deletions

View File

@ -1,5 +1,7 @@
2010-07-21 Jason Merrill <jason@redhat.com>
* tree.c (cp_tree_equal): Fix CONSTRUCTOR handling.
* parser.c (cp_parser_init_declarator): Pass LOOKUP_NORMAL
to cp_finish_decl.

View File

@ -2023,11 +2023,21 @@ cp_tree_equal (tree t1, tree t2)
/* We need to do this when determining whether or not two
non-type pointer to member function template arguments
are the same. */
if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
/* The first operand is RTL. */
&& TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
|| CONSTRUCTOR_NELTS (t1) != CONSTRUCTOR_NELTS (t2))
return false;
return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
{
tree field, value;
unsigned int i;
FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1), i, field, value)
{
constructor_elt *elt2 = CONSTRUCTOR_ELT (t2, i);
if (!cp_tree_equal (field, elt2->index)
|| !cp_tree_equal (value, elt2->value))
return false;
}
}
return true;
case TREE_LIST:
if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))