llvm-cov - emit coverage information
====================================

SYNOPSIS
--------

:program:`llvm-cov` *command* [*args...*]

DESCRIPTION
-----------

The :program:`llvm-cov` tool shows code coverage information for
programs that are instrumented to emit profile data. It can be used to
work with ``gcov``\-style coverage or with ``clang``\'s instrumentation
based profiling.

If the program is invoked with a base name of ``gcov``, it will behave as if
the :program:`llvm-cov gcov` command were called. Otherwise, a command should
be provided.

COMMANDS
--------

* :ref:`gcov <llvm-cov-gcov>`
* :ref:`show <llvm-cov-show>`
* :ref:`report <llvm-cov-report>`
* :ref:`export <llvm-cov-export>`

.. program:: llvm-cov gcov

.. _llvm-cov-gcov:

GCOV COMMAND
------------

SYNOPSIS
^^^^^^^^

:program:`llvm-cov gcov` [*options*] *SOURCEFILE*

DESCRIPTION
^^^^^^^^^^^

The :program:`llvm-cov gcov` tool reads code coverage data files and displays
the coverage information for a specified source file. It is compatible with the
``gcov`` tool from version 4.2 of ``GCC`` and may also be compatible with some
later versions of ``gcov``.

To use :program:`llvm-cov gcov`, you must first build an instrumented version
of your application that collects coverage data as it runs. Compile with the
``-fprofile-arcs`` and ``-ftest-coverage`` options to add the
instrumentation. (Alternatively, you can use the ``--coverage`` option, which
includes both of those other options.) You should compile with debugging
information (``-g``) and without optimization (``-O0``); otherwise, the
coverage data cannot be accurately mapped back to the source code.

At the time you compile the instrumented code, a ``.gcno`` data file will be
generated for each object file. These ``.gcno`` files contain half of the
coverage data. The other half of the data comes from ``.gcda`` files that are
generated when you run the instrumented program, with a separate ``.gcda``
file for each object file. Each time you run the program, the execution counts
are summed into any existing ``.gcda`` files, so be sure to remove any old
files if you do not want their contents to be included.

By default, the ``.gcda`` files are written into the same directory as the
object files, but you can override that by setting the ``GCOV_PREFIX`` and
``GCOV_PREFIX_STRIP`` environment variables. The ``GCOV_PREFIX_STRIP``
variable specifies a number of directory components to be removed from the
start of the absolute path to the object file directory. After stripping those
directories, the prefix from the ``GCOV_PREFIX`` variable is added. These
environment variables allow you to run the instrumented program on a machine
where the original object file directories are not accessible, but you will
then need to copy the ``.gcda`` files back to the object file directories
where :program:`llvm-cov gcov` expects to find them.

Once you have generated the coverage data files, run :program:`llvm-cov gcov`
for each main source file where you want to examine the coverage results. This
should be run from the same directory where you previously ran the
compiler. The results for the specified source file are written to a file named
by appending a ``.gcov`` suffix. A separate output file is also created for
each file included by the main source file, also with a ``.gcov`` suffix added.

The basic content of an ``.gcov`` output file is a copy of the source file with
an execution count and line number prepended to every line. The execution
count is shown as ``-`` if a line does not contain any executable code. If
a line contains code but that code was never executed, the count is displayed
as ``#####``.

OPTIONS
^^^^^^^

.. option:: -a, --all-blocks

 Display all basic blocks. If there are multiple blocks for a single line of
 source code, this option causes llvm-cov to show the count for each block
 instead of just one count for the entire line.

.. option:: -b, --branch-probabilities

 Display conditional branch probabilities and a summary of branch information.

.. option:: -c, --branch-counts

 Display branch counts instead of probabilities (requires -b).

.. option:: -f, --function-summaries

 Show a summary of coverage for each function instead of just one summary for
 an entire source file.

.. option:: --help

 Display available options (--help-hidden for more).

.. option:: -l, --long-file-names

 For coverage output of files included from the main source file, add the
 main file name followed by ``##`` as a prefix to the output file names. This
 can be combined with the --preserve-paths option to use complete paths for
 both the main file and the included file.

.. option:: -n, --no-output

 Do not output any ``.gcov`` files. Summary information is still
 displayed.

.. option:: -o=<DIR|FILE>, --object-directory=<DIR>, --object-file=<FILE>

 Find objects in DIR or based on FILE's path. If you specify a particular
 object file, the coverage data files are expected to have the same base name
 with ``.gcno`` and ``.gcda`` extensions. If you specify a directory, the
 files are expected in that directory with the same base name as the source
 file.

.. option:: -p, --preserve-paths

 Preserve path components when naming the coverage output files. In addition
 to the source file name, include the directories from the path to that
 file. The directories are separate by ``#`` characters, with ``.`` directories
 removed and ``..`` directories replaced by ``^`` characters. When used with
 the --long-file-names option, this applies to both the main file name and the
 included file name.

.. option:: -u, --unconditional-branches

 Include unconditional branches in the output for the --branch-probabilities
 option.

.. option:: -version

 Display the version of llvm-cov.

.. option:: -x, --hash-filenames

 Use md5 hash of file name when naming the coverage output files. The source
 file name will be suffixed by ``##`` followed by MD5 hash calculated for it.

EXIT STATUS
^^^^^^^^^^^

:program:`llvm-cov gcov` returns 1 if it cannot read input files.  Otherwise,
it exits with zero.


.. program:: llvm-cov show

.. _llvm-cov-show:

SHOW COMMAND
------------

SYNOPSIS
^^^^^^^^

:program:`llvm-cov show` [*options*] -instr-profile *PROFILE* *BIN* [*-object BIN,...*] [[*-object BIN*]] [*SOURCES*]

DESCRIPTION
^^^^^^^^^^^

The :program:`llvm-cov show` command shows line by line coverage of the
binaries *BIN*,...  using the profile data *PROFILE*. It can optionally be
filtered to only show the coverage for the files listed in *SOURCES*.

*BIN* may be an executable, object file, dynamic library, or archive (thin or
otherwise).

To use :program:`llvm-cov show`, you need a program that is compiled with
instrumentation to emit profile and coverage data. To build such a program with
``clang`` use the ``-fprofile-instr-generate`` and ``-fcoverage-mapping``
flags. If linking with the ``clang`` driver, pass ``-fprofile-instr-generate``
to the link stage to make sure the necessary runtime libraries are linked in.

The coverage information is stored in the built executable or library itself,
and this is what you should pass to :program:`llvm-cov show` as a *BIN*
argument. The profile data is generated by running this instrumented program
normally. When the program exits it will write out a raw profile file,
typically called ``default.profraw``, which can be converted to a format that
is suitable for the *PROFILE* argument using the :program:`llvm-profdata merge`
tool.

OPTIONS
^^^^^^^

.. option:: -show-line-counts

 Show the execution counts for each line. Defaults to true, unless another
 ``-show`` option is used.

.. option:: -show-expansions

 Expand inclusions, such as preprocessor macros or textual inclusions, inline
 in the display of the source file. Defaults to false.

.. option:: -show-instantiations

 For source regions that are instantiated multiple times, such as templates in
 ``C++``, show each instantiation separately as well as the combined summary.
 Defaults to true.

.. option:: -show-regions

 Show the execution counts for each region by displaying a caret that points to
 the character where the region starts. Defaults to false.

.. option:: -show-line-counts-or-regions

 Show the execution counts for each line if there is only one region on the
 line, but show the individual regions if there are multiple on the line.
 Defaults to false.

.. option:: -use-color

 Enable or disable color output. By default this is autodetected.

.. option:: -arch=[*NAMES*]

 Specify a list of architectures such that the Nth entry in the list
 corresponds to the Nth specified binary. If the covered object is a universal
 binary, this specifies the architecture to use. It is an error to specify an
 architecture that is not included in the universal binary or to use an
 architecture that does not match a non-universal binary.

.. option:: -name=<NAME>

 Show code coverage only for functions with the given name.

.. option:: -name-whitelist=<FILE>

 Show code coverage only for functions listed in the given file. Each line in
 the file should start with `whitelist_fun:`, immediately followed by the name
 of the function to accept. This name can be a wildcard expression.

.. option:: -name-regex=<PATTERN>

 Show code coverage only for functions that match the given regular expression.

.. option:: -ignore-filename-regex=<PATTERN>

 Skip source code files with file paths that match the given regular expression.

.. option:: -format=<FORMAT>

 Use the specified output format. The supported formats are: "text", "html".

.. option:: -tab-size=<TABSIZE>

 Replace tabs with <TABSIZE> spaces when preparing reports. Currently, this is
 only supported for the html format.

.. option:: -output-dir=PATH

 Specify a directory to write coverage reports into. If the directory does not
 exist, it is created. When used in function view mode (i.e when -name or
 -name-regex are used to select specific functions), the report is written to
 PATH/functions.EXTENSION. When used in file view mode, a report for each file
 is written to PATH/REL_PATH_TO_FILE.EXTENSION.

.. option:: -Xdemangler=<TOOL>|<TOOL-OPTION>

 Specify a symbol demangler. This can be used to make reports more
 human-readable. This option can be specified multiple times to supply
 arguments to the demangler (e.g `-Xdemangler c++filt -Xdemangler -n` for C++).
 The demangler is expected to read a newline-separated list of symbols from
 stdin and write a newline-separated list of the same length to stdout.

.. option:: -num-threads=N, -j=N

 Use N threads to write file reports (only applicable when -output-dir is
 specified). When N=0, llvm-cov auto-detects an appropriate number of threads to
 use. This is the default.

.. option:: -line-coverage-gt=<N>

 Show code coverage only for functions with line coverage greater than the
 given threshold.

.. option:: -line-coverage-lt=<N>

 Show code coverage only for functions with line coverage less than the given
 threshold.

.. option:: -region-coverage-gt=<N>

 Show code coverage only for functions with region coverage greater than the
 given threshold.

.. option:: -region-coverage-lt=<N>

 Show code coverage only for functions with region coverage less than the given
 threshold.

.. option:: -path-equivalence=<from>,<to>

 Map the paths in the coverage data to local source file paths. This allows you
 to generate the coverage data on one machine, and then use llvm-cov on a
 different machine where you have the same files on a different path.

.. program:: llvm-cov report

.. _llvm-cov-report:

REPORT COMMAND
--------------

SYNOPSIS
^^^^^^^^

:program:`llvm-cov report` [*options*] -instr-profile *PROFILE* *BIN* [*-object BIN,...*] [[*-object BIN*]] [*SOURCES*]

DESCRIPTION
^^^^^^^^^^^

The :program:`llvm-cov report` command displays a summary of the coverage of
the binaries *BIN*,... using the profile data *PROFILE*. It can optionally be
filtered to only show the coverage for the files listed in *SOURCES*.

*BIN* may be an executable, object file, dynamic library, or archive (thin or
otherwise).

If no source files are provided, a summary line is printed for each file in the
coverage data. If any files are provided, summaries can be shown for each
function in the listed files if the ``-show-functions`` option is enabled.

For information on compiling programs for coverage and generating profile data,
see :ref:`llvm-cov-show`.

OPTIONS
^^^^^^^

.. option:: -use-color[=VALUE]

 Enable or disable color output. By default this is autodetected.

.. option:: -arch=<name>

 If the covered binary is a universal binary, select the architecture to use.
 It is an error to specify an architecture that is not included in the
 universal binary or to use an architecture that does not match a
 non-universal binary.

.. option:: -show-functions

 Show coverage summaries for each function. Defaults to false.

.. option:: -show-instantiation-summary

 Show statistics for all function instantiations. Defaults to false.

.. option:: -ignore-filename-regex=<PATTERN>

 Skip source code files with file paths that match the given regular expression.

.. program:: llvm-cov export

.. _llvm-cov-export:

EXPORT COMMAND
--------------

SYNOPSIS
^^^^^^^^

:program:`llvm-cov export` [*options*] -instr-profile *PROFILE* *BIN* [*-object BIN,...*] [[*-object BIN*]] [*SOURCES*]

DESCRIPTION
^^^^^^^^^^^

The :program:`llvm-cov export` command exports coverage data of the binaries
*BIN*,... using the profile data *PROFILE* in either JSON or lcov trace file
format.

When exporting JSON, the regions, functions, expansions, and summaries of the
coverage data will be exported. When exporting an lcov trace file, the
line-based coverage and summaries will be exported.

The exported data can optionally be filtered to only export the coverage
for the files listed in *SOURCES*.

For information on compiling programs for coverage and generating profile data,
see :ref:`llvm-cov-show`.

OPTIONS
^^^^^^^

.. option:: -arch=<name>

 If the covered binary is a universal binary, select the architecture to use.
 It is an error to specify an architecture that is not included in the
 universal binary or to use an architecture that does not match a
 non-universal binary.

.. option:: -format=<FORMAT>

 Use the specified output format. The supported formats are: "text" (JSON),
 "lcov".

.. option:: -summary-only

 Export only summary information for each file in the coverage data. This mode
 will not export coverage information for smaller units such as individual
 functions or regions. The result will contain the same information as produced
 by the :program:`llvm-cov report` command, but presented in JSON or lcov
 format rather than text.

.. option:: -ignore-filename-regex=<PATTERN>

 Skip source code files with file paths that match the given regular expression.

 .. option:: -skip-expansions

 Skip exporting macro expansion coverage data.

 .. option:: -skip-functions

 Skip exporting per-function coverage data.

 .. option:: -num-threads=N, -j=N

 Use N threads to export coverage data. When N=0, llvm-cov auto-detects an
 appropriate number of threads to use. This is the default.
