about summary refs log tree commit diff
path: root/compiler/rustc_interface/src/queries.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_interface/src/queries.rs')
-rw-r--r--compiler/rustc_interface/src/queries.rs21
1 files changed, 14 insertions, 7 deletions
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,
+                )
+            })
         })
     }