@@ -59,12 +59,14 @@ use rustc_middle::ty::TyCtxt;
59
59
use rustc_session:: config:: CrateType ;
60
60
use rustc_session:: cstore:: CrateDepKind ;
61
61
use rustc_session:: cstore:: LinkagePreference :: { self , RequireDynamic , RequireStatic } ;
62
+ use rustc_span:: sym;
62
63
use tracing:: info;
63
64
64
65
use crate :: creader:: CStore ;
65
66
use crate :: errors:: {
66
67
BadPanicStrategy , CrateDepMultiple , IncompatiblePanicInDropStrategy , LibRequired ,
67
- NonStaticCrateDep , RequiredPanicStrategy , RlibRequired , RustcLibRequired , TwoPanicRuntimes ,
68
+ NonStaticCrateDep , RequiredPanicStrategy , RlibRequired , RustcDriverHelp , RustcLibRequired ,
69
+ TwoPanicRuntimes ,
68
70
} ;
69
71
70
72
pub ( crate ) fn calculate ( tcx : TyCtxt < ' _ > ) -> Dependencies {
@@ -197,14 +199,14 @@ fn calculate_type(tcx: TyCtxt<'_>, ty: CrateType) -> DependencyList {
197
199
}
198
200
199
201
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) ;
207
208
}
209
+ }
208
210
209
211
// Collect what we've got so far in the return vector.
210
212
let last_crate = tcx. crates ( ( ) ) . len ( ) ;
@@ -292,12 +294,15 @@ fn add_library(
292
294
// This error is probably a little obscure, but I imagine that it
293
295
// can be refined over time.
294
296
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) ;
295
299
tcx. dcx ( ) . emit_err ( CrateDepMultiple {
296
300
crate_name : tcx. crate_name ( cnum) ,
297
301
non_static_deps : unavailable_as_static
298
302
. drain ( ..)
299
303
. map ( |cnum| NonStaticCrateDep { crate_name : tcx. crate_name ( cnum) } )
300
304
. collect ( ) ,
305
+ rustc_driver_help : linking_to_rustc_driver. then_some ( RustcDriverHelp ) ,
301
306
} ) ;
302
307
}
303
308
}
0 commit comments