From 866a5ee2999ae7cb96de58a77647509d090456ee Mon Sep 17 00:00:00 2001 From: Eduard Burtescu Date: Thu, 19 Feb 2015 22:28:20 +0200 Subject: [PATCH] Fix fallout from correct stability handling in UFCS. --- src/libcollections/slice.rs | 2 +- src/librustc_privacy/lib.rs | 1 - src/test/compile-fail/lint-stability.rs | 151 ++++++++++++++++++++++-- 3 files changed, 145 insertions(+), 9 deletions(-) diff --git a/src/libcollections/slice.rs b/src/libcollections/slice.rs index 776b8b3af147c..4b2b125fc99f2 100644 --- a/src/libcollections/slice.rs +++ b/src/libcollections/slice.rs @@ -790,7 +790,7 @@ pub trait SliceExt { fn ends_with(&self, needle: &[Self::Item]) -> bool where Self::Item: PartialEq; /// Convert `self` into a vector without clones or allocation. - #[unstable(feature = "collections")] + #[stable(feature = "rust1", since = "1.0.0")] fn into_vec(self: Box) -> Vec; } diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index 29448c68c80b9..436a826687e13 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -17,7 +17,6 @@ html_favicon_url = "http://www.rust-lang.org/favicon.ico", html_root_url = "http://doc.rust-lang.org/nightly/")] -#![feature(core)] #![feature(int_uint)] #![feature(rustc_diagnostic_macros)] #![feature(rustc_private)] diff --git a/src/test/compile-fail/lint-stability.rs b/src/test/compile-fail/lint-stability.rs index 88f2cbdea6d7b..9079284885572 100644 --- a/src/test/compile-fail/lint-stability.rs +++ b/src/test/compile-fail/lint-stability.rs @@ -29,45 +29,104 @@ mod cross_crate { use lint_stability::*; fn test() { + type Foo = MethodTester; let foo = MethodTester; deprecated(); //~ ERROR use of deprecated item foo.method_deprecated(); //~ ERROR use of deprecated item + Foo::method_deprecated(&foo); //~ ERROR use of deprecated item + ::method_deprecated(&foo); //~ ERROR use of deprecated item foo.trait_deprecated(); //~ ERROR use of deprecated item + Trait::trait_deprecated(&foo); //~ ERROR use of deprecated item + ::trait_deprecated(&foo); //~ ERROR use of deprecated item + ::trait_deprecated(&foo); //~ ERROR use of deprecated item deprecated_text(); //~ ERROR use of deprecated item: text foo.method_deprecated_text(); //~ ERROR use of deprecated item: text + Foo::method_deprecated_text(&foo); //~ ERROR use of deprecated item: text + ::method_deprecated_text(&foo); //~ ERROR use of deprecated item: text foo.trait_deprecated_text(); //~ ERROR use of deprecated item: text + Trait::trait_deprecated_text(&foo); //~ ERROR use of deprecated item: text + ::trait_deprecated_text(&foo); //~ ERROR use of deprecated item: text + ::trait_deprecated_text(&foo); //~ ERROR use of deprecated item: text deprecated_unstable(); //~ ERROR use of deprecated item //~^ WARNING use of unstable library feature foo.method_deprecated_unstable(); //~ ERROR use of deprecated item //~^ WARNING use of unstable library feature + Foo::method_deprecated_unstable(&foo); //~ ERROR use of deprecated item + //~^ WARNING use of unstable library feature + ::method_deprecated_unstable(&foo); //~ ERROR use of deprecated item + //~^ WARNING use of unstable library feature foo.trait_deprecated_unstable(); //~ ERROR use of deprecated item //~^ WARNING use of unstable library feature + Trait::trait_deprecated_unstable(&foo); //~ ERROR use of deprecated item + //~^ WARNING use of unstable library feature + ::trait_deprecated_unstable(&foo); //~ ERROR use of deprecated item + //~^ WARNING use of unstable library feature + ::trait_deprecated_unstable(&foo); //~ ERROR use of deprecated item + //~^ WARNING use of unstable library feature deprecated_unstable_text(); //~ ERROR use of deprecated item: text //~^ WARNING use of unstable library feature foo.method_deprecated_unstable_text(); //~ ERROR use of deprecated item: text //~^ WARNING use of unstable library feature + Foo::method_deprecated_unstable_text(&foo); //~ ERROR use of deprecated item: text + //~^ WARNING use of unstable library feature + ::method_deprecated_unstable_text(&foo); //~ ERROR use of deprecated item: text + //~^ WARNING use of unstable library feature foo.trait_deprecated_unstable_text(); //~ ERROR use of deprecated item: text //~^ WARNING use of unstable library feature + Trait::trait_deprecated_unstable_text(&foo); //~ ERROR use of deprecated item: text + //~^ WARNING use of unstable library feature + ::trait_deprecated_unstable_text(&foo); //~ ERROR use of deprecated item: text + //~^ WARNING use of unstable library feature + ::trait_deprecated_unstable_text(&foo); //~ ERROR use of deprecated item: text + //~^ WARNING use of unstable library feature unstable(); //~ WARNING use of unstable library feature foo.method_unstable(); //~ WARNING use of unstable library feature + Foo::method_unstable(&foo); //~ WARNING use of unstable library feature + ::method_unstable(&foo); //~ WARNING use of unstable library feature foo.trait_unstable(); //~ WARNING use of unstable library feature + Trait::trait_unstable(&foo); //~ WARNING use of unstable library feature + ::trait_unstable(&foo); //~ WARNING use of unstable library feature + ::trait_unstable(&foo); //~ WARNING use of unstable library feature - unstable_text(); //~ WARNING use of unstable library feature 'test_feature': text - foo.method_unstable_text(); //~ WARNING use of unstable library feature 'test_feature': text - foo.trait_unstable_text(); //~ WARNING use of unstable library feature 'test_feature': text + unstable_text(); + //~^ WARNING use of unstable library feature 'test_feature': text + foo.method_unstable_text(); + //~^ WARNING use of unstable library feature 'test_feature': text + Foo::method_unstable_text(&foo); + //~^ WARNING use of unstable library feature 'test_feature': text + ::method_unstable_text(&foo); + //~^ WARNING use of unstable library feature 'test_feature': text + foo.trait_unstable_text(); + //~^ WARNING use of unstable library feature 'test_feature': text + Trait::trait_unstable_text(&foo); + //~^ WARNING use of unstable library feature 'test_feature': text + ::trait_unstable_text(&foo); + //~^ WARNING use of unstable library feature 'test_feature': text + ::trait_unstable_text(&foo); + //~^ WARNING use of unstable library feature 'test_feature': text stable(); foo.method_stable(); + Foo::method_stable(&foo); + ::method_stable(&foo); foo.trait_stable(); + Trait::trait_stable(&foo); + ::trait_stable(&foo); + ::trait_stable(&foo); stable_text(); foo.method_stable_text(); + Foo::method_stable_text(&foo); + ::method_stable_text(&foo); foo.trait_stable_text(); + Trait::trait_stable_text(&foo); + ::trait_stable_text(&foo); + ::trait_stable_text(&foo); let _ = DeprecatedStruct { i: 0 }; //~ ERROR use of deprecated item let _ = DeprecatedUnstableStruct { i: 0 }; //~ ERROR use of deprecated item @@ -104,16 +163,47 @@ mod cross_crate { macro_test_arg!(macro_test_arg!(deprecated_text())); //~ ERROR use of deprecated item: text } - fn test_method_param(foo: F) { + fn test_method_param(foo: Foo) { foo.trait_deprecated(); //~ ERROR use of deprecated item + Trait::trait_deprecated(&foo); //~ ERROR use of deprecated item + ::trait_deprecated(&foo); //~ ERROR use of deprecated item + ::trait_deprecated(&foo); //~ ERROR use of deprecated item foo.trait_deprecated_text(); //~ ERROR use of deprecated item: text + Trait::trait_deprecated_text(&foo); //~ ERROR use of deprecated item: text + ::trait_deprecated_text(&foo); //~ ERROR use of deprecated item: text + ::trait_deprecated_text(&foo); //~ ERROR use of deprecated item: text foo.trait_deprecated_unstable(); //~ ERROR use of deprecated item //~^ WARNING use of unstable library feature + Trait::trait_deprecated_unstable(&foo); //~ ERROR use of deprecated item + //~^ WARNING use of unstable library feature + ::trait_deprecated_unstable(&foo); //~ ERROR use of deprecated item + //~^ WARNING use of unstable library feature + ::trait_deprecated_unstable(&foo); //~ ERROR use of deprecated item + //~^ WARNING use of unstable library feature foo.trait_deprecated_unstable_text(); //~ ERROR use of deprecated item: text //~^ WARNING use of unstable library feature + Trait::trait_deprecated_unstable_text(&foo); //~ ERROR use of deprecated item: text + //~^ WARNING use of unstable library feature + ::trait_deprecated_unstable_text(&foo); //~ ERROR use of deprecated item: text + //~^ WARNING use of unstable library feature + ::trait_deprecated_unstable_text(&foo); //~ ERROR use of deprecated item: text + //~^ WARNING use of unstable library feature foo.trait_unstable(); //~ WARNING use of unstable library feature - foo.trait_unstable_text(); //~ WARNING use of unstable library feature 'test_feature': text + Trait::trait_unstable(&foo); //~ WARNING use of unstable library feature + ::trait_unstable(&foo); //~ WARNING use of unstable library feature + ::trait_unstable(&foo); //~ WARNING use of unstable library feature + foo.trait_unstable_text(); + //~^ WARNING use of unstable library feature 'test_feature': text + Trait::trait_unstable_text(&foo); + //~^ WARNING use of unstable library feature 'test_feature': text + ::trait_unstable_text(&foo); + //~^ WARNING use of unstable library feature 'test_feature': text + ::trait_unstable_text(&foo); + //~^ WARNING use of unstable library feature 'test_feature': text foo.trait_stable(); + Trait::trait_stable(&foo); + ::trait_stable(&foo); + ::trait_stable(&foo); } fn test_method_object(foo: &Trait) { @@ -124,7 +214,8 @@ mod cross_crate { foo.trait_deprecated_unstable_text(); //~ ERROR use of deprecated item: text //~^ WARNING use of unstable library feature foo.trait_unstable(); //~ WARNING use of unstable library feature - foo.trait_unstable_text(); //~ WARNING use of unstable library feature 'test_feature': text + foo.trait_unstable_text(); + //~^ WARNING use of unstable library feature 'test_feature': text foo.trait_stable(); } @@ -264,31 +355,62 @@ mod this_crate { // errors, because other stability attributes now have meaning // only *across* crates, not within a single crate. + type Foo = MethodTester; let foo = MethodTester; deprecated(); //~ ERROR use of deprecated item foo.method_deprecated(); //~ ERROR use of deprecated item + Foo::method_deprecated(&foo); //~ ERROR use of deprecated item + ::method_deprecated(&foo); //~ ERROR use of deprecated item foo.trait_deprecated(); //~ ERROR use of deprecated item + Trait::trait_deprecated(&foo); //~ ERROR use of deprecated item + ::trait_deprecated(&foo); //~ ERROR use of deprecated item + ::trait_deprecated(&foo); //~ ERROR use of deprecated item deprecated_text(); //~ ERROR use of deprecated item: text foo.method_deprecated_text(); //~ ERROR use of deprecated item: text + Foo::method_deprecated_text(&foo); //~ ERROR use of deprecated item: text + ::method_deprecated_text(&foo); //~ ERROR use of deprecated item: text foo.trait_deprecated_text(); //~ ERROR use of deprecated item: text + Trait::trait_deprecated_text(&foo); //~ ERROR use of deprecated item: text + ::trait_deprecated_text(&foo); //~ ERROR use of deprecated item: text + ::trait_deprecated_text(&foo); //~ ERROR use of deprecated item: text unstable(); foo.method_unstable(); + Foo::method_unstable(&foo); + ::method_unstable(&foo); foo.trait_unstable(); + Trait::trait_unstable(&foo); + ::trait_unstable(&foo); + ::trait_unstable(&foo); unstable_text(); foo.method_unstable_text(); + Foo::method_unstable_text(&foo); + ::method_unstable_text(&foo); foo.trait_unstable_text(); + Trait::trait_unstable_text(&foo); + ::trait_unstable_text(&foo); + ::trait_unstable_text(&foo); stable(); foo.method_stable(); + Foo::method_stable(&foo); + ::method_stable(&foo); foo.trait_stable(); + Trait::trait_stable(&foo); + ::trait_stable(&foo); + ::trait_stable(&foo); stable_text(); foo.method_stable_text(); + Foo::method_stable_text(&foo); + ::method_stable_text(&foo); foo.trait_stable_text(); + Trait::trait_stable_text(&foo); + ::trait_stable_text(&foo); + ::trait_stable_text(&foo); let _ = DeprecatedStruct { i: 0 }; //~ ERROR use of deprecated item let _ = UnstableStruct { i: 0 }; @@ -307,12 +429,27 @@ mod this_crate { let _ = StableTupleStruct (1); } - fn test_method_param(foo: F) { + fn test_method_param(foo: Foo) { foo.trait_deprecated(); //~ ERROR use of deprecated item + Trait::trait_deprecated(&foo); //~ ERROR use of deprecated item + ::trait_deprecated(&foo); //~ ERROR use of deprecated item + ::trait_deprecated(&foo); //~ ERROR use of deprecated item foo.trait_deprecated_text(); //~ ERROR use of deprecated item: text + Trait::trait_deprecated_text(&foo); //~ ERROR use of deprecated item: text + ::trait_deprecated_text(&foo); //~ ERROR use of deprecated item: text + ::trait_deprecated_text(&foo); //~ ERROR use of deprecated item: text foo.trait_unstable(); + Trait::trait_unstable(&foo); + ::trait_unstable(&foo); + ::trait_unstable(&foo); foo.trait_unstable_text(); + Trait::trait_unstable_text(&foo); + ::trait_unstable_text(&foo); + ::trait_unstable_text(&foo); foo.trait_stable(); + Trait::trait_stable(&foo); + ::trait_stable(&foo); + ::trait_stable(&foo); } fn test_method_object(foo: &Trait) {