| // Test the rendering of `#[repr]` on ADTs. |
| #![feature(repr_simd)] // only used for the `ReprSimd` test case |
| |
| // Check the "local case" (HIR cleaning) // |
| |
| // Don't render the default repr which is `Rust`. |
| //@ has 'repr/struct.ReprDefault.html' |
| //@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(Rust)]' |
| pub struct ReprDefault; |
| |
| // Don't render the `Rust` repr — even if given explicitly — since it's the default. |
| //@ has 'repr/struct.ReprRust.html' |
| //@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(Rust)]' |
| #[repr(Rust)] // omitted |
| pub struct ReprRust; |
| |
| //@ has 'repr/struct.ReprCPubFields.html' |
| //@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(C)]' |
| #[repr(C)] // public |
| pub struct ReprCPubFields { |
| pub a: u32, |
| pub b: u32, |
| } |
| |
| //@ has 'repr/struct.ReprCPrivField.html' |
| //@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(C)]' |
| #[repr(C)] // private... |
| pub struct ReprCPrivField { |
| a: u32, // ...since this is private |
| pub b: u32, |
| } |
| |
| //@ has 'repr/enum.ReprIsize.html' |
| //@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(isize)]' |
| #[repr(isize)] // public |
| pub enum ReprIsize { |
| Bla, |
| } |
| |
| //@ has 'repr/enum.ReprU32HiddenVariant.html' |
| //@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(u32)]' |
| #[repr(u32)] // private... |
| pub enum ReprU32HiddenVariant { |
| #[doc(hidden)] |
| Hidden, // ...since this is hidden |
| Public, |
| } |
| |
| //@ has 'repr/struct.ReprAlignHiddenField.html' |
| //@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(align(4))]' |
| #[repr(align(4))] // private... |
| pub struct ReprAlignHiddenField { |
| #[doc(hidden)] |
| pub hidden: i16, // ...since this field is hidden |
| } |
| |
| //@ has 'repr/struct.ReprSimd.html' |
| //@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(simd, packed(2))]' |
| #[repr(simd, packed(2))] // public |
| pub struct ReprSimd { |
| pub field: [u8; 1], |
| } |
| |
| //@ has 'repr/enum.ReprU32Align.html' |
| //@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(u32, align(8))]' |
| #[repr(u32, align(8))] // public |
| pub enum ReprU32Align { |
| Variant(u16), |
| } |
| |
| //@ has 'repr/enum.ReprCHiddenVariantField.html' |
| //@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(C)]' |
| #[repr(C)] // private... |
| pub enum ReprCHiddenVariantField { |
| Variant { #[doc(hidden)] field: () }, //...since this field is hidden |
| } |
| |
| //@ has 'repr/struct.ReprTransparentPrivField.html' |
| //@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]' |
| #[repr(transparent)] // private... |
| pub struct ReprTransparentPrivField { |
| field: u32, // ...since the non-1-ZST field is private |
| } |
| |
| //@ has 'repr/struct.ReprTransparentPriv1ZstFields.html' |
| //@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]' |
| #[repr(transparent)] // public... |
| pub struct ReprTransparentPriv1ZstFields { |
| marker0: Marker, |
| pub main: u64, // ...since the non-1-ZST field is public and visible |
| marker1: Marker, |
| } // the two private 1-ZST fields don't matter |
| |
| //@ has 'repr/struct.ReprTransparentPrivFieldPub1ZstField.html' |
| //@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]' |
| #[repr(transparent)] // private... |
| pub struct ReprTransparentPrivFieldPub1ZstField { |
| main: [u16; 0], // ...since the non-1-ZST field is private |
| pub marker: Marker, // this public 1-ZST field doesn't matter |
| } |
| |
| //@ has 'repr/struct.ReprTransparentPub1ZstField.html' |
| //@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]' |
| #[repr(transparent)] // public... |
| pub struct ReprTransparentPub1ZstField { |
| marker0: Marker, // ...since we don't have a non-1-ZST field... |
| pub marker1: Marker, // ...and this field is public and visible |
| } |
| |
| //@ has 'repr/struct.ReprTransparentUnitStruct.html' |
| //@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]' |
| #[repr(transparent)] // public |
| pub struct ReprTransparentUnitStruct; |
| |
| //@ has 'repr/enum.ReprTransparentEnumUnitVariant.html' |
| //@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]' |
| #[repr(transparent)] // public |
| pub enum ReprTransparentEnumUnitVariant { |
| Variant, |
| } |
| |
| //@ has 'repr/enum.ReprTransparentEnumHiddenUnitVariant.html' |
| //@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]' |
| #[repr(transparent)] // private |
| pub enum ReprTransparentEnumHiddenUnitVariant { |
| #[doc(hidden)] Variant(u32), |
| } |
| |
| //@ has 'repr/enum.ReprTransparentEnumPub1ZstField.html' |
| //@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]' |
| #[repr(transparent)] // public... |
| pub enum ReprTransparentEnumPub1ZstField { |
| Variant { |
| field: u64, // ...since the non-1-ZST field is public |
| #[doc(hidden)] |
| marker: Marker, // this hidden 1-ZST field doesn't matter |
| }, |
| } |
| |
| //@ has 'repr/enum.ReprTransparentEnumHidden1ZstField.html' |
| //@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]' |
| #[repr(transparent)] // private... |
| pub enum ReprTransparentEnumHidden1ZstField { |
| Variant { |
| #[doc(hidden)] |
| field: u64, // ...since the non-1-ZST field is public |
| }, |
| } |
| |
| struct Marker; // 1-ZST |
| |
| // Check the "extern case" (middle cleaning) // |
| |
| // Internally, HIR and middle cleaning share `#[repr]` rendering. |
| // Thus we'll only test the very basics in this section. |
| |
| //@ aux-build: ext-repr.rs |
| extern crate ext_repr as ext; |
| |
| // Regression test for <https://github.com/rust-lang/rust/issues/110698>. |
| //@ has 'repr/enum.ReprI8.html' |
| //@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(i8)]' |
| pub use ext::ReprI8; |