diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -336,6 +336,11 @@ } } + // Clang handles passing the proper asan libs to the linker, which goes + // against link.exe's /INFERASANLIBS which automatically finds asan libs. + if (TC.getSanitizerArgs(Args).needsAsanRt()) + CmdArgs.push_back("/INFERASANLIBS:NO"); + #ifdef _WIN32 // When cross-compiling with VS2017 or newer, link.exe expects to have // its containing bin directory at the top of PATH, followed by the diff --git a/clang/test/Driver/cl-link.c b/clang/test/Driver/cl-link.c --- a/clang/test/Driver/cl-link.c +++ b/clang/test/Driver/cl-link.c @@ -65,3 +65,11 @@ // RUN: %clang_cl /Tc%s -fuse-ld=lld -### 2>&1 | FileCheck --check-prefix=USE_LLD %s // USE_LLD: lld-link + +// RUN: %clang_cl -m32 -arch:IA32 --target=i386-pc-win32 /Tc%s -fuse-ld=link -### -fsanitize=address 2>&1 | FileCheck --check-prefix=INFER-LINK %s +// INFER-LINK: link.exe +// INFER-LINK: /INFERASANLIBS:NO + +// RUN: %clang_cl -m32 -arch:IA32 --target=i386-pc-win32 /Tc%s -fuse-ld=lld -### -fsanitize=address 2>&1 | FileCheck --check-prefix=INFER-LLD %s +// INFER-LLD: lld-link +// INFER-LLD-NOT: INFERASANLIBS