From 55200504f06956664cc6a9a998e7a14e05f09fdb Mon Sep 17 00:00:00 2001 From: Victor Berger Date: Mon, 17 Nov 2014 11:37:07 +0100 Subject: [PATCH] Don't inherit stability to items in a function body. Items defined in the body of a function has no visibility outside it, and thus have no reason to be marked with stability attributes. Closes #17488 --- src/librustc/middle/stability.rs | 7 +++++-- src/test/compile-fail/lint-stability.rs | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) 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 @@ 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 ba8559c8008..a3e99ad1e5b 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 {}