cosmopolitan/third_party/chibicc/test/variable_test.c

245 lines
4.1 KiB
C

#include "third_party/chibicc/test/test.h"
int g1, g2[4];
static int g3 = 3;
int main() {
ASSERT(3, ({
int a;
a = 3;
a;
}));
ASSERT(3, ({
int a = 3;
a;
}));
ASSERT(8, ({
int a = 3;
int z = 5;
a + z;
}));
ASSERT(3, ({
int a = 3;
a;
}));
ASSERT(8, ({
int a = 3;
int z = 5;
a + z;
}));
ASSERT(6, ({
int a;
int b;
a = b = 3;
a + b;
}));
ASSERT(3, ({
int foo = 3;
foo;
}));
ASSERT(8, ({
int foo123 = 3;
int bar = 5;
foo123 + bar;
}));
ASSERT(4, ({
int x;
sizeof(x);
}));
ASSERT(4, ({
int x;
sizeof x;
}));
ASSERT(8, ({
int *x;
sizeof(x);
}));
ASSERT(16, ({
int x[4];
sizeof(x);
}));
ASSERT(48, ({
int x[3][4];
sizeof(x);
}));
ASSERT(16, ({
int x[3][4];
sizeof(*x);
}));
ASSERT(4, ({
int x[3][4];
sizeof(**x);
}));
ASSERT(5, ({
int x[3][4];
sizeof(**x) + 1;
}));
ASSERT(5, ({
int x[3][4];
sizeof **x + 1;
}));
ASSERT(4, ({
int x[3][4];
sizeof(**x + 1);
}));
ASSERT(4, ({
int x = 1;
sizeof(x = 2);
}));
ASSERT(1, ({
int x = 1;
sizeof(x = 2);
x;
}));
ASSERT(0, g1);
ASSERT(3, ({
g1 = 3;
g1;
}));
ASSERT(0, ({
g2[0] = 0;
g2[1] = 1;
g2[2] = 2;
g2[3] = 3;
g2[0];
}));
ASSERT(1, ({
g2[0] = 0;
g2[1] = 1;
g2[2] = 2;
g2[3] = 3;
g2[1];
}));
ASSERT(2, ({
g2[0] = 0;
g2[1] = 1;
g2[2] = 2;
g2[3] = 3;
g2[2];
}));
ASSERT(3, ({
g2[0] = 0;
g2[1] = 1;
g2[2] = 2;
g2[3] = 3;
g2[3];
}));
ASSERT(4, sizeof(g1));
ASSERT(16, sizeof(g2));
ASSERT(1, ({
char x = 1;
x;
}));
ASSERT(1, ({
char x = 1;
char y = 2;
x;
}));
ASSERT(2, ({
char x = 1;
char y = 2;
y;
}));
ASSERT(1, ({
char x;
sizeof(x);
}));
ASSERT(10, ({
char x[10];
sizeof(x);
}));
ASSERT(2, ({
int x = 2;
{ int x = 3; }
x;
}));
ASSERT(2, ({
int x = 2;
{ int x = 3; }
int y = 4;
x;
}));
ASSERT(3, ({
int x = 2;
{ x = 3; }
x;
}));
ASSERT(7, ({
int x;
int y;
char z;
char *a = &y;
char *b = &z;
b - a;
}));
ASSERT(1, ({
int x;
char y;
int z;
char *a = &y;
char *b = &z;
b - a;
}));
ASSERT(8, ({
long x;
sizeof(x);
}));
ASSERT(2, ({
short x;
sizeof(x);
}));
ASSERT(24, ({
char *x[3];
sizeof(x);
}));
ASSERT(8, ({
char(*x)[3];
sizeof(x);
}));
ASSERT(1, ({
char(x);
sizeof(x);
}));
ASSERT(3, ({
char(x)[3];
sizeof(x);
}));
ASSERT(12, ({
char(x[3])[4];
sizeof(x);
}));
ASSERT(4, ({
char(x[3])[4];
sizeof(x[0]);
}));
ASSERT(3, ({
char *x[3];
char y;
x[0] = &y;
y = 3;
x[0][0];
}));
ASSERT(4, ({
char x[3];
char(*y)[3] = x;
y[0][0] = 4;
y[0][0];
}));
{ void *x; }
ASSERT(3, g3);
return 0;
}