[Bug gcov-profile/110827] C++20 coroutines aren't being measured by gcov
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Jul 28 06:17:35 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110827
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Iain Sandoe from comment #2)
> (In reply to Richard Biener from comment #1)
> > I'm seeing all code properly instrumented. The coverage I see is
> <snip>
> > 1: 27:task foo() {
> > -: 28: std::cout << "Running..." << std::endl;
> > -: 29: co_return;
> > 2: 30:}
> <snip>
> >
> > I have no idea why for example line 28 isn't marked executed.
>
> So we are recognising that the ramp function has run:
> foo () {
> .... compiler-generated code with no line numbers
> }
>
> but execution of the the outlined body (which is the 'actor' function) is
> not, apparently recorded.
>
> The actor is essentially:
>
> foo.actor()
> .. compiler-generated code no line numbers
> {
> std::cout << "Running..." << std::endl;
> co_return;
> }
> .. compiler-generated code no line numbers
>
> co_return expands to some compiler-generated code too - so it's possible the
> line numbers get confusing there - but the cout line ought to be
> uncontroversial.
Hmm, OK. I see both 'task foo' and _Z3fooPZ3foovE13_Z3foov.Frame.actor
printed as functions "foo" in the IL dump. Maybe coverage is somehow
confused here.
Maybe coverage doesn't work with nested functions (or C++ lambda) either?
As said, there are edge counters present so it must be either a bug on
the receiving side (in gcov) or the data is not appropriately attributed.
More information about the Gcc-bugs
mailing list