1--- a/lib/Driver/ToolChains.cpp
2+++ b/lib/Driver/ToolChains.cpp
3@@ -1475,7 +1475,17 @@ const char *ToolChain::getClangLinkerDriver(
4
5 // If there is a linker driver in the toolchain folder, use that instead.
6 if (auto tool = llvm::sys::findProgramByName(LinkerDriver, {toolchainPath}))
7- LinkerDriver = Args.MakeArgString(tool.get());
8+ return Args.MakeArgString(tool.get());
9+ }
10+
11+ // For Nix, prefer linking using the wrapped system clang, instead of using
12+ // the unwrapped clang packaged with swift. The latter is unable to link, but
13+ // we still want to use it for other purposes (clang importer).
14+ if (auto nixCC = llvm::sys::Process::GetEnv("NIX_CC")) {
15+ llvm::SmallString<128> binDir(nixCC.getValue());
16+ llvm::sys::path::append(binDir, "bin");
17+ if (auto tool = llvm::sys::findProgramByName(LinkerDriver, {binDir.str()}))
18+ return Args.MakeArgString(tool.get());
19 }
20
21 return LinkerDriver;