Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. TODO list:
  2.  
  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
  8.  
  9. - constructors
  10. - cast bug (Peter Wang)
  11. - define incomplete type if defined several times (Peter Wang).
  12. - test binutils/gcc compile
  13. - tci patch + argument.
  14. - see -lxxx bug (Michael Charity).
  15. - see transparent union pb in /urs/include/sys/socket.h
  16. - precise behaviour of typeof with arrays ? (__put_user macro)
  17.   but should suffice for most cases)
  18. - handle '? x, y : z' in unsized variable initialization (',' is
  19.   considered incorrectly as separator in preparser)
  20. - transform functions to function pointers in function parameters
  21.   (net/ipv4/ip_output.c)
  22. - fix function pointer type display
  23. - check lcc test suite -> fix bitfield binary operations
  24. - check section alignment in C
  25. - fix invalid cast in comparison 'if (v == (int8_t)v)'
  26. - finish varargs.h support (gcc 3.2 testsuite issue)
  27. - fix static functions declared inside block
  28. - fix multiple unions init
  29. - sizeof, alignof, typeof can still generate code in some cases.
  30. - Fix the remaining libtcc memory leaks.
  31. - make libtcc fully reentrant (except for the compilation stage itself).
  32. - struct/union/enum definitions in nested scopes (see also Debian bug #770657)
  33. - __STDC_IEC_559__: float f(void) { static float x = 0.0 / 0.0; return x; }
  34. - preprocessor: #define Y(x) Z(x) {newline} #define X Y {newline} X(X(1))
  35.  
  36. Portability:
  37.  
  38. - it is assumed that int is 32-bit and sizeof(int) == 4
  39. - int is used when host or target size_t would make more sense
  40. - TCC handles target floating-point (fp) values using the host's fp
  41.   arithmetic, which is simple and fast but may lead to exceptions
  42.   and inaccuracy and wrong representations when cross-compiling
  43.  
  44. Linking:
  45.  
  46. - static linking does not work
  47. - with "-run" and libtcc, no PLT is used, so branches may be out of
  48.   range and relocations may fail; as a result libtest fails on arm64; see:
  49.   https://lists.gnu.org/archive/html/tinycc-devel/2015-03/msg00111.html
  50.  
  51. Bound checking:
  52.  
  53. - '-b' bug.
  54. - fix bound exit on RedHat 7.3
  55. - setjmp is not supported properly in bound checking.
  56. - fix bound check code with '&' on local variables (currently done
  57.   only for local arrays).
  58. - bound checking and float/long long/struct copy code. bound
  59.   checking and symbol + offset optimization
  60.  
  61. Missing features:
  62.  
  63. - disable-asm and disable-bcheck options
  64. - __builtin_expect()
  65. - improve '-E' option.
  66. - atexit (Nigel Horne)
  67. - packed attribute
  68. - C99: add complex types (gcc 3.2 testsuite issue)
  69. - postfix compound literals (see 20010124-1.c)
  70.  
  71. Optimizations:
  72.  
  73. - suppress specific anonymous symbol handling
  74. - more parse optimizations (=even faster compilation)
  75. - memory alloc optimizations (=even faster compilation)
  76. - optimize VT_LOCAL + const
  77. - better local variables handling (needed for other targets)
  78.  
  79. Not critical:
  80.  
  81. - C99: fix multiple compound literals inits in blocks (ISOC99
  82.   normative example - only relevant when using gotos! -> must add
  83.   boolean variable to tell if compound literal was already
  84.   initialized).
  85. - add PowerPC or ARM code generator and improve codegen for RISC (need
  86.   to suppress VT_LOCAL and use a base register instead).
  87. - interactive mode / integrated debugger
  88. - fix preprocessor symbol redefinition
  89. - add portable byte code generator and interpreter for other
  90.   unsupported architectures.
  91. - C++: variable declaration in for, minimal 'class' support.
  92. - win32: __intxx. use resolve for bchecked malloc et al.
  93.   check exception code (exception filter func).
  94. - handle void (__attribute__() *ptr)()
  95. - VLAs are implemented in a way that is not compatible with signals:
  96.   http://lists.gnu.org/archive/html/tinycc-devel/2015-11/msg00018.html
  97. - output with -E should include spaces: #define n 0xe {newline} n+1
  98.  
  99. Fixed (probably):
  100.  
  101. - bug with defines:
  102.     #define spin_lock(lock) do { } while (0)
  103.     #define wq_spin_lock spin_lock
  104.     #define TEST() wq_spin_lock(a)
  105. - typedefs can be structure fields
  106. - see bugfixes.diff + improvement.diff from Daniel Glockner
  107. - long long constant evaluation
  108. - add alloca()
  109. - gcc '-E' option.
  110. - #include_next support for /usr/include/limits ?
  111. - function pointers/lvalues in ? : (linux kernel net/core/dev.c)
  112. - win32: add __stdcall, check GetModuleHandle for dlls.
  113.