f23d4ee6e8
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>
53 lines
915 B
C++
53 lines
915 B
C++
#define CBINDGEN_PACKED __attribute__ ((packed))
|
|
#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n)))
|
|
|
|
|
|
#include <cstdarg>
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
#include <new>
|
|
|
|
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;
|
|
};
|