[llvm-branch-commits] [lldb] 8bdbc57 - [NFC][LLDB] Make it possible to detect if the compiler used in tests supports -fbounds-safety (#169112)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Nov 21 19:03:18 PST 2025
Author: Dan Liew
Date: 2025-11-21T19:01:31-08:00
New Revision: 8bdbc57b8975d77da88562392299ee5d9c2b6cbb
URL: https://github.com/llvm/llvm-project/commit/8bdbc57b8975d77da88562392299ee5d9c2b6cbb
DIFF: https://github.com/llvm/llvm-project/commit/8bdbc57b8975d77da88562392299ee5d9c2b6cbb.diff
LOG: [NFC][LLDB] Make it possible to detect if the compiler used in tests supports -fbounds-safety (#169112)
This patch makes it possible to detect in LLDB shell and API tests if
`-fbounds-safety` is supported by the compiler used for testing. The
motivation behind this is to allow upstreaming
https://github.com/swiftlang/llvm-project/pull/11835 but with the tests
disabled in upstream because the full implementation of -fbounds-safety
isn't available in Clang yet.
For shell tests when -fbounds-safety is available the
`clang-bounds-safety` feature is available which means tests can be
annotated with `# REQUIRES: clang-bounds-safety`.
API tests that need -fbounds-safety support in the compiler can use the
new `@skipUnlessBoundsSafety` decorator.
rdar://165225507
Added:
Modified:
lldb/packages/Python/lldbsuite/test/decorators.py
lldb/test/Shell/helper/toolchain.py
llvm/utils/lit/lit/llvm/config.py
Removed:
################################################################################
diff --git a/lldb/packages/Python/lldbsuite/test/decorators.py b/lldb/packages/Python/lldbsuite/test/decorators.py
index 23d2165e07f7e..7311b17f97e01 100644
--- a/lldb/packages/Python/lldbsuite/test/decorators.py
+++ b/lldb/packages/Python/lldbsuite/test/decorators.py
@@ -1059,6 +1059,16 @@ def is_compiler_with_address_sanitizer():
return skipTestIfFn(is_compiler_with_address_sanitizer)(func)
+def skipUnlessBoundsSafety(func):
+ """Decorate the item to skip test unless Clang -fbounds-safety is supported."""
+
+ def is_compiler_with_bounds_safety():
+ if not _compiler_supports(lldbplatformutil.getCompiler(), "-fbounds-safety"):
+ return "Compiler cannot compile with -fbounds-safety"
+ return None
+
+ return skipTestIfFn(is_compiler_with_bounds_safety)(func)
+
def skipIfAsan(func):
"""Skip this test if the environment is set up to run LLDB *itself* under ASAN."""
return skipTestIfFn(is_running_under_asan)(func)
diff --git a/lldb/test/Shell/helper/toolchain.py b/lldb/test/Shell/helper/toolchain.py
index faa29d23387cc..b9e7dd7c196ab 100644
--- a/lldb/test/Shell/helper/toolchain.py
+++ b/lldb/test/Shell/helper/toolchain.py
@@ -277,6 +277,9 @@ def use_support_substitutions(config):
required=True,
use_installed=True,
)
+ if llvm_config.clang_has_bounds_safety():
+ llvm_config.lit_config.note("clang has -fbounds-safety support")
+ config.available_features.add("clang-bounds-safety")
if sys.platform == "win32":
_use_msvc_substitutions(config)
diff --git a/llvm/utils/lit/lit/llvm/config.py b/llvm/utils/lit/lit/llvm/config.py
index 59982c94b787c..f212928caee1b 100644
--- a/llvm/utils/lit/lit/llvm/config.py
+++ b/llvm/utils/lit/lit/llvm/config.py
@@ -293,6 +293,17 @@ def get_process_output(self, command):
except OSError:
self.lit_config.fatal("Could not run process %s" % command)
+ def check_process_success(self, command):
+ cp = subprocess.run(
+ command,
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL,
+ env=self.config.environment,
+ )
+ if cp.returncode == 0:
+ return True
+ return False
+
def feature_config(self, features):
# Ask llvm-config about the specified feature.
arguments = [x for (x, _) in features]
@@ -334,6 +345,25 @@ def get_clang_builtin_include_dir(self, clang):
# Ensure the result is an ascii string, across Python2.5+ - Python3.
return clang_dir
+ def clang_has_bounds_safety(self, additional_flags=None):
+ """
+ Return True iff `self.config.clang` supports -fbounds-safety
+ """
+ if not self.config.clang:
+ return False
+ if not os.path.exists(self.config.clang):
+ return False
+ if additional_flags is None:
+ additional_flags = []
+ # Invoke the clang driver to see if it supports the `-fbounds-safety`
+ # flag. Only the downstream implementation has this flag so this is
+ # a simple way to check if the full implementation is available or not.
+ cmd = [self.config.clang] + additional_flags
+ cmd += ["-fbounds-safety", "-###"]
+ if self.check_process_success(cmd):
+ return True
+ return False
+
# On macOS, LSan is only supported on clang versions 5 and higher
def get_clang_has_lsan(self, clang, triple):
if not clang:
More information about the llvm-branch-commits
mailing list