Hi Jason, >>As the PR notes, we now have two bogus warnings that the single frame >>pointer parameter is unused in each of the helper functions. >>This started when we began to use start_preparsed_function/finish_function >>to wrap the helper function code generation. I am puzzled a little about >>why the use is not evident without marking - or perhaps it is always needed >>to mark use in synthetic code? >>For the destroy function, in particular, the use of the parameter is simple >>- an indirect ref and then it is passed to the call to the actor. >>The fix here is somewhat trivial - to mark the param as used as soon as it >>is.
>You also wouldn't get the warning if the param were marked DECL_ARTIFICIAL, >which seems desirable anyway? Yes, done as attached, OK for trunk assuming that reg-testing passes? thanks Iain --- 8< --- 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 <i...@sandoe.co.uk> --- gcc/cp/coroutines.cc | 1 + gcc/testsuite/g++.dg/coroutines/pr116482.C | 30 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 gcc/testsuite/g++.dg/coroutines/pr116482.C diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc index c3e08221cc9..8f899513691 100644 --- a/gcc/cp/coroutines.cc +++ b/gcc/cp/coroutines.cc @@ -4058,6 +4058,7 @@ coro_build_actor_or_destroy_function (tree orig, tree fn_type, 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; diff --git a/gcc/testsuite/g++.dg/coroutines/pr116482.C b/gcc/testsuite/g++.dg/coroutines/pr116482.C new file mode 100644 index 00000000000..702d1e235bb --- /dev/null +++ b/gcc/testsuite/g++.dg/coroutines/pr116482.C @@ -0,0 +1,30 @@ +// 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; +} -- 2.39.2 (Apple Git-143)