mirror of https://github.com/rui314/chibicc
50 lines
1.5 KiB
C
50 lines
1.5 KiB
C
#include "test.h"
|
|
|
|
int _Alignas(512) g1;
|
|
int _Alignas(512) g2;
|
|
char g3;
|
|
int g4;
|
|
long g5;
|
|
char g6;
|
|
|
|
int main() {
|
|
ASSERT(1, _Alignof(char));
|
|
ASSERT(2, _Alignof(short));
|
|
ASSERT(4, _Alignof(int));
|
|
ASSERT(8, _Alignof(long));
|
|
ASSERT(8, _Alignof(long long));
|
|
ASSERT(1, _Alignof(char[3]));
|
|
ASSERT(4, _Alignof(int[3]));
|
|
ASSERT(1, _Alignof(struct {char a; char b;}[2]));
|
|
ASSERT(8, _Alignof(struct {char a; long b;}[2]));
|
|
|
|
ASSERT(1, ({ _Alignas(char) char x, y; &y-&x; }));
|
|
ASSERT(8, ({ _Alignas(long) char x, y; &y-&x; }));
|
|
ASSERT(32, ({ _Alignas(32) char x, y; &y-&x; }));
|
|
ASSERT(32, ({ _Alignas(32) int *x, *y; ((char *)&y)-((char *)&x); }));
|
|
ASSERT(16, ({ struct { _Alignas(16) char x, y; } a; &a.y-&a.x; }));
|
|
ASSERT(8, ({ struct T { _Alignas(8) char a; }; _Alignof(struct T); }));
|
|
|
|
ASSERT(0, (long)(char *)&g1 % 512);
|
|
ASSERT(0, (long)(char *)&g2 % 512);
|
|
ASSERT(0, (long)(char *)&g4 % 4);
|
|
ASSERT(0, (long)(char *)&g5 % 8);
|
|
|
|
ASSERT(1, ({ char x; _Alignof(x); }));
|
|
ASSERT(4, ({ int x; _Alignof(x); }));
|
|
ASSERT(1, ({ char x; _Alignof x; }));
|
|
ASSERT(4, ({ int x; _Alignof x; }));
|
|
|
|
ASSERT(1, _Alignof(char) << 31 >> 31);
|
|
ASSERT(1, _Alignof(char) << 63 >> 63);
|
|
ASSERT(1, ({ char x; _Alignof(x) << 63 >> 63; }));
|
|
|
|
ASSERT(0, ({ char x[16]; (unsigned long)&x % 16; }));
|
|
ASSERT(0, ({ char x[17]; (unsigned long)&x % 16; }));
|
|
ASSERT(0, ({ char x[100]; (unsigned long)&x % 16; }));
|
|
ASSERT(0, ({ char x[101]; (unsigned long)&x % 16; }));
|
|
|
|
printf("OK\n");
|
|
return 0;
|
|
}
|