File tree 1 file changed +53
-0
lines changed
src/doc/unstable-book/src/language-features
1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change
1
+ # ` rustc_attrs `
2
+
3
+ This feature has no tracking issue, and is therefore internal to
4
+ the compiler, not being intended for general use.
5
+
6
+ Note: ` rustc_attrs ` enables many rustc-internal attributes and this page
7
+ only discuss a few of them.
8
+
9
+ ------------------------
10
+
11
+ The ` rustc_attrs ` feature allows debugging rustc type layouts by using
12
+ ` #[rustc_layout(...)] ` to debug layout at compile time (it even works
13
+ with ` cargo check ` ) as an alternative to ` rustc -Z print-type-sizes `
14
+ that is way more verbose.
15
+
16
+ Options provided by ` #[rustc_layout(...)] ` are ` debug ` , ` size ` , ` abi ` .
17
+ Note that it only work best with sized type without generics.
18
+
19
+ ## Examples
20
+
21
+ ``` rust,ignore
22
+ #![feature(rustc_attrs)]
23
+
24
+ #[rustc_layout(abi, size)]
25
+ pub enum X {
26
+ Y(u8, u8, u8),
27
+ Z(isize),
28
+ }
29
+ ```
30
+
31
+ When that is compiled, the compiler will error with something like
32
+
33
+ ``` text
34
+ error: abi: Aggregate { sized: true }
35
+ --> src/lib.rs:4:1
36
+ |
37
+ 4 | / pub enum T {
38
+ 5 | | Y(u8, u8, u8),
39
+ 6 | | Z(isize),
40
+ 7 | | }
41
+ | |_^
42
+
43
+ error: size: Size { raw: 16 }
44
+ --> src/lib.rs:4:1
45
+ |
46
+ 4 | / pub enum T {
47
+ 5 | | Y(u8, u8, u8),
48
+ 6 | | Z(isize),
49
+ 7 | | }
50
+ | |_^
51
+
52
+ error: aborting due to 2 previous errors
53
+ ```
You can’t perform that action at this time.
0 commit comments