about summary refs log tree commit diff
path: root/tests/ui/lint/lint-stability-fields.rs
diff options
context:
space:
mode:
authorAlbert Larsan <74931857+albertlarsan68@users.noreply.github.com>2023-01-05 09:13:28 +0100
committerAlbert Larsan <74931857+albertlarsan68@users.noreply.github.com>2023-01-11 09:32:08 +0000
commitcf2dff2b1e3fa55fa5415d524200070d0d7aacfe (patch)
tree40a88d9a46aaf3e8870676eb2538378b75a263eb /tests/ui/lint/lint-stability-fields.rs
parentca855e6e42787ecd062d81d53336fe6788ef51a9 (diff)
downloadrust-cf2dff2b1e3fa55fa5415d524200070d0d7aacfe.tar.gz
rust-cf2dff2b1e3fa55fa5415d524200070d0d7aacfe.zip
Move /src/test to /tests
Diffstat (limited to 'tests/ui/lint/lint-stability-fields.rs')
-rw-r--r--tests/ui/lint/lint-stability-fields.rs293
1 files changed, 293 insertions, 0 deletions
diff --git a/tests/ui/lint/lint-stability-fields.rs b/tests/ui/lint/lint-stability-fields.rs
new file mode 100644
index 00000000000..51990b6eef1
--- /dev/null
+++ b/tests/ui/lint/lint-stability-fields.rs
@@ -0,0 +1,293 @@
+// 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() {}