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:
parent
ad4fe825e2
commit
6f9f76e336
4 changed files with 40 additions and 0 deletions
|
@ -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
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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.
|
||||
|
|
15
gcc/testsuite/g++.dg/template/sizeof-template-argument.C
Normal file
15
gcc/testsuite/g++.dg/template/sizeof-template-argument.C
Normal 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. */
|
||||
|
Loading…
Add table
Reference in a new issue