@@ -691,23 +691,27 @@ impl Step for Rustc {
691691 ) ) ;
692692 }
693693
694- match builder. config . rust_lto {
695- RustcLto :: Thin | RustcLto :: Fat => {
696- // Since using LTO for optimizing dylibs is currently experimental,
697- // we need to pass -Zdylib-lto.
698- cargo. rustflag ( "-Zdylib-lto" ) ;
699- // Cargo by default passes `-Cembed-bitcode=no` and doesn't pass `-Clto` when
700- // compiling dylibs (and their dependencies), even when LTO is enabled for the
701- // crate. Therefore, we need to override `-Clto` and `-Cembed-bitcode` here.
702- let lto_type = match builder. config . rust_lto {
703- RustcLto :: Thin => "thin" ,
704- RustcLto :: Fat => "fat" ,
705- _ => unreachable ! ( ) ,
706- } ;
707- cargo. rustflag ( & format ! ( "-Clto={}" , lto_type) ) ;
708- cargo. rustflag ( "-Cembed-bitcode=yes" ) ;
694+ // We currently don't support cross-crate LTO in stage0. This also isn't hugely necessary
695+ // and may just be a time sink.
696+ if compiler. stage != 0 {
697+ match builder. config . rust_lto {
698+ RustcLto :: Thin | RustcLto :: Fat => {
699+ // Since using LTO for optimizing dylibs is currently experimental,
700+ // we need to pass -Zdylib-lto.
701+ cargo. rustflag ( "-Zdylib-lto" ) ;
702+ // Cargo by default passes `-Cembed-bitcode=no` and doesn't pass `-Clto` when
703+ // compiling dylibs (and their dependencies), even when LTO is enabled for the
704+ // crate. Therefore, we need to override `-Clto` and `-Cembed-bitcode` here.
705+ let lto_type = match builder. config . rust_lto {
706+ RustcLto :: Thin => "thin" ,
707+ RustcLto :: Fat => "fat" ,
708+ _ => unreachable ! ( ) ,
709+ } ;
710+ cargo. rustflag ( & format ! ( "-Clto={}" , lto_type) ) ;
711+ cargo. rustflag ( "-Cembed-bitcode=yes" ) ;
712+ }
713+ RustcLto :: ThinLocal => { /* Do nothing, this is the default */ }
709714 }
710- RustcLto :: ThinLocal => { /* Do nothing, this is the default */ }
711715 }
712716
713717 builder. info ( & format ! (
0 commit comments