+++ /dev/null
-<html><head><title> EiC's Bug Report List</title></head>\r
-<font size="2">\r
-<body bgcolor="white">\r
-<pre>\r
- EiC's Bug list \r
-\r
-Template bug report form\r
-----------------------------------------------\r
-REPORTER:\r
-PLATFORM:\r
-PROBLEM:\r
-EXAMPLE:\r
-POSSIBLE SOLUTION:\r
-TESTPROGRAM:\r
-STATUS: Not Fixed\r
-\r
-----------------------------------------------\r
-REPORTER: Martin Gonda (9/1/96)\r
-PROBLEM:\r
- Possibly fix up pre-processor, so that illegal\r
- statements which start with a hash (#) are caught.\r
-EXAMPLE:\r
- #hello ...would get through without an error\r
-POSSIBLE SOLUTION:\r
-TESTPROGAM:\r
-STATUS: Fixed by Ed Breen\r
-----------------------------------------------\r
-REPORTER: Ed Breen\r
-PROBLEM: \r
- A failure to correctly process:\r
-\r
- EiC > for(i=0;i<3;i++) { int a[5]; }\r
-\r
-EXAMPLE:\r
-\r
- EiC 9> for(i=0;i<3;i++) { int a[5]; }\r
-\r
- 0:checkar 2 0 10:rvalint 5 0 \r
- 1:pushint 20 11:incint 1 \r
- 2:massign 12 1 12:stoint 5 0 \r
- 3:pushint 0 13:decint 1 \r
- 4:stoint 5 0 14:rvalint 5 0 \r
- 5:jmpU 7 15:bump 1 \r
- 6:rvalptr 1 1 16:pushint 3 \r
- 7:stoptr 0 1 17:ltint \r
- 8:fmem 1 1 18:jmpTint 3 \r
- 9:reducear 2 19:halt \r
-\r
-POSSIBLE SOLUTION:\r
-\r
- The free memory instruction and the reducear instruction,\r
-lines 8 and 9, have been inserted too early. The resulting bytecode\r
-sequence should be more like:\r
-\r
- EiC 11> {for(i=0;i<3;i++) { int a[5]; }}\r
-\r
- 0:checkar 2 0 10:stoint 5 0 \r
- 1:pushint 20 11:decint 1 \r
- 2:massign 1 1 12:rvalint 5 0 \r
- 3:pushint 0 13:bump 1 \r
- 4:stoint 5 0 14:pushint 3 \r
- 5:jmpU 12 15:ltint \r
- 6:rvalptr 1 1 16:jmpTint 6 \r
- 7:stoptr 0 1 17:fmem 1 1 \r
- 8:rvalint 5 0 18:reducear 2 \r
- 9:incint 1 19:halt \r
-\r
-The above solution forces an extra scoping level. However, this is not\r
-sensible for every translation unit entered at the command line. But\r
-maybe, EiC could keep track of the level of statement nesting\r
-also. Then it could addinlocals (parser.c) at the end of each zero\r
-level statement, in addition to the current method of when the scoping\r
-level drops back to file scope?\r
-\r
- if(S_LEVEL == 1 && Stmts == 0) \r
- addinlocals(...);\r
-\r
-TESTPROGRAM: see example\r
-STATUS: Fixed, as outlined in possible solution.\r
-----------------------------------------------\r
-REPORTER: Ed Breen\r
-PROBLEM:\r
- Correct the get float/double section in the _Uscanf\r
-EXAMPLE:\r
- for ungetting characters, for example,\r
- fmt string = %f %s \r
- input = 100ergs. \r
- output = 100 rgs\r
- output should be 100 ergs.\r
-POSSIBLE SOLUTION:\r
- Solution requires 2 ungets not just 1.\r
-TESTPROGRAM:\r
- errScanf1.c\r
-STATUS: Fixed by Ed Breen.\r
-----------------------------------------------\r
-REPORTER: Ed Breen\r
-PROBLEM:\r
- Correct the problem with builtin functions\r
- being prototyped when an error occurs. This problem\r
- means that the user will have to restart EiC\r
- to recover properly. \r
-EXAMPLE:\r
-POSSIBLE SOLUTION:\r
- It Has to do with the error recover stategy implemented when\r
- the signals were added to EiC.\r
-TESTPOGRAM: \r
-STATUS: Fixed (hopefully)\r
-----------------------------------------------\r
-REPORTER: Ed Breen\r
-PROBLEM: Does not allow redeclaration of structure specifiers:\r
-EXAMPLE:\r
- struct Dvector { double x, y; };\r
- struct Dvector { double x, y; };\r
-\r
-Error in tptr2.c near line 6: Illegal use of struct/union\r
-Error in tptr2.c near line 8: Expected ; \r
-\r
-POSSIBLE SOLUTION: ?\r
-TESTPROGRAM: see example\r
-STATUS: Fixed by Ed Breen\r
-----------------------------------------------\r
-REPORTER: Ed Breen\r
-PROBLEM: Memory leak caused when redefining an array:\r
-EXAMPLE:\r
- int a[5];\r
- int a[5]; \r
-item 1865 Create line 264 file cdecl.c nbytes 20\r
-\r
-POSSIBLE SOLUTION: look at freetype.\r
-TESTPROGRAM: see example\r
-STATUS: Fixed, added routine freeArray to cdecl.c\r
-----------------------------------------------\r
-REPORTER: Ed Breen\r
-PROBLEM: Memory leak caused by exit();\r
-EXAMPLE:\r
- see file t1.c; this directory\r
- #include t1.c\r
- :memdump\r
- (void)\r
-item 4436 Create line 127 file interpre.c nbytes 1200\r
-item 4435 Create line 41 file typemod.c nbytes 16\r
-\r
-POSSIBLE SOLUTION:\r
-TESTPROGRAM: see example\r
-STATUS: Not Fixed\r
-----------------------------------------------\r
-REPORTER: Ed Breen\r
-PROBLEM: False diagnostic\r
-EXAMPLE:\r
- EiC 5> if (sizeof (char) * 8 == sizeof (double));\r
- Warning: in ::EiC:: near line 5: Non relational operation\r
- 0:pushint 1 \r
- 1:jmpFint 2 \r
- 2:halt \r
-\r
-POSSIBLE SOLUTION: Because sizeof (char) * 8 == sizeof (double) \r
- resolves to a constant and this might be causing the\r
- problem.\r
-TESTPROGRAM: see example\r
-STATUS: Fixed, corrected bug with unsigned \r
- constant binary relational operators not\r
- converting the result to int properly.\r
-----------------------------------------------\r
-REPORTER: Ed Breen\r
-PROBLEM: Parses an incorrect declaration\r
-EXAMPLE:\r
- EiC 1> int (* foo[10])()[];\r
- (void)\r
- EiC 2> :show foo\r
- foo -> ARY[10]* dec_Func (void ) returning ARY[0]int \r
- (void)\r
- ... // Simplification of the problem\r
-\r
- EiC 10> int foo()[];\r
- (void)\r
- EiC 11> :show foo\r
- foo -> dec_Func (void ) returning ARY[0]int \r
- (void)\r
-\r
-\r
-POSSIBLE SOLUTION: Check function declaration\r
- code.\r
-TESTPROGRAM: see example\r
-STATUS: Fixed, added the check_decl function in\r
- the decl.c module. Not an optimal solution,\r
- but it catches both the above errors and\r
- more.\r
-----------------------------------------------\r
-REPORTER: Ed Breen\r
-PROBLEM: False Ambiguous re-declaration\r
-EXAMPLE: \r
-let t.c contain the following two lines \r
-\r
-typedef struct { int a, b; } ab_t;\r
-ab_t * func(void) { ab_t * p; return p; }\r
-\r
- EiC session\r
-\r
-EiC 2> #include t.c\r
- (void)\r
-EiC 3> :rm ab_t\r
- (void)\r
-EiC 4> #include t.c\r
-Error in t.c near line 30: Ambiguous re-declaration of `func'\r
-\r
-POSSIBLE SOLUTION:\r
-\r
- This has something to do with the memory being freed --\r
- I could make it illegal to remove the last\r
- occurrence of a structure. But that would make\r
- it impossible to change an existing structure. Better\r
- still, handle memory aliasing in a more creative\r
- way -- a big job, but probably worth it. \r
-\r
-TESTPROGRAM:\r
- see above.\r
-\r
-STATUS: Fixed by Ed Breen -- it turned out to be\r
-quite simple. \r
-\r
-----------------------------------------------\r
-REPORTER: Ed Breen\r
-PROBLEM: EiC does not cast structures properly using va_args.\r
-EXAMPLE:\r
-\r
-typedef struct { int a, b; } ab_t;\r
-ab_t a = {5,5};\r
-\r
-int p(char *fmt, ...)\r
-{\r
- ab_t x;\r
- va_list ap; \r
- va_start(ap, fmt);\r
- \r
- x = va_arg(ap, ab_t);\r
- va_end(ap);\r
-\r
- return x.a;\r
-}\r
-\r
-// the following call returns garbage!\r
-\r
-p("",a);\r
-\r
-\r
-POSSIBLE SOLUTION:\r
-\r
- The solution is to get the stack code to `drefptr' the pointer\r
-contained at the `ap' stack position, immediately before the `refmem'\r
-instruction. Although, this is easy to do, it upsets other existing\r
-code such as referencing members within an array of structures and\r
-structure assignments -- a rethink is in order.\r
-\r
-\r
-TESTPROGRAM:\r
- see above\r
-\r
-STATUS: Not Fixed, but the current EiC implementation\r
- flags the passing of a structure or union to\r
- a variadic function as an error.\r
-----------------------------------------------\r
-\r
-</pre>\r
-\r
-<ADDRESS>\r
-<!-- ADDRESS field used for automatic automatic insertion of links -->\r
-</ADDRESS>\r
-\r
-</body>\r
-</html>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r