@@ -7,6 +7,7 @@ use rustc_ast::{self as ast, visit};
77use rustc_codegen_ssa:: back:: link:: emit_metadata;
88use rustc_codegen_ssa:: traits:: CodegenBackend ;
99use rustc_data_structures:: parallel;
10+ use rustc_data_structures:: steal:: Steal ;
1011use rustc_data_structures:: sync:: { par_iter, Lrc , OnceCell , ParallelIterator , WorkerLocal } ;
1112use rustc_data_structures:: temp_dir:: MaybeTempDir ;
1213use rustc_errors:: { ErrorReported , PResult } ;
@@ -270,7 +271,7 @@ fn pre_expansion_lint(
270271
271272fn configure_and_expand_inner < ' a > (
272273 sess : & ' a Session ,
273- lint_store : & LintStore ,
274+ lint_store : & ' a LintStore ,
274275 mut krate : ast:: Crate ,
275276 crate_name : & str ,
276277 resolver_arenas : & ' a ResolverArenas < ' a > ,
@@ -593,7 +594,7 @@ fn escape_dep_env(symbol: Symbol) -> String {
593594
594595fn write_out_deps (
595596 sess : & Session ,
596- resolver : & Resolver < ' _ > ,
597+ boxed_resolver : & Steal < Rc < RefCell < BoxedResolver > > > ,
597598 outputs : & OutputFilenames ,
598599 out_filenames : & [ PathBuf ] ,
599600) {
@@ -620,18 +621,20 @@ fn write_out_deps(
620621 }
621622
622623 if sess. binary_dep_depinfo ( ) {
623- for cnum in resolver. cstore ( ) . crates_untracked ( ) {
624- let source = resolver. cstore ( ) . crate_source_untracked ( cnum) ;
625- if let Some ( ( path, _) ) = source. dylib {
626- files. push ( escape_dep_filename ( & path. display ( ) . to_string ( ) ) ) ;
627- }
628- if let Some ( ( path, _) ) = source. rlib {
629- files. push ( escape_dep_filename ( & path. display ( ) . to_string ( ) ) ) ;
630- }
631- if let Some ( ( path, _) ) = source. rmeta {
632- files. push ( escape_dep_filename ( & path. display ( ) . to_string ( ) ) ) ;
624+ boxed_resolver. borrow ( ) . borrow_mut ( ) . access ( |resolver| {
625+ for cnum in resolver. cstore ( ) . crates_untracked ( ) {
626+ let source = resolver. cstore ( ) . crate_source_untracked ( cnum) ;
627+ if let Some ( ( path, _) ) = source. dylib {
628+ files. push ( escape_dep_filename ( & path. display ( ) . to_string ( ) ) ) ;
629+ }
630+ if let Some ( ( path, _) ) = source. rlib {
631+ files. push ( escape_dep_filename ( & path. display ( ) . to_string ( ) ) ) ;
632+ }
633+ if let Some ( ( path, _) ) = source. rmeta {
634+ files. push ( escape_dep_filename ( & path. display ( ) . to_string ( ) ) ) ;
635+ }
633636 }
634- }
637+ } ) ;
635638 }
636639
637640 let mut file = BufWriter :: new ( fs:: File :: create ( & deps_filename) ?) ;
@@ -687,7 +690,7 @@ pub fn prepare_outputs(
687690 sess : & Session ,
688691 compiler : & Compiler ,
689692 krate : & ast:: Crate ,
690- resolver : & Resolver < ' _ > ,
693+ boxed_resolver : & Steal < Rc < RefCell < BoxedResolver > > > ,
691694 crate_name : & str ,
692695) -> Result < OutputFilenames > {
693696 let _timer = sess. timer ( "prepare_outputs" ) ;
@@ -727,7 +730,7 @@ pub fn prepare_outputs(
727730 }
728731 }
729732
730- write_out_deps ( sess, resolver , & outputs, & output_paths) ;
733+ write_out_deps ( sess, boxed_resolver , & outputs, & output_paths) ;
731734
732735 let only_dep_info = sess. opts . output_types . contains_key ( & OutputType :: DepInfo )
733736 && sess. opts . output_types . len ( ) == 1 ;
0 commit comments