cbindgen/tests/expectations/destructor-and-copy-ctor.both.c

239 lines
3.8 KiB
C

#define NOINLINE __attribute__((noinline))
#define NODISCARD [[nodiscard]]
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
enum FillRule {
A,
B,
};
typedef uint8_t FillRule;
/**
* This will have a destructor manually implemented via variant_body, and
* similarly a Drop impl in Rust.
*/
typedef struct OwnedSlice_u32 {
uintptr_t len;
uint32_t *ptr;
} OwnedSlice_u32;
typedef struct Polygon_u32 {
FillRule fill;
OwnedSlice_u32 coordinates;
} Polygon_u32;
/**
* This will have a destructor manually implemented via variant_body, and
* similarly a Drop impl in Rust.
*/
typedef struct OwnedSlice_i32 {
uintptr_t len;
int32_t *ptr;
} OwnedSlice_i32;
enum Foo_u32_Tag {
Bar_u32,
Polygon1_u32,
Slice1_u32,
Slice2_u32,
Slice3_u32,
Slice4_u32,
};
typedef uint8_t Foo_u32_Tag;
typedef struct Polygon1_Body_u32 {
Polygon_u32 _0;
} Polygon1_Body_u32;
typedef struct Slice1_Body_u32 {
OwnedSlice_u32 _0;
} Slice1_Body_u32;
typedef struct Slice2_Body_u32 {
OwnedSlice_i32 _0;
} Slice2_Body_u32;
typedef struct Slice3_Body_u32 {
FillRule fill;
OwnedSlice_u32 coords;
} Slice3_Body_u32;
typedef struct Slice4_Body_u32 {
FillRule fill;
OwnedSlice_i32 coords;
} Slice4_Body_u32;
typedef struct Foo_u32 {
Foo_u32_Tag tag;
union {
Polygon1_Body_u32 polygon1;
Slice1_Body_u32 slice1;
Slice2_Body_u32 slice2;
Slice3_Body_u32 slice3;
Slice4_Body_u32 slice4;
};
} Foo_u32;
typedef struct Polygon_i32 {
FillRule fill;
OwnedSlice_i32 coordinates;
} Polygon_i32;
enum Baz_i32_Tag {
Bar2_i32,
Polygon21_i32,
Slice21_i32,
Slice22_i32,
Slice23_i32,
Slice24_i32,
};
typedef uint8_t Baz_i32_Tag;
typedef struct Polygon21_Body_i32 {
Baz_i32_Tag tag;
Polygon_i32 _0;
} Polygon21_Body_i32;
typedef struct Slice21_Body_i32 {
Baz_i32_Tag tag;
OwnedSlice_i32 _0;
} Slice21_Body_i32;
typedef struct Slice22_Body_i32 {
Baz_i32_Tag tag;
OwnedSlice_i32 _0;
} Slice22_Body_i32;
typedef struct Slice23_Body_i32 {
Baz_i32_Tag tag;
FillRule fill;
OwnedSlice_i32 coords;
} Slice23_Body_i32;
typedef struct Slice24_Body_i32 {
Baz_i32_Tag tag;
FillRule fill;
OwnedSlice_i32 coords;
} Slice24_Body_i32;
typedef union Baz_i32 {
Baz_i32_Tag tag;
Polygon21_Body_i32 polygon21;
Slice21_Body_i32 slice21;
Slice22_Body_i32 slice22;
Slice23_Body_i32 slice23;
Slice24_Body_i32 slice24;
} Baz_i32;
enum Taz_Tag {
Bar3,
Taz1,
Taz3,
};
typedef uint8_t Taz_Tag;
typedef struct Taz1_Body {
Taz_Tag tag;
int32_t _0;
} Taz1_Body;
typedef struct Taz3_Body {
Taz_Tag tag;
OwnedSlice_i32 _0;
} Taz3_Body;
typedef union Taz {
Taz_Tag tag;
Taz1_Body taz1;
Taz3_Body taz3;
} Taz;
enum Tazz_Tag {
Bar4,
Taz2,
};
typedef uint8_t Tazz_Tag;
typedef struct Taz2_Body {
Tazz_Tag tag;
int32_t _0;
} Taz2_Body;
typedef union Tazz {
Tazz_Tag tag;
Taz2_Body taz2;
} Tazz;
enum Tazzz_Tag {
Bar5,
Taz5,
};
typedef uint8_t Tazzz_Tag;
typedef struct Taz5_Body {
Tazzz_Tag tag;
int32_t _0;
} Taz5_Body;
typedef union Tazzz {
Tazzz_Tag tag;
Taz5_Body taz5;
} Tazzz;
enum Tazzzz_Tag {
Taz6,
Taz7,
};
typedef uint8_t Tazzzz_Tag;
typedef struct Taz6_Body {
Tazzzz_Tag tag;
int32_t _0;
} Taz6_Body;
typedef struct Taz7_Body {
Tazzzz_Tag tag;
uint32_t _0;
} Taz7_Body;
typedef union Tazzzz {
Tazzzz_Tag tag;
Taz6_Body taz6;
Taz7_Body taz7;
} Tazzzz;
enum Qux_Tag {
Qux1,
Qux2,
};
typedef uint8_t Qux_Tag;
typedef struct Qux1_Body {
Qux_Tag tag;
int32_t _0;
} Qux1_Body;
typedef struct Qux2_Body {
Qux_Tag tag;
uint32_t _0;
} Qux2_Body;
typedef union Qux {
Qux_Tag tag;
Qux1_Body qux1;
Qux2_Body qux2;
} Qux;
void root(const Foo_u32 *a,
const Baz_i32 *b,
const Taz *c,
Tazz d,
const Tazzz *e,
const Tazzzz *f,
const Qux *g);