Files
c3c/test/test_suite/struct/struct_nopadding_compact.c3t
2024-07-17 17:00:36 +02:00

273 lines
3.4 KiB
Plaintext

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;
}