[llvm] 54bea88 - [lit] Add --wtt-output option to report results in WTT (.wtl) format (#211066)

via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 10 22:29:48 PDT 2026


Author: Yasser Khan
Date: 2026-08-10T22:29:42-07:00
New Revision: 54bea8844e0a1b8e19b9dbd968d491ee0bf8f3f0

URL: https://github.com/llvm/llvm-project/commit/54bea8844e0a1b8e19b9dbd968d491ee0bf8f3f0
DIFF: https://github.com/llvm/llvm-project/commit/54bea8844e0a1b8e19b9dbd968d491ee0bf8f3f0.diff

LOG: [lit] Add --wtt-output option to report results in WTT (.wtl) format  (#211066)

Adds a WttReport reporter and a --wtt-output <file> option that writes a
WTT (Windows Test Technology) .wtl log. This lets lit report test
specific pass/fail results in a format consumable by Windows lab
infrastructure.

The reporter follows the existing pattern in reports.py (ResultDBReport,
XunitReport, TimeTraceReport) and is wired through cl_arguments.py like
the other output options. PASS/XFAIL map to Pass and everything else to
Fail. UNSUPPORTED tests are reported as Pass with a summary of skipped
tests.

Note: AI was used to help create the file.write commands and for
creating the testing content based on issues humans and AI resolved
during development.

Associated RFC:
https://discourse.llvm.org/t/rfc-add-a-wtt-output-format-for-reporting-lit-results-to-windows-test-infrastructure/91215

Added: 
    llvm/utils/lit/tests/Inputs/wtt-output/dummy_format.py
    llvm/utils/lit/tests/Inputs/wtt-output/excluded.ini
    llvm/utils/lit/tests/Inputs/wtt-output/fail.ini
    llvm/utils/lit/tests/Inputs/wtt-output/lit.cfg
    llvm/utils/lit/tests/Inputs/wtt-output/missing_feature.ini
    llvm/utils/lit/tests/Inputs/wtt-output/multiline_fail.ini
    llvm/utils/lit/tests/Inputs/wtt-output/pass.ini
    llvm/utils/lit/tests/Inputs/wtt-output/pass_with_output.ini
    llvm/utils/lit/tests/Inputs/wtt-output/unsupported.ini
    llvm/utils/lit/tests/Inputs/wtt-output/xfail.ini
    llvm/utils/lit/tests/test-output-wtt.py

Modified: 
    llvm/utils/lit/lit/cl_arguments.py
    llvm/utils/lit/lit/reports.py

Removed: 
    


################################################################################
diff  --git a/llvm/utils/lit/lit/cl_arguments.py b/llvm/utils/lit/lit/cl_arguments.py
index 4b3b45cf8fa2e..be0f154a10552 100644
--- a/llvm/utils/lit/lit/cl_arguments.py
+++ b/llvm/utils/lit/lit/cl_arguments.py
@@ -334,6 +334,11 @@ def parse_args():
         type=lit.reports.TimeTraceReport,
         help="Write Chrome tracing compatible JSON to the specified file",
     )
+    execution_group.add_argument(
+        "--wtt-output",
+        type=lit.reports.WttReport,
+        help="Write a WTT (.wtl) log file for Windows test infrastructure consumption",
+    )
     # This option only exists for the benefit of LLVM's Buildkite CI pipelines.
     # As soon as it is not needed, it should be removed. Its help text would be:
     # When enabled, lit will add a unique element to the output file name,
@@ -571,6 +576,7 @@ def parse_args():
                 opts.xunit_xml_output,
                 opts.resultdb_output,
                 opts.time_trace_output,
+                opts.wtt_output,
             ],
         )
     )

diff  --git a/llvm/utils/lit/lit/reports.py b/llvm/utils/lit/lit/reports.py
index 4a166e16c500a..998b29494497c 100755
--- a/llvm/utils/lit/lit/reports.py
+++ b/llvm/utils/lit/lit/reports.py
@@ -302,3 +302,162 @@ def _get_test_event(self, test, first_start_time):
             "dur": int(elapsed_time * 1000000.0),
             "name": test_name,
         }
+
+
+def _wtt_attr(text: str) -> str:
+    """Prepare text for a WTT XML attribute value.
+
+    Flattens newlines/tabs to spaces (raw newlines are illegal in XML
+    attributes), drops invalid XML chars using the shared helper, then
+    quotes. quoteattr adds the quotes.
+    """
+    text = (
+        text.replace("\r\n", " ")
+        .replace("\n", " ")
+        .replace("\r", " ")
+        .replace("\t", " ")
+    )
+    return quo(remove_invalid_xml_chars(text))
+
+
+class WttReport(Report):
+    def write_results(self, tests, elapsed: float) -> None:
+        with open(self.output_file, "w", encoding="utf-16") as f:
+            self._write_results_to_file(tests, elapsed, f)
+
+    def _write_results_to_file(self, tests, elapsed: float, file) -> None:
+        tests.sort(key=by_suite_and_test_path)
+
+        machine = os.getenv("COMPUTERNAME", "")
+        pid = os.getpid()
+
+        starts = [t.result.start for t in tests if t.result and t.result.start]
+        base = min(starts) if starts else 0.0
+        base_dt = datetime.datetime.fromtimestamp(base)
+        base_time = base_dt.strftime("%Y:%m:%d %H:%M:%S") + ":%03d" % (
+            base_dt.microsecond // 1000
+        )
+
+        def times(test) -> tuple[int, int]:
+            elapsed_time = test.result.elapsed or 0.0
+            start_time = test.result.start - base if test.result.start else 0.0
+            return int(start_time), int(start_time + elapsed_time)
+
+        root_ctx = 1
+        end_ticks = int(elapsed)
+
+        def rc(ref_ctx: str) -> str:
+            return f'\t<rti id="" />\n\t<ctx id="{ref_ctx}" />\n'
+
+        file.write('<?xml version="1.0" encoding="utf-16"?>\n')
+        file.write("<WTT-Logger>\n")
+
+        file.write(
+            f'<RTI ID="" Machine="{machine}" ProcessName="lit" '
+            f'ProcessID="{pid}" ThreadID="0" '
+            f'BaseTime="{base_time}" Frequency="1" />\n'
+        )
+        file.write(f'<CTX ID="{root_ctx}" Current="WTTLOG" Parent="ROOT" />\n')
+
+        passed = 0
+        failed = 0
+        unsupported = 0
+        excluded = 0
+        skipped = 0
+
+        for test in tests:
+            if test.result is None:
+                continue
+
+            code = test.result.code
+            name = test.getFullName()
+            created_at, logged_at = times(test)
+
+            # UNSUPPORTED: report as Pass (feature not applicable on this device).
+            if code == lit.Test.UNSUPPORTED:
+                file.write(f'<CTX ID="" Current={_wtt_attr(name)} Parent="WTTLOG" />\n')
+                file.write(
+                    f'<StartTest Title={_wtt_attr(name)} TUID="" CA="{created_at}" LA="{created_at}">\n{rc("")}</StartTest>\n'
+                )
+                unsupported_msg = _wtt_attr(
+                    "UNSUPPORTED on this device; reported as Pass (not applicable)."
+                )
+                file.write(
+                    f'<Msg UserText={unsupported_msg} CA="{logged_at}" LA="{logged_at}">\n{rc("")}</Msg>\n'
+                )
+                file.write(
+                    f'<EndTest Title={_wtt_attr(name)} TUID="" Result="Pass" Repro="" CA="{logged_at}" LA="{logged_at}">\n{rc("")}</EndTest>\n'
+                )
+                unsupported += 1
+                continue
+
+            # EXCLUDED / SKIPPED: omitted from the log and from pass/fail results.
+            if code == lit.Test.EXCLUDED:
+                excluded += 1
+                continue
+            if code == lit.Test.SKIPPED:
+                skipped += 1
+                continue
+
+            if code in (lit.Test.PASS, lit.Test.XFAIL):
+                result = "Pass"
+                passed += 1
+            else:
+                result = "Fail"
+                failed += 1
+
+            file.write(f'<CTX ID="" Current={_wtt_attr(name)} Parent="WTTLOG" />\n')
+            file.write(
+                f'<StartTest Title={_wtt_attr(name)} TUID="" CA="{created_at}" LA="{created_at}">\n{rc("")}</StartTest>\n'
+            )
+
+            # Write error output for failures (WTT uses <Error>, not <Err>).
+            if result == "Fail" and test.result.output:
+                error_text = _wtt_attr(test.result.output[:4096])
+                file.write(
+                    f'<Error UserText={error_text} CA="{logged_at}" LA="{logged_at}">\n{rc("")}</Error>\n'
+                )
+
+            if result == "Pass" and test.result.output:
+                pass_text = _wtt_attr(test.result.output[:1024])
+                file.write(
+                    f'<Msg UserText={pass_text} CA="{logged_at}" LA="{logged_at}">\n{rc("")}</Msg>\n'
+                )
+
+            file.write(
+                f'<EndTest Title={_wtt_attr(name)} TUID="" Result="{result}" Repro="" CA="{logged_at}" LA="{logged_at}">\n{rc("")}</EndTest>\n'
+            )
+
+        # Tally of UNSUPPORTED tests reported as Pass.
+        if unsupported > 0:
+            tally = _wtt_attr(
+                f"{unsupported} test(s) were UNSUPPORTED on this device and "
+                f"reported as Pass (not applicable)."
+            )
+            file.write(
+                f'<Msg UserText={tally} CA="{end_ticks}" LA="{end_ticks}">\n{rc(root_ctx)}</Msg>\n'
+            )
+
+        # Tally of tests omitted from results.
+        not_run = excluded + skipped
+        if not_run > 0:
+            parts = []
+            if excluded:
+                parts.append(f"{excluded} excluded")
+            if skipped:
+                parts.append(f"{skipped} skipped")
+            tally = _wtt_attr(
+                f"{not_run} test(s) were not run ({', '.join(parts)}) and are "
+                f"omitted from the pass/fail results."
+            )
+            file.write(
+                f'<Msg UserText={tally} CA="{end_ticks}" LA="{end_ticks}">\n{rc(root_ctx)}</Msg>\n'
+            )
+
+        total = passed + failed + unsupported
+        file.write(
+            f'<PFRollup Total="{total}" Passed="{passed + unsupported}" Failed="{failed}" '
+            f'Blocked="0" Warned="0" Skipped="0" CA="{end_ticks}" LA="{end_ticks}">\n'
+            f"{rc(root_ctx)}</PFRollup>\n"
+        )
+        file.write("</WTT-Logger>\n")

diff  --git a/llvm/utils/lit/tests/Inputs/wtt-output/dummy_format.py b/llvm/utils/lit/tests/Inputs/wtt-output/dummy_format.py
new file mode 100644
index 0000000000000..43da0973df614
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/dummy_format.py
@@ -0,0 +1,39 @@
+import os
+import configparser
+
+import lit.formats
+import lit.Test
+
+
+class DummyFormat(lit.formats.FileBasedTest):
+    def execute(self, test, lit_config):
+        # In this dummy format, expect that each test file is actually just a
+        # .ini format dump of the results to report.
+
+        source_path = test.getSourcePath()
+
+        cfg = configparser.ConfigParser()
+        cfg.read(source_path)
+
+        # Create the basic test result.
+        result_code = cfg.get("global", "result_code")
+        result_output = cfg.get("global", "result_output")
+        result = lit.Test.Result(getattr(lit.Test, result_code), result_output)
+
+        if cfg.has_option("global", "required_feature"):
+            required_feature = cfg.get("global", "required_feature")
+            if required_feature:
+                test.requires.append(required_feature)
+
+        # Load additional metrics.
+        for key, value_str in cfg.items("results"):
+            value = eval(value_str)
+            if isinstance(value, int):
+                metric = lit.Test.IntMetricValue(value)
+            elif isinstance(value, float):
+                metric = lit.Test.RealMetricValue(value)
+            else:
+                raise RuntimeError("unsupported result type")
+            result.addMetric(key, metric)
+
+        return result

diff  --git a/llvm/utils/lit/tests/Inputs/wtt-output/excluded.ini b/llvm/utils/lit/tests/Inputs/wtt-output/excluded.ini
new file mode 100644
index 0000000000000..f62ede446872a
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/excluded.ini
@@ -0,0 +1,5 @@
+[global]
+result_code = EXCLUDED
+result_output = not shown
+
+[results]

diff  --git a/llvm/utils/lit/tests/Inputs/wtt-output/fail.ini b/llvm/utils/lit/tests/Inputs/wtt-output/fail.ini
new file mode 100644
index 0000000000000..0a92119f654fa
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/fail.ini
@@ -0,0 +1,5 @@
+[global]
+result_code = FAIL
+result_output = test failed
+
+[results]

diff  --git a/llvm/utils/lit/tests/Inputs/wtt-output/lit.cfg b/llvm/utils/lit/tests/Inputs/wtt-output/lit.cfg
new file mode 100644
index 0000000000000..a2a65a115f81a
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/lit.cfg
@@ -0,0 +1,11 @@
+import site
+
+site.addsitedir(os.path.dirname(__file__))
+import dummy_format
+
+config.name = "wtt-data"
+config.suffixes = [".ini"]
+config.test_format = dummy_format.DummyFormat()
+config.test_source_root = None
+config.test_exec_root = None
+config.target_triple = None

diff  --git a/llvm/utils/lit/tests/Inputs/wtt-output/missing_feature.ini b/llvm/utils/lit/tests/Inputs/wtt-output/missing_feature.ini
new file mode 100644
index 0000000000000..09fb2a132929f
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/missing_feature.ini
@@ -0,0 +1,7 @@
+[global]
+result_code = UNSUPPORTED
+result_output = not shown
+
+required_feature = dummy_feature
+
+[results]

diff  --git a/llvm/utils/lit/tests/Inputs/wtt-output/multiline_fail.ini b/llvm/utils/lit/tests/Inputs/wtt-output/multiline_fail.ini
new file mode 100644
index 0000000000000..a5264cd40288c
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/multiline_fail.ini
@@ -0,0 +1,6 @@
+[global]
+result_code = FAIL
+result_output = first line
+	second "line" & <tag> ]]>
+
+[results]

diff  --git a/llvm/utils/lit/tests/Inputs/wtt-output/pass.ini b/llvm/utils/lit/tests/Inputs/wtt-output/pass.ini
new file mode 100644
index 0000000000000..c1e2241526398
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/pass.ini
@@ -0,0 +1,5 @@
+[global]
+result_code = PASS
+result_output = not shown
+
+[results]

diff  --git a/llvm/utils/lit/tests/Inputs/wtt-output/pass_with_output.ini b/llvm/utils/lit/tests/Inputs/wtt-output/pass_with_output.ini
new file mode 100644
index 0000000000000..b70b168441bf3
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/pass_with_output.ini
@@ -0,0 +1,5 @@
+[global]
+result_code = PASS
+result_output = ran ok
+
+[results]

diff  --git a/llvm/utils/lit/tests/Inputs/wtt-output/unsupported.ini b/llvm/utils/lit/tests/Inputs/wtt-output/unsupported.ini
new file mode 100644
index 0000000000000..0d567b35a0a4b
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/unsupported.ini
@@ -0,0 +1,5 @@
+[global]
+result_code = UNSUPPORTED
+result_output = not shown
+
+[results]

diff  --git a/llvm/utils/lit/tests/Inputs/wtt-output/xfail.ini b/llvm/utils/lit/tests/Inputs/wtt-output/xfail.ini
new file mode 100644
index 0000000000000..3ca7fa60f1f0c
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/xfail.ini
@@ -0,0 +1,5 @@
+[global]
+result_code = XFAIL
+result_output = expected fail
+
+[results]

diff  --git a/llvm/utils/lit/tests/test-output-wtt.py b/llvm/utils/lit/tests/test-output-wtt.py
new file mode 100644
index 0000000000000..b28f40d8b1ba1
--- /dev/null
+++ b/llvm/utils/lit/tests/test-output-wtt.py
@@ -0,0 +1,124 @@
+# Test the WTT (.wtl) reporter (--wtt-output).
+#
+# The reporter writes UTF-16, which FileCheck cannot read directly, so
+# transcode the log to UTF-8 once and then assert the entire output.  The
+# reporter emits tests in a stable (suite, path) order, so the log is
+# deterministic.
+
+# RUN: rm -f %t.wtl %t.wtl.utf8
+# RUN: not %{lit} --wtt-output %t.wtl %{inputs}/wtt-output
+# RUN: %{python} -c "import io; io.open(r'%t.wtl.utf8','w',encoding='utf-8').write(io.open(r'%t.wtl',encoding='utf-16').read())"
+# RUN: FileCheck %s < %t.wtl.utf8
+
+# The only volatile fields are the machine/pid/timestamp in the <RTI> header and
+# the CA/LA tick counts (elapsed seconds, which round up on slower machines);
+# everything else is fixed, so the rest of the log is asserted verbatim.
+
+# CHECK:      <?xml version="1.0" encoding="utf-16"?>
+# CHECK-NEXT: <WTT-Logger>
+# CHECK-NEXT: <RTI ID="" Machine="{{.*}}" ProcessName="lit" ProcessID="{{[0-9]+}}" ThreadID="0" BaseTime="{{.*}}" Frequency="1" />
+# CHECK-NEXT: <CTX ID="1" Current="WTTLOG" Parent="ROOT" />
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: fail.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: fail.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Error UserText="test failed" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Error>
+# CHECK-NEXT: <EndTest Title="wtt-data :: fail.ini" TUID="" Result="Fail" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: missing_feature.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: missing_feature.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Msg UserText="UNSUPPORTED on this device; reported as Pass (not applicable)." CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <EndTest Title="wtt-data :: missing_feature.ini" TUID="" Result="Pass" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: multiline_fail.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: multiline_fail.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Error UserText='first line second "line" & <tag> ]]>' CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Error>
+# CHECK-NEXT: <EndTest Title="wtt-data :: multiline_fail.ini" TUID="" Result="Fail" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: pass.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: pass.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Msg UserText="not shown" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <EndTest Title="wtt-data :: pass.ini" TUID="" Result="Pass" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: pass_with_output.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: pass_with_output.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Msg UserText="ran ok" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <EndTest Title="wtt-data :: pass_with_output.ini" TUID="" Result="Pass" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: unsupported.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: unsupported.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Msg UserText="UNSUPPORTED on this device; reported as Pass (not applicable)." CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <EndTest Title="wtt-data :: unsupported.ini" TUID="" Result="Pass" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: xfail.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: xfail.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Msg UserText="expected fail" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <EndTest Title="wtt-data :: xfail.ini" TUID="" Result="Pass" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <Msg UserText="2 test(s) were UNSUPPORTED on this device and reported as Pass (not applicable)." CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="1" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <Msg UserText="1 test(s) were not run (1 excluded) and are omitted from the pass/fail results." CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="1" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <PFRollup Total="7" Passed="5" Failed="2" Blocked="0" Warned="0" Skipped="0" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="1" />
+# CHECK-NEXT: </PFRollup>
+# CHECK-NEXT: </WTT-Logger>


        


More information about the llvm-commits mailing list