1diff --git a/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift b/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift
2index a4a735f498..381522cc1f 100644
3--- a/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift
4+++ b/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift
5@@ -10,6 +10,7 @@
6 //
7 //===----------------------------------------------------------------------===//
8
9+import Foundation
10 import SwiftOptions
11
12 import func TSCBasic.lookupExecutablePath
13@@ -120,7 +121,18 @@
14 // just using `clang` and avoid a dependency on the C++ runtime.
15 let clangTool: Tool =
16 parsedOptions.hasArgument(.enableExperimentalCxxInterop) ? .clangxx : .clang
17- var clangPath = try getToolPath(clangTool)
18+
19+ // For Nix, prefer linking using the wrapped Nixpkgs clang, instead of using
20+ // the unwrapped clang packaged with swift. The latter is unable to link, but
21+ // we still want to use it for other purposes (clang importer).
22+ var clangPath: AbsolutePath
23+ if let binPath = try? AbsolutePath(validating: "@clang@/bin"),
24+ let tool = lookupExecutablePath(filename: parsedOptions.hasArgument(.enableExperimentalCxxInterop)
25+ ? "clang++" : "clang",
26+ searchPaths: [binPath]) {
27+ clangPath = tool
28+ } else {
29+ clangPath = try getToolPath(clangTool)
30 if let toolsDirPath = parsedOptions.getLastArgument(.toolsDirectory) {
31 // FIXME: What if this isn't an absolute path?
32 let toolsDir = try AbsolutePath(validating: toolsDirPath.asSingle)
33@@ -136,6 +148,7 @@
34 commandLine.appendFlag("-B")
35 commandLine.appendPath(toolsDir)
36 }
37+ } // Nix
38
39 // Executables on Linux get -pie
40 if targetTriple.os == .linux && linkerOutputType == .executable {