summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/source/Host/macosx/HostInfoMacOSX.mm22
-rw-r--r--lldb/unittests/Host/HostInfoTest.cpp8
2 files changed, 21 insertions, 9 deletions
diff --git a/lldb/source/Host/macosx/HostInfoMacOSX.mm b/lldb/source/Host/macosx/HostInfoMacOSX.mm
index 41e5ebe0e10..8ca6876e540 100644
--- a/lldb/source/Host/macosx/HostInfoMacOSX.mm
+++ b/lldb/source/Host/macosx/HostInfoMacOSX.mm
@@ -271,7 +271,7 @@ bool HostInfoMacOSX::ComputeClangDirectory(FileSpec &lldb_shlib_spec,
auto parent = std::next(rev_it);
if (parent != r_end && *parent == "SharedFrameworks") {
// This is the top-level LLDB in the Xcode.app bundle.
- // e.g., "Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A"
+ // 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",
@@ -282,17 +282,21 @@ bool HostInfoMacOSX::ComputeClangDirectory(FileSpec &lldb_shlib_spec,
}
} else if (parent != r_end && *parent == "PrivateFrameworks" &&
std::distance(parent, r_end) > 2) {
- // This is LLDB inside an Xcode toolchain.
- // 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);
- return true;
+ if (*parent == "System") {
+ // This is LLDB inside an Xcode toolchain.
+ // E.g., "Xcode.app/Contents/Developer/Toolchains/" \
+ // "My.xctoolchain/System/Library/PrivateFrameworks/LLDB.framework"
+ 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);
+ return true;
+ }
+ raw_path = lldb_shlib_spec.GetPath();
}
+ raw_path.resize(rev_it - r_end);
} else {
raw_path.resize(rev_it - r_end);
}
diff --git a/lldb/unittests/Host/HostInfoTest.cpp b/lldb/unittests/Host/HostInfoTest.cpp
index 4bf8ab4cc4d..cf46fee8d39 100644
--- a/lldb/unittests/Host/HostInfoTest.cpp
+++ b/lldb/unittests/Host/HostInfoTest.cpp
@@ -90,6 +90,14 @@ TEST_F(HostInfoTest, MacOSX) {
"Swift-4.1-development-snapshot.xctoolchain/usr/lib/swift/clang";
EXPECT_EQ(HostInfoMacOSXTest::ComputeClangDir(toolchain), toolchain_clang);
+ std::string cltools = "/Library/Developer/CommandLineTools/Library/"
+ "PrivateFrameworks/LLDB.framework";
+ std::string cltools_clang =
+ "/Library/Developer/CommandLineTools/Library/PrivateFrameworks/"
+ "LLDB.framework/Resources/Clang";
+ EXPECT_EQ(HostInfoMacOSXTest::ComputeClangDir(cltools), cltools_clang);
+
+
// Test that a bogus path is detected.
EXPECT_NE(HostInfoMacOSXTest::ComputeClangDir(GetInputFilePath(xcode), true),
HostInfoMacOSXTest::ComputeClangDir(GetInputFilePath(xcode)));
OpenPOWER on IntegriCloud