@@ -59,12 +59,14 @@ use rustc_middle::ty::TyCtxt;
5959use rustc_session:: config:: CrateType ;
6060use rustc_session:: cstore:: CrateDepKind ;
6161use rustc_session:: cstore:: LinkagePreference :: { self , RequireDynamic , RequireStatic } ;
62+ use rustc_span:: sym;
6263use tracing:: info;
6364
6465use crate :: creader:: CStore ;
6566use crate :: errors:: {
6667 BadPanicStrategy , CrateDepMultiple , IncompatiblePanicInDropStrategy , LibRequired ,
67- NonStaticCrateDep , RequiredPanicStrategy , RlibRequired , RustcLibRequired , TwoPanicRuntimes ,
68+ NonStaticCrateDep , RequiredPanicStrategy , RlibRequired , RustcDriverHelp , RustcLibRequired ,
69+ TwoPanicRuntimes ,
6870} ;
6971
7072pub ( crate ) fn calculate ( tcx : TyCtxt < ' _ > ) -> Dependencies {
@@ -197,14 +199,14 @@ fn calculate_type(tcx: TyCtxt<'_>, ty: CrateType) -> DependencyList {
197199 }
198200
199201 let name = tcx. crate_name ( cnum) ;
200- info ! ( "adding dylib: {}" , name) ;
201- add_library ( tcx, cnum, RequireDynamic , & mut formats, & mut unavailable_as_static) ;
202- let deps = tcx. dylib_dependency_formats ( cnum) ;
203- for & ( depnum, style) in deps. iter ( ) {
204- info ! ( "adding {:?}: {}" , style, tcx. crate_name( depnum) ) ;
205- add_library ( tcx, depnum, style, & mut formats, & mut unavailable_as_static) ;
206- }
202+ info ! ( "adding dylib: {}" , name) ;
203+ add_library ( tcx, cnum, RequireDynamic , & mut formats, & mut unavailable_as_static) ;
204+ let deps = tcx. dylib_dependency_formats ( cnum) ;
205+ for & ( depnum, style) in deps. iter ( ) {
206+ info ! ( "adding {:?}: {}" , style, tcx. crate_name( depnum) ) ;
207+ add_library ( tcx, depnum, style, & mut formats, & mut unavailable_as_static) ;
207208 }
209+ }
208210
209211 // Collect what we've got so far in the return vector.
210212 let last_crate = tcx. crates ( ( ) ) . len ( ) ;
@@ -292,12 +294,15 @@ fn add_library(
292294 // This error is probably a little obscure, but I imagine that it
293295 // can be refined over time.
294296 if link2 != link || link == RequireStatic {
297+ let linking_to_rustc_driver = tcx. sess . psess . unstable_features . is_nightly_build ( )
298+ && tcx. crates ( ( ) ) . iter ( ) . any ( |& cnum| tcx. crate_name ( cnum) == sym:: rustc_driver) ;
295299 tcx. dcx ( ) . emit_err ( CrateDepMultiple {
296300 crate_name : tcx. crate_name ( cnum) ,
297301 non_static_deps : unavailable_as_static
298302 . drain ( ..)
299303 . map ( |cnum| NonStaticCrateDep { crate_name : tcx. crate_name ( cnum) } )
300304 . collect ( ) ,
305+ rustc_driver_help : linking_to_rustc_driver. then_some ( RustcDriverHelp ) ,
301306 } ) ;
302307 }
303308 }
0 commit comments