TODO 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. TODO list:
  2. Bugs:
  3. - i386 fastcall is mostly wrong
  4. - FPU st(0) is left unclean (kwisatz haderach). Incompatible with
  5. optimized gcc/msc code
  6. - see transparent union pb in /urs/include/sys/socket.h
  7. - precise behaviour of typeof with arrays ? (__put_user macro)
  8. but should suffice for most cases)
  9. - handle '? x, y : z' in unsized variable initialization (',' is
  10. considered incorrectly as separator in preparser)
  11. - transform functions to function pointers in function parameters
  12. (net/ipv4/ip_output.c)
  13. - fix function pointer type display
  14. - check section alignment in C
  15. - fix invalid cast in comparison 'if (v == (int8_t)v)'
  16. - finish varargs.h support (gcc 3.2 testsuite issue)
  17. - fix static functions declared inside block
  18. - fix multiple unions init
  19. - make libtcc fully reentrant (except for the compilation stage itself).
  20. - struct/union/enum definitions in nested scopes (see also Debian bug #770657)
  21. - __STDC_IEC_559__: float f(void) { static float x = 0.0 / 0.0; return x; }
  22. - memory may be leaked after errors (longjmp).
  23. Portability:
  24. - it is assumed that int is 32-bit and sizeof(int) == 4
  25. - int is used when host or target size_t would make more sense
  26. - TCC handles target floating-point (fp) values using the host's fp
  27. arithmetic, which is simple and fast but may lead to exceptions
  28. and inaccuracy and wrong representations when cross-compiling
  29. Linking:
  30. - static linking (-static) does not work
  31. Bound checking:
  32. - fix bound exit on RedHat 7.3
  33. - setjmp is not supported properly in bound checking.
  34. - fix bound check code with '&' on local variables (currently done
  35. only for local arrays).
  36. - bound checking and float/long long/struct copy code. bound
  37. checking and symbol + offset optimization
  38. Missing features:
  39. - disable-asm and disable-bcheck options
  40. - __builtin_expect()
  41. - atexit (Nigel Horne)
  42. - C99: add complex types (gcc 3.2 testsuite issue)
  43. - postfix compound literals (see 20010124-1.c)
  44. - interactive mode / integrated debugger
  45. Optimizations:
  46. - suppress specific anonymous symbol handling
  47. - more parse optimizations (=even faster compilation)
  48. - memory alloc optimizations (=even faster compilation)
  49. - optimize VT_LOCAL + const
  50. - better local variables handling (needed for other targets)
  51. Not critical:
  52. - C99: fix multiple compound literals inits in blocks (ISOC99
  53. normative example - only relevant when using gotos! -> must add
  54. boolean variable to tell if compound literal was already
  55. initialized).
  56. - add PowerPC generator and improve codegen for RISC (need
  57. to suppress VT_LOCAL and use a base register instead).
  58. - fix preprocessor symbol redefinition
  59. - add portable byte code generator and interpreter for other
  60. unsupported architectures.
  61. - C++: variable declaration in for, minimal 'class' support.
  62. - win32: __intxx. use resolve for bchecked malloc et al.
  63. check exception code (exception filter func).
  64. - handle void (__attribute__() *ptr)()
  65. - VLAs are implemented in a way that is not compatible with signals:
  66. http://lists.gnu.org/archive/html/tinycc-devel/2015-11/msg00018.html
  67. Fixed (probably):
  68. - bug with defines:
  69. #define spin_lock(lock) do { } while (0)
  70. #define wq_spin_lock spin_lock
  71. #define TEST() wq_spin_lock(a)
  72. - typedefs can be structure fields
  73. - see bugfixes.diff + improvement.diff from Daniel Glockner
  74. - long long constant evaluation
  75. - add alloca()
  76. - gcc '-E' option.
  77. - #include_next support for /usr/include/limits ?
  78. - function pointers/lvalues in ? : (linux kernel net/core/dev.c)
  79. - win32: add __stdcall, check GetModuleHandle for dlls.
  80. - macro substitution with nested definitions (ShangHongzhang)
  81. - with "-run" and libtcc, a PLT is now built.
  82. - '-E' option was improved
  83. - packed attribute is now supported
  84. - ARM and ARM64 code generators have been added.