summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/source/Host/macosx/HostInfoMacOSX.mm19
-rw-r--r--lldb/unittests/Host/HostInfoTest.cpp10
2 files changed, 17 insertions, 12 deletions
diff --git a/lldb/source/Host/macosx/HostInfoMacOSX.mm b/lldb/source/Host/macosx/HostInfoMacOSX.mm
index 07219968e09..41e5ebe0e10 100644
--- a/lldb/source/Host/macosx/HostInfoMacOSX.mm
+++ b/lldb/source/Host/macosx/HostInfoMacOSX.mm
@@ -268,10 +268,11 @@ bool HostInfoMacOSX::ComputeClangDirectory(FileSpec &lldb_shlib_spec,
// same Clang module cache.
llvm::SmallString<256> clang_path;
const char *swift_clang_resource_dir = "usr/lib/swift/clang";
- ++rev_it;
- if (rev_it != r_end && *rev_it == "SharedFrameworks") {
+ auto parent = std::next(rev_it);
+ if (parent != r_end && *parent == "SharedFrameworks") {
// This is the top-level LLDB in the Xcode.app bundle.
- raw_path.resize(rev_it - r_end);
+ // e.g., "Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A"
+ raw_path.resize(parent - r_end);
llvm::sys::path::append(clang_path, raw_path,
"Developer/Toolchains/XcodeDefault.xctoolchain",
swift_clang_resource_dir);
@@ -279,10 +280,14 @@ bool HostInfoMacOSX::ComputeClangDirectory(FileSpec &lldb_shlib_spec,
file_spec.SetFile(clang_path.c_str(), true);
return true;
}
- } else if (rev_it != r_end && *rev_it == "PrivateFrameworks" &&
- ++rev_it != r_end && ++rev_it != r_end) {
+ } else if (parent != r_end && *parent == "PrivateFrameworks" &&
+ std::distance(parent, r_end) > 2) {
// This is LLDB inside an Xcode toolchain.
- raw_path.resize(rev_it - r_end);
+ // e.g., "Xcode.app/Contents/Developer/Toolchains/" \
+ // "My.xctoolchain/System/Library/PrivateFrameworks/LLDB.framework"
+ ++parent;
+ ++parent;
+ raw_path.resize(parent - r_end);
llvm::sys::path::append(clang_path, raw_path, swift_clang_resource_dir);
if (!verify || VerifyClangPath(clang_path)) {
file_spec.SetFile(clang_path.c_str(), true);
@@ -293,7 +298,7 @@ bool HostInfoMacOSX::ComputeClangDirectory(FileSpec &lldb_shlib_spec,
}
// Fall back to the Clang resource directory inside the framework.
- raw_path.append("/Resources/Clang");
+ raw_path.append("LLDB.framework/Resources/Clang");
file_spec.SetFile(raw_path.c_str(), true);
return true;
}
diff --git a/lldb/unittests/Host/HostInfoTest.cpp b/lldb/unittests/Host/HostInfoTest.cpp
index d18a6a5b2f6..55aa2bda39e 100644
--- a/lldb/unittests/Host/HostInfoTest.cpp
+++ b/lldb/unittests/Host/HostInfoTest.cpp
@@ -63,11 +63,11 @@ TEST_F(HostInfoTest, MacOSX) {
std::string posix = "/usr/lib/liblldb.dylib";
EXPECT_FALSE(HostInfoMacOSXTest::ComputeClangDir(posix).empty());
- std::string framework =
- "/SharedFrameworks/LLDB.framework";
- std::string framework_clang =
- "/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/clang";
- EXPECT_EQ(HostInfoMacOSXTest::ComputeClangDir(framework), framework_clang);
+ std::string build =
+ "/lldb-macosx-x86_64/Library/Frameworks/LLDB.framework/Versions/A";
+ std::string build_clang =
+ "/lldb-macosx-x86_64/Library/Frameworks/LLDB.framework/Resources/Clang";
+ EXPECT_EQ(HostInfoMacOSXTest::ComputeClangDir(build), build_clang);
std::string xcode =
"/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A";
OpenPOWER on IntegriCloud