1 // aux-build:param-attrs.rs
2 
3 // check-pass
4 
5 #![feature(c_variadic)]
6 
7 extern crate param_attrs;
8 
9 use param_attrs::*;
10 
11 struct W(u8);
12 
13 #[attr_extern]
ffi(#[a1] arg1: i32, #[a2] ...)14 extern "C" { fn ffi(#[a1] arg1: i32, #[a2] ...); }
15 
16 #[attr_extern_cvar]
cvar(arg1: i32, #[a1] mut args: ...)17 unsafe extern "C" fn cvar(arg1: i32, #[a1] mut args: ...) {}
18 
19 #[attr_alias]
20 type Alias = fn(#[a1] u8, #[a2] ...);
21 
22 #[attr_free]
free(#[a1] arg1: u8)23 fn free(#[a1] arg1: u8) {
24     let lam = |#[a2] W(x), #[a3] y| ();
25 }
26 
27 impl W {
28     #[attr_inherent_1]
inherent1(#[a1] self, #[a2] arg1: u8)29     fn inherent1(#[a1] self, #[a2] arg1: u8) {}
30 
31     #[attr_inherent_2]
inherent2(#[a1] &self, #[a2] arg1: u8)32     fn inherent2(#[a1] &self, #[a2] arg1: u8) {}
33 
34     #[attr_inherent_3]
inherent3<'a>(#[a1] &'a mut self, #[a2] arg1: u8)35     fn inherent3<'a>(#[a1] &'a mut self, #[a2] arg1: u8) {}
36 
37     #[attr_inherent_4]
inherent4<'a>(#[a1] self: Box<Self>, #[a2] arg1: u8)38     fn inherent4<'a>(#[a1] self: Box<Self>, #[a2] arg1: u8) {}
39 
40     #[attr_inherent_issue_64682]
inherent5(#[a1] #[a2] arg1: u8, #[a3] arg2: u8)41     fn inherent5(#[a1] #[a2] arg1: u8, #[a3] arg2: u8) {}
42 }
43 
44 trait A {
45     #[attr_trait_1]
trait1(#[a1] self, #[a2] arg1: u8)46     fn trait1(#[a1] self, #[a2] arg1: u8);
47 
48     #[attr_trait_2]
trait2(#[a1] &self, #[a2] arg1: u8)49     fn trait2(#[a1] &self, #[a2] arg1: u8);
50 
51     #[attr_trait_3]
trait3<'a>(#[a1] &'a mut self, #[a2] arg1: u8)52     fn trait3<'a>(#[a1] &'a mut self, #[a2] arg1: u8);
53 
54     #[attr_trait_4]
trait4<'a>(#[a1] self: Box<Self>, #[a2] arg1: u8, #[a3] Vec<u8>)55     fn trait4<'a>(#[a1] self: Box<Self>, #[a2] arg1: u8, #[a3] Vec<u8>);
56 
57     #[attr_trait_issue_64682]
trait5(#[a1] #[a2] arg1: u8, #[a3] arg2: u8)58     fn trait5(#[a1] #[a2] arg1: u8, #[a3] arg2: u8);
59 }
60 
main()61 fn main() {}
62