re PR c++/7939 (ICE on function template specialization)
PR c++/7939 * typeck.c (comptypes): Don't ICE when its first argument is error_mark_node. (compparms): Reverse the arguments of same_type_p. * g++.dg/template/crash11.C: New test. From-SVN: r71432
This commit is contained in:
parent
6cd2fc59b0
commit
ae8803a8e1
@ -1,3 +1,10 @@
|
||||
2003-09-16 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
|
||||
|
||||
PR c++/7939
|
||||
* typeck.c (comptypes): Don't ICE when its first argument is
|
||||
error_mark_node.
|
||||
(compparms): Reverse the arguments of same_type_p.
|
||||
|
||||
2003-09-15 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/12184
|
||||
|
@ -900,11 +900,8 @@ comptypes (tree t1, tree t2, int strict)
|
||||
if (t1 == t2)
|
||||
return true;
|
||||
|
||||
/* This should never happen. */
|
||||
my_friendly_assert (t1 != error_mark_node, 307);
|
||||
|
||||
/* Suppress errors caused by previously reported errors */
|
||||
if (t2 == error_mark_node)
|
||||
if (t1 == error_mark_node || t2 == error_mark_node)
|
||||
return false;
|
||||
|
||||
my_friendly_assert (TYPE_P (t1) && TYPE_P (t2), 20030623);
|
||||
@ -1170,7 +1167,7 @@ compparms (tree parms1, tree parms2)
|
||||
they fail to match. */
|
||||
if (!t1 || !t2)
|
||||
return false;
|
||||
if (!same_type_p (TREE_VALUE (t2), TREE_VALUE (t1)))
|
||||
if (!same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2003-09-16 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
|
||||
|
||||
PR c++/7939
|
||||
* g++.dg/template/crash11.C: New test.
|
||||
|
||||
2003-09-16 Jason Merrill <jason@redhat.com>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
|
9
gcc/testsuite/g++.dg/template/crash11.C
Normal file
9
gcc/testsuite/g++.dg/template/crash11.C
Normal file
@ -0,0 +1,9 @@
|
||||
// { dg-do compile }
|
||||
|
||||
// Origin: kparz@iastate.edu
|
||||
|
||||
// PR c++/7939: ICE for invalid function parameter after template
|
||||
// substitution.
|
||||
|
||||
template <class T, class U> void foo(T, U) {}
|
||||
template <class T> void foo<T,void>(T, void) {} // { dg-error "incomplete|invalid|partial" }
|
Loading…
Reference in New Issue
Block a user