| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | frontend: allow folding some non constant expressions as a GNU extension | 13 days | 1 | -0/+7 | |
| | | | | | And also permit zero size objects | ||||
| * | c: fix some more static initializer edge cases | 13 days | 1 | -0/+6 | |
| | | |||||
| * | c: fix some compatible type declarations | 13 days | 1 | -0/+13 | |
| | | | | | | | | | | | | When K&R prototypes are present, definition of compatible types and composite types becomes recursive. For example `int f(int (*)())` should be compatible with `int f(int (*)(int))` etc | ||||
| * | cpp: concat 123 ## . | 2026-04-14 | 1 | -2/+2 | |
| | | |||||
| * | C99 complex types MVP | 2026-04-13 | 1 | -0/+88 | |
| | | | | | | | | | | Missing: static eval of complex values, Silly inefficient implementation of equality comparisons between them The whole thing is pretty inefficient without proper aggregate mem2reg anyway | ||||
| * | frontend: accept zero size arrays and empty aggregates | 2026-04-13 | 1 | -0/+28 | |
| | | | | | | | GNU extension. Previously was overloading arraylength==0 to mean unsized array, now they are distinct with the type flag TFUNKNOWN marking unsized arrays & aggregates. | ||||
| * | test/csmith.sh: remove hardcoded memory limit | 2026-04-12 | 1 | -1/+1 | |
| | | | | | This was a temporary workaround before d40371b615 | ||||
| * | test/csmith.sh: add --no-packed-struct | 2026-04-11 | 1 | -1/+1 | |
| | | | | | We don't support #pragma pack yet | ||||
| * | testing: script for csmith fuzz testing | 2026-04-11 | 1 | -0/+90 | |
| | | |||||
| * | backend: run mem2reg after inlining | 2026-04-11 | 1 | -1/+1 | |
| | | |||||
| * | x86-64: redzone optimization for leaf functions | 2026-03-27 | 1 | -2/+2 | |
| | | | | | Don't use frame pointer or explicitly modify stack pointer for these | ||||
| * | cpp: support directives within macro argument list | 2026-03-24 | 1 | -0/+11 | |
| | | | | | Undefined behavior by the standard but a GNU extension. | ||||
| * | 4f2fb9ba5f fix | 2026-03-23 | 1 | -1/+2 | |
| | | |||||
| * | <iso646.h>, test for libc headers | 2026-03-23 | 1 | -0/+48 | |
| | | |||||
| * | tests: don't rely on unportable %p output | 2026-03-23 | 2 | -7/+11 | |
| | | |||||
| * | aarch64: rem/urem, bswap*, arg bugfix | 2026-03-22 | 1 | -1/+1 | |
| | | |||||
| * | mem2reg: fix rare edge case with weird control flow | 2026-03-22 | 1 | -0/+24 | |
| | | | | | | | | | | mem2reg was assuming alloca's appeared before all their uses. When this didn't happen it broke the logic re. sealed blocks. Normally this doesn't happen in most natural code. Even with gotos, RPO would assure this in most cases, the exception I found is a goto that jumps into a loop past a variable declaration that is earlier in the loop. Then even RPO would keep the alloca itself past the first uses, breaking things. | ||||
| * | test/lua -> change Makefile to PLAT=posix | 2026-03-21 | 2 | -2/+2 | |
| | | |||||
| * | c: fix qualifiers for array declarators | 2026-03-19 | 1 | -0/+6 | |
| | | | | | | | `const int x[]` was being treated as `const int x[const]`, which is wrong, and matters when `x` is a function parameter that really decays to a pointer (`int const *const x`) | ||||
| * | Shell script changes for portability | 2026-03-19 | 2 | -9/+9 | |
| | | |||||
| * | test: add test for __func__ | 2026-03-19 | 1 | -0/+2 | |
| | | |||||
| * | c: fix edge cases with zero sized bitfields and static initializers | 2026-03-18 | 1 | -1/+19 | |
| | | |||||
| * | test/.gitignore | 2026-03-17 | 1 | -0/+1 | |
| | | |||||
| * | c-testsuite.sh | 2026-03-14 | 1 | -2/+4 | |
| | | |||||
| * | c: static eval refactoring | 2026-03-14 | 1 | -0/+14 | |
| | | | | | | Explicit node for static symbol (addresses). Should not break with edge cases like the previous ad-hoc approach. And some other bugfixes | ||||
| * | x86_64/isel: fix edge case with branch on float add result | 2026-03-11 | 1 | -0/+5 | |
| | | | | | | | | | In `if (x + 1)` the implicit `!= 0` can be omitted for integers, because the x86 `add` instruction sets the zero flag accordingly. But for floats it doesn't, so applying that optimization there was wrong. Luckily it was caught by a nullptr dereference later in `emit::Xjcc()` for the (missing) unordered branch target, instead of miscompiling. | ||||
| * | c: relax constexpr constraints, fix alignof | 2026-03-09 | 1 | -0/+13 | |
| | | | | | | | | | | | | | - Allow short-circuiting of constant logical expressions where the unevaluated operand is not a constant expression (`1 || 0/0`) - Allow constant integer expressions that evaluate to zero to be used as null pointer constants (GNU extension). + According to the standard, `int *x = 5*0;` should be rejected. But compilers evaluate `5*0 -> 0` and allow it as if a null pointer literal. | ||||
| * | ir: fix inlining getting stuck on complex recursive call sequences | 2026-03-08 | 1 | -0/+13 | |
| | | | | | | By maintaining a proper stack of inline expansions and refusing to expand callers already present in the stack. | ||||
| * | x86_64/isel: cleanup and fix edge cases | 2026-03-08 | 1 | -0/+19 | |
| | | |||||
| * | c: do not try to eval conditional expression's not taken branch | 2026-03-05 | 1 | -0/+2 | |
| | | |||||
| * | add bswap16/32/64 | 2026-03-02 | 1 | -0/+6 | |
| | | | | | | - frontend: __builtin_bswapX intrinsics - backend: ObswapX instructions | ||||
| * | cpp: fix token spacing edge case when empty macros are involved | 2026-03-01 | 1 | -2/+3 | |
| | | |||||
| * | cpp: fix token spacing (#2) (hopefully) | 2026-03-01 | 1 | -0/+24 | |
| | | |||||
| * | cpp: allow comments between function-like macro name and arguments | 2026-02-26 | 1 | -1/+2 | |
| | | |||||
| * | add metalang99 testsuite (preprocessor stress testing) | 2026-02-23 | 119 | -2/+16971 | |
| | | |||||
| * | cpp: add __COUNTER__ macro | 2026-02-23 | 1 | -0/+10 | |
| | | |||||
| * | add sqlite submodule and test runner | 2026-02-22 | 1 | -0/+12 | |
| | | |||||
| * | c: fix using string literal as conditional expression conditional | 2026-02-22 | 1 | -0/+0 | |
| | | |||||
| * | test: fix c-testsuite.sh to build search index if not present | 2026-02-22 | 1 | -0/+1 | |
| | | |||||
| * | preprocessor: fix an edge case with erroneously recursive macro expansion | 2026-02-22 | 1 | -0/+12 | |
| | | |||||
| * | ir: basic inlining pass implementation | 2026-02-18 | 1 | -0/+22 | |
| | | |||||
| * | cpp: add __VA_OPT__ and comma ## __VA_ARGS__ pasting | 2026-02-06 | 1 | -2/+2 | |
| | | |||||
| * | cpp: fix pasting ident+keyword | 2026-01-09 | 1 | -0/+16 | |
| | | |||||
| * | cpp: fix multiline comment in skipped preprocessor directive | 2026-01-09 | 2 | -2/+3 | |
| | | |||||
| * | rega: fix infinite loop when compiling infinite loop | 2025-12-20 | 1 | -0/+5 | |
| | | |||||
| * | test/run.sh: shellcheck | 2025-12-20 | 1 | -11/+10 | |
| | | |||||
| * | cpp: GNU extension for named variadic arguments | 2025-12-18 | 1 | -0/+4 | |
| | | |||||
| * | test/c-testsuite.sh | 2025-12-15 | 3 | -6/+5 | |
| | | |||||
| * | kill fred | 2025-12-13 | 2 | -2/+1 | |
| | | |||||
| * | add c-testsuite | 2025-12-13 | 912 | -0/+9205 | |
| | | |||||