|  | //@ revisions: pass fail | 
|  | //@[pass] check-pass | 
|  |  | 
|  | #![allow(internal_features)] | 
|  | #![feature(staged_api)] | 
|  | #![allow(dead_code)] | 
|  | #![stable(feature = "a", since = "1.1.1" )] | 
|  |  | 
|  | /// When a free function with #[unstable_feature_bound(feat_bar)] is called by another | 
|  | /// free function, that function should be annotated with | 
|  | /// #[unstable_feature_bound(feat_bar)] too. | 
|  |  | 
|  | #[stable(feature = "a", since = "1.1.1")] | 
|  | trait Foo { | 
|  | #[stable(feature = "a", since = "1.1.1")] | 
|  | fn foo() { | 
|  | } | 
|  | } | 
|  | #[stable(feature = "a", since = "1.1.1")] | 
|  | pub struct Bar; | 
|  |  | 
|  | #[unstable_feature_bound(feat_bar)] | 
|  | #[unstable(feature = "feat_bar", issue = "none" )] | 
|  | impl Foo for Bar { | 
|  | fn foo() {} | 
|  | } | 
|  |  | 
|  |  | 
|  | #[unstable_feature_bound(feat_bar)] | 
|  | fn bar() { | 
|  | Bar::foo(); | 
|  | } | 
|  |  | 
|  | #[cfg_attr(pass, unstable_feature_bound(feat_bar))] | 
|  | fn bar2() { | 
|  | bar(); | 
|  | //[fail]~^ERROR unstable feature `feat_bar` is used without being enabled. | 
|  | } | 
|  |  | 
|  | fn main() {} |