aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
Commit message (Collapse)AuthorAgeFilesLines
* 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
|
* 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
|