aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
Commit message (Collapse)AuthorAgeFilesLines
* frontend: allow folding some non constant expressions as a GNU extensionlemon13 days1-0/+7
| | | | And also permit zero size objects
* c: fix some more static initializer edge caseslemon13 days1-0/+6
|
* c: fix some compatible type declarationslemon13 days1-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 ## .lemon2026-04-141-2/+2
|
* C99 complex types MVPlemon2026-04-131-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 aggregateslemon2026-04-131-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 limitlemon2026-04-121-1/+1
| | | | This was a temporary workaround before d40371b615
* test/csmith.sh: add --no-packed-structlemon2026-04-111-1/+1
| | | | We don't support #pragma pack yet
* testing: script for csmith fuzz testinglemon2026-04-111-0/+90
|
* backend: run mem2reg after inlininglemon2026-04-111-1/+1
|
* x86-64: redzone optimization for leaf functionslemon2026-03-271-2/+2
| | | | Don't use frame pointer or explicitly modify stack pointer for these
* cpp: support directives within macro argument listlemon2026-03-241-0/+11
| | | | Undefined behavior by the standard but a GNU extension.
* 4f2fb9ba5f fixlemon2026-03-231-1/+2
|
* <iso646.h>, test for libc headerslemon2026-03-231-0/+48
|
* tests: don't rely on unportable %p outputlemon2026-03-232-7/+11
|
* aarch64: rem/urem, bswap*, arg bugfixlemon2026-03-221-1/+1
|
* mem2reg: fix rare edge case with weird control flowlemon2026-03-221-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=posixlemon2026-03-212-2/+2
|
* c: fix qualifiers for array declaratorslemon2026-03-191-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 portabilitylemon2026-03-192-9/+9
|
* test: add test for __func__lemon2026-03-191-0/+2
|
* c: fix edge cases with zero sized bitfields and static initializerslemon2026-03-181-1/+19
|
* test/.gitignorelemon2026-03-171-0/+1
|
* c-testsuite.shlemon2026-03-141-2/+4
|
* c: static eval refactoringlemon2026-03-141-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 resultlemon2026-03-111-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 alignoflemon2026-03-091-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 sequenceslemon2026-03-081-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 caseslemon2026-03-081-0/+19
|
* c: do not try to eval conditional expression's not taken branchlemon2026-03-051-0/+2
|
* add bswap16/32/64lemon2026-03-021-0/+6
| | | | | - frontend: __builtin_bswapX intrinsics - backend: ObswapX instructions
* cpp: fix token spacing edge case when empty macros are involvedlemon2026-03-011-2/+3
|
* cpp: fix token spacing (#2) (hopefully)lemon2026-03-011-0/+24
|
* cpp: allow comments between function-like macro name and argumentslemon2026-02-261-1/+2
|
* add metalang99 testsuite (preprocessor stress testing)lemon2026-02-23119-2/+16971
|
* cpp: add __COUNTER__ macrolemon2026-02-231-0/+10
|
* add sqlite submodule and test runnerlemon2026-02-221-0/+12
|
* c: fix using string literal as conditional expression conditionallemon2026-02-221-0/+0
|
* test: fix c-testsuite.sh to build search index if not presentlemon2026-02-221-0/+1
|
* preprocessor: fix an edge case with erroneously recursive macro expansionlemon2026-02-221-0/+12
|
* ir: basic inlining pass implementationlemon2026-02-181-0/+22
|
* cpp: add __VA_OPT__ and comma ## __VA_ARGS__ pastinglemon2026-02-061-2/+2
|
* cpp: fix pasting ident+keywordlemon2026-01-091-0/+16
|
* cpp: fix multiline comment in skipped preprocessor directivelemon2026-01-092-2/+3
|
* rega: fix infinite loop when compiling infinite looplemon2025-12-201-0/+5
|
* test/run.sh: shellchecklemon2025-12-201-11/+10
|
* cpp: GNU extension for named variadic argumentslemon2025-12-181-0/+4
|
* test/c-testsuite.shlemon2025-12-153-6/+5
|
* kill fredlemon2025-12-132-2/+1
|
* add c-testsuitelemon2025-12-13912-0/+9205
|