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(-)
>
>

Reply via email to