mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-27 14:58:30 +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
181
third_party/chibicc/test/constexpr_test.c
vendored
Normal file
181
third_party/chibicc/test/constexpr_test.c
vendored
Normal file
|
@ -0,0 +1,181 @@
|
|||
#include "third_party/chibicc/test/test.h"
|
||||
|
||||
float g40 = 1.5;
|
||||
double g41 = 0.0 ? 55 : (0, 1 + 1 * 5.0 / 2 * (double)2 * (int)2.0);
|
||||
|
||||
int main() {
|
||||
ASSERT(10, ({
|
||||
enum { ten = 1 + 2 + 3 + 4 };
|
||||
ten;
|
||||
}));
|
||||
ASSERT(1, ({
|
||||
int i = 0;
|
||||
switch (3) {
|
||||
case 5 - 2 + 0 * 3:
|
||||
i++;
|
||||
}
|
||||
i;
|
||||
}));
|
||||
ASSERT(8, ({
|
||||
int x[1 + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(6, ({
|
||||
char x[8 - 2];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(6, ({
|
||||
char x[2 * 3];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(3, ({
|
||||
char x[12 / 4];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(2, ({
|
||||
char x[12 % 10];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(0b100, ({
|
||||
char x[0b110 & 0b101];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(0b111, ({
|
||||
char x[0b110 | 0b101];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(0b110, ({
|
||||
char x[0b111 ^ 0b001];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(4, ({
|
||||
char x[1 << 2];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(2, ({
|
||||
char x[4 >> 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(2, ({
|
||||
char x[(1 == 1) + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(1, ({
|
||||
char x[(1 != 1) + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(1, ({
|
||||
char x[(1 < 1) + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(2, ({
|
||||
char x[(1 <= 1) + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(2, ({
|
||||
char x[1 ? 2 : 3];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(3, ({
|
||||
char x[0 ? 2 : 3];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(3, ({
|
||||
char x[(1, 3)];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(2, ({
|
||||
char x[!0 + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(1, ({
|
||||
char x[!1 + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(2, ({
|
||||
char x[~-3];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(2, ({
|
||||
char x[(5 || 6) + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(1, ({
|
||||
char x[(0 || 0) + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(2, ({
|
||||
char x[(1 && 1) + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(1, ({
|
||||
char x[(1 && 0) + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(3, ({
|
||||
char x[(int)3];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(15, ({
|
||||
char x[(char)0xffffff0f];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(0x10f, ({
|
||||
char x[(short)0xffff010f];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(4, ({
|
||||
char x[(int)0xfffffffffff + 5];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(8, ({
|
||||
char x[(int*)0 + 2];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(12, ({
|
||||
char x[(int*)16 - 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(3, ({
|
||||
char x[(int*)16 - (int*)4];
|
||||
sizeof(x);
|
||||
}));
|
||||
|
||||
ASSERT(4, ({
|
||||
char x[(-1 >> 31) + 5];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(255, ({
|
||||
char x[(unsigned char)0xffffffff];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(0x800f, ({
|
||||
char x[(unsigned short)0xffff800f];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(1, ({
|
||||
char x[(unsigned int)0xfffffffffff >> 31];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(1, ({
|
||||
char x[(long)-1 / ((long)1 << 62) + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(4, ({
|
||||
char x[(unsigned long)-1 / ((long)1 << 62) + 1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(1, ({
|
||||
char x[(unsigned)1 < -1];
|
||||
sizeof(x);
|
||||
}));
|
||||
ASSERT(1, ({
|
||||
char x[(unsigned)1 <= -1];
|
||||
sizeof(x);
|
||||
}));
|
||||
|
||||
ASSERT(1, g40 == 1.5);
|
||||
ASSERT(1, g41 == 11);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue