Files
cbindgen/tests/expectations/layout.cpp
T
Aleksa Sarai f23d4ee6e8 tests: add tests for #[repr(packed)] and #[repr(align(...))]
The tests are very straightforward, and effecitvely are just ensuring
that the formatting works correctly and is included in all of the
important cases.

It's also very important to ensure we do not generate laid-out structs
for layouts which we cannot reasonably represent in C (such as in cases
where we weren't told what annotation to use for packed and
specifically-aligned structures). Thus, add some tests to verify that
this is the case.

Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
2019-12-15 11:52:23 +01:00

73 lines
1.2 KiB
C++

#define CBINDGEN_PACKED __attribute__ ((packed))
#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n)))
#include <cstdarg>
#include <cstdint>
#include <cstdlib>
#include <new>
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;
};