// These are attributes of the implicit crate. Really this just needs to parse // for completeness since .rs files linked from .rc files support this // notation to specify their module's attributes // check-pass #![feature(rustc_attrs)] #![rustc_dummy = "val"] #![rustc_dummy = "val"] #![rustc_dummy] #![rustc_dummy(attr5)] // These are attributes of the following mod #[rustc_dummy = "val"] #[rustc_dummy = "val"] mod test_first_item_in_file_mod {} mod test_single_attr_outer { #[rustc_dummy = "val"] pub static X: isize = 10; #[rustc_dummy = "val"] pub fn f() {} #[rustc_dummy = "val"] pub mod mod1 {} pub mod rustrt { #[rustc_dummy = "val"] extern "C" {} } } mod test_multi_attr_outer { #[rustc_dummy = "val"] #[rustc_dummy = "val"] pub static X: isize = 10; #[rustc_dummy = "val"] #[rustc_dummy = "val"] pub fn f() {} #[rustc_dummy = "val"] #[rustc_dummy = "val"] pub mod mod1 {} pub mod rustrt { #[rustc_dummy = "val"] #[rustc_dummy = "val"] extern "C" {} } #[rustc_dummy = "val"] #[rustc_dummy = "val"] struct T { x: isize, } } mod test_stmt_single_attr_outer { pub fn f() { #[rustc_dummy = "val"] static X: isize = 10; #[rustc_dummy = "val"] fn f() {} #[rustc_dummy = "val"] mod mod1 {} mod rustrt { #[rustc_dummy = "val"] extern "C" {} } } } mod test_stmt_multi_attr_outer { pub fn f() { #[rustc_dummy = "val"] #[rustc_dummy = "val"] static X: isize = 10; #[rustc_dummy = "val"] #[rustc_dummy = "val"] fn f() {} #[rustc_dummy = "val"] #[rustc_dummy = "val"] mod mod1 {} mod rustrt { #[rustc_dummy = "val"] #[rustc_dummy = "val"] extern "C" {} } } } mod test_attr_inner { pub mod m { // This is an attribute of mod m #![rustc_dummy = "val"] } } mod test_attr_inner_then_outer { pub mod m { // This is an attribute of mod m #![rustc_dummy = "val"] // This is an attribute of fn f #[rustc_dummy = "val"] fn f() {} } } mod test_attr_inner_then_outer_multi { pub mod m { // This is an attribute of mod m #![rustc_dummy = "val"] #![rustc_dummy = "val"] // This is an attribute of fn f #[rustc_dummy = "val"] #[rustc_dummy = "val"] fn f() {} } } mod test_distinguish_syntax_ext { pub fn f() { format!("test{}", "s"); #[rustc_dummy = "val"] fn g() {} } } mod test_other_forms { #[rustc_dummy] #[rustc_dummy(word)] #[rustc_dummy(attr(word))] #[rustc_dummy(key1 = "val", key2 = "val", attr)] pub fn f() {} } mod test_foreign_items { pub mod rustrt { extern "C" { #![rustc_dummy] #[rustc_dummy] fn rust_get_test_int() -> u32; } } } // FIXME(#623): - these aren't supported yet /*mod test_literals { #![str = "s"] #![char = 'c'] #![isize = 100] #![usize = 100_usize] #![mach_int = 100u32] #![float = 1.0] #![mach_float = 1.0f32] #![nil = ()] #![bool = true] mod m {} }*/ fn test_fn_inner() { #![rustc_dummy] } fn main() {}