diff options
author | Fangrui Song <i@maskray.me> | 2023-05-17 12:43:49 -0700 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2023-05-17 12:43:49 -0700 |
commit | a07b135ce0c0111bd83450b5dc29ef0381cdbc39 (patch) | |
tree | 4c632a0822a1b54c9a1d4e086d68de49403a539d /clang/lib/Driver/ToolChains/Cuda.cpp | |
parent | 286cefcf35d0f55c57184c4219b95e82c96f1420 (diff) | |
download | llvm-a07b135ce0c0111bd83450b5dc29ef0381cdbc39.tar.gz |
[Driver][gcov] Derive .gcno .gcda file names from -o and -dumpdir
Resolve a FIXME.
When -ftest-profile, -fprofile-arcs, or --coverage is specified and the
driver performs both compilation and linking phases, derive the .gcno &
.gcda file names from -o and -dumpdir.
`clang --coverage d/a.c d/b.c -o e/x && e/x` will now emit
`e/x-[ab].gc{no,da}` like GCC.
For -fprofile-dir=, we make the deliberate decision to not mangle the
input filename if relative.
The following script demonstrates the .gcno and .gcda filenames.
```
PATH=/tmp/Rel/bin:$PATH # adapt according to your build directory
mkdir -p d e f
echo 'int main() {}' > d/a.c
echo > d/b.c
a() { rm $@ || exit 1; }
clang --coverage d/a.c d/b.c && ./a.out
a a-[ab].gc{no,da}
clang --coverage d/a.c d/b.c -o e/x && e/x
a e/x-[ab].gc{no,da}
clang --coverage d/a.c d/b.c -o e/x -dumpdir f/ && e/x
a f/[ab].gc{no,da}
clang --coverage -fprofile-dir=f d/a.c d/b.c -o e/x && e/x
a e/x-[ab].gcno f/e/x-[ab].gcda
clang -c --coverage d/a.c d/b.c && clang --coverage a.o b.o && ./a.out
a [ab].gc{no,da}
clang -c --coverage -fprofile-dir=f d/a.c d/b.c && clang --coverage a.o b.o && ./a.out
a [ab].gcno f/[ab].gcda
clang -c --coverage d/a.c -o e/xa.o && clang --coverage e/xa.o && ./a.out
a e/xa.gc{no,da}
clang -c --coverage d/a.c -o e/xa.o -dumpdir f/g && clang --coverage e/xa.o && ./a.out
a f/ga.gc{no,da}
```
The gcov code accidentally claims -c and -S, so -fsyntax-only -c/-S and
-E -c/-S don't lead to a -Wunused-command-line-argument warning. Keep
the unintended code for now.
Diffstat (limited to 'clang/lib/Driver/ToolChains/Cuda.cpp')
0 files changed, 0 insertions, 0 deletions