Issue 173233
Summary [llvm-cov] wrong coverage with destructor attribute
Labels
Assignees
Reporter iamanonymouscs
    Target compiler:

```
$ clang-trunk -v
clang version 22.0.0git (https://github.com/llvm/llvm-project.git a8dc57f0d7253df172b554dc3e3f4790913d578d)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /compiler/llvm-trunk/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Candidate multilib: .;@m64
Selected multilib: .;@m64
```

Case:

```
$ cat small.c
int a;
__attribute__((destructor)) int b() { 
    return a; 
}
int main() {}
```

LLVM-cov:

```$ clang-trunk -w -O0 -fcoverage-mapping -fprofile-instr-generate=small.c.profraw small.c -o small && ./small && /compiler/llvm-trunk/bin/llvm-profdata merge small.c.profraw -o small.c.profdata && /compiler/llvm-trunk/bin/llvm-cov show small -instr-profile="" small.c
    1|       |int a;
    2| 0|__attribute__((destructor)) int b() { 
    3|      0|    return a; 
 4|      0|}
    5|      1|int main() {}
```

Gcov:
```
gcc-trunk -w -O0 -fprofile-arcs -ftest-coverage small.c -o small && ./small && /compiler/gcc-trunk/bin/gcov small.c && cat small.c.gcov
File 'small.c'
Lines executed:100.00% of 3
Creating 'small.c.gcov'

Lines executed:100.00% of 3
        -:    0:Source:small.c
        -: 0:Graph:small.gcno
        -:    0:Data:small.gcda
        -:    0:Runs:1
 -:    1:int a;
        1:    2:__attribute__((destructor)) int b() { 
        1:    3:    return a; 
        -:    4:}
        1:    5:int main() {}

$ gcc-trunk -v
Using built-in specs.
COLLECT_GCC=gcc-trunk
COLLECT_LTO_WRAPPER=/compiler/gcc-trunk/libexec/gcc/x86_64-pc-linux-gnu/16.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure --disable-multilib --disable-bootstrap --enable-languages=c,c++ --prefix=/compiler/gcc-trunk --enable-coverage
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 16.0.0 20251204 (experimental) (GCC)
```

There is a difference between gcov and llvm-cov when using `destructor` attribute.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to