home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / language / bcpl / BCPL / alib / history / compiler < prev   
Encoding:
Text File  |  1988-02-23  |  5.3 KB  |  143 lines

  1. Note: the phrase 'Found in CG n.m' should not be taken to imply that the
  2. problem concerned does not exist in earlier versions of the compiler.
  3.  
  4.  
  5. Bug 1:    Found in CG 2.10               Fixed in CG 2.11
  6.  
  7. In some circumstances, a construct of the form    a := b; b := c    can be
  8. effectively compiled in the wrong order, so that afterwards a = b = c.
  9.  
  10. New feature                         in CG 2.11
  11.  
  12. There is now some degree of checking for integer operands used with floating
  13. point operators, and vice versa.  This cannot be complete, but at any rate
  14. if you write  x#+1  you will get a warning.  The code compiled for such an
  15. expression is the same as before (no coercion is done).
  16.  
  17. Bug 2:    Found in CG 2.11               Fixed in CG 2.12
  18.  
  19. A procedure which ends by calling another with five arguments, and which
  20. otherwise contains no procedure call (and which is sufficiently small) may
  21. wrongly be compiled as needing no stackframe, meaning that the value of
  22. argument 5 in the called procedure will be wrong.
  23.  
  24. Bug 3:    Found in CG 2.12               Fixed in CG 2.13
  25.  
  26. An expression of the form  (p+k)!(n*q),  where k is a constant and n is even
  27. may be compiled as if it were  p!(n*q)    (if there was a previous  p!...  so
  28. that a shifted version of p is still present in a register).
  29.  
  30. Feature: in CG 2.12 and all earlier           Fixed in CG 2.13
  31.  
  32. The code generated for floating-point operations uses the first version of the
  33. floating-point instruction set.  Floating point is thus not available under
  34. Arthur, for which only an emulator for the second version of the instruction
  35. set is available.
  36.  
  37. Feature: in CG 2.12 and all earlier
  38.  
  39. When handling  GET "filename", the compiler looks first for a file named
  40. filename, and then for :0.alib.filename (and it is an error if neither exists).
  41. This isn't too appropriate for Arthur now, where :0 is the floppy.  I believe
  42. that the search path should be user-suppliable, and that the default path
  43. should have $.alib in place of :0.alib.  Currently, the path is fixed but it
  44. is possible to specify where particular header files live by something like
  45.   -HDR "LibHdr=a.b.c.LibHdr"
  46. on the command line.
  47.  
  48. Bug 4:    Found in CG 2.12               Fixed in CG 2.13
  49.  
  50. Where a sufficiently simple procedure (containing no calls is a necessary but
  51. not sufficient constraint) returns as result the value of a static variable,
  52. it may not load the pointer to the static variable area first, so that the
  53. procedure acts correctly if called from within the same compilation unit, but
  54. not if called externally.
  55.  
  56. Bug 5:    Found in CG 2.13 (also exists in all earlier versions)
  57.                            Fixed in CG 2.14
  58.  
  59. VCAR (x+k) := floating point value  gets the offset k 4 times too large (not
  60. shifting it down, since the instructions shift it up).
  61.  
  62. Bug 6:    Found in CG 2.13               Fixed in CG 2.14
  63.  
  64. FIX always reads from FP reg 0, not the one the operand happens to be in.
  65. (At places like just after procedure calls, this will in fact be right).
  66.  
  67. Bug 7: Found in CG 2.13                Fixed in CG 2.14
  68.  
  69. The fix to cure bug 4 above is wrong for procedures near the end of a compiled
  70. section (starting within the last 512 words).  And whereas in the previous
  71. state all that happened was that the wrong value was returned, now there may be
  72. a data abort or address exception.
  73.  
  74. New feature                       in front end 2.2
  75.  
  76. It is now possible to switch off the special (for Cambridge Lisp) reserved
  77. words NIL, LGE, LLE, LGT and LGR.  The L option controls their admissibility;
  78. it is on by default (switched off by ... -opt -l).
  79.  
  80. Bug 8: Found in CG 2.13                Fixed in CG 2.14
  81.  
  82. The result of a/2, where a is negative, is (-a)/2.
  83.  
  84. Bug 9: Found in CG 2.14                Fixed in CG 2.14
  85.  
  86. Where a section has a very large number of (any combination of) STATIC
  87. variables, TABLE elements and numeric constants too large to fit into a DP
  88. instruction, the compiler may generate an internal error of the form:
  89.       Resolve reference: offset ... at    ....
  90.  
  91. Bug 10: Found in CG 2.14               Fixed in CG 2.15
  92.  
  93. Further to 9, if a procedure is large and contains no use of STATIC variables,
  94. TABLEs or strings, but does use large constants, the same internal error may
  95. occur.
  96.  
  97. Bug 11: Found in CG 2.14               Fixed in CG 2.15
  98.  
  99. The following sort of construct
  100.  
  101.    LET x = ...;
  102.    LET y = ...;
  103.    IF ...<#x1234 THEN {
  104.       LET z = ...;
  105.       LET zz = ...;
  106.  
  107. may (in circumstances easy to explain only in terms of the generated code)
  108. cause the values for z and zz to be written to completely the wrong place in
  109. store.    The important thing here is a comparison against a constant breakable
  110. into two 8 bit chunks; the latter two declarations could equally well be a
  111. FOR loop with variable upper bound; or both sets of declarations could be
  112. assignments to adjacent variables declared previously.    Insertion of a
  113. procedure call before the IF will certainly remove the problem; so may many
  114. other small perturbations.
  115.  
  116. Bug 12: Found in CG 2.14               Fixed in CG 2.15
  117.  
  118. In code like
  119.  
  120.    LET a = ...
  121.    LET b = field OF @a
  122.  
  123. it is possible for the code to extract the field to precede that loading the
  124. value for a.
  125.  
  126. Bug 13: Found in CG 2.11               Fixed in CG 2.15
  127.  
  128. Code like
  129.    x!3 := .....
  130.    .... := x!3
  131. (where there may be a sizeable gap between the two statements) may use
  132. the old value of x!3 in the second statement.
  133.  
  134. Bug 14: Found in CG 2.15               Fixed in CG 2.16
  135.  
  136. The N option does not as it should control inclusion of procedure name strings
  137. in compiled code.
  138.  
  139. Bug 15: Found in CG 2.16
  140.  
  141. A procedure such as  LET f(a, b) BE a(b) is miscompiled.  Adding a dummy
  142. procedure call will fix it.
  143.