mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-13 06:29:11 +00:00
Add chibicc
This program popped up on Hacker News recently. It's the only modern compiler I've ever seen that doesn't have dependencies and is easily modified. So I added all of the missing GNU extensions I like to use which means it might be possible soon to build on non-Linux and have third party not vendor gcc binaries.
This commit is contained in:
parent
e44a0cf6f8
commit
8da931a7f6
298 changed files with 19493 additions and 11950 deletions
244
third_party/chibicc/test/variable_test.c
vendored
Normal file
244
third_party/chibicc/test/variable_test.c
vendored
Normal file
|
@ -0,0 +1,244 @@
|
|||
#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;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue