From cd24b0d0d855cb77f891f5fae1a779e8fea93879 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Thu, 2 Jun 2016 01:59:57 +0000 Subject: [PATCH] Add "REQUIRES-ANY" feature test Summary: 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. Reviewers: rnk, ddunbar Subscribers: ddunbar, probinson, llvm-commits, cfe-commits Differential Revision: http://reviews.llvm.org/D20757 llvm-svn: 271468 --- llvm/utils/lit/lit/TestRunner.py | 12 +++++++++++- .../Inputs/shtest-format/requires-any-missing.txt | 2 ++ .../Inputs/shtest-format/requires-any-present.txt | 2 ++ llvm/utils/lit/tests/shtest-format.py | 6 ++++-- 4 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 llvm/utils/lit/tests/Inputs/shtest-format/requires-any-missing.txt create mode 100644 llvm/utils/lit/tests/Inputs/shtest-format/requires-any-present.txt diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py index 38224add85a7..3f02420572a0 100644 --- a/llvm/utils/lit/lit/TestRunner.py +++ b/llvm/utils/lit/lit/TestRunner.py @@ -616,8 +616,10 @@ def parseIntegratedTestScript(test, require_script=True): 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 @@ def parseIntegratedTestScript(test, require_script=True): 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 @@ def parseIntegratedTestScript(test, require_script=True): 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: diff --git a/llvm/utils/lit/tests/Inputs/shtest-format/requires-any-missing.txt b/llvm/utils/lit/tests/Inputs/shtest-format/requires-any-missing.txt new file mode 100644 index 000000000000..c977ee90c9e5 --- /dev/null +++ b/llvm/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 diff --git a/llvm/utils/lit/tests/Inputs/shtest-format/requires-any-present.txt b/llvm/utils/lit/tests/Inputs/shtest-format/requires-any-present.txt new file mode 100644 index 000000000000..f3be518b2582 --- /dev/null +++ b/llvm/utils/lit/tests/Inputs/shtest-format/requires-any-present.txt @@ -0,0 +1,2 @@ +RUN: true +REQUIRES-ANY: a-missing-feature, a-present-feature diff --git a/llvm/utils/lit/tests/shtest-format.py b/llvm/utils/lit/tests/shtest-format.py index 751f0d708030..39b0e9c9c622 100644 --- a/llvm/utils/lit/tests/shtest-format.py +++ b/llvm/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