--- a/rust/private/rustc.bzl
+++ b/rust/private/rustc.bzl
@@ -472,7 +472,17 @@
         )
         ld_is_direct_driver = False
 
-    if not ld or toolchain.linker_preference == "rust":
+    # Windows MSVC Rust targets can inherit a GNU-flavored C++ linker path
+    # (`clang++`) alongside MSVC-style arguments. Prefer the toolchain linker
+    # there so both exec helpers and ordinary MSVC Rust targets link through
+    # the Windows direct linker instead.
+    use_windows_rust_linker = (
+        toolchain.target_os.startswith("windows") and
+        toolchain.target_abi == "msvc" and
+        toolchain.linker != None
+    )
+
+    if not ld or toolchain.linker_preference == "rust" or use_windows_rust_linker:
         ld = toolchain.linker.path
         ld_is_direct_driver = toolchain.linker_type == "direct"
 
