mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			294 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			294 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //@ 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() {}
 | 
