//@ revisions: pass fail //@[pass] check-pass #![allow(internal_features)] #![feature(staged_api)] #![allow(dead_code)] #![unstable(feature = "feat_foo", issue = "none" )] /// In staged-api crate, impl that is marked as unstable with /// feature name `feat_moo` should not be accessible /// if only `feat_foo` is enabled. pub trait Foo { fn foo(); } pub trait Moo { fn moo(); } pub struct Bar; #[unstable_feature_bound(feat_foo)] impl Foo for Bar { fn foo() {} } #[unstable_feature_bound(feat_moo)] impl Moo for Bar { fn moo() {} } #[cfg_attr(fail, unstable_feature_bound(feat_foo))] #[cfg_attr(pass, unstable_feature_bound(feat_foo, feat_moo))] fn bar() { Bar::foo(); Bar::moo(); //[fail]~^ ERROR unstable feature `feat_moo` is used without being enabled. } fn main() {}