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.