Skip to content

Commit 7a34d39

Browse files
Rollup merge of rust-lang#100464 - khyperia:lld-icf-on-windows, r=jyn514
Make `[rust] use-lld=true` work on windows Before, it would fail with "error: ignoring unknown argument '-Wl,--icf=all'" This option was introduced in rust-lang#99062 (well, technically rust-lang#99680) See zulip thread: https://rust-lang.zulipchat.com/#narrow/stream/182449-t-compiler.2Fhelp/topic/rust-lld.3A.20error.3A.20ignoring.20unknown.20argument.20'-Wl.2C--icf.3Dall'
2 parents b1d77dd + dcead65 commit 7a34d39

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

src/bootstrap/compile.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,12 @@ impl Step for Rustc {
658658

659659
// With LLD, we can use ICF (identical code folding) to reduce the executable size
660660
// of librustc_driver/rustc and to improve i-cache utilization.
661-
if builder.config.use_lld {
661+
//
662+
// -Wl,[link options] doesn't work on MSVC. However, /OPT:ICF (technically /OPT:REF,ICF)
663+
// is already on by default in MSVC optimized builds, which is interpreted as --icf=all:
664+
// https://github.com/llvm/llvm-project/blob/3329cec2f79185bafd678f310fafadba2a8c76d2/lld/COFF/Driver.cpp#L1746
665+
// https://github.com/rust-lang/rust/blob/f22819bcce4abaff7d1246a56eec493418f9f4ee/compiler/rustc_codegen_ssa/src/back/linker.rs#L827
666+
if builder.config.use_lld && !compiler.host.contains("msvc") {
662667
cargo.rustflag("-Clink-args=-Wl,--icf=all");
663668
}
664669

0 commit comments

Comments
 (0)