diff options
| author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-11-20 06:26:11 +0000 |
|---|---|---|
| committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-11-20 06:26:11 +0000 |
| commit | 299a31a8a883dae7a1a5753d26cc7a71a98f428f (patch) | |
| tree | a1484ba038821600a058165256579857c900269d | |
| parent | 877e82f648bab65b7d0ccbb0c32b8b8221880eaf (diff) | |
| download | ppe42-gcc-299a31a8a883dae7a1a5753d26cc7a71a98f428f.tar.gz ppe42-gcc-299a31a8a883dae7a1a5753d26cc7a71a98f428f.zip | |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130308 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/cp/pt.c | 4 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/overload/template3.C | 15 |
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 193931ddfc1..d8e95c68261 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 5e1335f439a..4b09e856459 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -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--; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e93fa8acfa6..585c7209b68 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/g++.dg/overload/template3.C b/gcc/testsuite/g++.dg/overload/template3.C new file mode 100644 index 00000000000..90ccfd8add6 --- /dev/null +++ b/gcc/testsuite/g++.dg/overload/template3.C @@ -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" } } */ |

