[libcxx-commits] [libcxx] [libc++] Improve the verbosity of configuration errors when a compiler flag is not supported (PR #66379)
via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Sep 14 07:06:15 PDT 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libcxx
<details>
<summary>Changes</summary>
If an assertion fails during the configuration of the test suite because the compiler doesn't support a flag (or the compiler configuration is borked entirely), we will now print additional context to help debug the issue instead of just saying "The compiler doesn't support the flag" and bailing.
--
Full diff: https://github.com/llvm/llvm-project/pull/66379.diff
1 Files Affected:
- (modified) libcxx/utils/libcxx/test/dsl.py (+21-22)
<pre>
diff --git a/libcxx/utils/libcxx/test/dsl.py b/libcxx/utils/libcxx/test/dsl.py
index 847cebf5962f6aa..b0e7cea750a1e41 100644
--- a/libcxx/utils/libcxx/test/dsl.py
+++ b/libcxx/utils/libcxx/test/dsl.py
@@ -203,6 +203,17 @@ def programSucceeds(config, program, args=None):
@_memoizeExpensiveOperation(lambda c, f: (c.substitutions, c.environment, f))
+def tryCompileFlag(config, flag):
+ """
+ Try using the given compiler flag and return the exit code along with stdout and stderr.
+ """
+ with _makeConfigTest(config) as test:
+ out, err, exitCode, timeoutInfo, _ = _executeWithFakeConfig(test, [
+ "%{{cxx}} -xc++ {} -Werror -fsyntax-only %{{flags}} %{{compile_flags}} {}".format(os.devnull, flag)
+ ])
+ return exitCode, out, err
+
+
def hasCompileFlag(config, flag):
"""
Return whether the compiler in the configuration supports a given compiler flag.
@@ -210,16 +221,8 @@ def hasCompileFlag(config, flag):
This is done by executing the %{cxx} substitution with the given flag and
checking whether that succeeds.
"""
- with _makeConfigTest(config) as test:
- out, err, exitCode, timeoutInfo, _ = _executeWithFakeConfig(
- test,
- [
- "%{{cxx}} -xc++ {} -Werror -fsyntax-only %{{flags}} %{{compile_flags}} {}".format(
- os.devnull, flag
- )
- ],
- )
- return exitCode == 0
+ (exitCode, _, _) = tryCompileFlag(config, flag)
+ return exitCode == 0
@_memoizeExpensiveOperation(lambda c, s: (c.substitutions, c.environment, s))
@@ -388,6 +391,10 @@ def pretty(self, config, litParams):
pass
+def _ensureFlagIsSupported(config, flag):
+ (exitCode, out, err) = tryCompileFlag(config, flag)
+ assert exitCode == 0, f"Trying to enable compiler flag {flag}, which is not supported. stdout was:\n{out}\n\nstderr was:\n{err}"
+
class AddFeature(ConfigAction):
"""
This action defines the given Lit feature when running the test suite.
@@ -427,9 +434,7 @@ def __init__(self, flag):
def applyTo(self, config):
flag = self._getFlag(config)
- assert hasCompileFlag(
- config, flag
- ), "Trying to enable flag {}, which is not supported".format(flag)
+ _ensureFlagIsSupported(config, flag)
config.substitutions = _appendToSubstitution(
config.substitutions, "%{flags}", flag
)
@@ -473,9 +478,7 @@ def __init__(self, flag):
def applyTo(self, config):
flag = self._getFlag(config)
- assert hasCompileFlag(
- config, flag
- ), "Trying to enable compile flag {}, which is not supported".format(flag)
+ _ensureFlagIsSupported(config, flag)
config.substitutions = _appendToSubstitution(
config.substitutions, "%{compile_flags}", flag
)
@@ -497,9 +500,7 @@ def __init__(self, flag):
def applyTo(self, config):
flag = self._getFlag(config)
- assert hasCompileFlag(
- config, flag
- ), "Trying to enable link flag {}, which is not supported".format(flag)
+ _ensureFlagIsSupported(config, flag)
config.substitutions = _appendToSubstitution(
config.substitutions, "%{link_flags}", flag
)
@@ -521,9 +522,7 @@ def __init__(self, flag):
def applyTo(self, config):
flag = self._getFlag(config)
- assert hasCompileFlag(
- config, flag
- ), "Trying to enable link flag {}, which is not supported".format(flag)
+ _ensureFlagIsSupported(config, flag)
config.substitutions = _prependToSubstitution(
config.substitutions, "%{link_flags}", flag
)
</pre>
</details>
https://github.com/llvm/llvm-project/pull/66379
More information about the libcxx-commits
mailing list