@@ -2424,11 +2424,7 @@ fn contains_null(s: &str) -> bool {
2424
2424
s. bytes ( ) . any ( |b| b == 0 )
2425
2425
}
2426
2426
2427
- pub fn write_metadata < ' a , ' tcx > ( cx : & SharedCrateContext < ' a , ' tcx > ,
2428
- krate : & hir:: Crate ,
2429
- reachable : & NodeSet ,
2430
- mir_map : & MirMap < ' tcx > )
2431
- -> Vec < u8 > {
2427
+ pub fn write_metadata < ' a , ' tcx > ( cx : & SharedCrateContext < ' a , ' tcx > ) -> Vec < u8 > {
2432
2428
use flate;
2433
2429
2434
2430
let any_library = cx. sess ( )
@@ -2444,9 +2440,9 @@ pub fn write_metadata<'a, 'tcx>(cx: &SharedCrateContext<'a, 'tcx>,
2444
2440
let metadata = cstore. encode_metadata ( cx. tcx ( ) ,
2445
2441
cx. export_map ( ) ,
2446
2442
cx. link_meta ( ) ,
2447
- reachable,
2448
- mir_map,
2449
- krate) ;
2443
+ cx . reachable ( ) ,
2444
+ cx . mir_map ( ) ,
2445
+ cx . tcx ( ) . map . krate ( ) ) ;
2450
2446
let mut compressed = cstore. metadata_encoding_version ( ) . to_vec ( ) ;
2451
2447
compressed. extend_from_slice ( & flate:: deflate_bytes ( & metadata) ) ;
2452
2448
@@ -2679,6 +2675,16 @@ pub fn trans_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
2679
2675
reachable,
2680
2676
check_overflow,
2681
2677
check_dropflag) ;
2678
+ // Translate the metadata.
2679
+ let metadata = time ( tcx. sess . time_passes ( ) , "write metadata" , || {
2680
+ write_metadata ( & shared_ccx)
2681
+ } ) ;
2682
+
2683
+ let metadata_module = ModuleTranslation {
2684
+ llcx : shared_ccx. metadata_llcx ( ) ,
2685
+ llmod : shared_ccx. metadata_llmod ( ) ,
2686
+ } ;
2687
+ let no_builtins = attr:: contains_name ( & krate. attrs , "no_builtins" ) ;
2682
2688
2683
2689
let codegen_units = collect_and_partition_translation_items ( & shared_ccx) ;
2684
2690
let codegen_unit_count = codegen_units. len ( ) ;
@@ -2687,6 +2693,24 @@ pub fn trans_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
2687
2693
2688
2694
let crate_context_list = CrateContextList :: new ( & shared_ccx, codegen_units) ;
2689
2695
2696
+ let modules = crate_context_list. iter ( )
2697
+ . map ( |ccx| ModuleTranslation { llcx : ccx. llcx ( ) , llmod : ccx. llmod ( ) } )
2698
+ . collect ( ) ;
2699
+
2700
+ // Skip crate items and just output metadata in -Z no-trans mode.
2701
+ if tcx. sess . opts . no_trans {
2702
+ let linker_info = LinkerInfo :: new ( & shared_ccx, & [ ] ) ;
2703
+ return CrateTranslation {
2704
+ modules : modules,
2705
+ metadata_module : metadata_module,
2706
+ link : link_meta,
2707
+ metadata : metadata,
2708
+ reachable : vec ! [ ] ,
2709
+ no_builtins : no_builtins,
2710
+ linker_info : linker_info
2711
+ } ;
2712
+ }
2713
+
2690
2714
{
2691
2715
let ccx = crate_context_list. get_ccx ( 0 ) ;
2692
2716
@@ -2718,10 +2742,6 @@ pub fn trans_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
2718
2742
2719
2743
let reachable_symbol_ids = filter_reachable_ids ( & shared_ccx) ;
2720
2744
2721
- // Translate the metadata.
2722
- let metadata = time ( tcx. sess . time_passes ( ) , "write metadata" , || {
2723
- write_metadata ( & shared_ccx, krate, & reachable_symbol_ids, mir_map)
2724
- } ) ;
2725
2745
2726
2746
if shared_ccx. sess ( ) . trans_stats ( ) {
2727
2747
let stats = shared_ccx. stats ( ) ;
@@ -2752,10 +2772,6 @@ pub fn trans_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
2752
2772
}
2753
2773
}
2754
2774
2755
- let modules = crate_context_list. iter ( )
2756
- . map ( |ccx| ModuleTranslation { llcx : ccx. llcx ( ) , llmod : ccx. llmod ( ) } )
2757
- . collect ( ) ;
2758
-
2759
2775
let sess = shared_ccx. sess ( ) ;
2760
2776
let mut reachable_symbols = reachable_symbol_ids. iter ( ) . map ( |& id| {
2761
2777
let def_id = shared_ccx. tcx ( ) . map . local_def_id ( id) ;
@@ -2789,12 +2805,6 @@ pub fn trans_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
2789
2805
create_imps ( & crate_context_list) ;
2790
2806
}
2791
2807
2792
- let metadata_module = ModuleTranslation {
2793
- llcx : shared_ccx. metadata_llcx ( ) ,
2794
- llmod : shared_ccx. metadata_llmod ( ) ,
2795
- } ;
2796
- let no_builtins = attr:: contains_name ( & krate. attrs , "no_builtins" ) ;
2797
-
2798
2808
let linker_info = LinkerInfo :: new ( & shared_ccx, & reachable_symbols) ;
2799
2809
CrateTranslation {
2800
2810
modules : modules,
0 commit comments