On Wed, Jul 25, 2018 at 3:38 PM Martin Liška <mli...@suse.cz> wrote: > > Hi. > > Target clones have DECL_ARTIFICIAL set to 1, but we want to > provide --coverage for that. With patched GCC on can see: > > -: 0:Source:pr85370.c > -: 0:Graph:pr85370.gcno > -: 0:Data:pr85370.gcda > -: 0:Runs:1 > -: 0:Programs:1 > -: 1:__attribute__((target_clones("arch=slm","default"))) > 1: 2:int foo1 (int a, int b) { // executed #### wrongly > 1: 3: return a + b; > -: 4:} > ------------------ > foo1.arch_slm.0: > 0: 2:int foo1 (int a, int b) { // executed #### wrongly > 0: 3: return a + b; > -: 4:} > ------------------ > foo1.default.1: > 1: 2:int foo1 (int a, int b) { // executed #### wrongly > 1: 3: return a + b; > -: 4:} > ------------------ > -: 5: > 1: 6:int foo2 (int a, int b) { > 1: 7: return a + b; > -: 8:} > -: 9: > 1: 10:int main() { > 1: 11: foo1(1, 1); > 1: 12: foo2(1, 1); > 1: 13: return 1; > -: 14:} > > Patch can bootstrap on ppc64le-redhat-linux and survives regression tests. > Will install in couple of days if no objection.
I wonder if representing the clones as artificial but have their body be marked as inline instance of the original function works for gcov? I think it should for debuggers. A similar case is probably the static_constructors_and_destructors function which has all ctors/dtors of static objects inlined into but itself is of course artificial. Is that handled correctly? Richard. > Martin > > gcc/ChangeLog: > > 2018-07-25 Martin Liska <mli...@suse.cz> > > PR gcov-profile/85370 > * coverage.c (coverage_begin_function): Do not mark target > clones as artificial functions. > --- > gcc/coverage.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > >