| //@ aux-build:pub-and-stability.rs |
| |
| // A big point of this test is that we *declare* `unstable_declared`, |
| // but do *not* declare `unstable_undeclared`. This way we can check |
| // that the compiler is letting in uses of declared feature-gated |
| // stuff but still rejecting uses of undeclared feature-gated stuff. |
| #![feature(unstable_declared)] |
| |
| extern crate pub_and_stability; |
| use pub_and_stability::{Record, Trait, Tuple}; |
| |
| fn main() { |
| // Okay |
| let Record { .. } = Record::new(); |
| |
| // Okay |
| let Record { a_stable_pub: _, a_unstable_declared_pub: _, .. } = Record::new(); |
| |
| let Record { a_stable_pub: _, a_unstable_declared_pub: _, a_unstable_undeclared_pub: _, .. } = |
| Record::new(); |
| //~^^ ERROR use of unstable library feature 'unstable_undeclared' |
| |
| let r = Record::new(); |
| let t = Tuple::new(); |
| |
| r.a_stable_pub; |
| r.a_unstable_declared_pub; |
| r.a_unstable_undeclared_pub; //~ ERROR use of unstable library feature |
| r.b_crate; //~ ERROR is private |
| r.c_mod; //~ ERROR is private |
| r.d_priv; //~ ERROR is private |
| |
| t.0; |
| t.1; |
| t.2; //~ ERROR use of unstable library feature |
| t.3; //~ ERROR is private |
| t.4; //~ ERROR is private |
| t.5; //~ ERROR is private |
| |
| r.stable_trait_method(); |
| r.unstable_declared_trait_method(); |
| r.unstable_undeclared_trait_method(); //~ ERROR use of unstable library feature |
| |
| r.stable(); |
| r.unstable_declared(); |
| r.unstable_undeclared(); //~ ERROR use of unstable library feature |
| |
| r.pub_crate(); //~ ERROR `pub_crate` is private |
| r.pub_mod(); //~ ERROR `pub_mod` is private |
| r.private(); //~ ERROR `private` is private |
| |
| let t = Tuple::new(); |
| t.stable_trait_method(); |
| t.unstable_declared_trait_method(); |
| t.unstable_undeclared_trait_method(); //~ ERROR use of unstable library feature |
| |
| t.stable(); |
| t.unstable_declared(); |
| t.unstable_undeclared(); //~ ERROR use of unstable library feature |
| |
| t.pub_crate(); //~ ERROR `pub_crate` is private |
| t.pub_mod(); //~ ERROR `pub_mod` is private |
| t.private(); //~ ERROR `private` is private |
| } |