[PATCH] D20757: Add "REQUIRES-ANY" feature test

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Fri May 27 15:04:43 PDT 2016


EricWF created this revision.
EricWF added reviewers: ddunbar, rnk.
EricWF added subscribers: cfe-commits, llvm-commits.
EricWF set the repository for this revision to rL LLVM.

This patch adds a "REQUIRES-ANY" feature test that is disjunctive. This marks a test as `UNSUPPORTED` if none of the specified features are available.

Libc++ has the need to write feature test such as `// REQUIRES-ANY: c++98, c++03`  when testing of behavior that is specific to older dialects but has since changed.


Repository:
  rL LLVM

http://reviews.llvm.org/D20757

Files:
  utils/lit/lit/TestRunner.py
  utils/lit/tests/Inputs/shtest-format/requires-any-missing.txt
  utils/lit/tests/Inputs/shtest-format/requires-any-present.txt
  utils/lit/tests/shtest-format.py

Index: utils/lit/tests/shtest-format.py
===================================================================
--- utils/lit/tests/shtest-format.py
+++ utils/lit/tests/shtest-format.py
@@ -47,6 +47,8 @@
 
 # CHECK: UNRESOLVED: shtest-format :: no-test-line.txt
 # CHECK: PASS: shtest-format :: pass.txt
+# CHECK: UNSUPPORTED: shtest-format :: requires-any-missing.txt
+# CHECK: PASS: shtest-format :: requires-any-present.txt
 # CHECK: UNSUPPORTED: shtest-format :: requires-missing.txt
 # CHECK: PASS: shtest-format :: requires-present.txt
 # CHECK: UNSUPPORTED: shtest-format :: unsupported_dir/some-test.txt
@@ -69,9 +71,9 @@
 # CHECK: shtest-format :: external_shell/fail_with_bad_encoding.txt
 # CHECK: shtest-format :: fail.txt
 
-# CHECK: Expected Passes    : 4
+# CHECK: Expected Passes    : 5
 # CHECK: Expected Failures  : 3
-# CHECK: Unsupported Tests  : 2
+# CHECK: Unsupported Tests  : 3
 # CHECK: Unresolved Tests   : 1
 # CHECK: Unexpected Passes  : 1
 # CHECK: Unexpected Failures: 3
Index: utils/lit/tests/Inputs/shtest-format/requires-any-present.txt
===================================================================
--- /dev/null
+++ utils/lit/tests/Inputs/shtest-format/requires-any-present.txt
@@ -0,0 +1,2 @@
+RUN: true
+REQUIRES-ANY: a-missing-feature, a-present-feature
Index: utils/lit/tests/Inputs/shtest-format/requires-any-missing.txt
===================================================================
--- /dev/null
+++ utils/lit/tests/Inputs/shtest-format/requires-any-missing.txt
@@ -0,0 +1,2 @@
+RUN: true
+REQUIRES-ANY: a-missing-feature, a-missing-feature-2
Index: utils/lit/lit/TestRunner.py
===================================================================
--- utils/lit/lit/TestRunner.py
+++ utils/lit/lit/TestRunner.py
@@ -616,8 +616,10 @@
     sourcepath = test.getSourcePath()
     script = []
     requires = []
+    requires_any = []
     unsupported = []
-    keywords = ['RUN:', 'XFAIL:', 'REQUIRES:', 'UNSUPPORTED:', 'END.']
+    keywords = ['RUN:', 'XFAIL:', 'REQUIRES:', 'REQUIRES-ANY:',
+                'UNSUPPORTED:', 'END.']
     for line_number, command_type, ln in \
             parseIntegratedTestScriptCommands(sourcepath, keywords):
         if command_type == 'RUN':
@@ -642,6 +644,8 @@
             test.xfails.extend([s.strip() for s in ln.split(',')])
         elif command_type == 'REQUIRES':
             requires.extend([s.strip() for s in ln.split(',')])
+        elif command_type == 'REQUIRES-ANY':
+            requires_any.extend([s.strip() for s in ln.split(',')])
         elif command_type == 'UNSUPPORTED':
             unsupported.extend([s.strip() for s in ln.split(',')])
         elif command_type == 'END':
@@ -668,6 +672,12 @@
         msg = ', '.join(missing_required_features)
         return lit.Test.Result(Test.UNSUPPORTED,
                                "Test requires the following features: %s" % msg)
+    requires_any_features = [f for f in requires_any
+                             if f in test.config.available_features]
+    if requires_any and not requires_any_features:
+        msg = ' ,'.join(requires_any)
+        return lit.Test.Result(Test.UNSUPPORTED,
+            "Test requires any of the following features: %s" % msg)
     unsupported_features = [f for f in unsupported
                             if f in test.config.available_features]
     if unsupported_features:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D20757.58844.patch
Type: text/x-patch
Size: 3377 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160527/bf0cf44a/attachment.bin>


More information about the cfe-commits mailing list