===================================================================
@@ -0,0 +1,16 @@
+// PR c++/51223
+
+struct A
+{
+ A foo(void i = 0); // { dg-error "incomplete type|invalid use" }
+};
+
+void bar()
+{
+ A().foo();
+}
+
+A A::foo(void i) // { dg-error "incomplete type|invalid use" }
+{
+ return A();
+}
===================================================================
@@ -6581,9 +6581,14 @@ build_over_call (struct z_candidate *cand, int fla
/* Default arguments */
for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
- argarray[j++] = convert_default_arg (TREE_VALUE (parm),
- TREE_PURPOSE (parm),
- fn, i - is_method);
+ {
+ if (TREE_VALUE (parm) == error_mark_node)
+ return error_mark_node;
+ argarray[j++] = convert_default_arg (TREE_VALUE (parm),
+ TREE_PURPOSE (parm),
+ fn, i - is_method);
+ }
+
/* Ellipsis */
for (; arg_index < VEC_length (tree, args); ++arg_index)
{