diff options
Diffstat (limited to 'tests/rust/transparent.rs')
-rw-r--r-- | tests/rust/transparent.rs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/rust/transparent.rs b/tests/rust/transparent.rs new file mode 100644 index 0000000..6dc77c1 --- /dev/null +++ b/tests/rust/transparent.rs @@ -0,0 +1,67 @@ +struct DummyStruct; + +// Transparent struct tuple wrapping a struct. +#[repr(transparent)] +struct TransparentComplexWrappingStructTuple(DummyStruct); + +// Transparent struct tuple wrapping a primitive. +#[repr(transparent)] +struct TransparentPrimitiveWrappingStructTuple(u32); + +// Transparent structure wrapping a struct. +#[repr(transparent)] +struct TransparentComplexWrappingStructure { only_field: DummyStruct } + +// Transparent structure wrapping a primitive. +#[repr(transparent)] +struct TransparentPrimitiveWrappingStructure { only_field: u32 } + +// Transparent struct wrapper with a marker wrapping a struct. +#[repr(transparent)] +struct TransparentComplexWrapper<T> { + only_non_zero_sized_field: DummyStruct, + marker: PhantomData<T>, +} + +// Transparent struct wrapper with a marker wrapping a primitive. +#[repr(transparent)] +struct TransparentPrimitiveWrapper<T> { + only_non_zero_sized_field: u32, + marker: PhantomData<T>, +} + +// Associated constant declared before struct declaration. +impl TransparentPrimitiveWithAssociatedConstants { + pub const ZERO: TransparentPrimitiveWithAssociatedConstants = TransparentPrimitiveWithAssociatedConstants { + bits: 0 + }; +} + +// Transparent structure wrapping a primitive with associated constants. +#[repr(transparent)] +struct TransparentPrimitiveWithAssociatedConstants { bits: u32 } + +// Associated constant declared after struct declaration. +impl TransparentPrimitiveWithAssociatedConstants { + pub const ONE: TransparentPrimitiveWithAssociatedConstants = TransparentPrimitiveWithAssociatedConstants { + bits: 1 + }; +} + +enum EnumWithAssociatedConstantInImpl { A } + +impl EnumWithAssociatedConstantInImpl { + pub const TEN: TransparentPrimitiveWrappingStructure = TransparentPrimitiveWrappingStructure { only_field: 10 }; +} + +#[no_mangle] +pub extern "C" fn root( + a: TransparentComplexWrappingStructTuple, + b: TransparentPrimitiveWrappingStructTuple, + c: TransparentComplexWrappingStructure, + d: TransparentPrimitiveWrappingStructure, + e: TransparentComplexWrapper<i32>, + f: TransparentPrimitiveWrapper<i32>, + g: TransparentPrimitiveWithAssociatedConstants, + h: EnumWithAssociatedConstantInImpl, +) { } |