Add unstable docs for rustc_attrs

This commit is contained in:
Ivan Tham 2020-06-27 13:09:06 +08:00
parent dda8a7fde9
commit f772587aba

View File

@ -0,0 +1,50 @@
# `rustc_attrs`
This feature has no tracking issue, and is therefore likely internal to
the compiler, not being intended for general use.
------------------------
The `rustc_attrs` feature allows debugging rustc type layouts by using
`#[rustc_layout(...)]` to debug layout at compile time (it even works
with `cargo check`) as an alternative to `rustc -Z print-type-sizes`
that is way more verbose.
Options provided by `#[rustc_layout(...)]` are `debug`, `size`, `abi`.
Note that it only work best with sized type without generics.
## Examples
```rust
#![feature(rustc_attrs)]
#[rustc_layout(abi, size)]
pub enum X {
Y(u8, u8, u8),
Z(isize),
}
```
When that is compiled, the compiler will error with something like
```
error: abi: Aggregate { sized: true }
--> src/lib.rs:4:1
|
4 | / pub enum T {
5 | | Y(u8, u8, u8),
6 | | Z(isize),
7 | | }
| |_^
error: size: Size { raw: 16 }
--> src/lib.rs:4:1
|
4 | / pub enum T {
5 | | Y(u8, u8, u8),
6 | | Z(isize),
7 | | }
| |_^
error: aborting due to 2 previous errors
```