diff options
| author | bjorn3 <bjorn3@users.noreply.github.com> | 2021-05-31 19:48:47 +0200 |
|---|---|---|
| committer | bjorn3 <bjorn3@users.noreply.github.com> | 2021-06-08 19:24:16 +0200 |
| commit | d376f032e65cc02e9a082ab1e919f3798af4b9dd (patch) | |
| tree | c050ae424f24137151cd8ee987a802ca76eddc98 /compiler/rustc_interface/src | |
| parent | db4d8e2cabe646bc5cfa89bb58804c47f8d6d3af (diff) | |
| download | rust-d376f032e65cc02e9a082ab1e919f3798af4b9dd.tar.gz rust-d376f032e65cc02e9a082ab1e919f3798af4b9dd.zip | |
Let several methods take &Resolver instead of a BoxedResolver wrapper
Diffstat (limited to 'compiler/rustc_interface/src')
| -rw-r--r-- | compiler/rustc_interface/src/passes.rs | 33 | ||||
| -rw-r--r-- | compiler/rustc_interface/src/queries.rs | 21 |
2 files changed, 29 insertions, 25 deletions
diff --git a/compiler/rustc_interface/src/passes.rs b/compiler/rustc_interface/src/passes.rs index 7c5eac8bbae..79b318a4d34 100644 --- a/compiler/rustc_interface/src/passes.rs +++ b/compiler/rustc_interface/src/passes.rs @@ -7,7 +7,6 @@ use rustc_ast::{self as ast, visit}; use rustc_codegen_ssa::back::link::emit_metadata; use rustc_codegen_ssa::traits::CodegenBackend; use rustc_data_structures::parallel; -use rustc_data_structures::steal::Steal; use rustc_data_structures::sync::{par_iter, Lrc, OnceCell, ParallelIterator, WorkerLocal}; use rustc_data_structures::temp_dir::MaybeTempDir; use rustc_errors::{ErrorReported, PResult}; @@ -346,7 +345,7 @@ fn pre_expansion_lint( fn configure_and_expand_inner<'a>( sess: &'a Session, - lint_store: &'a LintStore, + lint_store: &LintStore, mut krate: ast::Crate, crate_name: &str, resolver_arenas: &'a ResolverArenas<'a>, @@ -669,7 +668,7 @@ fn escape_dep_env(symbol: Symbol) -> String { fn write_out_deps( sess: &Session, - boxed_resolver: &Steal<Rc<RefCell<BoxedResolver>>>, + resolver: &Resolver<'_>, outputs: &OutputFilenames, out_filenames: &[PathBuf], ) { @@ -696,20 +695,18 @@ fn write_out_deps( } if sess.binary_dep_depinfo() { - boxed_resolver.borrow().borrow_mut().access(|resolver| { - for cnum in resolver.cstore().crates_untracked() { - let source = resolver.cstore().crate_source_untracked(cnum); - if let Some((path, _)) = source.dylib { - files.push(escape_dep_filename(&path.display().to_string())); - } - if let Some((path, _)) = source.rlib { - files.push(escape_dep_filename(&path.display().to_string())); - } - if let Some((path, _)) = source.rmeta { - files.push(escape_dep_filename(&path.display().to_string())); - } + for cnum in resolver.cstore().crates_untracked() { + let source = resolver.cstore().crate_source_untracked(cnum); + if let Some((path, _)) = source.dylib { + files.push(escape_dep_filename(&path.display().to_string())); } - }); + if let Some((path, _)) = source.rlib { + files.push(escape_dep_filename(&path.display().to_string())); + } + if let Some((path, _)) = source.rmeta { + files.push(escape_dep_filename(&path.display().to_string())); + } + } } let mut file = BufWriter::new(fs::File::create(&deps_filename)?); @@ -765,7 +762,7 @@ pub fn prepare_outputs( sess: &Session, compiler: &Compiler, krate: &ast::Crate, - boxed_resolver: &Steal<Rc<RefCell<BoxedResolver>>>, + resolver: &Resolver<'_>, crate_name: &str, ) -> Result<OutputFilenames> { let _timer = sess.timer("prepare_outputs"); @@ -805,7 +802,7 @@ pub fn prepare_outputs( } } - write_out_deps(sess, boxed_resolver, &outputs, &output_paths); + write_out_deps(sess, resolver, &outputs, &output_paths); let only_dep_info = sess.opts.output_types.contains_key(&OutputType::DepInfo) && sess.opts.output_types.len() == 1; diff --git a/compiler/rustc_interface/src/queries.rs b/compiler/rustc_interface/src/queries.rs index 2320f0b47d2..cc9c30986e9 100644 --- a/compiler/rustc_interface/src/queries.rs +++ b/compiler/rustc_interface/src/queries.rs @@ -246,13 +246,20 @@ impl<'tcx> Queries<'tcx> { let expansion_result = self.expansion()?; let (krate, boxed_resolver, _) = &*expansion_result.peek(); let crate_name = self.crate_name()?.peek(); - passes::prepare_outputs( - self.session(), - self.compiler, - &krate, - &boxed_resolver, - &crate_name, - ) + + // These borrow(), borrow_mut() and access() calls are separate statements to prevent a + // "temporary value dropped while borrowed" error. + let boxed_resolver = boxed_resolver.borrow(); + let mut boxed_resolver = boxed_resolver.borrow_mut(); + boxed_resolver.access(|resolver| { + passes::prepare_outputs( + self.session(), + self.compiler, + &krate, + resolver, + &crate_name, + ) + }) }) } |
