diff --git a/llvm/utils/lit/lit/main.py b/llvm/utils/lit/lit/main.py
--- a/llvm/utils/lit/lit/main.py
+++ b/llvm/utils/lit/lit/main.py
@@ -80,9 +80,13 @@
'error.\n')
sys.exit(2)
+ # When running multiple shards, don't include skipped tests in the xunit
+ # output since merging the files will result in duplicates.
+ tests_for_report = discovered_tests
if opts.shard:
(run, shards) = opts.shard
selected_tests = filter_by_shard(selected_tests, run, shards, lit_config)
+ tests_for_report = selected_tests
if not selected_tests:
sys.stderr.write('warning: shard does not contain any tests. '
'Consider decreasing the number of shards.\n')
@@ -102,7 +106,7 @@
print_results(discovered_tests, elapsed, opts)
for report in opts.reports:
- report.write_results(discovered_tests, elapsed)
+ report.write_results(tests_for_report, elapsed)
if lit_config.numErrors:
sys.stderr.write('\n%d error(s) in tests\n' % lit_config.numErrors)
diff --git a/llvm/utils/lit/lit/reports.py b/llvm/utils/lit/lit/reports.py
--- a/llvm/utils/lit/lit/reports.py
+++ b/llvm/utils/lit/lit/reports.py
@@ -144,7 +144,7 @@
def _get_skip_reason(self, test):
code = test.result.code
if code == lit.Test.EXCLUDED:
- return 'Test not selected (--filter, --max-tests, --run-shard)'
+ return 'Test not selected (--filter, --max-tests)'
if code == lit.Test.SKIPPED:
return 'User interrupt'
diff --git a/llvm/utils/lit/tests/xunit-output.py b/llvm/utils/lit/tests/xunit-output.py
--- a/llvm/utils/lit/tests/xunit-output.py
+++ b/llvm/utils/lit/tests/xunit-output.py
@@ -14,7 +14,7 @@
# CHECK-NEXT: ]]]]> &"]]>
# CHECK-NEXT:
# CHECK-NEXT:
-# CHECK-NEXT:
+# CHECK-NEXT:
# CHECK-NEXT:
# CHECK-NEXT:
# CHECK-NEXT: