diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 3b7ad9e8f6b34..4df5d23e91d0d 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -83,10 +83,13 @@ impl<'v> Visitor<'v> for Annotator { 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 ba8559c8008bf..a3e99ad1e5b71 100644 --- a/src/test/compile-fail/lint-stability.rs +++ b/src/test/compile-fail/lint-stability.rs @@ -459,6 +459,20 @@ mod this_crate { 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 {}