[libcxx-commits] [PATCH] D116010: [libcxx] [test] Don't rerun supportsVerify for each individual test

Martin Storsjö via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Sun Dec 19 14:59:46 PST 2021


mstorsjo created this revision.
mstorsjo added a reviewer: ldionne.
Herald added subscribers: ctetreau, tschuett, arichardson.
mstorsjo requested review of this revision.
Herald added a project: libc++.
Herald added a reviewer: libc++.

We can't just memoize _supportsVerify in place in format.py, as it
previously was executed in each of the individual processes.

Instead move the function to dsl.py and add a feature flag for it
instead, which can be used both by tests (that already have such
a flag, locally for one set of tests) and for the testing framework
itself.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D116010

Files:
  libcxx/test/libcxx/selftest/fail.cpp/lit.local.cfg
  libcxx/utils/libcxx/test/dsl.py
  libcxx/utils/libcxx/test/features.py
  libcxx/utils/libcxx/test/format.py


Index: libcxx/utils/libcxx/test/format.py
===================================================================
--- libcxx/utils/libcxx/test/format.py
+++ libcxx/utils/libcxx/test/format.py
@@ -12,21 +12,6 @@
 import pipes
 import re
 import shutil
-import subprocess
-
-def _supportsVerify(config):
-    """
-    Determine whether clang-verify is supported by the given configuration.
-
-    This is done by checking whether the %{cxx} substitution in that
-    configuration supports certain compiler flags.
-    """
-    command = "%{{cxx}} -xc++ {} -Werror -fsyntax-only -Xclang -verify-ignore-unexpected".format(os.devnull)
-    command = lit.TestRunner.applySubstitutions([command], config.substitutions,
-                                                recursion_limit=config.recursiveExpansionLimit)[0]
-    devNull = open(os.devnull, 'w')
-    result = subprocess.call(command, shell=True, stdout=devNull, stderr=devNull)
-    return result == 0
 
 def _getTempPaths(test):
     """
@@ -216,7 +201,7 @@
 
     def execute(self, test, litConfig):
         VERIFY_FLAGS = '-Xclang -verify -Xclang -verify-ignore-unexpected=note -ferror-limit=0'
-        supportsVerify = _supportsVerify(test.config)
+        supportsVerify = 'verify-support' in test.config.available_features
         filename = test.path_in_suite[-1]
 
         # TODO(ldionne): We currently disable tests that re-define _LIBCPP_ASSERT
Index: libcxx/utils/libcxx/test/features.py
===================================================================
--- libcxx/utils/libcxx/test/features.py
+++ libcxx/utils/libcxx/test/features.py
@@ -41,6 +41,7 @@
   Feature(name='has-fobjc-arc',                 when=lambda cfg: hasCompileFlag(cfg, '-xobjective-c++ -fobjc-arc') and
                                                                  sys.platform.lower().strip() == 'darwin'), # TODO: this doesn't handle cross-compiling to Apple platforms.
   Feature(name='objective-c++',                 when=lambda cfg: hasCompileFlag(cfg, '-xobjective-c++ -fobjc-arc')),
+  Feature(name='verify-support',                when=lambda cfg: supportsVerify(cfg)),
 
   Feature(name='non-lockfree-atomics',
           when=lambda cfg: sourceBuilds(cfg, """
Index: libcxx/utils/libcxx/test/dsl.py
===================================================================
--- libcxx/utils/libcxx/test/dsl.py
+++ libcxx/utils/libcxx/test/dsl.py
@@ -12,6 +12,7 @@
 import platform
 import re
 import shutil
+import subprocess
 import tempfile
 
 import libcxx.test.format
@@ -168,6 +169,21 @@
     ])
     return exitCode == 0
 
+ at _memoizeExpensiveOperation(lambda c: (c.substitutions, c.environment))
+def supportsVerify(config):
+    """
+    Determine whether clang-verify is supported by the given configuration.
+
+    This is done by checking whether the %{cxx} substitution in that
+    configuration supports certain compiler flags.
+    """
+    command = "%{{cxx}} -xc++ {} -Werror -fsyntax-only -Xclang -verify-ignore-unexpected".format(os.devnull)
+    command = lit.TestRunner.applySubstitutions([command], config.substitutions,
+                                                recursion_limit=config.recursiveExpansionLimit)[0]
+    devNull = open(os.devnull, 'w')
+    result = subprocess.call(command, shell=True, stdout=devNull, stderr=devNull)
+    return result == 0
+
 @_memoizeExpensiveOperation(lambda c, s: (c.substitutions, c.environment, s))
 def runScriptExitCode(config, script):
   """
Index: libcxx/test/libcxx/selftest/fail.cpp/lit.local.cfg
===================================================================
--- libcxx/test/libcxx/selftest/fail.cpp/lit.local.cfg
+++ /dev/null
@@ -1,6 +0,0 @@
-import libcxx.test.format
-
-# The tests in this directory need to know whether Clang-verify is supported
-# to work properly.
-if libcxx.test.format._supportsVerify(config):
-    config.available_features.add('verify-support')


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D116010.395358.patch
Type: text/x-patch
Size: 3900 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20211219/1dbff139/attachment.bin>


More information about the libcxx-commits mailing list