]> git.ipfire.org Git - people/ms/gcc.git/commit
coroutines: Adjust outlined function names [PR95520].
authorIain Sandoe <iain@sandoe.co.uk>
Thu, 8 Jul 2021 08:42:49 +0000 (09:42 +0100)
committerIain Sandoe <iain@sandoe.co.uk>
Tue, 20 Jul 2021 06:55:43 +0000 (07:55 +0100)
commit3a93c67f21818eafd6823a7c3d06db1432f9c07b
tree31e64f97bb3e4c1de2c0c2982077c88c14be16bb
parentfeef2e414d45f732509ab044d4ad14aed125b024
coroutines: Adjust outlined function names [PR95520].

The mechanism used to date for uniquing the coroutine helper
functions (actor, destroy) was over-complicating things and
leading to the noted PR and also difficulties in setting
breakpoints on these functions (so this will help PR99215 as
well).

This implementation delegates the adjustment to the mangling
to write_encoding() which necessitates some book-keeping so
that it is possible to determine which of the coroutine
helper names is to be mangled.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR c++/95520 - [coroutines] __builtin_FUNCTION() returns mangled .actor instead of original function name

PR c++/95520

gcc/cp/ChangeLog:

* coroutines.cc (struct coroutine_info): Add fields for
actor and destroy function decls.
(to_ramp): New.
(coro_get_ramp_function): New.
(coro_get_actor_function): New.
(coro_get_destroy_function): New.
(act_des_fn): Set up mapping between ramp, actor and
destroy functions.
(morph_fn_to_coro): Adjust interface to the builder for
helper function decls.
* cp-tree.h (DECL_ACTOR_FN, DECL_DESTROY_FN, DECL_RAMP_FN,
JOIN_STR): New.
* mangle.c (write_encoding): Handle coroutine helpers.
(write_unqualified_name): Handle lambda coroutine helpers.

gcc/testsuite/ChangeLog:

* g++.dg/coroutines/pr95520.C: New test.

(cherry picked from commit 237ab3ee49e2f3110accfcc03b6c0df8b4889f15)
gcc/cp/coroutines.cc
gcc/cp/cp-tree.h
gcc/cp/mangle.c
gcc/testsuite/g++.dg/coroutines/pr95520.C [new file with mode: 0644]