diff options
Diffstat (limited to 'bcc/bcc.bugs')
-rw-r--r-- | bcc/bcc.bugs | 169 |
1 files changed, 0 insertions, 169 deletions
diff --git a/bcc/bcc.bugs b/bcc/bcc.bugs deleted file mode 100644 index 52f6958..0000000 --- a/bcc/bcc.bugs +++ /dev/null @@ -1,169 +0,0 @@ -compiler limitations --------------------- - -These are not implemented: - -a. bit fields - kludgily implemented (everything padded to char, int or long; can store - values wider than the specified field width) - -g. signed char type, other ANSI extensions - -compiler bugs -------------- - -6. weird but doable casts are not always done for initializers - -15. calls to a (casted) absolute address produce an immediate prefix. as386 - doesn't mind this but complains about the absolute address. as09 complains - about the prefix but can handle the absolute address - -23. char *f(); &f() is accepted as f() but produces botched nodetype - (calc char **). - -31. null byte in string initialiser should be ignored if it doesn't fit - Non-null bytes which don't fit should be ignored with a warning - -32. static char c = "xyz"; is allowed, and bad FCB is generated - -37. init of union will store multiple comma-separated entries - -38. arrays sizes larger than the amount of memory are accepted - -40. structure and union definitions are confused with each other. So - struct foo may be used in a declaration like "union foo bar;" - -42. pointer arithmetic is performed on pointers to undefined structures - (of unknown size). Size is taken as 0 although alignmask is set early - -59. preprocessor stuff (# lines or macro names) between the identifier for - a label and the colon for the label messes up the label - -60. some things involving switches are now broken for 6809 due to lack of - frame pointer - -61. assembler may get lost on lines of length exactly (?) 256 - -65. expressions in emum lists or not properly checked for overflow. They - should fit in ints. The ordinal number is allowed to overflow - -66. sizeof has type int instead of size_t - -68. "return expr;" in a function returning a void is reported as a compiler - bug not as a semantic error - -69. an argument declared as float is (correctly) promoted to double, but - not demoted to float when it is used - -71. identifiers longer than 64 are botched (scanning of the identifier is - stopped but the remaining characters in the identifier are left to - mess up the input stream - -72. check for too many macro parameters is not working - -74. union { char a, b; } foo; gives the wrong offset for b. Unions work OK - if the declaration lists have length 1 - -75. stack gets cleaned up too early in bee = foo ? bar : baz() where baz() - returns a struct although there is kludge to make plain bee = baz() work - -76. have reintroduced reduced-type bugs, so sizeof(1 ? 1 : 2) is 1 - -78. fix to require comma in arg list may be half-baked - -79. compiler starts trying to load the void expression (i ? (void)0 : (void)0) - -80. (unsigned char *) - (char *) causes error and message is obscure - -81. 'defined' is a reserved word - -82. conditionals with voids don't work - -83. float = 1e100 gets overflow exception - -84. #endif seems to be seen in -#if 1 -foo #endif bar - -85. line numbers from cpp are not quite right. - -bugs that may be fixed ----------------------- - -41. typedef's are not scoped properly - -nonstandard things that are not done quite right ------------------------------------------------- - -3. arguments declared as register are not being dumped by #asm, register - vars anyway not being passed to #asm - -26. should clear label ptrs when starting #asm - -things that have to be be done better -------------------------------------- - -11. push order reversed in genloads.c (temp) - might try to get DP order right - -12. need to clean up handling of sc specs (maybe rename flags to sc) - And local statics and externs - -24. gvarsc is not returned properly for struct/union since the members - affect gvarsc (incorrectly). There should be a flag set when - inside a struct/union definition to disable sc specs. This could - replace the tests in abdeclarator and declselt - Best may be to carry the sc along with the type a bit more (in a - global symbol structure). Also, the symbol should record sc in a better - way than now - -25. need to check stack sometimes. Xenix cc does it when allocating >= 100 - bytes locals and this is essential in Xenix as the stack is grown - dynamically - -68. overflow checking for constants - -things that could be done better --------------------------------- - -4. install new 6809 code for branch patching (after redundancy checks) - -5. can improve code for compare with global adr in non-posindependent case - -6. char *s; long *pl; - code for *s += *pl is poor, for *s += (int) *pl is good - -7. most mov's from to ax would be faster and smaller done by xchg's - -7a. check ptr add/sub operations earlier - -8. tests for against 1 and -1 can sometimes be done with dec's and inc's - -9. __opreg is used unnec when the ptr is already in it - -9a. double indirect ptrs should maybe be made direct rather than singly - indirect by makelessindirect - -10. in cmpsmallconst(), the comparison constant should be incorporated in - the offset if the indcount is 0 and lea() called. It is harmless to - use the lea() trick for non-small constants - -20. when saved registers are popped in assign() they may overwrite the - expression value, anywhere else? May be fixed now - -27. better if loadexpression returned the register used - -28. better if source.c did not #include storage.h - it only references - DEFINITION, in some blank-skipping code which could be moved to - scan.c or preproc.c. preproc.c, scan.c and type.c also #include - storage.h, just to get at the DEFINITION and KEYWORD definitions - -29. need nodetype() to know about all optimisations in advance, including - int % small power of 2 (including 0, 1). Need to delete all type - assignments in final code gen, specially the one that convert short - to int - -30. overflow checking at runtime - -31. Use more than the first char from multiple character constants - -56. --i++ is not detected as an error in the parser |