home *** CD-ROM | disk | FTP | other *** search
File List | 1992-05-03 | 11.1 KB | 309 lines |
- TP6BUGS6.LST - Version 6 of TP 6.0 bug list
-
- This is a completely *un*official list of bugs in TP 6.0. There have
- been (at least) two releases both numbered 6.00: the original one in
- October 1990, and another in June 1991. You can identify the later
- release by the date or by the file size: TURBO.EXE is 325982 bytes in
- the later release. Several bugs were fixed in the second release; some
- of those are marked below. I've also heard of a 6.01 release dated July
- 1991, but haven't tested any of these bugs against it.
-
- The list is very abbreviated; if any of the items are too obscure, ask
- and I'll expand on them. One abbreviation I've been asked about:
- "BASM" is the built-in assembler used in asm blocks.
-
- Juergen Schlegelmilch sent me a very detailed list of bugs & fixes in TP
- 6.0 & Turbovision; the file version (TP6BUGSn.ZIP) of this list contains
- all of his comments. It also contains a few patches and fixes that I've
- collected. The file version will be available on Fidonet on the PDN
- Pascal file echo area, and on Internet from garbo.uwasa.fi. It is also
- available on the PC Techniques section of CLMFORUM on Compuserve in DL
- 16, as TPBUGS.ZIP.
-
- Many other people have sent me their bug lists; thanks to all of them.
- In particular, some recent additions are from Arno Haket, Hans
- Schleichert, Norbert Juffa, and Jud McCranie. I know I've missed a few
- recent contributors; sorry!
-
- I'd appreciate it if anyone sent me their own bug list; I'll publicize
- it on Usenet, Fidonet and Compuserve. I'd also appreciate hearing about
- patches.
-
- Duncan Murdoch
-
- dmurdoch@watstat.waterloo.edu (Internet address)
- 71631,122 (Compuserve)
- DJ Murdoch at 1:221/177.40.
-
-
- April 17, 1992:
-
- If the Objects unit is overlaid, calls to stream or collection Error
- methods can cause system crashes.
-
- The Drivers unit misses keystrokes if the keyboard buffer has been
- reallocated.
-
- Extensions to the Drivers unit INT09 (keyboard interrupt) handler won't
- work when run within the IDE, because the interrupt handler won't be
- installed.
-
- A window that has neither the wfGrow now wfMove flags set does not
- disable the cmResize command when it is active. (A fix is available:
- see TWindow.fix in TP6BUGSn.ZIP).
-
- April 13, 1992:
-
- The compiler doesn't detect overlapping case constants. Only the first
- matching case is executed.
-
- The Delay() routine in CRT gives inaccurate delays on some very fast
- machines. A patch (DELAY.FIX) from Borland is included in TP6BUGSn.ZIP.
-
- The SetViewPort procedure accepts X1=X2 or Y1=Y2 (contrary to the
- documentation), but clipping doesn't work properly with these settings.
-
- TopText, CentreText, and BottomText are defined differently for
- DefaultFont and stroked fonts.
-
- Single and Double types typed constants are not correctly initialized
- for absolute values smaller than 1.17xxxxE-38 respectively 2.22xxxxE-308
- (their value wil be zero instead). The lower limit of the dynamic range
- should be 1.5E-45 and 5.0E-324 respectively.
-
- App.ISqr enters an endless loop for arguments greater than 32760.
-
- Graph.SetTextJustify doesn't properly account for descenders; they can
- be clipped at the bottom of the screen.
-
- BASM has the ranges of legal values incorrect for IN, OUT, INT, ENTER,
- AAM, AAD instructions.
-
- BASM allows references to nonexistent registers on the coprocessor, e.g.
- FADD ST, ST(123456)
-
- The IDE doesn't properly single step across AAM xx and AAD xx
- instructions.
-
- BASM doesn't do proper checking on CALLs and JMPs to near/far procedures
- or absolute variables, and sometimes doesn't generate proper code, e.g.
- JMP FAR PTR AbsoluteVariable { AbsoluteVariable is declared absolutely }
- CALL FAR PTR AbsoluteVariable
-
- BASM doesn't flag the statements
- MOV AX, [WORD]
- MOV BYTE PTR AL,5
- as nonsense.
-
- The coprocessor emulator doesn't handle special arguments like INF and
- NaN properly. Quiet NaNs are treated as signalling NaNs, and operations
- on INF return NaN.
-
- The Random function will return 1.0 once every 2^32 calls in $N+ mode.
- This value should be folded to 0.0, so that Trunc(N*Random) can't return
- N.
-
- TRect.Union and TRect.Intersect don't perform set operations. If two
- rectangles don't intersect, TRect.Intersect always returns
- ((0,0),(0,0)); the union of that empty rectangle with any other
- rectangle always includes the point (0,0).
-
- The Str procedure rounds nnn.5 differently than either the Round or
- Trunc functions when printing reals with no decimal places. In $N-
- mode, it is inconsistent; in $N+ mode, it consistently rounds up.
-
- Feb 2, 1992:
-
- The Drivers.MoveBuf procedure puts junk into the buffer when Attr is 0.
- (A fix is available; see MOVEBUF.FIX in TP6BUGSn.ZIP.)
-
- The Random(N) function doesn't produce a uniform distribution unless N
- is a power of 2, especially for large values of N. Not fixed.
-
- The Val procedure can't convert the smallest longint value, -2147483648,
- nor can is it handled properly by Read/Readln. All routines work
- properly on the hex equivalent, $80000000. Not fixed.
-
- The base type for a pointer type definition can't be a qualified
- identifier. Not fixed.
-
- The following TV bugs are more fully described (and fixes are given!) in
- the file TVBUGS in TP6BUGSn.ZIP:
-
- TFileEditor.NewBuffer allocates 0 bytes, but does not set BufSize
- to 0.
-
- If the search string given to Editors.IScan nearly matches the last
- chars in the text, the routine runs over the end of the text, eventually
- replacing text.
-
- TMemo cannot coexist in a TDialog with other objects having scrollbars,
- because TEditor.HandleEvent consumes all cmScrollBarChanged events.
-
- TEditor.InsertBuffer does not reset the block marker. If a call to it
- is followed by a backspace, the block is deleted.
-
- If StdDlg.NoWildchars is called with an empty argument, it overwrites
- the stack.
-
- THelpTopic.AddCrossRef allocates memory and then forgets to use it.
-
- THelpIndex.Position returns garbage values if called with a negative
- argument.
-
- THistory.Draw uses characters 221 and 222 which are not standard outside
- codepage 437.
-
- December 3, 1991:
-
- TP doesn't handle the denormal exception properly on an 8087 or 80287,
- so underflow sometimes creates non-zero results. Not fixed.
-
- Compile time evaluation of the ROUND() function is different than
- run-time evaluation in $N+ mode on numbers ending in .5. Not fixed.
-
- Arithmetic on the REAL type is sometimes inaccurate in the last few bits
- of the result. Not fixed.
-
- The coprocessor emulator doesn't properly emulate the FINCSTP and
- FDECSTP instructions in BASM. (These aren't used by compiled Pascal
- code.) Not fixed.
-
- The coprocessor emulator doesn't respect the precision control bits. Not
- fixed.
-
- The SEG operator in BASM doesn't work on variables declared in the stack
- segment. Not fixed.
-
- Referencing fields of records in BASM in a WITH block doesn't add the
- base address. Not fixed.
-
- BASM doesn't generate correct code for instructions like MOV AX,[WORD
- PTR BX]. (This is TASM Ideal mode syntax; MASM syntax MOV AX,WORD PTR
- [BX] is fine, as is MOV AX,[WORD PTR DS:BX].) Not fixed.
-
- The Graph.TextWidth function returns incorrect results when fonts are
- scaled.
-
- October 31, 1991:
-
- The instruction "IMUL AX, 16" (valid on an 80186+) is rejected by BASM.
- The equivalent "IMUL AX, AX, 16" does work (in $G+ mode). Not fixed.
-
- October 26, 1991:
-
- If a byte variable X = 0, then (X-1) DIV 8 produces a zero divide error.
- Fixed June 91.
-
- October 23, 1991:
-
- Hitting tab on a help topic with no crossrefs will crash the help
- system. A patch to HELPFILE.PAS is available from Borland.
-
- October 17, 1991:
-
- The coprocessor emulator does not respect the rounding bits internally
- or when storing results to Single or Double variables.
-
- October 11, 1991:
-
- Segments in external .OBJ files with no class names (e.g. ABSOLUTE
- segments) will crash TURBO, TPC or TPCX. Not fixed.
-
- September 16, 1991:
-
- The IDE will give incorrect matches when doing word searches on words at
- the start of lines (e.g. "Const" matches "onst"). Fixed June 91.
-
- The compiler won't allow the optional identifier in a variant record to
- be an already defined scalar type identifer. Not fixed.
-
- The compiler gives spurious errors if you nest loops very deeply (e.g.
- 256 deep).
-
-
- August 16, 1991
-
- Dangerous bugs:
-
- You can use typed constants and variables in constant expressions,
- giving garbage values. Fixed June 91.
-
- The coprocessor emulator doesn't check properly for internal stack
- overflow; it just wraps around and trashes the top of the stack segment.
- Not fixed.
-
- Succ(Seg(v)) = Seg(v) and Pred(Seg(v)) = Seg(v) ! Fixed June 91.
-
- TBufStream writes garbage to the stream sometimes. (A patch for this is
- included in TP6BUGSn.ZIP as TBUFSTRE.FIX.). Not fixed.
-
- IN doesn't properly handle out of range values. (What it does is to
- demote out of range scalars to byte, ignoring any high bits.) Not fixed.
-
- Referencing fields of records in inline machine code sometimes makes the
- compiler go quietly insane. Not fixed.
-
- Other bugs:
-
- Coprocessor errors are often reported at the wrong address, especially
- if the error occurs on the first pass through. Not fixed.
-
- GetDir returns a root directory for non-existent drives. (This is
- almost as documented.)
-
- Horizontal text justification to the right side doesn't work if the
- writing direction is vertical; this is only in the DefaultFont.
-
- Intr and MsDos don't always work properly in V86 mode under Windows 3,
- because they don't use the INT instruction.
-
- The TVEdit unit can't input some digits. (A patch for this is
- included in EDITOR.FIX in TP6BUGSn.ZIP.) Fixed in June 91.
-
- ^T in TVEdit sometimes deletes more than the next word. (This is by
- design, but inconsistent with the design of the IDE.)
-
- ^QF followed by ^L followed by Space deletes words in TVEdit. (This is
- also by design.)
-
- TProgram doesn't clean up memory properly on exit.
-
- TFileViewer's FileName field is never disposed.
-
- The IDE forgets your snow check setting if you jump to DOS and exit
- back.
-
- Writeln wipes out the status word in the coprocessor. Not fixed.
-
- You can allocate an array bigger than 65528 bytes on the heap; it may
- wrap around and trash whatever precedes it. Not fixed.
-
- The coprocessor emulator doesn't propagate NaNs the same way as a real
- coprocessor does. Not fixed.
-
- The string conversion routines sometimes print NaNs as INF.
-
- Complicated expressions involving Reals compiled $N+ will unnecessarily
- overflow the coprocessor stack (and trigger the dangerous error above).
- Not fixed.
-
- The $G+ option makes the inline assembler use inline floating point
- code, rather than the CD forms that allow emulation. Not fixed.
-
- Graph3.Plot leaves a word on the stack; if you call it repeatedly, you
- may get a stack overflow; if you call it from a routine that doesn't
- have any locals, you're dead. Fixed in June 91.
-
- Some weird problems with F7 Trace; sometimes it just refuses to do it.
-
- There are certain illegal Extended encodings that crash the debugger in
- TURBO. Not fixed.
-
- Range checking shouldn't apply to the limits in a for loop.
-
- Method arguments shouldn't be at the same scoping level as method names.
-
- The compiler exports private identifiers in .TPU files (though you can't
- use them).