aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* embed <limits.h> attempt #2HEADtrunklemon6 days2-9/+39
|
* C11 max_align_tlemon6 days1-0/+3
|
* trestlemon6 days1-0/+34
|
* revert 94aefdc760b1a7f77f (limits.h)lemon6 days1-34/+0
| | | | | POSIX applications rely on it defining POSIX-specific constants, so this can't work.. Hmm.
* 0.2.7lemon7 days1-2/+2
|
* typolemon11 days1-1/+1
|
* frontend: embed <limits.h>, fix asm nameslemon11 days3-14/+49
|
* frontend: __attribute aliaslemon12 days1-1/+1
|
* driver: tweak cmdline options handlinglemon12 days1-10/+16
|
* backend: don't emit extern inline funcslemon12 days1-2/+3
|
* driver: cleanup, accept -std=gnu...; reject -fltolemon12 days1-15/+41
|
* c: match field access expr for 8ade2d5e36cflemon12 days1-1/+1
|
* c: remove unused functionlemon12 days1-12/+0
|
* c: error for statement expression outside functionlemon12 days1-4/+15
|
* c: eval2xintcon check intnesslemon12 days1-8/+9
|
* type: make struct field offset an intlemon13 days1-1/+1
| | | | | Yes, I've ran into code with structures with fields past the 16 bit range.
* driver: allow space after -l, -Llemon13 days1-6/+16
|
* eval/tryreadconst: fix for local declslemon13 days1-0/+1
|
* driver: -z optionlemon13 days1-1/+15
|
* frontend: GNU statement expressionslemon13 days2-33/+58
|
* c.c static eval2extlemon13 days1-1/+1
|
* frontend: allow folding some non constant expressions as a GNU extensionlemon13 days4-20/+75
| | | | And also permit zero size objects
* c: fix some more static initializer edge caseslemon13 days1-7/+13
|
* c: allow compile time eval of left-shifting negative valuelemon13 days1-1/+1
|
* c: fix complex assignmentlemon13 days1-3/+1
|
* c: for undeclared function calls, put implicit decl in toplevellemon13 days1-0/+5
| | | | To avoid repeated warnings
* c: fix some compatible type declarationslemon13 days3-18/+75
| | | | | | | | | | | 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: increment conditionals nesting limitlemon14 days1-1/+1
|
* support extern inline "definitions"lemon14 days3-8/+12
|
* cpp: #include_nextlemon14 days2-29/+46
|
* c: fix using array as condition valuelemon2026-04-171-2/+2
| | | | Decays to pointer
* x86-64 backend: fix some edgecases not emitting GOT relocationslemon2026-04-151-5/+13
| | | | | Logic for this was duplicated. Updated in c4d9087746 but only in one of the places, so broke on some PIC code.
* 0.2.6lemon2026-04-141-2/+2
|
* revert cbf1018b21e and actual fixlemon2026-04-141-3/+10
| | | | | Actually that check was OK. The issue was in isnullpo(), not detecting the folded `(void*)0`
* c: allow nested aggregate with flexible array memberlemon2026-04-141-2/+4
|
* c: fix type of `<unsigned> /= <float>`lemon2026-04-141-2/+5
| | | | | | Would wrongly generate `udiv` and fail later in the backend. Should add a IR sanity checks pass to catch e.g. unsigned operations being used with floating point classes.
* backend: allow zero-size stack allocationslemon2026-04-141-1/+1
| | | | Hm.
* c: make type of conditional expr with pointers match non void pointerlemon2026-04-141-1/+1
| | | | | | | | | | | | | | | | Here's what the C standard[1] says about the conditional operator: ``` if one operand is a null pointer constant, the result has the type of the other operand; otherwise, one operand is a pointer to void or a qualified version of void, in which case the result type is a pointer to an appropriately qualified version of void. `` But actually, some codebases rely on things like 'x ? &foo.memb : NULL' to have the type of `&foo.memb`, and not `void *`... [1]: ISO/IEC 9899:TC3 ยง6.5.15
* cpp: concat 123 ## .lemon2026-04-142-4/+19
|
* c: implement explicit cast complex -> scalarlemon2026-04-131-3/+7
|
* c: match class, not typetag, for libgcc stubslemon2026-04-131-1/+1
|
* C99 complex types MVPlemon2026-04-1311-68/+436
| | | | | | | | | 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
* ir: remove unused field MCTarg.bprlemon2026-04-133-4/+1
|
* frontend: accept zero size arrays and empty aggregateslemon2026-04-133-31/+39
| | | | | | GNU extension. Previously was overloading arraylength==0 to mean unsized array, now they are distinct with the type flag TFUNKNOWN marking unsized arrays & aggregates.
* get rid of other warningslemon2026-04-122-5/+4
|
* ir_simpl: remove unused variablelemon2026-04-121-3/+2
|
* aarch64: align leaf func stacks toolemon2026-04-121-2/+2
|
* aarch64: fix stack frame layout, againlemon2026-04-122-35/+37
| | | | | Turns out hardware enforces SP 16-bit alignment in every SP relative load/store, but QEMU doesn't emulate this.
* frontend: always narrow assignment expression used as valuelemon2026-04-111-2/+2
|
* 0.2.5lemon2026-04-111-2/+2
|