//@ aux-build:lint_stability_fields.rs #![allow(deprecated)] #![allow(dead_code)] #![feature(staged_api)] #![stable(feature = "rust1", since = "1.0.0")] mod cross_crate { extern crate lint_stability_fields; mod reexport { #[stable(feature = "rust1", since = "1.0.0")] pub use super::lint_stability_fields::*; } use self::lint_stability_fields::*; pub fn foo() { let x = Stable { inherit: 1, override1: 2, //~ ERROR use of unstable override2: 3, //~ ERROR use of unstable override3: 4, }; let _ = x.inherit; let _ = x.override1; //~ ERROR use of unstable let _ = x.override2; //~ ERROR use of unstable let _ = x.override3; let Stable { inherit: _, override1: _, //~ ERROR use of unstable override2: _, //~ ERROR use of unstable override3: _ } = x; // all fine let Stable { .. } = x; let x = Stable2(1, 2, 3, 4); let _ = x.0; let _ = x.1; //~ ERROR use of unstable let _ = x.2; //~ ERROR use of unstable let _ = x.3; let Stable2(_, _, //~ ERROR use of unstable _, //~ ERROR use of unstable _) = x; // all fine let Stable2(..) = x; let x = Unstable { //~ ERROR use of unstable inherit: 1, //~ ERROR use of unstable override1: 2, override2: 3, //~ ERROR use of unstable }; let _ = x.inherit; //~ ERROR use of unstable let _ = x.override1; let _ = x.override2; //~ ERROR use of unstable let Unstable { //~ ERROR use of unstable inherit: _, //~ ERROR use of unstable override1: _, override2: _ //~ ERROR use of unstable } = x; let Unstable //~ ERROR use of unstable // the patterns are all fine: { .. } = x; // Unstable items are still unstable even when used through a stable "pub use". let x = reexport::Unstable2(1, 2, 3); //~ ERROR use of unstable let x = Unstable2(1, 2, 3); //~ ERROR use of unstable let _ = x.0; //~ ERROR use of unstable let _ = x.1; let _ = x.2; //~ ERROR use of unstable let Unstable2 //~ ERROR use of unstable (_, //~ ERROR use of unstable _, _) //~ ERROR use of unstable = x; let Unstable2 //~ ERROR use of unstable // the patterns are all fine: (..) = x; let x = Deprecated { //~ ERROR use of unstable inherit: 1, //~ ERROR use of unstable override1: 2, override2: 3, //~ ERROR use of unstable }; let _ = x.inherit; //~ ERROR use of unstable let _ = x.override1; let _ = x.override2; //~ ERROR use of unstable let Deprecated { //~ ERROR use of unstable inherit: _, //~ ERROR use of unstable override1: _, override2: _ //~ ERROR use of unstable } = x; let Deprecated //~ ERROR use of unstable // the patterns are all fine: { .. } = x; let x = Deprecated2(1, 2, 3); //~ ERROR use of unstable let _ = x.0; //~ ERROR use of unstable let _ = x.1; let _ = x.2; //~ ERROR use of unstable let Deprecated2 //~ ERROR use of unstable (_, //~ ERROR use of unstable _, _) //~ ERROR use of unstable = x; let Deprecated2 //~ ERROR use of unstable // the patterns are all fine: (..) = x; } } mod this_crate { #[stable(feature = "rust1", since = "1.0.0")] struct Stable { inherit: u8, #[unstable(feature = "unstable_test_feature", issue = "none")] override1: u8, #[deprecated(since = "1.0.0", note = "text")] #[unstable(feature = "unstable_test_feature", issue = "none")] override2: u8, #[stable(feature = "rust2", since = "2.0.0")] override3: u8, } #[stable(feature = "rust1", since = "1.0.0")] struct Stable2(u8, #[stable(feature = "rust2", since = "2.0.0")] u8, #[unstable(feature = "unstable_test_feature", issue = "none")] #[deprecated(since = "1.0.0", note = "text")] u8); #[unstable(feature = "unstable_test_feature", issue = "none")] struct Unstable { inherit: u8, #[stable(feature = "rust1", since = "1.0.0")] override1: u8, #[deprecated(since = "1.0.0", note = "text")] #[unstable(feature = "unstable_test_feature", issue = "none")] override2: u8, } #[unstable(feature = "unstable_test_feature", issue = "none")] struct Unstable2(u8, #[stable(feature = "rust1", since = "1.0.0")] u8, #[unstable(feature = "unstable_test_feature", issue = "none")] #[deprecated(since = "1.0.0", note = "text")] u8); #[unstable(feature = "unstable_test_feature", issue = "none")] #[deprecated(since = "1.0.0", note = "text")] struct Deprecated { inherit: u8, #[stable(feature = "rust1", since = "1.0.0")] override1: u8, #[unstable(feature = "unstable_test_feature", issue = "none")] override2: u8, } #[unstable(feature = "unstable_test_feature", issue = "none")] #[deprecated(since = "1.0.0", note = "text")] struct Deprecated2(u8, #[stable(feature = "rust1", since = "1.0.0")] u8, #[unstable(feature = "unstable_test_feature", issue = "none")] u8); pub fn foo() { let x = Stable { inherit: 1, override1: 2, override2: 3, override3: 4, }; let _ = x.inherit; let _ = x.override1; let _ = x.override2; let _ = x.override3; let Stable { inherit: _, override1: _, override2: _, override3: _ } = x; // all fine let Stable { .. } = x; let x = Stable2(1, 2, 3); let _ = x.0; let _ = x.1; let _ = x.2; let Stable2(_, _, _) = x; // all fine let Stable2(..) = x; let x = Unstable { inherit: 1, override1: 2, override2: 3, }; let _ = x.inherit; let _ = x.override1; let _ = x.override2; let Unstable { inherit: _, override1: _, override2: _ } = x; let Unstable // the patterns are all fine: { .. } = x; let x = Unstable2(1, 2, 3); let _ = x.0; let _ = x.1; let _ = x.2; let Unstable2 (_, _, _) = x; let Unstable2 // the patterns are all fine: (..) = x; let x = Deprecated { inherit: 1, override1: 2, override2: 3, }; let _ = x.inherit; let _ = x.override1; let _ = x.override2; let Deprecated { inherit: _, override1: _, override2: _ } = x; let Deprecated // the patterns are all fine: { .. } = x; let x = Deprecated2(1, 2, 3); let _ = x.0; let _ = x.1; let _ = x.2; let Deprecated2 (_, _, _) = x; let Deprecated2 // the patterns are all fine: (..) = x; } } fn main() {}