aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2009-04-13 00:04:58 -0400
committerJason Merrill <jason@gcc.gnu.org>2009-04-13 00:04:58 -0400
commit0f8a770633286da715d66a24a62ea12026005b4e (patch)
tree31e5a929039a8d6d33702ce809c8b265354ca759
parent6312fca0d9a707c945815fe1be6d58c3c11306e4 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/cp/call.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/overload/extern-C-2.C22
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, ...)
+{
+}