re PR c++/33962 (ICE at call to overloaded template function with variable-length function argument list)

PR c++/33962
	* pt.c (more_specialized_fn): Don't segfault if one or
	both argument list end with ellipsis.

	* g++.dg/overload/template3.C: New test.

From-SVN: r130308
This commit is contained in:
Jakub Jelinek 2007-11-20 07:26:11 +01:00 committed by Jakub Jelinek
parent cb96cf3b9d
commit 63d34078b6
4 changed files with 30 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2007-11-20 Jakub Jelinek <jakub@redhat.com>
PR c++/33962
* pt.c (more_specialized_fn): Don't segfault if one or
both argument list end with ellipsis.
2007-11-18 Jakub Jelinek <jakub@redhat.com>
PR c++/30988

View File

@ -13523,6 +13523,10 @@ more_specialized_fn (tree pat1, tree pat2, int len)
args1 = TREE_CHAIN (args1);
args2 = TREE_CHAIN (args2);
/* Stop when an ellipsis is seen. */
if (args1 == NULL_TREE || args2 == NULL_TREE)
break;
}
processing_template_decl--;

View File

@ -1,3 +1,8 @@
2007-11-20 Jakub Jelinek <jakub@redhat.com>
PR c++/33962
* g++.dg/overload/template3.C: New test.
2007-11-19 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/33317

View File

@ -0,0 +1,15 @@
// PR c++/33962
// { dg-do compile }
template <class T> struct A;
template <class U> void foo (const U &x, ...);
template <class T> void foo (const A<T> &x, ...);
void bar (const A<int> &x, const char *y)
{
foo (x, y);
}
/* { dg-final { scan-assembler "_Z3fooIiEvRK1AIT_Ez" } } */
/* { dg-final { scan-assembler-not "_Z3fooI1AIiEEvRKT_z" } } */