aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
Commit message (Collapse)AuthorAgeFilesLines
* cpp: support directives within macro argument list lemon2026-03-241-0/+11
| | | | Undefined behavior by the standard but a GNU extension.
* 4f2fb9ba5f fix lemon2026-03-231-1/+2
|
* <iso646.h>, test for libc headers lemon2026-03-231-0/+48
|
* tests: don't rely on unportable %p output lemon2026-03-232-7/+11
|
* aarch64: rem/urem, bswap*, arg bugfix lemon2026-03-221-1/+1
|
* mem2reg: fix rare edge case with weird control flow lemon2026-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=posix lemon2026-03-212-2/+2
|
* c: fix qualifiers for array declarators lemon2026-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 portability lemon2026-03-192-9/+9
|
* test: add test for __func__ lemon2026-03-191-0/+2
|
* c: fix edge cases with zero sized bitfields and static initializers lemon2026-03-181-1/+19
|
* test/.gitignore lemon2026-03-171-0/+1
|
* c-testsuite.sh lemon2026-03-141-2/+4
|
* c: static eval refactoring lemon2026-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 result lemon2026-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 alignof lemon2026-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 sequences lemon2026-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 cases lemon2026-03-081-0/+19
|
* c: do not try to eval conditional expression's not taken branch lemon2026-03-051-0/+2
|
* add bswap16/32/64 lemon2026-03-021-0/+6
| | | | | - frontend: __builtin_bswapX intrinsics - backend: ObswapX instructions
* cpp: fix token spacing edge case when empty macros are involved lemon2026-03-011-2/+3
|
* cpp: fix token spacing (#2) (hopefully) lemon2026-03-011-0/+24
|
* cpp: allow comments between function-like macro name and arguments lemon2026-02-261-1/+2
|
* add metalang99 testsuite (preprocessor stress testing) lemon2026-02-23119-2/+16971
|
* cpp: add __COUNTER__ macro lemon2026-02-231-0/+10
|
* add sqlite submodule and test runner lemon2026-02-221-0/+12
|
* c: fix using string literal as conditional expression conditional lemon2026-02-221-0/+0
|
* test: fix c-testsuite.sh to build search index if not present lemon2026-02-221-0/+1
|
* preprocessor: fix an edge case with erroneously recursive macro expansion lemon2026-02-221-0/+12
|
* ir: basic inlining pass implementation lemon2026-02-181-0/+22
|
* cpp: add __VA_OPT__ and comma ## __VA_ARGS__ pasting lemon2026-02-061-2/+2
|
* cpp: fix pasting ident+keyword lemon2026-01-091-0/+16
|
* cpp: fix multiline comment in skipped preprocessor directive lemon2026-01-092-2/+3
|
* rega: fix infinite loop when compiling infinite loop lemon2025-12-201-0/+5
|
* test/run.sh: shellcheck lemon2025-12-201-11/+10
|
* cpp: GNU extension for named variadic arguments lemon2025-12-181-0/+4
|
* test/c-testsuite.sh lemon2025-12-153-6/+5
|
* kill fred lemon2025-12-132-2/+1
|
* add c-testsuite lemon2025-12-13912-0/+9205
|
* c: handle more static eval edgecases for int -> ptr lemon2025-12-131-0/+9
| | | | | sqlite3 was falling back to `((void*)&((char*)0)[X])` for INT_TO_PTR, which this handles now.
* Add -O optimization flag lemon2025-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/14 lemon2025-12-131-0/+12
|
* c: accept C99 `[static N]` style array decls, changes to fn quals lemon2025-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 stuff lemon2025-12-111-0/+22
|
* update lua/.gitignore lemon2025-12-101-0/+2
|
* c: fix compound assignment type conversions when types don't match lemon2025-12-102-0/+0
|
* Add lua 5.4.0 test suite lemon2025-12-07120-1/+59828
|
* test/12-flt: add some weird float cmp edgecases lemon2025-12-071-2/+9
|
* add command-line predefined macros (-D, -U) lemon2025-12-062-3/+6
|