aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
Commit message (Collapse)AuthorAgeFilesLines
* 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
|
* c: handle more static eval edgecases for int -> ptrlemon2025-12-131-0/+9
| | | | | sqlite3 was falling back to `((void*)&((char*)0)[X])` for INT_TO_PTR, which this handles now.
* Add -O optimization flaglemon2025-12-131-0/+1
|
* fix position independent loads of function symbols.lemon2025-12-133-10/+30
| | | | | | | | For `extern int x[1];`, can use PCREL32 for &x. But for `extern int x(int)`, must use GOTREL, when not being called directly (that's PLT). Therefore the type of an external symbol (actually just whether it denotes a function) matters when deciding what kind of relocation to emit, so keep that information.
* test/14lemon2025-12-131-0/+12
|
* c: accept C99 `[static N]` style array decls, changes to fn qualslemon2025-12-111-0/+5
| | | | | | Function parameters qualifiers don't matter outside of function definition. `int (const int)` should be compatible with `int(int)` etc. So no need to store them in the typedata.
* _Alignof and stufflemon2025-12-111-0/+22
|
* update lua/.gitignorelemon2025-12-101-0/+2
|
* c: fix compound assignment type conversions when types don't matchlemon2025-12-102-0/+0
|
* Add lua 5.4.0 test suitelemon2025-12-07120-1/+59828
|
* test/12-flt: add some weird float cmp edgecaseslemon2025-12-071-2/+9
|
* add command-line predefined macros (-D, -U)lemon2025-12-062-3/+6
|
* test 12-fltlemon2025-12-053-4/+36
|
* test/11-abilemon2025-12-021-0/+37
|
* ir: implement cvtu64f. and other bug fixeslemon2025-11-231-2/+2
| | | | | compiler is bootstrapping?! however, stage1 and stage2+ executables aren't bit-identical.. small differences in the codegen.. need to look into that
* implement cvtfXu64 by lowering it in builderlemon2025-11-231-2/+2
| | | | this should probably be in a separate pass?
* c: __builtin_va_copylemon2025-11-231-0/+17
|
* implement float varargs, and some other fixeslemon2025-11-231-0/+22
|
* tests: add Nora Sandler's 'Write a C Compiler' test suitelemon2025-11-222-0/+4
|