@@ -59,7 +59,7 @@ use rustc_session::getopts::{self, Matches};
59
59
use rustc_session:: lint:: { Lint , LintId } ;
60
60
use rustc_session:: output:: collect_crate_types;
61
61
use rustc_session:: { EarlyDiagCtxt , Session , config, filesearch} ;
62
- use rustc_span:: FileName ;
62
+ use rustc_span:: { FileName , Symbol } ;
63
63
use rustc_target:: json:: ToJson ;
64
64
use rustc_target:: spec:: { Target , TargetTuple } ;
65
65
use time:: OffsetDateTime ;
@@ -290,7 +290,8 @@ pub fn run_compiler(at_args: &[String], callbacks: &mut (dyn Callbacks + Send))
290
290
return early_exit( ) ;
291
291
}
292
292
293
- if print_crate_info( codegen_backend, sess, has_input) == Compilation :: Stop {
293
+ let ( c, crate_name) = print_crate_info( codegen_backend, sess, has_input) ;
294
+ if c == Compilation :: Stop {
294
295
return early_exit( ) ;
295
296
}
296
297
@@ -316,7 +317,7 @@ pub fn run_compiler(at_args: &[String], callbacks: &mut (dyn Callbacks + Send))
316
317
// If pretty printing is requested: Figure out the representation, print it and exit
317
318
if let Some ( pp_mode) = sess. opts. pretty {
318
319
if pp_mode. needs_ast_map( ) {
319
- create_and_enter_global_ctxt( compiler, krate, |tcx| {
320
+ create_and_enter_global_ctxt( compiler, krate, crate_name , |tcx| {
320
321
tcx. ensure_ok( ) . early_lint_checks( ( ) ) ;
321
322
pretty:: print( sess, pp_mode, pretty:: PrintExtra :: NeedsAstMap { tcx } ) ;
322
323
passes:: write_dep_info( tcx) ;
@@ -336,7 +337,7 @@ pub fn run_compiler(at_args: &[String], callbacks: &mut (dyn Callbacks + Send))
336
337
return early_exit( ) ;
337
338
}
338
339
339
- let linker = create_and_enter_global_ctxt( compiler, krate, |tcx| {
340
+ let linker = create_and_enter_global_ctxt( compiler, krate, crate_name , |tcx| {
340
341
let early_exit = || {
341
342
sess. dcx( ) . abort_if_errors( ) ;
342
343
None
@@ -607,18 +608,23 @@ fn print_crate_info(
607
608
codegen_backend: & dyn CodegenBackend ,
608
609
sess: & Session ,
609
610
parse_attrs: bool ,
610
- ) -> Compilation {
611
+ ) -> ( Compilation , Option < Symbol > ) {
611
612
use rustc_session:: config:: PrintKind :: * ;
612
613
// This import prevents the following code from using the printing macros
613
614
// used by the rest of the module. Within this function, we only write to
614
615
// the output specified by `sess.io.output_file`.
615
616
#[ allow( unused_imports) ]
616
617
use { do_not_use_safe_print as safe_print, do_not_use_safe_print as safe_println} ;
617
618
619
+ let mut crate_name = None ;
620
+ let mut get_crate_name = |attrs| {
621
+ * crate_name. get_or_insert_with( || passes:: get_crate_name( sess, attrs) )
622
+ } ;
623
+
618
624
// NativeStaticLibs and LinkArgs are special - printed during linking
619
625
// (empty iterator returns true)
620
626
if sess. opts. prints. iter( ) . all( |p| p. kind == NativeStaticLibs || p. kind == LinkArgs ) {
621
- return Compilation :: Continue ;
627
+ return ( Compilation :: Continue , crate_name ) ;
622
628
}
623
629
624
630
let attrs = if parse_attrs {
@@ -627,7 +633,7 @@ fn print_crate_info(
627
633
Ok ( attrs) => Some ( attrs) ,
628
634
Err ( parse_error) => {
629
635
parse_error. emit( ) ;
630
- return Compilation :: Stop ;
636
+ return ( Compilation :: Stop , crate_name ) ;
631
637
}
632
638
}
633
639
} else {
@@ -664,24 +670,23 @@ fn print_crate_info(
664
670
FileNames => {
665
671
let Some ( attrs) = attrs. as_ref( ) else {
666
672
// no crate attributes, print out an error and exit
667
- return Compilation :: Continue ;
673
+ return ( Compilation :: Continue , crate_name ) ;
668
674
} ;
669
675
let t_outputs = rustc_interface:: util:: build_output_filenames( attrs, sess) ;
670
- let crate_name = passes:: get_crate_name( sess, attrs) ;
671
676
let crate_types = collect_crate_types( sess, attrs) ;
672
677
for & style in & crate_types {
673
678
let fname = rustc_session:: output:: filename_for_input(
674
- sess, style, crate_name , & t_outputs,
679
+ sess, style, get_crate_name ( attrs ) , & t_outputs,
675
680
) ;
676
681
println_info!( "{}" , fname. as_path( ) . file_name( ) . unwrap( ) . to_string_lossy( ) ) ;
677
682
}
678
683
}
679
684
CrateName => {
680
685
let Some ( attrs) = attrs. as_ref( ) else {
681
686
// no crate attributes, print out an error and exit
682
- return Compilation :: Continue ;
687
+ return ( Compilation :: Continue , crate_name ) ;
683
688
} ;
684
- println_info!( "{}" , passes :: get_crate_name( sess , attrs) ) ;
689
+ println_info!( "{}" , get_crate_name( attrs) ) ;
685
690
}
686
691
Cfg => {
687
692
let mut cfgs = sess
@@ -786,7 +791,7 @@ fn print_crate_info(
786
791
787
792
req. out. overwrite( & crate_info, sess) ;
788
793
}
789
- Compilation :: Stop
794
+ ( Compilation :: Stop , crate_name )
790
795
}
791
796
792
797
/// Prints version information
0 commit comments