summaryrefslogtreecommitdiffstats
path: root/tests/rust/transparent.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/rust/transparent.rs')
-rw-r--r--tests/rust/transparent.rs67
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,
+) { }