lit - LLVM Integrated Tester
============================

.. program:: lit

SYNOPSIS
--------

:program:`lit` [*options*] [*tests*]

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

:program:`lit` is a portable tool for executing LLVM and Clang style test
suites, summarizing their results, and providing indication of failures.
:program:`lit` is designed to be a lightweight testing tool with as simple a
user interface as possible.

:program:`lit` should be run with one or more *tests* to run specified on the
command line.  Tests can be either individual test files or directories to
search for tests (see :ref:`test-discovery`).

Each specified test will be executed (potentially concurrently) and once all
tests have been run :program:`lit` will print summary information on the number
of tests which passed or failed (see :ref:`test-status-results`).  The
:program:`lit` program will execute with a non-zero exit code if any tests
fail.

By default :program:`lit` will use a succinct progress display and will only
print summary information for test failures.  See :ref:`output-options` for
options controlling the :program:`lit` progress display and output.

:program:`lit` also includes a number of options for controlling how tests are
executed (specific features may depend on the particular test format).  See
:ref:`execution-options` for more information.

Finally, :program:`lit` also supports additional options for only running a
subset of the options specified on the command line, see
:ref:`selection-options` for more information.

:program:`lit` parses options from the environment variable ``LIT_OPTS`` after
parsing options from the command line.  ``LIT_OPTS`` is primarily useful for
supplementing or overriding the command-line options supplied to :program:`lit`
by ``check`` targets defined by a project's build system.

:program:`lit` can also read options from response files which are specified as
inputs using the ``@path/to/file.rsp`` syntax. Arguments read from a file must
be one per line and are treated as if they were in the same place as the
original file referencing argument on the command line. A response file can
reference other response files.

Users interested in the :program:`lit` architecture or designing a
:program:`lit` testing implementation should see :ref:`lit-infrastructure`.

GENERAL OPTIONS
---------------

.. option:: -h, --help

 Show the :program:`lit` help message and exit.

.. option:: --version

 Show :program:`lit`'s version number and exit.

.. option:: -j N, --workers N

 Run ``N`` tests in parallel.  By default, this is automatically chosen to
 match the number of detected available CPUs.

.. option:: --config-prefix NAME

 Search for :file:`{NAME}.cfg` and :file:`{NAME}.site.cfg` when searching for
 test suites, instead of :file:`lit.cfg` and :file:`lit.site.cfg`.

.. option:: -D NAME[=VALUE], --param NAME[=VALUE]

 Add a user defined parameter ``NAME`` with the given ``VALUE`` (or the empty
 string if not given).  The meaning and use of these parameters is test suite
 dependent.

.. _output-options:

OUTPUT OPTIONS
--------------

.. option:: -q, --quiet

 Suppress any output except for test failures.

.. option:: -s, --succinct

 Show less output, for example don't show information on tests that pass.
 Also show a progress bar, unless ``--no-progress-bar`` is specified.

.. option:: -v, --verbose

 Show more information on test failures, for example the entire test output
 instead of just the test result.

 Each command is printed before it is executed. This can be valuable for
 debugging test failures, as the last printed command is the one that failed.
 Moreover, :program:`lit` inserts ``'RUN: at line N'`` after each
 command pipeline in the output to help you locate the source line of
 the failed command.

.. option:: -vv, --echo-all-commands

 Deprecated alias for -v.

.. option:: -a, --show-all

 Enable -v, but for all tests not just failed tests.

.. option:: -o PATH, --output PATH

 Write test results to the provided path.

.. option:: --no-progress-bar

 Do not use curses based progress bar.

.. option:: --show-excluded

 Show excluded tests.

.. option:: --show-skipped

 Show skipped tests.

.. option:: --show-unsupported

 Show unsupported tests.

.. option:: --show-pass

 Show passed tests.

.. option:: --show-flakypass

 Show passed with retry tests.

.. option:: --show-xfail

 Show expectedly failed tests.

.. _execution-options:

EXECUTION OPTIONS
-----------------

.. option:: --gtest-sharding

 Enable sharding for GoogleTest format.

.. option:: --no-gtest-sharding

 Disable sharding for GoogleTest format.

.. option:: --path PATH

 Specify an additional ``PATH`` to use when searching for executables in tests.

.. option:: --vg

 Run individual tests under valgrind (using the memcheck tool).  The
 ``--error-exitcode`` argument for valgrind is used so that valgrind failures
 will cause the program to exit with a non-zero status.

 When this option is enabled, :program:`lit` will also automatically provide a
 "``valgrind``" feature that can be used to conditionally disable (or expect
 failure in) certain tests.

.. option:: --vg-leak

 When :option:`--vg` is used, enable memory leak checks.  When this option is
 enabled, :program:`lit` will also automatically provide a "``vg_leak``"
 feature that can be used to conditionally disable (or expect failure in)
 certain tests.

.. option:: --vg-arg ARG

 When :option:`--vg` is used, specify an additional argument to pass to
 :program:`valgrind` itself.

.. option:: --no-execute

 Don't execute any tests (assume that they pass).

.. option:: --xunit-xml-output XUNIT_XML_OUTPUT

 Write XUnit-compatible XML test reports to the specified file.

.. option:: --report-failures-only

 Only include failures (see :ref:`test-status-results`) in the report.

.. option:: --resultdb-output RESULTDB_OUTPUT

 Write LuCI ResultDB compatible JSON to the specified file.

.. option:: --time-trace-output TIME_TRACE_OUTPUT

 Write Chrome tracing compatible JSON to the specified file

.. option:: --timeout MAXINDIVIDUALTESTTIME

 Maximum time to spend running a single test (in seconds). 0 means no time
 limit. [Default: 0]

.. option:: --timeout N

 Spend at most ``N`` seconds (approximately) running each individual test.
 ``0`` means no time limit, and ``0`` is the default. Note that this is not an
 alias for :option:`--max-time`; the two are different kinds of maximums.

.. option:: --max-failures MAX_FAILURES

 Stop execution after the given number of failures.

.. option:: --max-retries-per-test N

 Retry running failed tests at most ``N`` times.
 Out of the following options to rerun failed tests the
 :option:`--max-retries-per-test` is the only one that doesn't
 require a change in the test scripts or the test config:

  * :option:`--max-retries-per-test` lit option
  * ``config.test_retry_attempts`` test suite option
  * ``ALLOW_RETRIES:`` annotation in test script

 Any option in the list above overrules its predecessor.

.. option:: --allow-empty-runs

 Do not fail the run if all tests are filtered out.

.. option:: --per-test-coverage

 Emit the necessary test coverage data, divided per test case (involves
 setting a unique value to LLVM_PROFILE_FILE for each RUN). The coverage
 data files will be emitted in the directory specified by ``config.test_exec_root``.

.. option:: --ignore-fail

 Exit with status zero even if some tests fail.

.. option:: --skip-test-time-recording

 Do not track elapsed wall time for each test.

.. option:: --time-tests

 Track the wall time individual tests take to execute and includes the results
 in the summary output.  This is useful for determining which tests in a test
 suite take the most time to execute.

.. _selection-options:

SELECTION OPTIONS
-----------------

By default, `lit` will run failing tests first, then run tests in descending
execution time order to optimize concurrency.  The execution order can be
changed using the :option:`--order` option.

The timing data is stored in the `test_exec_root` in a file named
`.lit_test_times.txt`. If this file does not exist, then `lit` checks the
`test_source_root` for the file to optionally accelerate clean builds.

.. option:: --max-tests N

 Run at most ``N`` tests and then terminate.

.. option:: --max-time N

 Spend at most ``N`` seconds (approximately) running tests and then terminate.
 Note that this is not an alias for :option:`--timeout`; the two are
 different kinds of maximums.

.. option:: --order {lexical,random,smart}

 Define the order in which tests are run. The supported values are:

 - lexical - tests will be run in lexical order according to the test file
   path. This option is useful when predictable test order is desired.

 - random - tests will be run in random order.

 - smart - tests that failed previously will be run first, then the remaining
   tests, all in descending execution time order. This is the default as it
   optimizes concurrency.

.. option:: --shuffle

 Run the tests in a random order, not failing/slowest first. Deprecated,
 use :option:`--order` instead.

.. option:: -i, --incremental

 Run failed tests first (DEPRECATED: use ``--order=smart``).

.. option:: --filter REGEXP

  Run only those tests whose name matches the regular expression specified in
  ``REGEXP``. The environment variable ``LIT_FILTER`` can be also used in place
  of this option, which is especially useful in environments where the call
  to ``lit`` is issued indirectly.

.. option:: --filter-out REGEXP

  Filter out those tests whose name matches the regular expression specified in
  ``REGEXP``. The environment variable ``LIT_FILTER_OUT`` can be also used in
  place of this option, which is especially useful in environments where the
  call to ``lit`` is issued indirectly.

.. option:: --xfail LIST

  Treat those tests whose name is in the semicolon separated list ``LIST`` as
  ``XFAIL``. This can be helpful when one does not want to modify the test
  suite. The environment variable ``LIT_XFAIL`` can be also used in place of
  this option, which is especially useful in environments where the call to
  ``lit`` is issued indirectly.

  A test name can specified as a file name relative to the test suite directory.
  For example:

  .. code-block:: none

    LIT_XFAIL="affinity/kmp-hw-subset.c;offloading/memory_manager.cpp"

  In this case, all of the following tests are treated as ``XFAIL``:

  .. code-block:: none

    libomp :: affinity/kmp-hw-subset.c
    libomptarget :: nvptx64-nvidia-cuda :: offloading/memory_manager.cpp
    libomptarget :: x86_64-pc-linux-gnu :: offloading/memory_manager.cpp

  Alternatively, a test name can be specified as the full test name
  reported in LIT output.  For example, we can adjust the previous
  example not to treat the ``nvptx64-nvidia-cuda`` version of
  ``offloading/memory_manager.cpp`` as XFAIL:

  .. code-block:: none

    LIT_XFAIL="affinity/kmp-hw-subset.c;libomptarget :: x86_64-pc-linux-gnu :: offloading/memory_manager.cpp"

.. option:: --xfail-not LIST

  Do not treat the specified tests as ``XFAIL``.  The environment variable
  ``LIT_XFAIL_NOT`` can also be used in place of this option.  The syntax is the
  same as for :option:`--xfail` and ``LIT_XFAIL``.  :option:`--xfail-not` and
  ``LIT_XFAIL_NOT`` always override all other ``XFAIL`` specifications,
  including an :option:`--xfail` appearing later on the command line.  The
  primary purpose is to suppress an ``XPASS`` result without modifying a test
  case that uses the ``XFAIL`` directive.

.. option:: --exclude-xfail

  ``XFAIL`` tests won't be run, unless they are listed in the ``--xfail-not``
  (or ``LIT_XFAIL_NOT``) lists.

.. option:: --num-shards M

 Divide the set of selected tests into ``M`` equal-sized subsets or
 "shards", and run only one of them.  Must be used with the
 ``--run-shard=N`` option, which selects the shard to run. The environment
 variable ``LIT_NUM_SHARDS`` can also be used in place of this
 option. These two options provide a coarse mechanism for partitioning large
 testsuites, for parallel execution on separate machines (say in a large
 testing farm).

.. option:: --run-shard N

 Select which shard to run, assuming the ``--num-shards=M`` option was
 provided. The two options must be used together, and the value of ``N``
 must be in the range ``1..M``. The environment variable
 ``LIT_RUN_SHARD`` can also be used in place of this option.

ADDITIONAL OPTIONS
------------------

.. option:: --debug

 Run :program:`lit` in debug mode, for debugging configuration issues and
 :program:`lit` itself.

.. option:: --show-suites

 List the discovered test suites and exit.

.. option:: --show-tests

 List all of the discovered tests and exit.

.. option:: --show-used-features

 Show all features used in the test suite (in ``XFAIL``, ``UNSUPPORTED`` and
 ``REQUIRES``) and exit.

EXIT STATUS
-----------

:program:`lit` will exit with an exit code of 1 if there are any failures
(see :ref:`test-status-results`) and :option:`--ignore-fail` has not been
passed.  Otherwise, it will exit with the status 0.  Other exit codes are used
for non-test related failures (for example a user error or an internal program
error).

.. _test-discovery:

TEST DISCOVERY
--------------

The inputs passed to :program:`lit` can be either individual tests, or entire
directories or hierarchies of tests to run.  When :program:`lit` starts up, the
first thing it does is convert the inputs into a complete list of tests to run
as part of *test discovery*.

In the :program:`lit` model, every test must exist inside some *test suite*.
:program:`lit` resolves the inputs specified on the command line to test suites
by searching upwards from the input path until it finds a :file:`lit.cfg` or
:file:`lit.site.cfg` file.  These files serve as both a marker of test suites
and as configuration files which :program:`lit` loads in order to understand
how to find and run the tests inside the test suite.

Once :program:`lit` has mapped the inputs into test suites it traverses the
list of inputs adding tests for individual files and recursively searching for
tests in directories.

This behavior makes it easy to specify a subset of tests to run, while still
allowing the test suite configuration to control exactly how tests are
interpreted.  In addition, :program:`lit` always identifies tests by the test
suite they are in, and their relative path inside the test suite.  For
appropriately configured projects, this allows :program:`lit` to provide
convenient and flexible support for out-of-tree builds.

.. _test-status-results:

TEST STATUS RESULTS
-------------------

Each test ultimately produces one of the following eight results:

**PASS**

 The test succeeded.

**FLAKYPASS**

 The test succeeded after being re-run more than once. This only applies to
 tests containing an ``ALLOW_RETRIES:`` annotation.

**XFAIL**

 The test failed, but that is expected.  This is used for test formats which allow
 specifying that a test does not currently work, but wish to leave it in the test
 suite.

**XPASS**

 The test succeeded, but it was expected to fail.  This is used for tests which
 were specified as expected to fail, but are now succeeding (generally because
 the feature they test was broken and has been fixed).

**FAIL**

 The test failed.

**UNRESOLVED**

 The test result could not be determined.  For example, this occurs when the test
 could not be run, the test itself is invalid, or the test was interrupted.

**UNSUPPORTED**

 The test is not supported in this environment.  This is used by test formats
 which can report unsupported tests.

**TIMEOUT**

 The test was run, but it timed out before it was able to complete.

Unresolved (**UNRESOLVED**), timed out (**TIMEOUT**), failed (**FAIL**) and
unexpectedly passed (**XPASS**) tests are considered failures.

Depending on the test format tests may produce additional information about
their status (generally only for failures).  See the :ref:`output-options`
section for more information.

.. _lit-infrastructure:

LIT INFRASTRUCTURE
------------------

This section describes the :program:`lit` testing architecture for users interested in
creating a new :program:`lit` testing implementation, or extending an existing one.

:program:`lit` proper is primarily an infrastructure for discovering and running
arbitrary tests, and to expose a single convenient interface to these
tests. :program:`lit` itself doesn't know how to run tests, rather this logic is
defined by *test suites*.

TEST SUITES
~~~~~~~~~~~

As described in :ref:`test-discovery`, tests are always located inside a *test
suite*.  Test suites serve to define the format of the tests they contain, the
logic for finding those tests, and any additional information to run the tests.

:program:`lit` identifies test suites as directories containing ``lit.cfg`` or
``lit.site.cfg`` files (see also :option:`--config-prefix`).  Test suites are
initially discovered by recursively searching up the directory hierarchy for
all the input files passed on the command line.  You can use
:option:`--show-suites` to display the discovered test suites at startup.

Once a test suite is discovered, its config file is loaded.  Config files
themselves are Python modules which will be executed.  When the config file is
executed, two important global variables are predefined:

**lit_config**

 The global **lit** configuration object (a *LitConfig* instance), which defines
 the builtin test formats, global configuration parameters, and other helper
 routines for implementing test configurations.

**config**

 This is the config object (a *TestingConfig* instance) for the test suite,
 which the config file is expected to populate.  The following variables are also
 available on the *config* object, some of which must be set by the config and
 others are optional or predefined:

 **name** *[required]* The name of the test suite, for use in reports and
 diagnostics.

 **test_format** *[required]* The test format object which will be used to
 discover and run tests in the test suite.  Generally this will be a builtin test
 format available from the *lit.formats* module.

 **test_source_root** The filesystem path to the test suite root.  For out-of-dir
 builds this is the directory that will be scanned for tests.

 **test_exec_root** For out-of-dir builds, the path to the test suite root inside
 the object directory.  This is where tests will be run and temporary output files
 placed.

 **environment** A dictionary representing the environment to use when executing
 tests in the suite.

 **standalone_tests** When true, mark a directory with tests expected to be run
 standalone. Test discovery is disabled for that directory. *lit.suffixes* and
 *lit.excludes* must be empty when this variable is true.

 **suffixes** For **lit** test formats which scan directories for tests, this
 variable is a list of suffixes to identify test files.  Used by: *ShTest*.

 **substitutions** For **lit** test formats which substitute variables into a test
 script, the list of substitutions to perform.  Used by: *ShTest*.

 **unsupported** Mark an unsupported directory, all tests within it will be
 reported as unsupported.  Used by: *ShTest*.

 **parent** The parent configuration, this is the config object for the directory
 containing the test suite, or None.

 **root** The root configuration.  This is the top-most :program:`lit` configuration in
 the project.

 **pipefail** Normally a test using a shell pipe fails if any of the commands
 on the pipe fail. If this is not desired, setting this variable to false
 makes the test fail only if the last command in the pipe fails.

 **available_features** A set of features that can be used in `XFAIL`,
 `REQUIRES`, and `UNSUPPORTED` directives.

TEST DISCOVERY
~~~~~~~~~~~~~~

Once test suites are located, :program:`lit` recursively traverses the source
directory (following *test_source_root*) looking for tests.  When :program:`lit`
enters a sub-directory, it first checks to see if a nested test suite is
defined in that directory.  If so, it loads that test suite recursively,
otherwise it instantiates a local test config for the directory (see
:ref:`local-configuration-files`).

Tests are identified by the test suite they are contained within, and the
relative path inside that suite.  Note that the relative path may not refer to
an actual file on disk; some test formats (such as *GoogleTest*) define
"virtual tests" which have a path that contains both the path to the actual
test file and a subpath to identify the virtual test.

.. _local-configuration-files:

LOCAL CONFIGURATION FILES
~~~~~~~~~~~~~~~~~~~~~~~~~

When :program:`lit` loads a subdirectory in a test suite, it instantiates a
local test configuration by cloning the configuration for the parent directory
--- the root of this configuration chain will always be a test suite.  Once the
test configuration is cloned :program:`lit` checks for a *lit.local.cfg* file
in the subdirectory.  If present, this file will be loaded and can be used to
specialize the configuration for each individual directory.  This facility can
be used to define subdirectories of optional tests, or to change other
configuration parameters --- for example, to change the test format, or the
suffixes which identify test files.

SUBSTITUTIONS
~~~~~~~~~~~~~

:program:`lit` allows patterns to be substituted inside RUN commands. It also
provides the following base set of substitutions, which are defined in
TestRunner.py:

 ======================= ==============
  Macro                   Substitution
 ======================= ==============
 %s                      source path (path to the file currently being run)
 %S                      source dir (directory of the file currently being run)
 %p                      same as %S
 %{pathsep}              path separator
 %{fs-src-root}          root component of file system paths pointing to the LLVM checkout
 %{fs-tmp-root}          root component of file system paths pointing to the test's temporary directory
 %{fs-sep}               file system path separator
 %t                      temporary file name unique to the test
 %basename_t             The last path component of %t but without the ``.tmp`` extension (deprecated, use ``%{t:stem}`` instead)
 %T                      parent directory of %t (not unique, deprecated, do not use)
 %%                      %
 %/s                     %s but ``\`` is replaced by ``/``
 %/S                     %S but ``\`` is replaced by ``/``
 %/p                     %p but ``\`` is replaced by ``/``
 %/t                     %t but ``\`` is replaced by ``/``
 %/T                     %T but ``\`` is replaced by ``/``
 %{s:basename}           The last path component of %s
 %{t:stem}               The last path component of %t but without the ``.tmp`` extension (alias for %basename_t)
 %{s:real}               %s after expanding all symbolic links and substitute drives
 %{S:real}               %S after expanding all symbolic links and substitute drives
 %{p:real}               %p after expanding all symbolic links and substitute drives
 %{t:real}               %t after expanding all symbolic links and substitute drives
 %{T:real}               %T after expanding all symbolic links and substitute drives
 %{/s:real}              %/s after expanding all symbolic links and substitute drives
 %{/S:real}              %/S after expanding all symbolic links and substitute drives
 %{/p:real}              %/p after expanding all symbolic links and substitute drives
 %{/t:real}              %/t after expanding all symbolic links and substitute drives
 %{/T:real}              %/T after expanding all symbolic links and substitute drives
 %{/s:regex_replacement} %/s but escaped for use in the replacement of a ``s@@@`` command in sed
 %{/S:regex_replacement} %/S but escaped for use in the replacement of a ``s@@@`` command in sed
 %{/p:regex_replacement} %/p but escaped for use in the replacement of a ``s@@@`` command in sed
 %{/t:regex_replacement} %/t but escaped for use in the replacement of a ``s@@@`` command in sed
 %{/T:regex_replacement} %/T but escaped for use in the replacement of a ``s@@@`` command in sed
 %:s                     On Windows, %/s but a ``:`` is removed if its the second character.
                         Otherwise, %s but with a single leading ``/`` removed.
 %:S                     On Windows, %/S but a ``:`` is removed if its the second character.
                         Otherwise, %S but with a single leading ``/`` removed.
 %:p                     On Windows, %/p but a ``:`` is removed if its the second character.
                         Otherwise, %p but with a single leading ``/`` removed.
 %:t                     On Windows, %/t but a ``:`` is removed if its the second character.
                         Otherwise, %t but with a single leading ``/`` removed.
 %:T                     On Windows, %/T but a ``:`` is removed if its the second character.
                         Otherwise, %T but with a single leading ``/`` removed.
 ======================= ==============

Other substitutions are provided that are variations on this base set and
further substitution patterns can be defined by each test module. See the
modules :ref:`local-configuration-files`.

More detailed information on substitutions can be found in the
:doc:`../TestingGuide`.

TEST RUN OUTPUT FORMAT
~~~~~~~~~~~~~~~~~~~~~~

The :program:`lit` output for a test run conforms to the following schema, in
both short and verbose modes (although in short mode no PASS lines will be
shown).  This schema has been chosen to be relatively easy to reliably parse by
a machine (for example in buildbot log scraping), and for other tools to
generate.

Each test result is expected to appear on a line that matches:

.. code-block:: none

  <result code>: <test name> (<progress info>)

where ``<result-code>`` is a standard test result such as PASS, FAIL, XFAIL,
XPASS, UNRESOLVED, or UNSUPPORTED.  The performance result codes of IMPROVED and
REGRESSED are also allowed.

The ``<test name>`` field can consist of an arbitrary string containing no
newline.

The ``<progress info>`` field can be used to report progress information such
as (1/300) or can be empty, but even when empty the parentheses are required.

Should a test be allowed retries (see ``ALLOW_RETRIES:`` annotation) and it
needed more than one attempt to succeed, then ``<progress info>`` is extended
by this information:

.. code-block:: none

  , <num_attempts_made> of <max_allowed_attempts> attempts

Each test result may include additional (multiline) log information in the
following format:

.. code-block:: none

  <log delineator> TEST '(<test name>)' <trailing delineator>
  ... log message ...
  <log delineator>

where ``<test name>`` should be the name of a preceding reported test, ``<log
delineator>`` is a string of "*" characters *at least* four characters long
(the recommended length is 20), and ``<trailing delineator>`` is an arbitrary
(unparsed) string.

The following is an example of a test run output which consists of four tests A,
B, C, and D, and a log message for the failing test C:

.. code-block:: none

  PASS: A (1 of 4)
  PASS: B (2 of 4)
  FAIL: C (3 of 4)
  ******************** TEST 'C' FAILED ********************
  Test 'C' failed as a result of exit code 1.
  ********************
  PASS: D (4 of 4)

DEFAULT FEATURES
~~~~~~~~~~~~~~~~~

For convenience :program:`lit` automatically adds **available_features** for
some common use cases.

:program:`lit` adds a feature based on the operating system being built on, for
example: `system-darwin`, `system-linux`, etc. :program:`lit` also
automatically adds a feature based on the current architecture, for example
`target-x86_64`, `target-aarch64`, etc.

When building with sanitizers enabled, :program:`lit` automatically adds the
short name of the sanitizer, for example: `asan`, `tsan`, etc.

To see the full list of features that can be added, see
*llvm/utils/lit/lit/llvm/config.py*.

LIT EXAMPLE TESTS
~~~~~~~~~~~~~~~~~

The :program:`lit` distribution contains several example implementations of
test suites in the *ExampleTests* directory.

SEE ALSO
--------

valgrind(1)
