Index: llvm/docs/TestingGuide.rst =================================================================== --- llvm/docs/TestingGuide.rst +++ llvm/docs/TestingGuide.rst @@ -443,7 +443,7 @@ and ``UNSUPPORTED`` to control when the test is enabled. Some tests are expected to fail. For example, there may be a known bug -that the test detect. Use ``XFAIL`` to mark a test as an expected failure. +that a test detects. Use ``XFAIL`` to mark a test as an expected failure. An ``XFAIL`` test will be successful if its execution fails, and will be a failure if its execution succeeds. @@ -465,9 +465,11 @@ expression is satisfied if any feature matches the regular expression. Regular expressions can appear inside an identifier, so for example ``he{{l+}}o`` would match ``helo``, ``hello``, ``helllo``, and so on. -- Substrings of the target triple (``UNSUPPORTED`` and ``XFAIL`` only). +- Substrings of the target triple. These must be exact substrings, not regular + expressions. -| ``REQUIRES`` enables the test if all expressions are true. +| ``REQUIRES`` disables the test if any expression is false (that is, + the test requires all expressions to be true). | ``UNSUPPORTED`` disables the test if any expression is true. | ``XFAIL`` expects the test to fail if any expression is true. Index: llvm/utils/lit/lit/Test.py =================================================================== --- llvm/utils/lit/lit/Test.py +++ llvm/utils/lit/lit/Test.py @@ -362,9 +362,10 @@ return True def getMissingRequiredFeaturesFromList(self, features): + triple = getattr(self.suite.config, 'target_triple', "") try: return [item for item in self.requires - if not BooleanExpression.evaluate(item, features)] + if not BooleanExpression.evaluate(item, features, triple)] except ValueError as e: raise ValueError('Error in REQUIRES list:\n%s' % str(e)) Index: llvm/utils/lit/tests/Inputs/shtest-format/requires-triple.txt =================================================================== --- llvm/utils/lit/tests/Inputs/shtest-format/requires-triple.txt +++ llvm/utils/lit/tests/Inputs/shtest-format/requires-triple.txt @@ -1,3 +1,3 @@ -# REQUIRES line that uses target triple, which doesn't work. Test should not run +# REQUIRES line that uses target triple. REQUIRES: x86_64 -RUN: false +RUN: true Index: llvm/utils/lit/tests/Inputs/xunit-output/lit.cfg =================================================================== --- llvm/utils/lit/tests/Inputs/xunit-output/lit.cfg +++ llvm/utils/lit/tests/Inputs/xunit-output/lit.cfg @@ -7,4 +7,4 @@ config.test_format = dummy_format.DummyFormat() config.test_source_root = None config.test_exec_root = None -config.target_triple = None +config.target_triple = '' Index: llvm/utils/lit/tests/shtest-format.py =================================================================== --- llvm/utils/lit/tests/shtest-format.py +++ llvm/utils/lit/tests/shtest-format.py @@ -61,7 +61,7 @@ # CHECK: UNSUPPORTED: shtest-format :: requires-missing.txt # CHECK: PASS: shtest-format :: requires-present.txt # CHECK: UNRESOLVED: shtest-format :: requires-star.txt -# CHECK: UNSUPPORTED: shtest-format :: requires-triple.txt +# CHECK: PASS: shtest-format :: requires-triple.txt # CHECK: PASS: shtest-format :: unsupported-expr-false.txt # CHECK: UNSUPPORTED: shtest-format :: unsupported-expr-true.txt # CHECK: UNRESOLVED: shtest-format :: unsupported-star.txt @@ -88,8 +88,8 @@ # CHECK: shtest-format :: xpass.txt # CHECK: Testing Time: -# CHECK: Unsupported : 4 -# CHECK: Passed : 6 +# CHECK: Unsupported : 3 +# CHECK: Passed : 7 # CHECK: Expectedly Failed : 4 # CHECK: Unresolved : 3 # CHECK: Failed : 4 @@ -98,7 +98,7 @@ # XUNIT: # XUNIT-NEXT: -# XUNIT-NEXT: +# XUNIT-NEXT: # XUNIT: # XUNIT-NEXT: @@ -144,8 +144,7 @@ # XUNIT-NEXT: -# XUNIT: -# XUNIT-NEXT: +# XUNIT: # XUNIT: