about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-12-06 14:16:49 +0000
committerbors <bors@rust-lang.org>2016-12-06 14:16:49 +0000
commit1842efbae45e348f558bc73ed3fc6bbedcbcd565 (patch)
tree1ee16c5fcdc7120d2b48fd101f1946a357ded1b5 /src
parent1692c0b587e1d91bb96a99f9f2588d7d2b247e3f (diff)
parent257f643ee327252a4cd6dba25f64ac3768adcb45 (diff)
downloadrust-1842efbae45e348f558bc73ed3fc6bbedcbcd565.tar.gz
rust-1842efbae45e348f558bc73ed3fc6bbedcbcd565.zip
Auto merge of #37994 - upsuper:msvc-link-opt, r=alexcrichton
Don't apply msvc link opts for non-opt build

`/OPT:REF,ICF` sometimes takes lots of time. It makes no sense to apply them when doing debug build. MSVC's linker by default disables these optimizations when `/DEBUG` is specified, unless they are explicitly passed.
Diffstat (limited to 'src')
-rw-r--r--src/librustc_trans/back/linker.rs11
-rw-r--r--src/test/run-make/codegen-options-parsing/Makefile4
2 files changed, 12 insertions, 3 deletions
diff --git a/src/librustc_trans/back/linker.rs b/src/librustc_trans/back/linker.rs
index d59ee5d825d..040a05b69a3 100644
--- a/src/librustc_trans/back/linker.rs
+++ b/src/librustc_trans/back/linker.rs
@@ -321,7 +321,16 @@ impl<'a> Linker for MsvcLinker<'a> {
     }
 
     fn gc_sections(&mut self, _keep_metadata: bool) {
-        self.cmd.arg("/OPT:REF,ICF");
+        // MSVC's ICF (Identical COMDAT Folding) link optimization is
+        // slow for Rust and thus we disable it by default when not in
+        // optimization build.
+        if self.sess.opts.optimize != config::OptLevel::No {
+            self.cmd.arg("/OPT:REF,ICF");
+        } else {
+            // It is necessary to specify NOICF here, because /OPT:REF
+            // implies ICF by default.
+            self.cmd.arg("/OPT:REF,NOICF");
+        }
     }
 
     fn link_dylib(&mut self, lib: &str) {
diff --git a/src/test/run-make/codegen-options-parsing/Makefile b/src/test/run-make/codegen-options-parsing/Makefile
index 9543fad8e53..2b8b0712cc7 100644
--- a/src/test/run-make/codegen-options-parsing/Makefile
+++ b/src/test/run-make/codegen-options-parsing/Makefile
@@ -25,7 +25,7 @@ all:
 
 	# Should not link dead code...
 	$(RUSTC) -Z print-link-args dummy.rs 2>&1 | \
-		grep -e '--gc-sections' -e '-dead_strip' -e '/OPT:REF,ICF'
+		grep -e '--gc-sections' -e '-dead_strip' -e '/OPT:REF'
 	# ... unless you specifically ask to keep it
 	$(RUSTC) -Z print-link-args -C link-dead-code dummy.rs 2>&1 | \
-		(! grep -e '--gc-sections' -e '-dead_strip' -e '/OPT:REF,ICF')
+		(! grep -e '--gc-sections' -e '-dead_strip' -e '/OPT:REF')