aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2022-05-31 16:17:58 -0400
committerJason Merrill <jason@redhat.com>2022-06-01 15:20:27 -0400
commit72e52b88582e738c8b8bde5f85af63d3a0e15d2b (patch)
tree34d204d4404904275a5a8788c6ea9e31d478c96f
parentae54c1b09963779c5c3914782324ff48af32e2f1 (diff)
downloadgcc-72e52b88582e738c8b8bde5f85af63d3a0e15d2b.zip
gcc-72e52b88582e738c8b8bde5f85af63d3a0e15d2b.tar.gz
gcc-72e52b88582e738c8b8bde5f85af63d3a0e15d2b.tar.bz2
c++: auto function as function argument [PR105779]
This testcase demonstrates that the issue in PR105623 is not limited to templates, so we should do the marking in a less template-specific place. PR c++/105779 gcc/cp/ChangeLog: * call.cc (resolve_args): Call mark_single_function here. * pt.cc (unify_one_argument): Not here. gcc/testsuite/ChangeLog: * g++.dg/cpp1y/auto-fn63.C: New test.
-rw-r--r--gcc/cp/call.cc5
-rw-r--r--gcc/cp/pt.cc4
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/auto-fn63.C12
3 files changed, 17 insertions, 4 deletions
diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc
index 85fe9b5..4710c37 100644
--- a/gcc/cp/call.cc
+++ b/gcc/cp/call.cc
@@ -4672,6 +4672,11 @@ resolve_args (vec<tree, va_gc> *args, tsubst_flags_t complain)
}
else if (invalid_nonstatic_memfn_p (EXPR_LOCATION (arg), arg, complain))
return NULL;
+
+ /* Force auto deduction now. Omit tf_warning to avoid redundant
+ deprecated warning on deprecated-14.C. */
+ if (!mark_single_function (arg, tf_error))
+ return NULL;
}
return args;
}
diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index 4f0ace2..6de8e49 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -22624,10 +22624,6 @@ unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
return unify_success (explain_p);
}
- /* Force auto deduction now. Use tf_none to avoid redundant
- deprecated warning on deprecated-14.C. */
- mark_single_function (arg, tf_none);
-
arg_expr = arg;
arg = unlowered_expr_type (arg);
if (arg == error_mark_node)
diff --git a/gcc/testsuite/g++.dg/cpp1y/auto-fn63.C b/gcc/testsuite/g++.dg/cpp1y/auto-fn63.C
new file mode 100644
index 0000000..ca3bc85
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/auto-fn63.C
@@ -0,0 +1,12 @@
+// PR c++/105779
+// { dg-do compile { target c++14 } }
+
+template<int>
+struct struct1
+{
+ static auto apply() { return 1; }
+};
+
+int method(int(*f)());
+
+int t = method(struct1<1>::apply);