mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
e30ccae2b9
Make llvm-cov compatible with gcov for cases where multiple files are specified on the command line. That is, loop over each one and report coverage, and report errors on stderr only rather than via return code. llvm-svn: 211959
114 lines
4.5 KiB
Plaintext
114 lines
4.5 KiB
Plaintext
# Tests for compatibility between llvm-cov and gcov. These work by
|
|
# comparing llvm-cov against reference outputs generated by gcov 4.2.
|
|
|
|
# "cd" and globbing are unsupported in lit internal runner.
|
|
REQUIRES: shell
|
|
|
|
RUN: rm -rf %t
|
|
RUN: mkdir %t
|
|
RUN: cd %t
|
|
RUN: cp %p/Inputs/test* .
|
|
|
|
# Basic behaviour with no flags
|
|
RUN: llvm-cov test.c | diff -u test_no_options.output -
|
|
RUN: diff -aub test_no_options.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_no_options.h.gcov test.h.gcov
|
|
|
|
# Same, but specifying the object directory
|
|
RUN: mkdir -p %t/objdir
|
|
RUN: cp test.gcno test.gcda %t/objdir
|
|
RUN: llvm-cov -o objdir test.c | diff -u test_no_options.output -
|
|
RUN: diff -aub test_objdir.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_objdir.h.gcov test.h.gcov
|
|
|
|
# Specifying an object file
|
|
RUN: llvm-cov -o objdir/test.o test.c | diff -u test_no_options.output -
|
|
RUN: diff -aub test_objdir.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_objdir.h.gcov test.h.gcov
|
|
|
|
# Specifying an object file that could be ambiguous with a directory
|
|
RUN: llvm-cov -o objdir/test test.c | diff -u test_no_options.output -
|
|
RUN: diff -aub test_objdir.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_objdir.h.gcov test.h.gcov
|
|
|
|
# With gcov output disabled
|
|
RUN: llvm-cov -n test.c | diff -u test_no_output.output -
|
|
|
|
# Missing source files. This test is fragile, as it depends on being
|
|
# run before we copy some sources into place in the next test.
|
|
RUN: llvm-cov test_paths.cpp 2>/dev/null | diff -u test_missing.output -
|
|
RUN: diff -aub test_missing.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_missing.h.gcov test.h.gcov
|
|
|
|
# Preserve paths. This mangles the output filenames.
|
|
RUN: mkdir -p %t/srcdir/nested_dir
|
|
RUN: cp test.cpp test.h %t/srcdir
|
|
RUN: llvm-cov -p test_paths.cpp | diff -u test_preserve_paths.output -
|
|
RUN: diff -aub test_paths.cpp.gcov srcdir#nested_dir#^#test.cpp.gcov
|
|
RUN: diff -aub test_paths.h.gcov srcdir#nested_dir#^#test.h.gcov
|
|
|
|
# Don't preserve paths. Same results as preserve paths, but no mangling.
|
|
RUN: llvm-cov test_paths.cpp | diff -u test_no_preserve_paths.output -
|
|
RUN: diff -aub test_paths.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_paths.h.gcov test.h.gcov
|
|
|
|
# Long file names.
|
|
RUN: llvm-cov -l test_paths.cpp | diff -u test_long_file_names.output -
|
|
RUN: diff -aub test_paths.cpp.gcov test_paths.cpp##test.cpp.gcov
|
|
RUN: diff -aub test_paths.h.gcov test_paths.cpp##test.h.gcov
|
|
|
|
# Long file names and preserve paths.
|
|
RUN: llvm-cov -lp -gcno test_paths.gcno -gcda test_paths.gcda srcdir/../test_paths.cpp | diff -u test_long_paths.output -
|
|
RUN: diff -aub test_paths.cpp.gcov srcdir#^#test_paths.cpp##srcdir#nested_dir#^#test.cpp.gcov
|
|
RUN: diff -aub test_paths.h.gcov srcdir#^#test_paths.cpp##srcdir#nested_dir#^#test.h.gcov
|
|
|
|
# Function summaries. This changes stdout, but not the gcov files.
|
|
RUN: llvm-cov test.c -f | diff -u test_-f.output -
|
|
RUN: diff -aub test_no_options.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_no_options.h.gcov test.h.gcov
|
|
|
|
# All blocks. This doesn't affect stdout, only the gcov files.
|
|
RUN: llvm-cov test.c -a | diff -u test_no_options.output -
|
|
RUN: diff -aub test_-a.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_-a.h.gcov test.h.gcov
|
|
|
|
# Branch probabilities.
|
|
RUN: llvm-cov test.c -a -b | diff -u test_-b.output -
|
|
RUN: diff -aub test_-a_-b.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_-a_-b.h.gcov test.h.gcov
|
|
|
|
# Function summaries including branch probabilities.
|
|
|
|
# FIXME: We don't correctly handle calls when -b and -f are used
|
|
# together, so our output differs from gcov. Remove the 'not' from
|
|
# this test once this is fixed.
|
|
RUN: llvm-cov test.c -a -b -f | not diff -u test_-b_-f.output - >/dev/null
|
|
RUN: diff -aub test_-a_-b.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_-a_-b.h.gcov test.h.gcov
|
|
|
|
# Summarize unconditional branches too.
|
|
RUN: llvm-cov test.c -a -b -u | diff -u test_-b.output -
|
|
RUN: diff -aub test_-a_-b_-u.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_-a_-b_-u.h.gcov test.h.gcov
|
|
|
|
# Absolute counts for branches.
|
|
RUN: llvm-cov test.c -a -b -c -u | diff -u test_-b.output -
|
|
RUN: diff -aub test_-a_-b_-c_-u.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_-a_-b_-c_-u.h.gcov test.h.gcov
|
|
|
|
# Missing gcda file just gives 0 counts.
|
|
RUN: llvm-cov test.c -gcda=no_such_gcda_file | diff -u test_no_gcda.output -
|
|
RUN: diff -aub test_no_gcda.cpp.gcov test.cpp.gcov
|
|
RUN: diff -aub test_no_gcda.h.gcov test.h.gcov
|
|
|
|
# Invalid gcno file.
|
|
RUN: llvm-cov test.c -gcno=test_read_fail.gcno
|
|
|
|
# Bad file checksum on gcda.
|
|
RUN: llvm-cov test.c -gcda=test_file_checksum_fail.gcda
|
|
|
|
# Bad function checksum on gcda
|
|
RUN: llvm-cov test.c -gcda=test_func_checksum_fail.gcda
|
|
|
|
XFAIL: powerpc64-, s390x, mips-, mips64-, sparc
|