Disable ICF opt of MSVC for non-opt build

This commit is contained in:
Xidorn Quan 2016-11-25 19:17:21 +11:00
parent c80c31a502
commit 257f643ee3
2 changed files with 12 additions and 3 deletions

View File

@ -320,7 +320,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) {

View File

@ -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')