From 0f8a770633286da715d66a24a62ea12026005b4e Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 13 Apr 2009 00:04:58 -0400 Subject: [PATCH] re PR c++/39742 (ice in C++ overload resolution) PR c++/39742 * call.c (joust): Don't crash on variadic fn. From-SVN: r145994 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/call.c | 3 +++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/overload/extern-C-2.C | 22 ++++++++++++++++++++++ 4 files changed, 35 insertions(+) create mode 100644 gcc/testsuite/g++.dg/overload/extern-C-2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0a3af2ac508e..744941c9895e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2009-04-12 Jason Merrill + + PR c++/39742 + * call.c (joust): Don't crash on variadic fn. + 2009-04-10 Jason Merrill PR c++/28301 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index c942712cbec7..24a5bcc8d979 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 34d4b20c820b..36b329dcbd3b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-04-12 Jason Merrill + + PR c++/39742 + * g++.dg/overload/extern-C-2.C: New. + 2009-04-12 Joseph Myers 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 000000000000..562786c049cd --- /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, ...) +{ +}