Skip to content

Commit d376f03

Browse files
committed
Let several methods take &Resolver instead of a BoxedResolver wrapper
1 parent db4d8e2 commit d376f03

File tree

2 files changed

+29
-25
lines changed

2 files changed

+29
-25
lines changed

compiler/rustc_interface/src/passes.rs

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use rustc_ast::{self as ast, visit};
77
use rustc_codegen_ssa::back::link::emit_metadata;
88
use rustc_codegen_ssa::traits::CodegenBackend;
99
use rustc_data_structures::parallel;
10-
use rustc_data_structures::steal::Steal;
1110
use rustc_data_structures::sync::{par_iter, Lrc, OnceCell, ParallelIterator, WorkerLocal};
1211
use rustc_data_structures::temp_dir::MaybeTempDir;
1312
use rustc_errors::{ErrorReported, PResult};
@@ -346,7 +345,7 @@ fn pre_expansion_lint(
346345

347346
fn configure_and_expand_inner<'a>(
348347
sess: &'a Session,
349-
lint_store: &'a LintStore,
348+
lint_store: &LintStore,
350349
mut krate: ast::Crate,
351350
crate_name: &str,
352351
resolver_arenas: &'a ResolverArenas<'a>,
@@ -669,7 +668,7 @@ fn escape_dep_env(symbol: Symbol) -> String {
669668

670669
fn write_out_deps(
671670
sess: &Session,
672-
boxed_resolver: &Steal<Rc<RefCell<BoxedResolver>>>,
671+
resolver: &Resolver<'_>,
673672
outputs: &OutputFilenames,
674673
out_filenames: &[PathBuf],
675674
) {
@@ -696,20 +695,18 @@ fn write_out_deps(
696695
}
697696

698697
if sess.binary_dep_depinfo() {
699-
boxed_resolver.borrow().borrow_mut().access(|resolver| {
700-
for cnum in resolver.cstore().crates_untracked() {
701-
let source = resolver.cstore().crate_source_untracked(cnum);
702-
if let Some((path, _)) = source.dylib {
703-
files.push(escape_dep_filename(&path.display().to_string()));
704-
}
705-
if let Some((path, _)) = source.rlib {
706-
files.push(escape_dep_filename(&path.display().to_string()));
707-
}
708-
if let Some((path, _)) = source.rmeta {
709-
files.push(escape_dep_filename(&path.display().to_string()));
710-
}
698+
for cnum in resolver.cstore().crates_untracked() {
699+
let source = resolver.cstore().crate_source_untracked(cnum);
700+
if let Some((path, _)) = source.dylib {
701+
files.push(escape_dep_filename(&path.display().to_string()));
711702
}
712-
});
703+
if let Some((path, _)) = source.rlib {
704+
files.push(escape_dep_filename(&path.display().to_string()));
705+
}
706+
if let Some((path, _)) = source.rmeta {
707+
files.push(escape_dep_filename(&path.display().to_string()));
708+
}
709+
}
713710
}
714711

715712
let mut file = BufWriter::new(fs::File::create(&deps_filename)?);
@@ -765,7 +762,7 @@ pub fn prepare_outputs(
765762
sess: &Session,
766763
compiler: &Compiler,
767764
krate: &ast::Crate,
768-
boxed_resolver: &Steal<Rc<RefCell<BoxedResolver>>>,
765+
resolver: &Resolver<'_>,
769766
crate_name: &str,
770767
) -> Result<OutputFilenames> {
771768
let _timer = sess.timer("prepare_outputs");
@@ -805,7 +802,7 @@ pub fn prepare_outputs(
805802
}
806803
}
807804

808-
write_out_deps(sess, boxed_resolver, &outputs, &output_paths);
805+
write_out_deps(sess, resolver, &outputs, &output_paths);
809806

810807
let only_dep_info = sess.opts.output_types.contains_key(&OutputType::DepInfo)
811808
&& sess.opts.output_types.len() == 1;

compiler/rustc_interface/src/queries.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -246,13 +246,20 @@ impl<'tcx> Queries<'tcx> {
246246
let expansion_result = self.expansion()?;
247247
let (krate, boxed_resolver, _) = &*expansion_result.peek();
248248
let crate_name = self.crate_name()?.peek();
249-
passes::prepare_outputs(
250-
self.session(),
251-
self.compiler,
252-
&krate,
253-
&boxed_resolver,
254-
&crate_name,
255-
)
249+
250+
// These borrow(), borrow_mut() and access() calls are separate statements to prevent a
251+
// "temporary value dropped while borrowed" error.
252+
let boxed_resolver = boxed_resolver.borrow();
253+
let mut boxed_resolver = boxed_resolver.borrow_mut();
254+
boxed_resolver.access(|resolver| {
255+
passes::prepare_outputs(
256+
self.session(),
257+
self.compiler,
258+
&krate,
259+
resolver,
260+
&crate_name,
261+
)
262+
})
256263
})
257264
}
258265

0 commit comments

Comments
 (0)