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-05-31 16:24:09 +0200
committerbjorn3 <bjorn3@users.noreply.github.com>2021-06-08 19:24:16 +0200
commitbddf151deac83ad9306c31806ebacfede93e4b99 (patch)
tree77b95d534001532f928642a842f865973050a661 /compiler/rustc_interface/src
parent1b7ec348783f1ebd3c4610c56ec02608dd3dad54 (diff)
downloadrust-bddf151deac83ad9306c31806ebacfede93e4b99.tar.gz
rust-bddf151deac83ad9306c31806ebacfede93e4b99.zip
Use more accurate lifetimes
Diffstat (limited to 'compiler/rustc_interface/src')
-rw-r--r--compiler/rustc_interface/src/passes.rs14
1 files changed, 6 insertions, 8 deletions
diff --git a/compiler/rustc_interface/src/passes.rs b/compiler/rustc_interface/src/passes.rs
index e68d601a98d..8f6c955056d 100644
--- a/compiler/rustc_interface/src/passes.rs
+++ b/compiler/rustc_interface/src/passes.rs
@@ -88,16 +88,14 @@ fn count_nodes(krate: &ast::Crate) -> usize {
     counter.count
 }
 
-#[derive(Copy, Clone)]
-pub struct AccessAction(*mut dyn FnMut());
+pub struct AccessAction(*mut dyn for<'a> FnMut(&mut Resolver<'a>));
 
 impl AccessAction {
-    pub fn get(self) -> *mut dyn FnMut() {
+    pub fn get(self) -> *mut dyn for<'a> FnMut(&mut Resolver<'a>) {
         self.0
     }
 }
 
-#[derive(Copy, Clone)]
 pub enum Action {
     Initial,
     Access(AccessAction),
@@ -123,7 +121,7 @@ pub struct BoxedResolver {
         Box<
             dyn Generator<
                 Action,
-                Yield = YieldType<Result<ast::Crate>, fn(&mut Resolver<'_>)>,
+                Yield = YieldType<Result<ast::Crate>, for<'a> fn(&mut Resolver<'a>)>,
                 Return = ResolverOutputs,
             >,
         >,
@@ -150,16 +148,16 @@ impl BoxedResolver {
         (init, BoxedResolver { generator })
     }
 
-    pub fn access<F: FnOnce(&mut Resolver<'_>) -> R, R>(&mut self, f: F) -> R {
+    pub fn access<F: for<'a> FnOnce(&mut Resolver<'a>) -> R, R>(&mut self, f: F) -> R {
         // Turn the FnOnce closure into *mut dyn FnMut()
         // so we can pass it in to the generator
         let mut r = None;
         let mut f = Some(f);
-        let mut_f: &mut dyn FnMut(&mut Resolver<'_>) = &mut |resolver| {
+        let mut_f: &mut dyn for<'a> FnMut(&mut Resolver<'a>) = &mut |resolver| {
             let f = f.take().unwrap();
             r = Some(f(resolver));
         };
-        let mut_f = mut_f as *mut dyn FnMut(&mut Resolver<'_>);
+        let mut_f = mut_f as *mut dyn for<'a> FnMut(&mut Resolver<'a>);
 
         // Get the generator to call our closure
         unsafe {