]> git.ipfire.org Git - thirdparty/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>
Mon, 19 Jul 2021 20:10:29 +0000 (21:10 +0100)
commit237ab3ee49e2f3110accfcc03b6c0df8b4889f15
treef5967df58b8d7524e2070dc44dc632ed77e8984f
parenta113b14398f2a4ad2742e6e9c87e25cac60f263e
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.
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]