#include #include #include #include struct BoolAndU32 { bool a; uint32_t b; }; #ifdef _MSC_VER __declspec(align(16)) struct TwoU64s { uint64_t a; uint64_t b; }; #else struct __attribute__((aligned(16))) TwoU64s { uint64_t a; uint64_t b; }; #endif struct WrappedU64s { struct TwoU64s a; }; #ifdef _MSC_VER __declspec(align(1)) struct LowerAlign { uint64_t a; uint64_t b; }; #else struct __attribute__((aligned(1))) LowerAlign { uint64_t a; uint64_t b; }; #endif #pragma pack(push, 1) struct Packed { uint64_t a; uint64_t b; }; #pragma pack(pop) int32_t many_args( void *a, void *b, const char *c, uint64_t d, bool e, struct BoolAndU32 f, void *g, struct TwoU64s h, void *i, struct WrappedU64s j, void *k, struct LowerAlign l, void *m, struct Packed n, const char *o) { assert(!a); assert(!b); assert(!c); assert(d == 42); assert(e); assert(f.a); assert(f.b == 1337); assert(!g); assert(h.a == 1); assert(h.b == 2); assert(!i); assert(j.a.a == 3); assert(j.a.b == 4); assert(!k); assert(l.a == 5); assert(l.b == 6); assert(!m); assert(n.a == 7); assert(n.b == 8); assert(strcmp(o, "Hello world") == 0); return 0; }