diff options
author | Jason Merrill <jason@redhat.com> | 2009-04-13 00:04:58 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2009-04-13 00:04:58 -0400 |
commit | 0f8a770633286da715d66a24a62ea12026005b4e (patch) | |
tree | 31e5a929039a8d6d33702ce809c8b265354ca759 | |
parent | 6312fca0d9a707c945815fe1be6d58c3c11306e4 (diff) | |
download | gcc-0f8a770633286da715d66a24a62ea12026005b4e.zip gcc-0f8a770633286da715d66a24a62ea12026005b4e.tar.gz gcc-0f8a770633286da715d66a24a62ea12026005b4e.tar.bz2 |
re PR c++/39742 (ice in C++ overload resolution)
PR c++/39742
* call.c (joust): Don't crash on variadic fn.
From-SVN: r145994
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/call.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/overload/extern-C-2.C | 22 |
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0a3af2a..744941c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2009-04-12 Jason Merrill <jason@redhat.com> + + PR c++/39742 + * call.c (joust): Don't crash on variadic fn. + 2009-04-10 Jason Merrill <jason@redhat.com> PR c++/28301 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index c942712..24a5bcc 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -6801,6 +6801,9 @@ joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn) for (i = 0; i < len; ++i) { + /* Don't crash if the fn is variadic. */ + if (!parms1) + break; parms1 = TREE_CHAIN (parms1); parms2 = TREE_CHAIN (parms2); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 34d4b20..36b329d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-04-12 Jason Merrill <jason@redhat.com> + + PR c++/39742 + * g++.dg/overload/extern-C-2.C: New. + 2009-04-12 Joseph Myers <joseph@codesourcery.com> PR preprocessor/31869 diff --git a/gcc/testsuite/g++.dg/overload/extern-C-2.C b/gcc/testsuite/g++.dg/overload/extern-C-2.C new file mode 100644 index 0000000..562786c --- /dev/null +++ b/gcc/testsuite/g++.dg/overload/extern-C-2.C @@ -0,0 +1,22 @@ +// PR c++/39742 + +void f( int, ...); + +struct S +{ +}; + +void +g() +{ + void f( int, ...); + + S t; + + f(1, t); +} + +void +f( int i, ...) +{ +} |