#if 0 ''' ' #endif #ifdef __cplusplus template using Box = T*; #endif #if 0 ' ''' #endif #include #include #include #include #include enum class A : uint64_t { a1 = 0, a2 = 2, a3, a4 = 5, }; enum class B : uint32_t { b1 = 0, b2 = 2, b3, b4 = 5, }; enum class C : uint16_t { c1 = 0, c2 = 2, c3, c4 = 5, }; enum class D : uint8_t { d1 = 0, d2 = 2, d3, d4 = 5, }; enum class E : uintptr_t { e1 = 0, e2 = 2, e3, e4 = 5, }; enum class F : intptr_t { f1 = 0, f2 = 2, f3, f4 = 5, }; enum class L { l1, l2, l3, l4, }; enum class M : int8_t { m1 = -1, m2 = 0, m3 = 1, }; enum N { n1, n2, n3, n4, }; enum O : int8_t { o1, o2, o3, o4, }; struct J; struct K; struct Opaque; union G { enum class Tag : uint8_t { Foo, Bar, Baz, }; struct Foo_Body { Tag tag; int16_t _0; }; struct Bar_Body { Tag tag; uint8_t x; int16_t y; }; struct { Tag tag; }; Foo_Body foo; Bar_Body bar; }; struct H { enum class Tag { H_Foo, H_Bar, H_Baz, }; struct H_Foo_Body { int16_t _0; }; struct H_Bar_Body { uint8_t x; int16_t y; }; Tag tag; union { H_Foo_Body foo; H_Bar_Body bar; }; }; struct ExI { enum class Tag : uint8_t { ExI_Foo, ExI_Bar, ExI_Baz, }; struct ExI_Foo_Body { int16_t _0; }; struct ExI_Bar_Body { uint8_t x; int16_t y; }; Tag tag; union { ExI_Foo_Body foo; ExI_Bar_Body bar; }; }; struct P { enum class Tag : uint8_t { P0, P1, }; struct P0_Body { uint8_t _0; }; struct P1_Body { uint8_t _0; uint8_t _1; uint8_t _2; }; Tag tag; union { P0_Body p0; P1_Body p1; }; }; struct Q { enum class Tag { Ok, Err, }; struct Ok_Body { Box _0; }; struct Err_Body { uint32_t _0; }; Tag tag; union { Ok_Body ok; Err_Body err; }; }; struct R { enum class Tag { IRFoo, IRBar, IRBaz, }; struct IRFoo_Body { int16_t _0; }; struct IRBar_Body { uint8_t x; int16_t y; }; Tag tag; union { IRFoo_Body IRFoo; IRBar_Body IRBar; }; }; extern "C" { void root(Opaque *opaque, A a, B b, C c, D d, E e, F f, G g, H h, ExI i, J j, K k, L l, M m, N n, O o, P p, Q q, R r); } // extern "C" #if 0 ''' ' #endif #include #include "testing-helpers.h" static_assert(offsetof(CBINDGEN_STRUCT(P), tag) == 0, "unexpected offset for tag"); static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p0"); static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p1"); static_assert(sizeof(CBINDGEN_STRUCT(P)) == 4, "unexpected size for P"); #if 0 ' ''' #endif