diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 3b7ad9e8f6b..4df5d23e91d 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -83,10 +83,13 @@ fn visit_fn(&mut self, fk: FnKind<'v>, fd: &'v FnDecl, b: &'v Block, s: Span, _: NodeId) { match fk { FkMethod(_, _, meth) => { - self.annotate(meth.id, &meth.attrs, |v| visit::walk_fn(v, fk, fd, b, s)); + // Methods are not already annotated, so we annotate it + self.annotate(meth.id, &meth.attrs, |_| {}); } - _ => visit::walk_fn(self, fk, fd, b, s) + _ => {} } + // Items defined in a function body have no reason to have + // a stability attribute, so we don't recurse. } fn visit_trait_item(&mut self, t: &TraitItem) { diff --git a/src/test/compile-fail/lint-stability.rs b/src/test/compile-fail/lint-stability.rs index ba8559c8008..a3e99ad1e5b 100644 --- a/src/test/compile-fail/lint-stability.rs +++ b/src/test/compile-fail/lint-stability.rs @@ -459,6 +459,20 @@ fn test_method_object(foo: &Trait) { foo.trait_stable(); } + #[deprecated] + fn test_fn_body() { + fn fn_in_body() {} + fn_in_body(); + } + + impl MethodTester { + #[deprecated] + fn test_method_body(&self) { + fn fn_in_body() {} + fn_in_body(); + } + } + #[deprecated] pub trait DeprecatedTrait {}