mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 20:11:17 +00:00
273 lines
3.4 KiB
C
273 lines
3.4 KiB
C
module struct2;
|
|
|
|
struct Foo1
|
|
{
|
|
bool a @nopadding;
|
|
int b;
|
|
int c @nopadding;
|
|
}
|
|
|
|
union Foo1_Union
|
|
{
|
|
bool a @nopadding;
|
|
int b;
|
|
int c @nopadding;
|
|
}
|
|
|
|
struct Foo2 @nopadding
|
|
{
|
|
bool a;
|
|
bool b;
|
|
bool c;
|
|
}
|
|
|
|
union Foo2_Union @nopadding
|
|
{
|
|
bool a;
|
|
bool b;
|
|
bool c;
|
|
}
|
|
|
|
struct Foo3
|
|
{
|
|
bool a;
|
|
int b @nopadding; // #error: 3 bytes of padding would be added
|
|
int c @nopadding;
|
|
}
|
|
|
|
struct Foo4 @nopadding
|
|
{
|
|
bool a;
|
|
int b; // #error: 3 bytes of padding would be added
|
|
int c;
|
|
}
|
|
|
|
struct Foo5 @nopadding // #error: 3 bytes of padding would be added
|
|
{
|
|
int a;
|
|
bool b;
|
|
}
|
|
|
|
struct Foo5_B @align(16) @nopadding // #error: 8 bytes of padding would be added
|
|
{
|
|
int a;
|
|
int b;
|
|
}
|
|
|
|
struct Foo6 @nopadding
|
|
{
|
|
int a;
|
|
struct // #error: 3 bytes of padding would be added
|
|
{
|
|
int b;
|
|
bool c;
|
|
}
|
|
}
|
|
|
|
struct Foo7 @nopadding
|
|
{
|
|
int a;
|
|
struct nested
|
|
{
|
|
bool b;
|
|
int c; // #error: 3 bytes of padding would be added
|
|
}
|
|
}
|
|
|
|
struct Foo7_A @nopadding
|
|
{
|
|
int a;
|
|
struct
|
|
{
|
|
bool b;
|
|
union // #error: 7 bytes of padding would be added
|
|
{
|
|
int c;
|
|
long d;
|
|
}
|
|
}
|
|
}
|
|
|
|
struct Foo7_B @nopadding
|
|
{
|
|
int a;
|
|
char[4] _pad;
|
|
struct
|
|
{
|
|
long b;
|
|
union
|
|
{
|
|
int c;
|
|
long d;
|
|
struct // #error: 3 bytes of padding would be added
|
|
{
|
|
int e;
|
|
bool f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct Foo7_C @nopadding
|
|
{
|
|
int a;
|
|
char[4] _pad;
|
|
struct
|
|
{
|
|
int b @align(8);
|
|
union // #error: 4 bytes of padding would be added
|
|
{
|
|
int c;
|
|
long d;
|
|
struct
|
|
{
|
|
bool f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct Foo10 @nopadding
|
|
{
|
|
inline Foo2 a;
|
|
}
|
|
|
|
struct Foo11 @nopadding
|
|
{
|
|
inline Foo1 a; // #error: An inlined struct or union type also requires the `@nopadding` attribute
|
|
}
|
|
|
|
struct Foo11_A @nopadding
|
|
{
|
|
inline Foo1_Union a; // #error: An inlined struct or union type also requires the `@nopadding` attribute
|
|
}
|
|
|
|
union Foo12 @nopadding
|
|
{
|
|
int b;
|
|
bool a;
|
|
long c;
|
|
struct
|
|
{
|
|
bool d;
|
|
int e; // #error: 3 bytes of padding would be added
|
|
}
|
|
}
|
|
|
|
union Foo12_A @nopadding
|
|
{
|
|
int b;
|
|
bool a;
|
|
long c;
|
|
}
|
|
|
|
struct Foo13 @nopadding
|
|
{
|
|
inline Foo12_A a;
|
|
short b @align(32); // #error: 24 bytes of padding would be added
|
|
}
|
|
|
|
struct Foo14 @compact // #error: 2 bytes of padding would be added to the end
|
|
{
|
|
Foo10 a @align(4);
|
|
char[1] _pad;
|
|
short b;
|
|
}
|
|
|
|
struct Foo1_Compact
|
|
{
|
|
bool a @compact; // #error: '@compact' is not a valid member attribute
|
|
int b;
|
|
int c @compact;
|
|
}
|
|
|
|
struct Foo2_Compact @compact
|
|
{
|
|
bool a;
|
|
bool b;
|
|
bool c;
|
|
}
|
|
|
|
struct Foo4_Compact @compact
|
|
{
|
|
bool a;
|
|
int b; // #error: 3 bytes of padding would be added
|
|
int c;
|
|
}
|
|
|
|
struct Foo5_Compact @compact // #error: 3 bytes of padding would be added
|
|
{
|
|
int a;
|
|
bool b;
|
|
}
|
|
|
|
struct Foo6_Compact @compact
|
|
{
|
|
int a;
|
|
struct nested // #error: 3 bytes of padding would be added
|
|
{
|
|
int a;
|
|
bool b;
|
|
}
|
|
}
|
|
|
|
struct Foo7_Compact @compact
|
|
{
|
|
int a;
|
|
struct nested
|
|
{
|
|
bool b;
|
|
int a; // #error: 3 bytes of padding would be added
|
|
}
|
|
}
|
|
|
|
struct Foo8 @compact
|
|
{
|
|
Foo8_A a; // #error: 'Foo8_A' has padding
|
|
}
|
|
|
|
struct Foo8_A
|
|
{
|
|
long a;
|
|
Foo8_B b;
|
|
}
|
|
|
|
struct Foo8_B
|
|
{
|
|
int a;
|
|
char[4] _pad;
|
|
struct
|
|
{
|
|
long b;
|
|
union
|
|
{
|
|
int c;
|
|
long d;
|
|
struct
|
|
{
|
|
int e;
|
|
Foo8_C f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct Foo8_C
|
|
{
|
|
bool a;
|
|
int b;
|
|
}
|
|
|
|
struct Foo9 @compact
|
|
{
|
|
Foo10 a;
|
|
char[13] _pad;
|
|
Foo9_A b; // #error: 'Foo9_A' has padding
|
|
}
|
|
|
|
struct Foo9_A @align(16)
|
|
{
|
|
int a;
|
|
int b;
|
|
}
|