<div dir="ltr"><div>Hi Julian,</div><div><br></div><div>This patch breaks LIT_FILTER for check-all, which runs lit multiple times.  For such use cases, maybe there should be a command-line option to suppress this error.<br></div><div></div><div><br></div><div><div>Also, was there a review for this patch?  I don't see one referenced in the commit log.</div><div></div></div><div><br></div><div>Thanks.</div><div><br></div><div>Joel<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 4, 2019 at 1:17 PM Julian Lettner via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Julian Lettner<br>
Date: 2019-11-04T10:16:24-08:00<br>
New Revision: d8f2bff75126c6dde694ad245f9807fa12ad5630<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/d8f2bff75126c6dde694ad245f9807fa12ad5630" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/d8f2bff75126c6dde694ad245f9807fa12ad5630</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/d8f2bff75126c6dde694ad245f9807fa12ad5630.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/d8f2bff75126c6dde694ad245f9807fa12ad5630.diff</a><br>
<br>
LOG: [lit] Better/earlier errors when no tests are executed<br>
<br>
Fail early, when we discover no tests at all, or filter out all of them.<br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
    llvm/utils/lit/lit/cl_arguments.py<br>
    llvm/utils/lit/lit/main.py<br>
    llvm/utils/lit/lit/run.py<br>
    llvm/utils/lit/tests/selecting.py<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff  --git a/llvm/utils/lit/lit/cl_arguments.py b/llvm/utils/lit/lit/cl_arguments.py<br>
index 7b15041d1905..c17f6c7824e1 100644<br>
--- a/llvm/utils/lit/lit/cl_arguments.py<br>
+++ b/llvm/utils/lit/lit/cl_arguments.py<br>
@@ -5,6 +5,7 @@<br>
<br>
 import lit.util<br>
<br>
+# TODO(yln): scan dest, to see if is redundant<br>
 def parse_args():<br>
     parser = argparse.ArgumentParser()<br>
     parser.add_argument('test_paths',<br>
<br>
diff  --git a/llvm/utils/lit/lit/main.py b/llvm/utils/lit/lit/main.py<br>
index 337d154a560d..af36b07f1fef 100755<br>
--- a/llvm/utils/lit/lit/main.py<br>
+++ b/llvm/utils/lit/lit/main.py<br>
@@ -42,6 +42,9 @@ def main(builtin_params = {}):<br>
         echo_all_commands = opts.echoAllCommands)<br>
<br>
     tests = lit.discovery.find_tests_for_inputs(litConfig, opts.test_paths)<br>
+    if not tests:<br>
+        sys.stderr.write('Did not disover any tests for provided path(s).\n')<br>
+        sys.exit(2)<br>
<br>
     # Command line overrides configuration for maxIndividualTestTime.<br>
     if opts.maxIndividualTestTime is not None:  # `not None` is important (default: 0)<br>
@@ -62,12 +65,20 @@ def main(builtin_params = {}):<br>
<br>
     if opts.filter:<br>
         tests = [t for t in tests if opts.filter.search(t.getFullName())]<br>
+        if not tests:<br>
+            sys.stderr.write('Filter did not match any tests '<br>
+                             '(of %d discovered).\n' % numTotalTests)<br>
+            sys.exit(2)<br>
<br>
     determine_order(tests, opts.order)<br>
<br>
     if opts.shard:<br>
         (run, shards) = opts.shard<br>
         tests = filter_by_shard(tests, run, shards, litConfig)<br>
+        if not tests:<br>
+            sys.stderr.write('Shard does not contain any tests.  Consider '<br>
+                             'decreasing the shard count.\n')<br>
+            sys.exit(0)<br>
<br>
     if opts.max_tests:<br>
         tests = tests[:opts.max_tests]<br>
@@ -84,7 +95,7 @@ def main(builtin_params = {}):<br>
         write_test_results_xunit(tests, opts)<br>
<br>
     if litConfig.numErrors:<br>
-        sys.stderr.write('\n%d error(s), exiting.\n' % litConfig.numErrors)<br>
+        sys.stderr.write('\n%d error(s) in tests.\n' % litConfig.numErrors)<br>
         sys.exit(2)<br>
<br>
     if litConfig.numWarnings:<br>
<br>
diff  --git a/llvm/utils/lit/lit/run.py b/llvm/utils/lit/lit/run.py<br>
index 4d16399fec47..11992c8073d2 100644<br>
--- a/llvm/utils/lit/lit/run.py<br>
+++ b/llvm/utils/lit/lit/run.py<br>
@@ -13,7 +13,7 @@ def acquire(self): pass<br>
     def release(self): pass<br>
<br>
 def create_run(tests, lit_config, workers, progress_callback, timeout=None):<br>
-    # TODO(yln) assert workers > 0<br>
+    assert workers > 0<br>
     if workers == 1:<br>
         return SerialRun(tests, lit_config, progress_callback, timeout)<br>
     return ParallelRun(tests, lit_config, progress_callback, timeout, workers)<br>
@@ -45,9 +45,6 @@ def execute(self):<br>
         computed. Tests which were not actually executed (for any reason) will<br>
         be given an UNRESOLVED result.<br>
         """<br>
-        if not self.tests:<br>
-            return 0.0<br>
-<br>
         self.failure_count = 0<br>
         self.hit_max_failures = False<br>
<br>
<br>
diff  --git a/llvm/utils/lit/tests/selecting.py b/llvm/utils/lit/tests/selecting.py<br>
index 0921cdd31ac9..cfbb9d19b6dc 100644<br>
--- a/llvm/utils/lit/tests/selecting.py<br>
+++ b/llvm/utils/lit/tests/selecting.py<br>
@@ -1,6 +1,18 @@<br>
 # RUN: %{lit} %{inputs}/discovery | FileCheck --check-prefix=CHECK-BASIC %s<br>
 # CHECK-BASIC: Testing: 5 tests<br>
<br>
+<br>
+# Check that we exit with an error if we do not discover any tests.<br>
+#<br>
+# RUN: not %{lit} %{inputs}/nonexistent 2>&1 | FileCheck --check-prefix=CHECK-BAD-PATH %s<br>
+# CHECK-BAD-PATH: Did not disover any tests for provided path(s).<br>
+<br>
+# Check that we exit with an error if we filter out all tests.<br>
+#<br>
+# RUN: not %{lit} --filter 'nonexistent' %{inputs}/discovery 2>&1 | FileCheck --check-prefix=CHECK-BAD-FILTER %s<br>
+# CHECK-BAD-FILTER: Filter did not match any tests (of 5 discovered).<br>
+<br>
+<br>
 # Check that regex-filtering works, is case-insensitive, and can be configured via env var.<br>
 #<br>
 # RUN: %{lit} --filter 'o[a-z]e' %{inputs}/discovery | FileCheck --check-prefix=CHECK-FILTER %s<br>
@@ -8,6 +20,7 @@<br>
 # RUN: env LIT_FILTER='o[a-z]e' %{lit} %{inputs}/discovery | FileCheck --check-prefix=CHECK-FILTER %s<br>
 # CHECK-FILTER: Testing: 2 of 5 tests<br>
<br>
+<br>
 # Check that maximum counts work<br>
 #<br>
 # RUN: %{lit} --max-tests 3 %{inputs}/discovery | FileCheck --check-prefix=CHECK-MAX %s<br>
@@ -68,15 +81,13 @@<br>
 #<br>
 # RUN: %{lit} --num-shards 100 --run-shard 6 %{inputs}/discovery >%t.out 2>%t.err<br>
 # RUN: FileCheck --check-prefix=CHECK-SHARD-BIG-ERR2 < %t.err %s<br>
-# RUN: FileCheck --check-prefix=CHECK-SHARD-BIG-OUT2 < %t.out %s<br>
 # CHECK-SHARD-BIG-ERR2: note: Selecting shard 6/100 = size 0/5 = tests #(100*k)+6 = []<br>
-# CHECK-SHARD-BIG-OUT2: Testing: 0 of 5 tests<br>
+# CHECK-SHARD-BIG-ERR2: Shard does not contain any tests.  Consider decreasing the shard count.<br>
 #<br>
 # RUN: %{lit} --num-shards 100 --run-shard 50 %{inputs}/discovery >%t.out 2>%t.err<br>
 # RUN: FileCheck --check-prefix=CHECK-SHARD-BIG-ERR3 < %t.err %s<br>
-# RUN: FileCheck --check-prefix=CHECK-SHARD-BIG-OUT3 < %t.out %s<br>
 # CHECK-SHARD-BIG-ERR3: note: Selecting shard 50/100 = size 0/5 = tests #(100*k)+50 = []<br>
-# CHECK-SHARD-BIG-OUT3: Testing: 0 of 5 tests<br>
+# CHECK-SHARD-BIG-ERR3: Shard does not contain any tests.  Consider decreasing the shard count.<br>
<br>
<br>
 # Check that range constraints are enforced<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>