summaryrefslogtreecommitdiff
path: root/bcc/bcc.bugs
diff options
context:
space:
mode:
Diffstat (limited to 'bcc/bcc.bugs')
-rw-r--r--bcc/bcc.bugs169
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