Skip to content

Commit a55221d

Browse files
committed
[clang] Revert changes to prefer the toolchain-provided libc++.dylib
This patch reverts the change that made clang prefer the toolchain libc++.dylib when there is one (#170303), and the subsequent test workaround we landed to fix bots (#170912). We are seeing some failure on macOS LLDB bots that need to be investigated, and that will require more time than I can spare before the end of today. This reverts commits bad1a88 and 190b8d0.
1 parent 7982688 commit a55221d

File tree

11 files changed

+8
-147
lines changed

11 files changed

+8
-147
lines changed

clang/lib/Driver/ToolChains/Darwin.cpp

Lines changed: 3 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2846,49 +2846,11 @@ void AppleMachO::AddCXXStdlibLibArgs(const ArgList &Args,
28462846
CXXStdlibType Type = GetCXXStdlibType(Args);
28472847

28482848
switch (Type) {
2849-
case ToolChain::CST_Libcxx: {
2850-
// On Darwin, we prioritize a libc++ located in the toolchain to a libc++
2851-
// located in the sysroot. Unlike the driver for most other platforms, on
2852-
// Darwin we do that by explicitly passing the library path to the linker
2853-
// to avoid having to add the toolchain's `lib/` directory to the linker
2854-
// search path, which would make other libraries findable as well.
2855-
//
2856-
// Prefering the toolchain library over the sysroot library matches the
2857-
// behavior we have for headers, where we prefer headers in the toolchain
2858-
// over headers in the sysroot if there are any. Note that it's important
2859-
// for the header search path behavior to match the link-time search path
2860-
// behavior to ensure that we link the program against a library that
2861-
// matches the headers that were used to compile it.
2862-
//
2863-
// Otherwise, we end up compiling against some set of headers and then
2864-
// linking against a different library (which, confusingly, shares the same
2865-
// name) which may have been configured with different options, be at a
2866-
// different version, etc.
2867-
SmallString<128> InstallLib = llvm::sys::path::parent_path(getDriver().Dir);
2868-
llvm::sys::path::append(InstallLib, "lib"); // <install>/lib
2869-
auto Link = [&](StringRef Library) {
2870-
SmallString<128> Shared(InstallLib);
2871-
llvm::sys::path::append(Shared,
2872-
SmallString<4>("lib") + Library + ".dylib");
2873-
SmallString<128> Static(InstallLib);
2874-
llvm::sys::path::append(Static, SmallString<4>("lib") + Library + ".a");
2875-
SmallString<32> Relative("-l");
2876-
Relative += Library;
2877-
2878-
if (getVFS().exists(Shared)) {
2879-
CmdArgs.push_back(Args.MakeArgString(Shared));
2880-
} else if (getVFS().exists(Static)) {
2881-
CmdArgs.push_back(Args.MakeArgString(Static));
2882-
} else {
2883-
CmdArgs.push_back(Args.MakeArgString(Relative));
2884-
}
2885-
};
2886-
2887-
Link("c++");
2849+
case ToolChain::CST_Libcxx:
2850+
CmdArgs.push_back("-lc++");
28882851
if (Args.hasArg(options::OPT_fexperimental_library))
2889-
Link("c++experimental");
2852+
CmdArgs.push_back("-lc++experimental");
28902853
break;
2891-
}
28922854

28932855
case ToolChain::CST_Libstdcxx:
28942856
// Unfortunately, -lstdc++ doesn't always exist in the standard search path;

clang/test/Driver/Inputs/basic_darwin_toolchain/usr/lib/libc++.dylib

Whitespace-only changes.

clang/test/Driver/Inputs/basic_darwin_toolchain/usr/lib/libc++experimental.a

Whitespace-only changes.

clang/test/Driver/Inputs/basic_darwin_toolchain_static/usr/bin/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_darwin_toolchain_static/usr/include/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_darwin_toolchain_static/usr/lib/libc++.a

Whitespace-only changes.

clang/test/Driver/Inputs/basic_darwin_toolchain_static/usr/lib/libc++experimental.a

Whitespace-only changes.

clang/test/Driver/darwin-header-search-libcxx.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@
9292
// CHECK-LIBCXX-SYSROOT_AND_TOOLCHAIN-1: "-internal-isystem" "[[TOOLCHAIN]]/usr/bin/../include/c++/v1"
9393
// CHECK-LIBCXX-SYSROOT_AND_TOOLCHAIN-1-NOT: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"
9494

95-
// Make sure that using -nostdinc, -nostdinc++ or -nostdlibinc will drop both the toolchain
95+
// Make sure that using -nostdinc, -nostdinc++ or -nostdlib will drop both the toolchain
9696
// C++ include path and the sysroot one.
9797
//
9898
// RUN: %clang -### %s -fsyntax-only 2>&1 \
@@ -116,7 +116,7 @@
116116
// RUN: -isysroot %S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
117117
// RUN: -stdlib=platform \
118118
// RUN: -nostdinc++ \
119-
// RUN: | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
119+
// RUN: | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr \
120120
// RUN: -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain \
121121
// RUN: --check-prefix=CHECK-LIBCXX-NOSTDINCXX %s
122122
// CHECK-LIBCXX-NOSTDINCXX: "-cc1"

clang/test/Driver/darwin-link-libcxx.cpp

Lines changed: 0 additions & 84 deletions
This file was deleted.

clang/test/Driver/experimental-library-flag.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
// CHECK: -fexperimental-library
1919

2020
// Depending on the stdlib in use, we should (or not) pass -lc++experimental.
21-
// Note that we don't check for `-lc++experimental` specifically, since some targets
22-
// like Darwin pass the path to the library explicitly instead of using `-lx`.
23-
// CHECK-LIBCXX: c++experimental
24-
// CHECK-LIBSTDCXX-NOT: c++experimental
25-
// CHECK-NOSTDLIB-NOT: c++experimental
21+
// CHECK-LIBCXX: -lc++experimental
22+
// CHECK-LIBSTDCXX-NOT: -lc++experimental
23+
// CHECK-NOSTDLIB-NOT: -lc++experimental

0 commit comments

Comments
 (0)