diff --git a/tests/expectations/both/layout.c b/tests/expectations/both/layout.c new file mode 100644 index 0000000..2a16ca2 --- /dev/null +++ b/tests/expectations/both/layout.c @@ -0,0 +1,72 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +typedef struct RustAlign4Struct RustAlign4Struct; + +typedef struct RustAlign4Union RustAlign4Union; + +typedef struct RustPackedStruct RustPackedStruct; + +typedef struct RustPackedUnion RustPackedUnion; + +typedef struct UnsupportedAlign4Enum UnsupportedAlign4Enum; + +typedef struct UnsupportedPacked4Struct UnsupportedPacked4Struct; + +typedef struct UnsupportedPacked4Union UnsupportedPacked4Union; + +typedef struct CBINDGEN_ALIGNED(1) Align1Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align1Struct; + +typedef struct CBINDGEN_ALIGNED(2) Align2Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align2Struct; + +typedef struct CBINDGEN_ALIGNED(4) Align4Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align4Struct; + +typedef struct CBINDGEN_ALIGNED(8) Align8Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align8Struct; + +typedef struct CBINDGEN_ALIGNED(32) Align32Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align32Struct; + +typedef struct CBINDGEN_PACKED PackedStruct { + uintptr_t arg1; + uint8_t *arg2; +} PackedStruct; + +typedef union CBINDGEN_ALIGNED(1) Align1Union { + uintptr_t variant1; + uint8_t *variant2; +} Align1Union; + +typedef union CBINDGEN_ALIGNED(4) Align4Union { + uintptr_t variant1; + uint8_t *variant2; +} Align4Union; + +typedef union CBINDGEN_ALIGNED(16) Align16Union { + uintptr_t variant1; + uint8_t *variant2; +} Align16Union; + +typedef union CBINDGEN_PACKED PackedUnion { + uintptr_t variant1; + uint8_t *variant2; +} PackedUnion; diff --git a/tests/expectations/both/layout.compat.c b/tests/expectations/both/layout.compat.c new file mode 100644 index 0000000..2a16ca2 --- /dev/null +++ b/tests/expectations/both/layout.compat.c @@ -0,0 +1,72 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +typedef struct RustAlign4Struct RustAlign4Struct; + +typedef struct RustAlign4Union RustAlign4Union; + +typedef struct RustPackedStruct RustPackedStruct; + +typedef struct RustPackedUnion RustPackedUnion; + +typedef struct UnsupportedAlign4Enum UnsupportedAlign4Enum; + +typedef struct UnsupportedPacked4Struct UnsupportedPacked4Struct; + +typedef struct UnsupportedPacked4Union UnsupportedPacked4Union; + +typedef struct CBINDGEN_ALIGNED(1) Align1Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align1Struct; + +typedef struct CBINDGEN_ALIGNED(2) Align2Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align2Struct; + +typedef struct CBINDGEN_ALIGNED(4) Align4Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align4Struct; + +typedef struct CBINDGEN_ALIGNED(8) Align8Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align8Struct; + +typedef struct CBINDGEN_ALIGNED(32) Align32Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align32Struct; + +typedef struct CBINDGEN_PACKED PackedStruct { + uintptr_t arg1; + uint8_t *arg2; +} PackedStruct; + +typedef union CBINDGEN_ALIGNED(1) Align1Union { + uintptr_t variant1; + uint8_t *variant2; +} Align1Union; + +typedef union CBINDGEN_ALIGNED(4) Align4Union { + uintptr_t variant1; + uint8_t *variant2; +} Align4Union; + +typedef union CBINDGEN_ALIGNED(16) Align16Union { + uintptr_t variant1; + uint8_t *variant2; +} Align16Union; + +typedef union CBINDGEN_PACKED PackedUnion { + uintptr_t variant1; + uint8_t *variant2; +} PackedUnion; diff --git a/tests/expectations/both/layout_aligned_opaque.c b/tests/expectations/both/layout_aligned_opaque.c new file mode 100644 index 0000000..cc28914 --- /dev/null +++ b/tests/expectations/both/layout_aligned_opaque.c @@ -0,0 +1,34 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +typedef struct OpaqueAlign16Union OpaqueAlign16Union; + +typedef struct OpaqueAlign1Struct OpaqueAlign1Struct; + +typedef struct OpaqueAlign1Union OpaqueAlign1Union; + +typedef struct OpaqueAlign2Struct OpaqueAlign2Struct; + +typedef struct OpaqueAlign32Struct OpaqueAlign32Struct; + +typedef struct OpaqueAlign4Struct OpaqueAlign4Struct; + +typedef struct OpaqueAlign4Union OpaqueAlign4Union; + +typedef struct OpaqueAlign8Struct OpaqueAlign8Struct; + +typedef struct CBINDGEN_PACKED PackedStruct { + uintptr_t arg1; + uint8_t *arg2; +} PackedStruct; + +typedef union CBINDGEN_PACKED PackedUnion { + uintptr_t variant1; + uint8_t *variant2; +} PackedUnion; diff --git a/tests/expectations/both/layout_aligned_opaque.compat.c b/tests/expectations/both/layout_aligned_opaque.compat.c new file mode 100644 index 0000000..cc28914 --- /dev/null +++ b/tests/expectations/both/layout_aligned_opaque.compat.c @@ -0,0 +1,34 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +typedef struct OpaqueAlign16Union OpaqueAlign16Union; + +typedef struct OpaqueAlign1Struct OpaqueAlign1Struct; + +typedef struct OpaqueAlign1Union OpaqueAlign1Union; + +typedef struct OpaqueAlign2Struct OpaqueAlign2Struct; + +typedef struct OpaqueAlign32Struct OpaqueAlign32Struct; + +typedef struct OpaqueAlign4Struct OpaqueAlign4Struct; + +typedef struct OpaqueAlign4Union OpaqueAlign4Union; + +typedef struct OpaqueAlign8Struct OpaqueAlign8Struct; + +typedef struct CBINDGEN_PACKED PackedStruct { + uintptr_t arg1; + uint8_t *arg2; +} PackedStruct; + +typedef union CBINDGEN_PACKED PackedUnion { + uintptr_t variant1; + uint8_t *variant2; +} PackedUnion; diff --git a/tests/expectations/both/layout_packed_opaque.c b/tests/expectations/both/layout_packed_opaque.c new file mode 100644 index 0000000..ff9053f --- /dev/null +++ b/tests/expectations/both/layout_packed_opaque.c @@ -0,0 +1,52 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +typedef struct OpaquePackedStruct OpaquePackedStruct; + +typedef struct OpaquePackedUnion OpaquePackedUnion; + +typedef union CBINDGEN_ALIGNED(1) Align1Union { + uintptr_t variant1; + uint8_t *variant2; +} Align1Union; + +typedef union CBINDGEN_ALIGNED(4) Align4Union { + uintptr_t variant1; + uint8_t *variant2; +} Align4Union; + +typedef union CBINDGEN_ALIGNED(16) Align16Union { + uintptr_t variant1; + uint8_t *variant2; +} Align16Union; + +typedef struct CBINDGEN_ALIGNED(1) Align1Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align1Struct; + +typedef struct CBINDGEN_ALIGNED(2) Align2Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align2Struct; + +typedef struct CBINDGEN_ALIGNED(4) Align4Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align4Struct; + +typedef struct CBINDGEN_ALIGNED(8) Align8Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align8Struct; + +typedef struct CBINDGEN_ALIGNED(32) Align32Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align32Struct; diff --git a/tests/expectations/both/layout_packed_opaque.compat.c b/tests/expectations/both/layout_packed_opaque.compat.c new file mode 100644 index 0000000..ff9053f --- /dev/null +++ b/tests/expectations/both/layout_packed_opaque.compat.c @@ -0,0 +1,52 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +typedef struct OpaquePackedStruct OpaquePackedStruct; + +typedef struct OpaquePackedUnion OpaquePackedUnion; + +typedef union CBINDGEN_ALIGNED(1) Align1Union { + uintptr_t variant1; + uint8_t *variant2; +} Align1Union; + +typedef union CBINDGEN_ALIGNED(4) Align4Union { + uintptr_t variant1; + uint8_t *variant2; +} Align4Union; + +typedef union CBINDGEN_ALIGNED(16) Align16Union { + uintptr_t variant1; + uint8_t *variant2; +} Align16Union; + +typedef struct CBINDGEN_ALIGNED(1) Align1Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align1Struct; + +typedef struct CBINDGEN_ALIGNED(2) Align2Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align2Struct; + +typedef struct CBINDGEN_ALIGNED(4) Align4Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align4Struct; + +typedef struct CBINDGEN_ALIGNED(8) Align8Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align8Struct; + +typedef struct CBINDGEN_ALIGNED(32) Align32Struct { + uintptr_t arg1; + uint8_t *arg2; +} Align32Struct; diff --git a/tests/expectations/layout.c b/tests/expectations/layout.c new file mode 100644 index 0000000..bd06ba5 --- /dev/null +++ b/tests/expectations/layout.c @@ -0,0 +1,72 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +typedef struct RustAlign4Struct RustAlign4Struct; + +typedef struct RustAlign4Union RustAlign4Union; + +typedef struct RustPackedStruct RustPackedStruct; + +typedef struct RustPackedUnion RustPackedUnion; + +typedef struct UnsupportedAlign4Enum UnsupportedAlign4Enum; + +typedef struct UnsupportedPacked4Struct UnsupportedPacked4Struct; + +typedef struct UnsupportedPacked4Union UnsupportedPacked4Union; + +typedef struct CBINDGEN_ALIGNED(1) { + uintptr_t arg1; + uint8_t *arg2; +} Align1Struct; + +typedef struct CBINDGEN_ALIGNED(2) { + uintptr_t arg1; + uint8_t *arg2; +} Align2Struct; + +typedef struct CBINDGEN_ALIGNED(4) { + uintptr_t arg1; + uint8_t *arg2; +} Align4Struct; + +typedef struct CBINDGEN_ALIGNED(8) { + uintptr_t arg1; + uint8_t *arg2; +} Align8Struct; + +typedef struct CBINDGEN_ALIGNED(32) { + uintptr_t arg1; + uint8_t *arg2; +} Align32Struct; + +typedef struct CBINDGEN_PACKED { + uintptr_t arg1; + uint8_t *arg2; +} PackedStruct; + +typedef union CBINDGEN_ALIGNED(1) { + uintptr_t variant1; + uint8_t *variant2; +} Align1Union; + +typedef union CBINDGEN_ALIGNED(4) { + uintptr_t variant1; + uint8_t *variant2; +} Align4Union; + +typedef union CBINDGEN_ALIGNED(16) { + uintptr_t variant1; + uint8_t *variant2; +} Align16Union; + +typedef union CBINDGEN_PACKED { + uintptr_t variant1; + uint8_t *variant2; +} PackedUnion; diff --git a/tests/expectations/layout.compat.c b/tests/expectations/layout.compat.c new file mode 100644 index 0000000..bd06ba5 --- /dev/null +++ b/tests/expectations/layout.compat.c @@ -0,0 +1,72 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +typedef struct RustAlign4Struct RustAlign4Struct; + +typedef struct RustAlign4Union RustAlign4Union; + +typedef struct RustPackedStruct RustPackedStruct; + +typedef struct RustPackedUnion RustPackedUnion; + +typedef struct UnsupportedAlign4Enum UnsupportedAlign4Enum; + +typedef struct UnsupportedPacked4Struct UnsupportedPacked4Struct; + +typedef struct UnsupportedPacked4Union UnsupportedPacked4Union; + +typedef struct CBINDGEN_ALIGNED(1) { + uintptr_t arg1; + uint8_t *arg2; +} Align1Struct; + +typedef struct CBINDGEN_ALIGNED(2) { + uintptr_t arg1; + uint8_t *arg2; +} Align2Struct; + +typedef struct CBINDGEN_ALIGNED(4) { + uintptr_t arg1; + uint8_t *arg2; +} Align4Struct; + +typedef struct CBINDGEN_ALIGNED(8) { + uintptr_t arg1; + uint8_t *arg2; +} Align8Struct; + +typedef struct CBINDGEN_ALIGNED(32) { + uintptr_t arg1; + uint8_t *arg2; +} Align32Struct; + +typedef struct CBINDGEN_PACKED { + uintptr_t arg1; + uint8_t *arg2; +} PackedStruct; + +typedef union CBINDGEN_ALIGNED(1) { + uintptr_t variant1; + uint8_t *variant2; +} Align1Union; + +typedef union CBINDGEN_ALIGNED(4) { + uintptr_t variant1; + uint8_t *variant2; +} Align4Union; + +typedef union CBINDGEN_ALIGNED(16) { + uintptr_t variant1; + uint8_t *variant2; +} Align16Union; + +typedef union CBINDGEN_PACKED { + uintptr_t variant1; + uint8_t *variant2; +} PackedUnion; diff --git a/tests/expectations/layout.cpp b/tests/expectations/layout.cpp new file mode 100644 index 0000000..b3ba1be --- /dev/null +++ b/tests/expectations/layout.cpp @@ -0,0 +1,72 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +struct RustAlign4Struct; + +struct RustAlign4Union; + +struct RustPackedStruct; + +struct RustPackedUnion; + +struct UnsupportedAlign4Enum; + +struct UnsupportedPacked4Struct; + +struct UnsupportedPacked4Union; + +struct CBINDGEN_ALIGNED(1) Align1Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(2) Align2Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(4) Align4Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(8) Align8Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(32) Align32Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_PACKED PackedStruct { + uintptr_t arg1; + uint8_t *arg2; +}; + +union CBINDGEN_ALIGNED(1) Align1Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_ALIGNED(4) Align4Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_ALIGNED(16) Align16Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_PACKED PackedUnion { + uintptr_t variant1; + uint8_t *variant2; +}; diff --git a/tests/expectations/layout_aligned_opaque.c b/tests/expectations/layout_aligned_opaque.c new file mode 100644 index 0000000..276173b --- /dev/null +++ b/tests/expectations/layout_aligned_opaque.c @@ -0,0 +1,34 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +typedef struct OpaqueAlign16Union OpaqueAlign16Union; + +typedef struct OpaqueAlign1Struct OpaqueAlign1Struct; + +typedef struct OpaqueAlign1Union OpaqueAlign1Union; + +typedef struct OpaqueAlign2Struct OpaqueAlign2Struct; + +typedef struct OpaqueAlign32Struct OpaqueAlign32Struct; + +typedef struct OpaqueAlign4Struct OpaqueAlign4Struct; + +typedef struct OpaqueAlign4Union OpaqueAlign4Union; + +typedef struct OpaqueAlign8Struct OpaqueAlign8Struct; + +typedef struct CBINDGEN_PACKED { + uintptr_t arg1; + uint8_t *arg2; +} PackedStruct; + +typedef union CBINDGEN_PACKED { + uintptr_t variant1; + uint8_t *variant2; +} PackedUnion; diff --git a/tests/expectations/layout_aligned_opaque.compat.c b/tests/expectations/layout_aligned_opaque.compat.c new file mode 100644 index 0000000..276173b --- /dev/null +++ b/tests/expectations/layout_aligned_opaque.compat.c @@ -0,0 +1,34 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +typedef struct OpaqueAlign16Union OpaqueAlign16Union; + +typedef struct OpaqueAlign1Struct OpaqueAlign1Struct; + +typedef struct OpaqueAlign1Union OpaqueAlign1Union; + +typedef struct OpaqueAlign2Struct OpaqueAlign2Struct; + +typedef struct OpaqueAlign32Struct OpaqueAlign32Struct; + +typedef struct OpaqueAlign4Struct OpaqueAlign4Struct; + +typedef struct OpaqueAlign4Union OpaqueAlign4Union; + +typedef struct OpaqueAlign8Struct OpaqueAlign8Struct; + +typedef struct CBINDGEN_PACKED { + uintptr_t arg1; + uint8_t *arg2; +} PackedStruct; + +typedef union CBINDGEN_PACKED { + uintptr_t variant1; + uint8_t *variant2; +} PackedUnion; diff --git a/tests/expectations/layout_aligned_opaque.cpp b/tests/expectations/layout_aligned_opaque.cpp new file mode 100644 index 0000000..3b25ae5 --- /dev/null +++ b/tests/expectations/layout_aligned_opaque.cpp @@ -0,0 +1,34 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +struct OpaqueAlign16Union; + +struct OpaqueAlign1Struct; + +struct OpaqueAlign1Union; + +struct OpaqueAlign2Struct; + +struct OpaqueAlign32Struct; + +struct OpaqueAlign4Struct; + +struct OpaqueAlign4Union; + +struct OpaqueAlign8Struct; + +struct CBINDGEN_PACKED PackedStruct { + uintptr_t arg1; + uint8_t *arg2; +}; + +union CBINDGEN_PACKED PackedUnion { + uintptr_t variant1; + uint8_t *variant2; +}; diff --git a/tests/expectations/layout_packed_opaque.c b/tests/expectations/layout_packed_opaque.c new file mode 100644 index 0000000..b4018da --- /dev/null +++ b/tests/expectations/layout_packed_opaque.c @@ -0,0 +1,52 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +typedef struct OpaquePackedStruct OpaquePackedStruct; + +typedef struct OpaquePackedUnion OpaquePackedUnion; + +typedef union CBINDGEN_ALIGNED(1) { + uintptr_t variant1; + uint8_t *variant2; +} Align1Union; + +typedef union CBINDGEN_ALIGNED(4) { + uintptr_t variant1; + uint8_t *variant2; +} Align4Union; + +typedef union CBINDGEN_ALIGNED(16) { + uintptr_t variant1; + uint8_t *variant2; +} Align16Union; + +typedef struct CBINDGEN_ALIGNED(1) { + uintptr_t arg1; + uint8_t *arg2; +} Align1Struct; + +typedef struct CBINDGEN_ALIGNED(2) { + uintptr_t arg1; + uint8_t *arg2; +} Align2Struct; + +typedef struct CBINDGEN_ALIGNED(4) { + uintptr_t arg1; + uint8_t *arg2; +} Align4Struct; + +typedef struct CBINDGEN_ALIGNED(8) { + uintptr_t arg1; + uint8_t *arg2; +} Align8Struct; + +typedef struct CBINDGEN_ALIGNED(32) { + uintptr_t arg1; + uint8_t *arg2; +} Align32Struct; diff --git a/tests/expectations/layout_packed_opaque.compat.c b/tests/expectations/layout_packed_opaque.compat.c new file mode 100644 index 0000000..b4018da --- /dev/null +++ b/tests/expectations/layout_packed_opaque.compat.c @@ -0,0 +1,52 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +typedef struct OpaquePackedStruct OpaquePackedStruct; + +typedef struct OpaquePackedUnion OpaquePackedUnion; + +typedef union CBINDGEN_ALIGNED(1) { + uintptr_t variant1; + uint8_t *variant2; +} Align1Union; + +typedef union CBINDGEN_ALIGNED(4) { + uintptr_t variant1; + uint8_t *variant2; +} Align4Union; + +typedef union CBINDGEN_ALIGNED(16) { + uintptr_t variant1; + uint8_t *variant2; +} Align16Union; + +typedef struct CBINDGEN_ALIGNED(1) { + uintptr_t arg1; + uint8_t *arg2; +} Align1Struct; + +typedef struct CBINDGEN_ALIGNED(2) { + uintptr_t arg1; + uint8_t *arg2; +} Align2Struct; + +typedef struct CBINDGEN_ALIGNED(4) { + uintptr_t arg1; + uint8_t *arg2; +} Align4Struct; + +typedef struct CBINDGEN_ALIGNED(8) { + uintptr_t arg1; + uint8_t *arg2; +} Align8Struct; + +typedef struct CBINDGEN_ALIGNED(32) { + uintptr_t arg1; + uint8_t *arg2; +} Align32Struct; diff --git a/tests/expectations/layout_packed_opaque.cpp b/tests/expectations/layout_packed_opaque.cpp new file mode 100644 index 0000000..1e3c4a9 --- /dev/null +++ b/tests/expectations/layout_packed_opaque.cpp @@ -0,0 +1,52 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +struct OpaquePackedStruct; + +struct OpaquePackedUnion; + +union CBINDGEN_ALIGNED(1) Align1Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_ALIGNED(4) Align4Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_ALIGNED(16) Align16Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +struct CBINDGEN_ALIGNED(1) Align1Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(2) Align2Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(4) Align4Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(8) Align8Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(32) Align32Struct { + uintptr_t arg1; + uint8_t *arg2; +}; diff --git a/tests/expectations/tag/layout.c b/tests/expectations/tag/layout.c new file mode 100644 index 0000000..347af27 --- /dev/null +++ b/tests/expectations/tag/layout.c @@ -0,0 +1,72 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +struct RustAlign4Struct; + +struct RustAlign4Union; + +struct RustPackedStruct; + +struct RustPackedUnion; + +struct UnsupportedAlign4Enum; + +struct UnsupportedPacked4Struct; + +struct UnsupportedPacked4Union; + +struct CBINDGEN_ALIGNED(1) Align1Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(2) Align2Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(4) Align4Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(8) Align8Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(32) Align32Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_PACKED PackedStruct { + uintptr_t arg1; + uint8_t *arg2; +}; + +union CBINDGEN_ALIGNED(1) Align1Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_ALIGNED(4) Align4Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_ALIGNED(16) Align16Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_PACKED PackedUnion { + uintptr_t variant1; + uint8_t *variant2; +}; diff --git a/tests/expectations/tag/layout.compat.c b/tests/expectations/tag/layout.compat.c new file mode 100644 index 0000000..347af27 --- /dev/null +++ b/tests/expectations/tag/layout.compat.c @@ -0,0 +1,72 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +struct RustAlign4Struct; + +struct RustAlign4Union; + +struct RustPackedStruct; + +struct RustPackedUnion; + +struct UnsupportedAlign4Enum; + +struct UnsupportedPacked4Struct; + +struct UnsupportedPacked4Union; + +struct CBINDGEN_ALIGNED(1) Align1Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(2) Align2Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(4) Align4Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(8) Align8Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(32) Align32Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_PACKED PackedStruct { + uintptr_t arg1; + uint8_t *arg2; +}; + +union CBINDGEN_ALIGNED(1) Align1Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_ALIGNED(4) Align4Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_ALIGNED(16) Align16Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_PACKED PackedUnion { + uintptr_t variant1; + uint8_t *variant2; +}; diff --git a/tests/expectations/tag/layout_aligned_opaque.c b/tests/expectations/tag/layout_aligned_opaque.c new file mode 100644 index 0000000..0c5def9 --- /dev/null +++ b/tests/expectations/tag/layout_aligned_opaque.c @@ -0,0 +1,34 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +struct OpaqueAlign16Union; + +struct OpaqueAlign1Struct; + +struct OpaqueAlign1Union; + +struct OpaqueAlign2Struct; + +struct OpaqueAlign32Struct; + +struct OpaqueAlign4Struct; + +struct OpaqueAlign4Union; + +struct OpaqueAlign8Struct; + +struct CBINDGEN_PACKED PackedStruct { + uintptr_t arg1; + uint8_t *arg2; +}; + +union CBINDGEN_PACKED PackedUnion { + uintptr_t variant1; + uint8_t *variant2; +}; diff --git a/tests/expectations/tag/layout_aligned_opaque.compat.c b/tests/expectations/tag/layout_aligned_opaque.compat.c new file mode 100644 index 0000000..0c5def9 --- /dev/null +++ b/tests/expectations/tag/layout_aligned_opaque.compat.c @@ -0,0 +1,34 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +struct OpaqueAlign16Union; + +struct OpaqueAlign1Struct; + +struct OpaqueAlign1Union; + +struct OpaqueAlign2Struct; + +struct OpaqueAlign32Struct; + +struct OpaqueAlign4Struct; + +struct OpaqueAlign4Union; + +struct OpaqueAlign8Struct; + +struct CBINDGEN_PACKED PackedStruct { + uintptr_t arg1; + uint8_t *arg2; +}; + +union CBINDGEN_PACKED PackedUnion { + uintptr_t variant1; + uint8_t *variant2; +}; diff --git a/tests/expectations/tag/layout_packed_opaque.c b/tests/expectations/tag/layout_packed_opaque.c new file mode 100644 index 0000000..8191f57 --- /dev/null +++ b/tests/expectations/tag/layout_packed_opaque.c @@ -0,0 +1,52 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +struct OpaquePackedStruct; + +struct OpaquePackedUnion; + +union CBINDGEN_ALIGNED(1) Align1Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_ALIGNED(4) Align4Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_ALIGNED(16) Align16Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +struct CBINDGEN_ALIGNED(1) Align1Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(2) Align2Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(4) Align4Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(8) Align8Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(32) Align32Struct { + uintptr_t arg1; + uint8_t *arg2; +}; diff --git a/tests/expectations/tag/layout_packed_opaque.compat.c b/tests/expectations/tag/layout_packed_opaque.compat.c new file mode 100644 index 0000000..8191f57 --- /dev/null +++ b/tests/expectations/tag/layout_packed_opaque.compat.c @@ -0,0 +1,52 @@ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) + + +#include +#include +#include +#include + +struct OpaquePackedStruct; + +struct OpaquePackedUnion; + +union CBINDGEN_ALIGNED(1) Align1Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_ALIGNED(4) Align4Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +union CBINDGEN_ALIGNED(16) Align16Union { + uintptr_t variant1; + uint8_t *variant2; +}; + +struct CBINDGEN_ALIGNED(1) Align1Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(2) Align2Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(4) Align4Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(8) Align8Struct { + uintptr_t arg1; + uint8_t *arg2; +}; + +struct CBINDGEN_ALIGNED(32) Align32Struct { + uintptr_t arg1; + uint8_t *arg2; +}; diff --git a/tests/rust/layout.rs b/tests/rust/layout.rs new file mode 100644 index 0000000..b15c675 --- /dev/null +++ b/tests/rust/layout.rs @@ -0,0 +1,108 @@ +#[repr(align(1), C)] +pub struct Align1Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +#[repr(align(2), C)] +pub struct Align2Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +#[repr(align(4), C)] +pub struct Align4Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +#[repr(align(8), C)] +pub struct Align8Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +#[repr(align(32), C)] +pub struct Align32Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +#[repr(packed, C)] +pub struct PackedStruct { + pub arg1: usize, + pub arg2: *mut u8, +} + +#[repr(align(1), C)] +pub union Align1Union { + pub variant1: usize, + pub variant2: *mut u8, +} + +#[repr(align(4), C)] +pub union Align4Union { + pub variant1: usize, + pub variant2: *mut u8, +} + +#[repr(align(16), C)] +pub union Align16Union { + pub variant1: usize, + pub variant2: *mut u8, +} + +#[repr(packed, C)] +pub union PackedUnion { + pub variant1: usize, + pub variant2: *mut u8, +} + +// #[repr(packed(n), C)] structs are currently unsupported. +#[repr(packed(4), C)] +pub struct UnsupportedPacked4Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +// #[repr(packed(n), C)] unions are currently unsupported. +#[repr(packed(4), C)] +pub union UnsupportedPacked4Union { + pub variant1: usize, + pub variant2: *mut u8, +} + +// #[repr(align(n), C)] enums are currently unsupported. +#[repr(align(4), C)] +pub enum UnsupportedAlign4Enum { + Variant1, + Variant2, +} + +// Non-repr(C) structs aren't translated. +#[repr(align(4))] +pub struct RustAlign4Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +// Non-repr(C) structs aren't translated. +#[repr(packed)] +pub struct RustPackedStruct { + pub arg1: usize, + pub arg2: *mut u8, +} + +// Non-repr(C) unions aren't translated. +#[repr(align(4))] +pub struct RustAlign4Union { + pub arg1: usize, + pub arg2: *mut u8, +} + +// Non-repr(C) unions aren't translated. +#[repr(packed)] +pub struct RustPackedUnion { + pub arg1: usize, + pub arg2: *mut u8, +} diff --git a/tests/rust/layout.toml b/tests/rust/layout.toml new file mode 100644 index 0000000..a1316dc --- /dev/null +++ b/tests/rust/layout.toml @@ -0,0 +1,29 @@ +header = """ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) +""" + +[layout] +packed = "CBINDGEN_PACKED" +aligned_n = "CBINDGEN_ALIGNED" + +[export] +include = [ + "Align1Struct", + "Align2Struct", + "Align4Struct", + "Align8Struct", + "Align32Struct", + "PackedStruct", + "Align1Union", + "Align4Union", + "Align16Union", + "PackedUnion", + "UnsupportedPacked4Struct", + "UnsupportedPacked4Union", + "UnsupportedAlign4Enum", + "RustAlign4Struct", + "RustPackedStruct", + "RustAlign4Union", + "RustPackedUnion", +] diff --git a/tests/rust/layout_aligned_opaque.rs b/tests/rust/layout_aligned_opaque.rs new file mode 100644 index 0000000..c499124 --- /dev/null +++ b/tests/rust/layout_aligned_opaque.rs @@ -0,0 +1,67 @@ +#[repr(packed, C)] +pub struct PackedStruct { + pub arg1: usize, + pub arg2: *mut u8, +} + +#[repr(packed, C)] +pub union PackedUnion { + pub variant1: usize, + pub variant2: *mut u8, +} + +// Opaque because aligned_n is not defined. +#[repr(align(1), C)] +pub union OpaqueAlign1Union { + pub variant1: usize, + pub variant2: *mut u8, +} + +// Opaque because aligned_n is not defined. +#[repr(align(4), C)] +pub union OpaqueAlign4Union { + pub variant1: usize, + pub variant2: *mut u8, +} + +// Opaque because aligned_n is not defined. +#[repr(align(16), C)] +pub union OpaqueAlign16Union { + pub variant1: usize, + pub variant2: *mut u8, +} + +// Opaque because aligned_n is not defined. +#[repr(align(1), C)] +pub struct OpaqueAlign1Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +// Opaque because aligned_n is not defined. +#[repr(align(2), C)] +pub struct OpaqueAlign2Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +// Opaque because aligned_n is not defined. +#[repr(align(4), C)] +pub struct OpaqueAlign4Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +// Opaque because aligned_n is not defined. +#[repr(align(8), C)] +pub struct OpaqueAlign8Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +// Opaque because aligned_n is not defined. +#[repr(align(32), C)] +pub struct OpaqueAlign32Struct { + pub arg1: usize, + pub arg2: *mut u8, +} diff --git a/tests/rust/layout_aligned_opaque.toml b/tests/rust/layout_aligned_opaque.toml new file mode 100644 index 0000000..1d416f1 --- /dev/null +++ b/tests/rust/layout_aligned_opaque.toml @@ -0,0 +1,22 @@ +header = """ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) +""" + +[layout] +# We do not define aligned_n. +packed = "CBINDGEN_PACKED" + +[export] +include = [ + "PackedStruct", + "PackedUnion", + "OpaqueAlign1Union", + "OpaqueAlign4Union", + "OpaqueAlign16Union", + "OpaqueAlign1Struct", + "OpaqueAlign2Struct", + "OpaqueAlign4Struct", + "OpaqueAlign8Struct", + "OpaqueAlign32Struct", +] diff --git a/tests/rust/layout_packed_opaque.rs b/tests/rust/layout_packed_opaque.rs new file mode 100644 index 0000000..d1e31c6 --- /dev/null +++ b/tests/rust/layout_packed_opaque.rs @@ -0,0 +1,61 @@ +#[repr(align(1), C)] +pub union Align1Union { + pub variant1: usize, + pub variant2: *mut u8, +} + +#[repr(align(4), C)] +pub union Align4Union { + pub variant1: usize, + pub variant2: *mut u8, +} + +#[repr(align(16), C)] +pub union Align16Union { + pub variant1: usize, + pub variant2: *mut u8, +} + +#[repr(align(1), C)] +pub struct Align1Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +#[repr(align(2), C)] +pub struct Align2Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +#[repr(align(4), C)] +pub struct Align4Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +#[repr(align(8), C)] +pub struct Align8Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +#[repr(align(32), C)] +pub struct Align32Struct { + pub arg1: usize, + pub arg2: *mut u8, +} + +// Opaque because packed is not defined. +#[repr(packed, C)] +pub struct OpaquePackedStruct { + pub arg1: usize, + pub arg2: *mut u8, +} + +// Opaque because packed is not defined. +#[repr(packed, C)] +pub union OpaquePackedUnion { + pub variant1: usize, + pub variant2: *mut u8, +} diff --git a/tests/rust/layout_packed_opaque.toml b/tests/rust/layout_packed_opaque.toml new file mode 100644 index 0000000..b726004 --- /dev/null +++ b/tests/rust/layout_packed_opaque.toml @@ -0,0 +1,22 @@ +header = """ +#define CBINDGEN_PACKED __attribute__ ((packed)) +#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n))) +""" + +[layout] +# We do not define packed. +aligned_n = "CBINDGEN_ALIGNED" + +[export] +include = [ + "Align1Union", + "Align4Union", + "Align16Union", + "Align1Struct", + "Align2Struct", + "Align4Struct", + "Align8Struct", + "Align32Struct", + "OpaquePackedStruct", + "OpaquePackedUnion", +]