re PR c++/29573 (ICE after parse error in template argument)

2007-01-11  Simon Martin  <simartin@users.sourceforge.net>

	PR c++/29573
	* tree.c (cp_tree_equal): Properly handle MODOP_EXPR trees.

From-SVN: r120683
This commit is contained in:
Simon Martin 2007-01-11 19:46:03 +00:00 committed by Simon Martin
parent ad4fe825e2
commit 6f9f76e336
4 changed files with 40 additions and 0 deletions

View file

@ -1,3 +1,8 @@
2007-01-11 Simon Martin <simartin@users.sourceforge.net>
PR c++/29573
* tree.c (cp_tree_equal): Properly handle MODOP_EXPR trees.
2007-01-10 Mark Mitchell <mark@codesourcery.com>
PR c++/28999

View file

@ -1709,6 +1709,21 @@ cp_tree_equal (tree t1, tree t2)
return cp_tree_equal (o1, o2);
}
case MODOP_EXPR:
{
tree t1_op1, t2_op1;
if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
return false;
t1_op1 = TREE_OPERAND (t1, 1);
t2_op1 = TREE_OPERAND (t2, 1);
if (TREE_CODE (t1_op1) != TREE_CODE (t2_op1))
return false;
return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2));
}
case PTRMEM_CST:
/* Two pointer-to-members are the same if they point to the same
field or function in the same class. */

View file

@ -1,3 +1,8 @@
2007-01-11 Simon Martin <simartin@users.sourceforge.net>
PR c++/29573
* g++.dg/template/sizeof-template-argument.C: New test.
2007-01-11 Jan Hubicka <jh@suse.cz>
* gcc.dg/tree-ssa/tailrecursion-4.c: Update dump file.

View file

@ -0,0 +1,15 @@
/* This used to ICE (PR c++/29573) */
/* { dg-do "compile" } */
template<int> struct A {};
template<typename> struct B : A <sizeof(=)> {}; /* { dg-error "parse error in template argument list" } */
template<typename> struct C : A <sizeof(=)> {}; /* { dg-error "parse error in template argument list" } */
int a;
template<typename> struct D : A <sizeof(a=1)> {}; /* This used to ICE as well. */
template<typename> struct E : A <sizeof(a=1)> {}; /* This used to ICE as well. */