We have a bogus warning about the coroutine state frame pointers
being apparently unused in the resume and destroy functions. Fixed
by making the parameters DECL_ARTIFICIAL.
PR c++/116482
gcc/cp/ChangeLog:
* coroutines.cc
(coro_build_actor_or_destroy_function): Make the parameter
decls DECL_ARTIFICIAL.
gcc/testsuite/ChangeLog:
* g++.dg/coroutines/pr116482.C: New test.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
tree id = get_identifier ("frame_ptr");
tree fp = build_lang_decl (PARM_DECL, id, coro_frame_ptr);
+ DECL_ARTIFICIAL (fp) = true;
DECL_CONTEXT (fp) = fn;
DECL_ARG_TYPE (fp) = type_passed_as (coro_frame_ptr);
DECL_ARGUMENTS (fn) = fp;
--- /dev/null
+// Override default options.
+// { dg-options "-std=c++20 -fno-exceptions -Wall -Wextra" }
+
+#include <coroutine>
+
+struct SuspendNever {
+ bool await_ready();
+ void await_suspend(std::coroutine_handle<>);
+ void await_resume();
+};
+
+struct Coroutine;
+
+struct PromiseType {
+ Coroutine get_return_object();
+ SuspendNever initial_suspend();
+ SuspendNever final_suspend();
+#if __cpp_exceptions
+ void unhandled_exception() { /*std::terminate();*/ };
+#endif
+ void return_void();
+};
+
+struct Coroutine {
+ using promise_type = PromiseType;
+};
+
+Coroutine __async_test_input_basic() {
+ co_return;
+}