| @@ -1,63 +1,65 @@ |
| 1 | 1 | TODO list: |
| 2 | 2 | |
| 3 | | −- FPU st(0) is left unclean (incompatible with optimized gcc/msc code) |
| 3 | +Bugs: |
| 4 | + |
| 5 | +- fix macro substitution with nested definitions (ShangHongzhang) |
| 6 | +- FPU st(0) is left unclean (kwisatz haderach). Incompatible with |
| 7 | + optimized gcc/msc code |
| 4 | 8 | |
| 5 | | −- bug with defines: |
| 6 | | − #define spin_lock(lock) do { } while (0) |
| 7 | | − #define wq_spin_lock spin_lock |
| 8 | | − #define TEST() wq_spin_lock(a) |
| 9 | | −- typedefs can be structure fields |
| 10 | | −- see bugfixes.diff + improvement.diff from Daniel Glockner |
| 11 | 9 | - constructors |
| 12 | 10 | - cast bug (Peter Wang) |
| 13 | 11 | - define incomplete type if defined several times (Peter Wang). |
| 14 | | −- long long constant evaluation |
| 15 | 12 | - configure --cc=tcc (still one bug in libtcc1.c) |
| 16 | | −- disable-asm and disable-bcheck options |
| 17 | 13 | - test binutils/gcc compile |
| 18 | | −- add alloca(), __builtin_expect() |
| 19 | | −- gcc '-E' option. |
| 20 | | −- optimize VT_LOCAL + const |
| 21 | 14 | - tci patch + argument. |
| 22 | | −- '-b' bug. |
| 23 | | −- atexit (Nigel Horne) |
| 24 | 15 | - see -lxxx bug (Michael Charity). |
| 25 | 16 | - see transparent union pb in /urs/include/sys/socket.h |
| 26 | 17 | - precise behaviour of typeof with arrays ? (__put_user macro) |
| 27 | | −- #include_next support for /usr/include/limits ? |
| 28 | 18 | but should suffice for most cases) |
| 29 | 19 | - handle '? x, y : z' in unsized variable initialization (',' is |
| 30 | 20 | considered incorrectly as separator in preparser) |
| 31 | | −- function pointers/lvalues in ? : (linux kernel net/core/dev.c) |
| 32 | | −- transform functions to function pointers in function parameters (net/ipv4/ip_output.c) |
| 21 | +- transform functions to function pointers in function parameters |
| 22 | + (net/ipv4/ip_output.c) |
| 33 | 23 | - fix function pointer type display |
| 34 | | −- fix bound exit on RedHat 7.3 |
| 35 | 24 | - check lcc test suite -> fix bitfield binary operations |
| 36 | 25 | - check section alignment in C |
| 37 | 26 | - fix invalid cast in comparison 'if (v == (int8_t)v)' |
| 38 | | −- packed attribute |
| 39 | 27 | - finish varargs.h support (gcc 3.2 testsuite issue) |
| 40 | 28 | - fix static functions declared inside block |
| 41 | | −- C99: add variable size arrays (gcc 3.2 testsuite issue) |
| 42 | | −- C99: add complex types (gcc 3.2 testsuite issue) |
| 43 | | −- postfix compound literals (see 20010124-1.c) |
| 44 | 29 | - fix multiple unions init |
| 30 | +- sizeof, alignof, typeof can still generate code in some cases. |
| 31 | +- Fix the remaining libtcc memory leaks. |
| 32 | +- make libtcc fully reentrant (except for the compilation stage itself). |
| 33 | + |
| 34 | +Bound checking: |
| 35 | + |
| 36 | +- '-b' bug. |
| 37 | +- fix bound exit on RedHat 7.3 |
| 45 | 38 | - setjmp is not supported properly in bound checking. |
| 46 | | −- better local variables handling (needed for other targets) |
| 47 | 39 | - fix bound check code with '&' on local variables (currently done |
| 48 | 40 | only for local arrays). |
| 49 | | −- sizeof, alignof, typeof can still generate code in some cases. |
| 50 | 41 | - bound checking and float/long long/struct copy code. bound |
| 51 | 42 | checking and symbol + offset optimization |
| 52 | | −- Fix the remaining libtcc memory leaks. |
| 53 | | −- make libtcc fully reentrant (except for the compilation stage itself). |
| 54 | | −- '-MD' option |
| 43 | + |
| 44 | +Missing features: |
| 45 | + |
| 46 | +- disable-asm and disable-bcheck options |
| 47 | +- __builtin_expect() |
| 48 | +- improve '-E' option. |
| 49 | +- add '-MD' option |
| 50 | +- atexit (Nigel Horne) |
| 51 | +- packed attribute |
| 52 | +- C99: add variable size arrays (gcc 3.2 testsuite issue) |
| 53 | +- C99: add complex types (gcc 3.2 testsuite issue) |
| 54 | +- postfix compound literals (see 20010124-1.c) |
| 55 | 55 | |
| 56 | 56 | Optimizations: |
| 57 | 57 | |
| 58 | 58 | - suppress specific anonymous symbol handling |
| 59 | 59 | - more parse optimizations (=even faster compilation) |
| 60 | 60 | - memory alloc optimizations (=even faster compilation) |
| 61 | +- optimize VT_LOCAL + const |
| 62 | +- better local variables handling (needed for other targets) |
| 61 | 63 | |
| 62 | 64 | Not critical: |
| 63 | 65 | |
| @@ -73,11 +75,21 @@ Not critical: · 9 unmodified lines |
| 73 | 75 | - add portable byte code generator and interpreter for other |
| 74 | 76 | unsupported architectures. |
| 75 | 77 | - C++: variable declaration in for, minimal 'class' support. |
| 76 | | −- win32: add __stdcall, __intxx. use resolve for bchecked malloc et |
| 77 | | − al. check GetModuleHandle for dlls. check exception code (exception |
| 78 | | − filter func). |
| 78 | +- win32: __intxx. use resolve for bchecked malloc et al. |
| 79 | + check exception code (exception filter func). |
| 79 | 80 | - handle void (__attribute__() *ptr)() |
| 80 | 81 | |
| 82 | +Fixed (probably): |
| 81 | 83 | |
| 82 | | − |
| 83 | | − |
| 84 | +- bug with defines: |
| 85 | + #define spin_lock(lock) do { } while (0) |
| 86 | + #define wq_spin_lock spin_lock |
| 87 | + #define TEST() wq_spin_lock(a) |
| 88 | +- typedefs can be structure fields |
| 89 | +- see bugfixes.diff + improvement.diff from Daniel Glockner |
| 90 | +- long long constant evaluation |
| 91 | +- add alloca() |
| 92 | +- gcc '-E' option. |
| 93 | +- #include_next support for /usr/include/limits ? |
| 94 | +- function pointers/lvalues in ? : (linux kernel net/core/dev.c) |
| 95 | +- win32: add __stdcall, check GetModuleHandle for dlls. |