mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-10-12 08:15:06 +02:00
211 lines
2.4 KiB
C++
211 lines
2.4 KiB
C++
#include <cstdarg>
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
#include <ostream>
|
|
#include <new>
|
|
|
|
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;
|
|
};
|
|
};
|
|
|
|
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);
|
|
|
|
} // extern "C"
|
|
|
|
#if 0
|
|
''' '
|
|
#endif
|
|
|
|
#include <stddef.h>
|
|
#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
|