[llvm] r179402 - lit: Fix infinite recursion when an out-of-tree test root is located inside the source test root.
Daniel Dunbar
daniel at zuster.org
Fri Apr 12 12:09:09 PDT 2013
Author: ddunbar
Date: Fri Apr 12 14:09:09 2013
New Revision: 179402
URL: http://llvm.org/viewvc/llvm-project?rev=179402&view=rev
Log:
lit: Fix infinite recursion when an out-of-tree test root is located inside the source test root.
Added:
llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/
llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/lit.cfg
llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/obj/
llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/obj/lit.site.cfg
llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/test-one.txt
Modified:
llvm/trunk/utils/lit/lit/discovery.py
llvm/trunk/utils/lit/tests/discovery.py
Modified: llvm/trunk/utils/lit/lit/discovery.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/lit/discovery.py?rev=179402&r1=179401&r2=179402&view=diff
==============================================================================
--- llvm/trunk/utils/lit/lit/discovery.py (original)
+++ llvm/trunk/utils/lit/lit/discovery.py Fri Apr 12 14:09:09 2013
@@ -147,20 +147,31 @@ def getTestsInSuite(ts, path_in_suite, l
# Check for nested test suites, first in the execpath in case there is a
# site configuration and then in the source path.
- file_execpath = ts.getExecPath(path_in_suite + (filename,))
+ subpath = path_in_suite + (filename,)
+ file_execpath = ts.getExecPath(subpath)
if dirContainsTestSuite(file_execpath, litConfig):
- sub_ts, subiter = getTests(file_execpath, litConfig,
- testSuiteCache, localConfigCache)
+ sub_ts, subpath_in_suite = getTestSuite(file_execpath, litConfig,
+ testSuiteCache)
elif dirContainsTestSuite(file_sourcepath, litConfig):
- sub_ts, subiter = getTests(file_sourcepath, litConfig,
- testSuiteCache, localConfigCache)
+ sub_ts, subpath_in_suite = getTestSuite(file_sourcepath, litConfig,
+ testSuiteCache)
else:
- # Otherwise, continue loading from inside this test suite.
- subiter = getTestsInSuite(ts, path_in_suite + (filename,),
- litConfig, testSuiteCache,
- localConfigCache)
sub_ts = None
+ # If the this directory recursively maps back to the current test suite,
+ # disregard it (this can happen if the exec root is located inside the
+ # current test suite, for example).
+ if sub_ts is ts:
+ continue
+
+ # Otherwise, load from the nested test suite, if present.
+ if sub_ts is not None:
+ subiter = getTestsInSuite(sub_ts, subpath_in_suite, litConfig,
+ testSuiteCache, localConfigCache)
+ else:
+ subiter = getTestsInSuite(ts, subpath, litConfig, testSuiteCache,
+ localConfigCache)
+
N = 0
for res in subiter:
N += 1
Added: llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/lit.cfg
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/lit.cfg?rev=179402&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/lit.cfg (added)
+++ llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/lit.cfg Fri Apr 12 14:09:09 2013
@@ -0,0 +1,7 @@
+# Verify that the site configuration was loaded.
+if config.test_source_root is None or config.test_exec_root is None:
+ lit.fatal("No site specific configuration")
+
+config.name = 'exec-discovery-in-tree-suite'
+config.suffixes = ['.txt']
+config.test_format = lit.formats.ShTest()
Added: llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/obj/lit.site.cfg
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/obj/lit.site.cfg?rev=179402&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/obj/lit.site.cfg (added)
+++ llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/obj/lit.site.cfg Fri Apr 12 14:09:09 2013
@@ -0,0 +1,4 @@
+import os
+config.test_exec_root = os.path.dirname(__file__)
+config.test_source_root = os.path.dirname(config.test_exec_root)
+lit.load_config(config, os.path.join(config.test_source_root, "lit.cfg"))
\ No newline at end of file
Added: llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/test-one.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/test-one.txt?rev=179402&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/test-one.txt (added)
+++ llvm/trunk/utils/lit/tests/Inputs/exec-discovery-in-tree/test-one.txt Fri Apr 12 14:09:09 2013
@@ -0,0 +1 @@
+# RUN: true
Modified: llvm/trunk/utils/lit/tests/discovery.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/discovery.py?rev=179402&r1=179401&r2=179402&view=diff
==============================================================================
--- llvm/trunk/utils/lit/tests/discovery.py (original)
+++ llvm/trunk/utils/lit/tests/discovery.py Fri Apr 12 14:09:09 2013
@@ -79,3 +79,18 @@
#
# CHECK-ASEXEC-EXACT-TEST: -- Testing: 1 tests, 1 threads --
# CHECK-ASEXEC-EXACT-TEST: PASS: top-level-suite :: subdir/test-three
+
+
+# Check that we don't recurse infinitely when loading an site specific test
+# suite located inside the test source root.
+#
+# RUN: %{lit} \
+# RUN: %{inputs}/exec-discovery-in-tree/obj/ \
+# RUN: -j 1 --no-execute --show-suites -v > %t.out
+# RUN: FileCheck --check-prefix=CHECK-ASEXEC-INTREE < %t.out %s
+#
+# CHECK-ASEXEC-INTREE: exec-discovery-in-tree-suite - 1 tests
+# CHECK-ASEXEC-INTREE-NEXT: Source Root: {{.*/exec-discovery-in-tree$}}
+# CHECK-ASEXEC-INTREE-NEXT: Exec Root : {{.*/exec-discovery-in-tree/obj$}}
+# CHECK-ASEXEC-INTREE-NEXT: -- Testing: 1 tests, 1 threads --
+# CHECK-ASEXEC-INTREE-NEXT: PASS: exec-discovery-in-tree-suite :: test-one
More information about the llvm-commits
mailing list