diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 49bbfd0be479..e3069f54e449 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 9e397ce9d8d1..8e1723ddab24 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 {}