re PR c++/60253 (ICE passing class object through ellipsis (...))
authorPaolo Carlini <paolo.carlini@oracle.com>
Thu, 27 Feb 2014 23:15:20 +0000 (23:15 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 27 Feb 2014 23:15:20 +0000 (23:15 +0000)
/cp
2014-02-27  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/60253
* call.c (convert_arg_to_ellipsis): Return error_mark_node after
error_at.

/testsuite
2014-02-27  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/60253
* g++.dg/overload/ellipsis2.C: New.

From-SVN: r208208

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

index de06bad305233e1604a7d3750daa8dff0eee6407..eaec5222775ecba9ff3630a3fca05734bf9d8dd9 100644 (file)
@@ -1,3 +1,9 @@
+2014-02-27  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/60253
+       * call.c (convert_arg_to_ellipsis): Return error_mark_node after
+       error_at.
+
 2014-02-27  Jason Merrill  <jason@redhat.com>
 
        PR c++/60353
index 700099d99ddfe6dde3733b8d1e65f433160a7348..53b97d9db947747fce72a47abb01d068f102a623 100644 (file)
@@ -6411,8 +6411,7 @@ convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
          if (complain & tf_error)
            error_at (loc, "cannot pass objects of non-trivially-copyable "
                      "type %q#T through %<...%>", arg_type);
-         else
-           return error_mark_node;
+         return error_mark_node;
        }
     }
 
index b95bcfd02f916f575805984c551aa3099f7af9cc..0259ba4fa0fca089862e367570f5e4b623de4845 100644 (file)
@@ -1,3 +1,8 @@
+2014-02-27  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/60253
+       * g++.dg/overload/ellipsis2.C: New.
+
 2014-02-27  Jeff Law  <law@redhat.com>
 
        PR rtl-optimization/52714
diff --git a/gcc/testsuite/g++.dg/overload/ellipsis2.C b/gcc/testsuite/g++.dg/overload/ellipsis2.C
new file mode 100644 (file)
index 0000000..d9118ba
--- /dev/null
@@ -0,0 +1,13 @@
+// PR c++/60253
+
+struct A
+{
+  ~A();
+};
+
+struct B
+{
+  B(...);
+};
+
+B b(0, A());  // { dg-error "cannot pass" }