PR c++/39742
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 13 Apr 2009 04:04:58 +0000 (04:04 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 13 Apr 2009 04:04:58 +0000 (04:04 +0000)
* call.c (joust): Don't crash on variadic fn.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145994 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/overload/extern-C-2.C [new file with mode: 0644]

index 0a3af2a..744941c 100644 (file)
@@ -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
index c942712..24a5bcc 100644 (file)
@@ -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);
        }
index 34d4b20..36b329d 100644 (file)
@@ -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 (file)
index 0000000..562786c
--- /dev/null
@@ -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, ...)
+{
+}