From e23a5fc45f1f588a00ed8028afeaf92aa43c949e Mon Sep 17 00:00:00 2001 From: Wesley Wiser Date: Fri, 7 Nov 2025 14:51:01 -0600 Subject: [PATCH 1/2] Enable `-Zfunction-sections` by default for `*-windows-{gnu,cygwin}` The comment here was a bit misleading, #13846 was about an LLVM assertion that failed when `-Zfunction-sections` was enabled. However, that bug has been fixed for a long time and the actual issue was that older `ld` versions would not correctly link binaries (see #75604 for the prior attempt at this change). This bug was fixed in version 2.32 of binutils and Rust now ships binutils 2.42 as of #119229 so we can remove this workaround! --- compiler/rustc_target/src/spec/base/cygwin.rs | 2 -- compiler/rustc_target/src/spec/base/windows_gnu.rs | 2 -- 2 files changed, 4 deletions(-) diff --git a/compiler/rustc_target/src/spec/base/cygwin.rs b/compiler/rustc_target/src/spec/base/cygwin.rs index d6ae0a905bf60..be24104ba148d 100644 --- a/compiler/rustc_target/src/spec/base/cygwin.rs +++ b/compiler/rustc_target/src/spec/base/cygwin.rs @@ -26,8 +26,6 @@ pub(crate) fn opts() -> TargetOptions { TargetOptions { os: "cygwin".into(), vendor: "pc".into(), - // FIXME(#13846) this should be enabled for cygwin - function_sections: false, linker: Some("gcc".into()), dynamic_linking: true, dll_prefix: "".into(), diff --git a/compiler/rustc_target/src/spec/base/windows_gnu.rs b/compiler/rustc_target/src/spec/base/windows_gnu.rs index 2867428e42f7a..1289d9a8a0175 100644 --- a/compiler/rustc_target/src/spec/base/windows_gnu.rs +++ b/compiler/rustc_target/src/spec/base/windows_gnu.rs @@ -80,8 +80,6 @@ pub(crate) fn opts() -> TargetOptions { os: "windows".into(), env: "gnu".into(), vendor: "pc".into(), - // FIXME(#13846) this should be enabled for windows - function_sections: false, linker: Some("gcc".into()), dynamic_linking: true, dll_tls_export: false, From ac4699bda0a001c8d3cc23881ba1dc083f780d9e Mon Sep 17 00:00:00 2001 From: Wesley Wiser Date: Sat, 8 Nov 2025 12:58:07 -0600 Subject: [PATCH 2/2] [Temp] Revert "Enable `-Zfunction-sections` by default for `*-windows-{gnu,cygwin}`" This reverts commit e23a5fc45f1f588a00ed8028afeaf92aa43c949e. --- compiler/rustc_target/src/spec/base/cygwin.rs | 2 ++ compiler/rustc_target/src/spec/base/windows_gnu.rs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/compiler/rustc_target/src/spec/base/cygwin.rs b/compiler/rustc_target/src/spec/base/cygwin.rs index be24104ba148d..d6ae0a905bf60 100644 --- a/compiler/rustc_target/src/spec/base/cygwin.rs +++ b/compiler/rustc_target/src/spec/base/cygwin.rs @@ -26,6 +26,8 @@ pub(crate) fn opts() -> TargetOptions { TargetOptions { os: "cygwin".into(), vendor: "pc".into(), + // FIXME(#13846) this should be enabled for cygwin + function_sections: false, linker: Some("gcc".into()), dynamic_linking: true, dll_prefix: "".into(), diff --git a/compiler/rustc_target/src/spec/base/windows_gnu.rs b/compiler/rustc_target/src/spec/base/windows_gnu.rs index 1289d9a8a0175..2867428e42f7a 100644 --- a/compiler/rustc_target/src/spec/base/windows_gnu.rs +++ b/compiler/rustc_target/src/spec/base/windows_gnu.rs @@ -80,6 +80,8 @@ pub(crate) fn opts() -> TargetOptions { os: "windows".into(), env: "gnu".into(), vendor: "pc".into(), + // FIXME(#13846) this should be enabled for windows + function_sections: false, linker: Some("gcc".into()), dynamic_linking: true, dll_tls_export: false,