about summary refs log tree commit diff
path: root/compiler/rustc_interface/src
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2021-06-01 11:51:32 +0200
committerbjorn3 <bjorn3@users.noreply.github.com>2021-06-08 19:24:17 +0200
commitcf1f92a2ca29bd8ae183929fa44447c9d3bd6637 (patch)
tree4580c70b46dd49895c0f7c77ac031e52ff554c40 /compiler/rustc_interface/src
parent5e148200d457ef7f6740990d15b7b9c534e3aaeb (diff)
downloadrust-cf1f92a2ca29bd8ae183929fa44447c9d3bd6637.tar.gz
rust-cf1f92a2ca29bd8ae183929fa44447c9d3bd6637.zip
Revert "Let several methods take &Resolver instead of a BoxedResolver wrapper"
This reverts commit 5343ec338f72a61e2f51f9d90117092c8e8a725a.
Diffstat (limited to 'compiler/rustc_interface/src')
-rw-r--r--compiler/rustc_interface/src/passes.rs33
-rw-r--r--compiler/rustc_interface/src/queries.rs21
2 files changed, 25 insertions, 29 deletions
diff --git a/compiler/rustc_interface/src/passes.rs b/compiler/rustc_interface/src/passes.rs
index a6115762a82..802d00faef9 100644
--- a/compiler/rustc_interface/src/passes.rs
+++ b/compiler/rustc_interface/src/passes.rs
@@ -7,6 +7,7 @@ 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};
@@ -270,7 +271,7 @@ fn pre_expansion_lint(
 
 fn configure_and_expand_inner<'a>(
     sess: &'a Session,
-    lint_store: &LintStore,
+    lint_store: &'a LintStore,
     mut krate: ast::Crate,
     crate_name: &str,
     resolver_arenas: &'a ResolverArenas<'a>,
@@ -593,7 +594,7 @@ fn escape_dep_env(symbol: Symbol) -> String {
 
 fn write_out_deps(
     sess: &Session,
-    resolver: &Resolver<'_>,
+    boxed_resolver: &Steal<Rc<RefCell<BoxedResolver>>>,
     outputs: &OutputFilenames,
     out_filenames: &[PathBuf],
 ) {
@@ -620,18 +621,20 @@ fn write_out_deps(
         }
 
         if sess.binary_dep_depinfo() {
-            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()));
+            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()));
+                    }
                 }
-            }
+            });
         }
 
         let mut file = BufWriter::new(fs::File::create(&deps_filename)?);
@@ -687,7 +690,7 @@ pub fn prepare_outputs(
     sess: &Session,
     compiler: &Compiler,
     krate: &ast::Crate,
-    resolver: &Resolver<'_>,
+    boxed_resolver: &Steal<Rc<RefCell<BoxedResolver>>>,
     crate_name: &str,
 ) -> Result<OutputFilenames> {
     let _timer = sess.timer("prepare_outputs");
@@ -727,7 +730,7 @@ pub fn prepare_outputs(
         }
     }
 
-    write_out_deps(sess, resolver, &outputs, &output_paths);
+    write_out_deps(sess, boxed_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 cc9c30986e9..2320f0b47d2 100644
--- a/compiler/rustc_interface/src/queries.rs
+++ b/compiler/rustc_interface/src/queries.rs
@@ -246,20 +246,13 @@ impl<'tcx> Queries<'tcx> {
             let expansion_result = self.expansion()?;
             let (krate, boxed_resolver, _) = &*expansion_result.peek();
             let crate_name = self.crate_name()?.peek();
-
-            // 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,
-                )
-            })
+            passes::prepare_outputs(
+                self.session(),
+                self.compiler,
+                &krate,
+                &boxed_resolver,
+                &crate_name,
+            )
         })
     }