From f76f4d52c261eaaa94028b2c864a405affeb2f6a Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Wed, 30 Sep 2015 20:10:54 +0530 Subject: [PATCH] Fix rustup fallout: lifetimes false positives --- src/lifetimes.rs | 10 ++++++++++ tests/compile-fail/lifetimes.rs | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/src/lifetimes.rs b/src/lifetimes.rs index e39a41316a0..206424de9b5 100644 --- a/src/lifetimes.rs +++ b/src/lifetimes.rs @@ -89,6 +89,9 @@ fn could_use_elision(func: &FnDecl, slf: Option<&ExplicitSelf>, // extract lifetimes in input argument types for arg in &func.inputs { walk_ty(&mut input_visitor, &arg.ty); + if let TyRptr(None, _) = arg.ty.node { + input_visitor.record(&None); + } } // extract lifetimes in output type if let Return(ref ty) = func.output { @@ -181,6 +184,13 @@ impl<'v> Visitor<'v> for RefVisitor { fn visit_lifetime(&mut self, lifetime: &'v Lifetime) { self.record(&Some(*lifetime)); } + + fn visit_ty(&mut self, ty: &'v Ty) { + if let TyRptr(None, _) = ty.node { + self.record(&None); + } + walk_ty(self, ty); + } } /// Are any lifetimes mentioned in the `where` clause? If yes, we don't try to diff --git a/tests/compile-fail/lifetimes.rs b/tests/compile-fail/lifetimes.rs index 0b24ca65241..a654c452379 100755 --- a/tests/compile-fail/lifetimes.rs +++ b/tests/compile-fail/lifetimes.rs @@ -81,5 +81,9 @@ fn self_shared_lifetime(&self, _: &'a u8) {} // no error, lifetime 'a not define fn self_bound_lifetime<'b: 'a>(&self, _: &'b u8) {} // no error, bounds exist } +fn already_elided<'a>(_: &u8, _: &'a u8) -> &'a u8 { + unimplemented!() +} + fn main() { } -- 2.44.0