[Lldb-commits] [lldb] [lldb][darwin] force BuiltinHeadersInSystemModules to be always false (PR #144913)
via lldb-commits
lldb-commits at lists.llvm.org
Thu Jun 19 08:21:20 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Charles Zablit (charles-zablit)
<details>
<summary>Changes</summary>
`SDKSupportsBuiltinModules` always returns true on newer versions of Darwin based OS. The only way for this call to return `false` would be to have a version mismatch between lldb and the SDK (recent lldb manually installed on macOS 14 for instance).
This patch removes this check and hardcodes the value of `BuiltinHeadersInSystemModules` to `false`.
---
Full diff: https://github.com/llvm/llvm-project/pull/144913.diff
3 Files Affected:
- (modified) lldb/include/lldb/Utility/XcodeSDK.h (-13)
- (modified) lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp (+1-49)
- (modified) lldb/source/Utility/XcodeSDK.cpp (-21)
``````````diff
diff --git a/lldb/include/lldb/Utility/XcodeSDK.h b/lldb/include/lldb/Utility/XcodeSDK.h
index ceb8abb8c502d..a1a0ec415b90e 100644
--- a/lldb/include/lldb/Utility/XcodeSDK.h
+++ b/lldb/include/lldb/Utility/XcodeSDK.h
@@ -93,19 +93,6 @@ class XcodeSDK {
static bool SDKSupportsModules(Type type, llvm::VersionTuple version);
static bool SDKSupportsModules(Type desired_type, const FileSpec &sdk_path);
- /// Returns true if the SDK for the specified triple supports
- /// builtin modules in system headers.
- ///
- /// NOTE: should be kept in sync with sdkSupportsBuiltinModules in
- /// Toolchains/Darwin.cpp
- ///
- /// FIXME: this function will be removed once LLDB's ClangExpressionParser
- /// constructs the compiler instance through the driver/toolchain. See \ref
- /// SetupImportStdModuleLangOpts
- ///
- static bool SDKSupportsBuiltinModules(const llvm::Triple &target_triple,
- llvm::VersionTuple sdk_version);
-
/// Return the canonical SDK name, such as "macosx" for the macOS SDK.
static std::string GetCanonicalName(Info info);
/// Return the best-matching SDK type for a specific triple.
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp
index 7aa9cae5a5614..3caf30c5822a2 100644
--- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp
+++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp
@@ -319,49 +319,6 @@ class ClangDiagnosticManagerAdapter : public clang::DiagnosticConsumer {
StringRef m_filename;
};
-/// Returns true if the SDK for the specified triple supports
-/// builtin modules in system headers. This is used to decide
-/// whether to pass -fbuiltin-headers-in-system-modules to
-/// the compiler instance when compiling the `std` module.
-static llvm::Expected<bool>
-sdkSupportsBuiltinModules(lldb_private::Target &target) {
- auto arch_spec = target.GetArchitecture();
- auto const &triple = arch_spec.GetTriple();
- auto module_sp = target.GetExecutableModule();
- if (!module_sp)
- return llvm::createStringError("Executable module not found.");
-
- // Get SDK path that the target was compiled against.
- auto platform_sp = target.GetPlatform();
- if (!platform_sp)
- return llvm::createStringError("No Platform plugin found on target.");
-
- auto sdk_or_err = platform_sp->GetSDKPathFromDebugInfo(*module_sp);
- if (!sdk_or_err)
- return sdk_or_err.takeError();
-
- // Use the SDK path from debug-info to find a local matching SDK directory.
- auto sdk_path_or_err =
- HostInfo::GetSDKRoot(HostInfo::SDKOptions{std::move(sdk_or_err->first)});
- if (!sdk_path_or_err)
- return sdk_path_or_err.takeError();
-
- auto VFS = FileSystem::Instance().GetVirtualFileSystem();
- if (!VFS)
- return llvm::createStringError("No virtual filesystem available.");
-
- // Extract SDK version from the /path/to/some.sdk/SDKSettings.json
- auto parsed_or_err = clang::parseDarwinSDKInfo(*VFS, *sdk_path_or_err);
- if (!parsed_or_err)
- return parsed_or_err.takeError();
-
- auto maybe_sdk = *parsed_or_err;
- if (!maybe_sdk)
- return llvm::createStringError("Couldn't find Darwin SDK info.");
-
- return XcodeSDK::SDKSupportsBuiltinModules(triple, maybe_sdk->getVersion());
-}
-
static void SetupModuleHeaderPaths(CompilerInstance *compiler,
std::vector<std::string> include_directories,
lldb::TargetSP target_sp) {
@@ -723,12 +680,7 @@ static void SetupImportStdModuleLangOpts(CompilerInstance &compiler,
lang_opts.GNUKeywords = true;
lang_opts.CPlusPlus11 = true;
- if (auto supported_or_err = sdkSupportsBuiltinModules(target))
- lang_opts.BuiltinHeadersInSystemModules = !*supported_or_err;
- else
- LLDB_LOG_ERROR(log, supported_or_err.takeError(),
- "Failed to determine BuiltinHeadersInSystemModules when "
- "setting up import-std-module: {0}");
+ lang_opts.BuiltinHeadersInSystemModules = false;
// The Darwin libc expects this macro to be set.
lang_opts.GNUCVersion = 40201;
diff --git a/lldb/source/Utility/XcodeSDK.cpp b/lldb/source/Utility/XcodeSDK.cpp
index 004b4717e315b..eb2047e67c326 100644
--- a/lldb/source/Utility/XcodeSDK.cpp
+++ b/lldb/source/Utility/XcodeSDK.cpp
@@ -266,27 +266,6 @@ bool XcodeSDK::SupportsSwift() const {
}
}
-bool XcodeSDK::SDKSupportsBuiltinModules(const llvm::Triple &target_triple,
- llvm::VersionTuple sdk_version) {
- using namespace llvm;
-
- switch (target_triple.getOS()) {
- case Triple::OSType::MacOSX:
- return sdk_version >= VersionTuple(15U);
- case Triple::OSType::IOS:
- return sdk_version >= VersionTuple(18U);
- case Triple::OSType::TvOS:
- return sdk_version >= VersionTuple(18U);
- case Triple::OSType::WatchOS:
- return sdk_version >= VersionTuple(11U);
- case Triple::OSType::XROS:
- return sdk_version >= VersionTuple(2U);
- default:
- // New SDKs support builtin modules from the start.
- return true;
- }
-}
-
bool XcodeSDK::SDKSupportsModules(XcodeSDK::Type desired_type,
const FileSpec &sdk_path) {
ConstString last_path_component = sdk_path.GetFilename();
``````````
</details>
https://github.com/llvm/llvm-project/pull/144913
More information about the lldb-commits
mailing list