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