-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[lldb][Darwin] revert change to lang_opts.BuiltinHeadersInSystemModules #145864
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Michael137
merged 2 commits into
llvm:main
from
charles-zablit:charles-zablit/lldb/revert-modules
Jun 26, 2025
Merged
[lldb][Darwin] revert change to lang_opts.BuiltinHeadersInSystemModules #145864
Michael137
merged 2 commits into
llvm:main
from
charles-zablit:charles-zablit/lldb/revert-modules
Jun 26, 2025
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…vm#145744)" This reverts commit 7381d81.
…ys false (llvm#144913)" This reverts commit 487581b.
@llvm/pr-subscribers-lldb Author: Charles Zablit (charles-zablit) ChangesRevert the changes made in the following PRs as they are causing bot failures:
Full diff: https://github.com/llvm/llvm-project/pull/145864.diff 7 Files Affected:
diff --git a/lldb/include/lldb/Target/Platform.h b/lldb/include/lldb/Target/Platform.h
index 1a05bdf54332f..35ffdabf907e7 100644
--- a/lldb/include/lldb/Target/Platform.h
+++ b/lldb/include/lldb/Target/Platform.h
@@ -458,6 +458,22 @@ class Platform : public PluginInterface {
LLVM_PRETTY_FUNCTION, GetName()));
}
+ /// Returns the full path of the most appropriate SDK for the
+ /// specified 'module'. This function gets this path by parsing
+ /// debug-info (see \ref `GetSDKPathFromDebugInfo`).
+ ///
+ /// \param[in] module Module whose debug-info to parse for
+ /// which SDK it was compiled against.
+ ///
+ /// \returns If successful, returns the full path to an
+ /// Xcode SDK.
+ virtual llvm::Expected<std::string>
+ ResolveSDKPathFromDebugInfo(Module &module) {
+ return llvm::createStringError(
+ llvm::formatv("{0} not implemented for '{1}' platform.",
+ LLVM_PRETTY_FUNCTION, GetName()));
+ }
+
/// Search CU for the SDK path the CUs was compiled against.
///
/// \param[in] unit The CU
diff --git a/lldb/include/lldb/Utility/XcodeSDK.h b/lldb/include/lldb/Utility/XcodeSDK.h
index a1a0ec415b90e..ceb8abb8c502d 100644
--- a/lldb/include/lldb/Utility/XcodeSDK.h
+++ b/lldb/include/lldb/Utility/XcodeSDK.h
@@ -93,6 +93,19 @@ 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 ffc76e6e93498..7aa9cae5a5614 100644
--- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp
+++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp
@@ -319,6 +319,49 @@ 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) {
@@ -662,6 +705,7 @@ static void SetupLangOpts(CompilerInstance &compiler,
static void SetupImportStdModuleLangOpts(CompilerInstance &compiler,
lldb_private::Target &target) {
+ Log *log = GetLog(LLDBLog::Expressions);
LangOptions &lang_opts = compiler.getLangOpts();
lang_opts.Modules = true;
// We want to implicitly build modules.
@@ -679,7 +723,12 @@ static void SetupImportStdModuleLangOpts(CompilerInstance &compiler,
lang_opts.GNUKeywords = true;
lang_opts.CPlusPlus11 = true;
- lang_opts.BuiltinHeadersInSystemModules = false;
+ 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}");
// The Darwin libc expects this macro to be set.
lang_opts.GNUCVersion = 40201;
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index 461e9dcb7847f..262a7dc731713 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -1130,33 +1130,13 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
if (target) {
if (ModuleSP exe_module_sp = target->GetExecutableModule()) {
- SymbolFile *sym_file = exe_module_sp->GetSymbolFile();
- if (!sym_file)
- return;
-
- XcodeSDK merged_sdk;
- for (unsigned i = 0; i < sym_file->GetNumCompileUnits(); ++i) {
- if (auto cu_sp = sym_file->GetCompileUnitAtIndex(i)) {
- auto cu_sdk = sym_file->ParseXcodeSDK(*cu_sp);
- merged_sdk.Merge(cu_sdk);
- }
- }
-
- // TODO: The result of this loop is almost equivalent to deriving the SDK
- // from the target triple, which would be a lot cheaper.
-
- if (FileSystem::Instance().Exists(merged_sdk.GetSysroot())) {
- sysroot_spec = merged_sdk.GetSysroot();
+ auto path_or_err = ResolveSDKPathFromDebugInfo(*exe_module_sp);
+ if (path_or_err) {
+ sysroot_spec = FileSpec(*path_or_err);
} else {
- auto path_or_err =
- HostInfo::GetSDKRoot(HostInfo::SDKOptions{merged_sdk});
- if (path_or_err) {
- sysroot_spec = FileSpec(*path_or_err);
- } else {
- LLDB_LOG_ERROR(GetLog(LLDBLog::Types | LLDBLog::Host),
- path_or_err.takeError(),
- "Failed to resolve SDK path: {0}");
- }
+ LLDB_LOG_ERROR(GetLog(LLDBLog::Types | LLDBLog::Host),
+ path_or_err.takeError(),
+ "Failed to resolve SDK path: {0}");
}
}
}
@@ -1404,6 +1384,31 @@ PlatformDarwin::GetSDKPathFromDebugInfo(Module &module) {
return std::pair{std::move(merged_sdk), found_mismatch};
}
+llvm::Expected<std::string>
+PlatformDarwin::ResolveSDKPathFromDebugInfo(Module &module) {
+ auto sdk_or_err = GetSDKPathFromDebugInfo(module);
+ if (!sdk_or_err)
+ return llvm::createStringError(
+ llvm::inconvertibleErrorCode(),
+ llvm::formatv("Failed to parse SDK path from debug-info: {0}",
+ llvm::toString(sdk_or_err.takeError())));
+
+ auto [sdk, _] = std::move(*sdk_or_err);
+
+ if (FileSystem::Instance().Exists(sdk.GetSysroot()))
+ return sdk.GetSysroot().GetPath();
+
+ auto path_or_err = HostInfo::GetSDKRoot(HostInfo::SDKOptions{sdk});
+ if (!path_or_err)
+ return llvm::createStringError(
+ llvm::inconvertibleErrorCode(),
+ llvm::formatv("Error while searching for SDK (XcodeSDK '{0}'): {1}",
+ sdk.GetString(),
+ llvm::toString(path_or_err.takeError())));
+
+ return path_or_err->str();
+}
+
llvm::Expected<XcodeSDK>
PlatformDarwin::GetSDKPathFromDebugInfo(CompileUnit &unit) {
ModuleSP module_sp = unit.CalculateSymbolContextModule();
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h
index f8a9301002e0d..f8a62ceb958fe 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h
@@ -120,6 +120,9 @@ class PlatformDarwin : public PlatformPOSIX {
llvm::Expected<std::pair<XcodeSDK, bool>>
GetSDKPathFromDebugInfo(Module &module) override;
+ llvm::Expected<std::string>
+ ResolveSDKPathFromDebugInfo(Module &module) override;
+
llvm::Expected<XcodeSDK> GetSDKPathFromDebugInfo(CompileUnit &unit) override;
llvm::Expected<std::string>
diff --git a/lldb/source/Utility/XcodeSDK.cpp b/lldb/source/Utility/XcodeSDK.cpp
index eb2047e67c326..004b4717e315b 100644
--- a/lldb/source/Utility/XcodeSDK.cpp
+++ b/lldb/source/Utility/XcodeSDK.cpp
@@ -266,6 +266,27 @@ 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();
diff --git a/lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp b/lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp
index e04183d85e5bd..50c37dcd4568e 100644
--- a/lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp
+++ b/lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp
@@ -161,6 +161,9 @@ TEST_F(XcodeSDKModuleTests, TestSDKPathFromDebugInfo_InvalidSDKPath) {
auto platform_sp = Platform::GetHostPlatform();
ASSERT_TRUE(platform_sp);
+ auto path_or_err = platform_sp->ResolveSDKPathFromDebugInfo(*module);
+ EXPECT_FALSE(static_cast<bool>(path_or_err));
+ llvm::consumeError(path_or_err.takeError());
}
TEST_F(XcodeSDKModuleTests, TestSDKPathFromDebugInfo_No_DW_AT_APPLE_sdk) {
@@ -204,6 +207,9 @@ TEST_F(XcodeSDKModuleTests, TestSDKPathFromDebugInfo_No_DW_AT_APPLE_sdk) {
auto platform_sp = Platform::GetHostPlatform();
ASSERT_TRUE(platform_sp);
+ auto path_or_err = platform_sp->ResolveSDKPathFromDebugInfo(*module);
+ EXPECT_FALSE(static_cast<bool>(path_or_err));
+ llvm::consumeError(path_or_err.takeError());
}
TEST_P(SDKPathParsingMultiparamTests, TestSDKPathFromDebugInfo) {
|
anthonyhatran
pushed a commit
to anthonyhatran/llvm-project
that referenced
this pull request
Jun 26, 2025
…es (llvm#145864) Revert the changes made in the following PRs as they are causing bot failures: - llvm#145744 - llvm#144913
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Revert the changes made in the following PRs as they are causing bot failures: