| Bug # | Delphi versions | Description |
| 111 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Real typed properties cause GPF in COMPLIB.DCL |
| 118 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Internal Error R398 |
| 122 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
The compiler crashes on certain illegal language constructs |
| 125 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Having an include file include itself hangs Delphi. |
| 126 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
The compiler sometimes gives the error "Overflow in arithmetic operation or conversion. Error (0)." This only happens in a Make (F9 or Ctrl-F9); a Build All mostly makes the error go away. |
| 131 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Internal error on asm code with assignment to 'Result' |
| 132 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Internal error C750 on code involving function results of type Object |
| 138 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
There's a problem with typed constants and / or conditional defines. |
| 145 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Another reproducible compiler crash (access violation) |
| 150 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Internal error L1086 caused by type declaration |
| 153 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Another URW376 compiler error, when declaring a Const MaxDim = High(Cardinal). Besides Cardinal, this happens with other ordinal types as well. |
| 156 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Another URW376 compiler error, when compiling packages. |
| 426 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Compile-Run sequence interrupted by Fatal Error: Internal Error L737 |
| 449 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Internal error C1655 on a piece of code that should compile. |
| 485 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Using the old object model, the destructor can not have parameters in Delphi 4.00. In Delphi 3 this was possible. |
| 504 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Internal errors SY1703 (in Delphi 3) and SY2149 (in Delphi 4) |
| 517 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
A library exporting a subroutine with a name equal to itself makes causes an Access Violation in the compiler |
| 522 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Internal error C3973 (D4); C4273 (D3); C3690 (D2). |
Bug #111; last modified: 15-Oct-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Gotcha | Gotcha | Gotcha | Gotcha | Gotcha | Fixed | Fixed | Fixed |
unit RealBug;
interface
uses WinTypes, WinProcs, Classes, Controls, Forms;
type
TRealBug = class(TWinControl)
private
FVersion: Real;
published
Version: Real read FVersion write FVersion;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Bugs', [TRealBug]);
end;
end.
"Furthermore, the type of a property defined in a published section must be an ordinal type, a real type (Single, Double, Extended, or Comp, but not Real), a string type, a small set type, a class type, or a method pointer type."The solution is to use Single, Double, Extended, or Comp, whichever is most appropriate to your data. It would have been better for the compiler to generate an error when attempting to publish a Real typed property.
Bug #118; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| N/A | N/A | N/A | Unknown | Exists | Unknown | Unknown | Unknown |
Bug #122; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Absent | Exists | Fixed | Fixed | Fixed | Fixed | Fixed | Fixed |
procedure CrashMe;
var
x: extended;
begin
x := Math.Math.IntPower(1, 2);
{ this obviously is wrong syntax
this does not depend on using the Math unit }
end;
Bug #125; last modified: 12-Jul-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Absent | Exists | Exists | Unknown | Unknown | Fixed | Fixed | Fixed |
{$I CIRCLE.INC}
Note that the include file includes itself. Now include this file in any
unit in the project, for instance:
unit Unit1;
{$I CIRCLE.INC}
...
end.
Delphi will now hang while compiling and it will use a lot of CPU time.
It is impossible to Cancel the compile and I have to force it down with
a Kill task command (at least on my machine).
Note that this construct is not logical or perhaps even "legal", but in no circumstances should such a mistake hang the program. In BP7 and Delphi 1.0 the programmer is given a (somewhat confusing) error message instead.
Comment from Rune Moberg (12 Jul 98):
This has been fixed in Delphi 4; the message window now reads:
"[Fatal Error] file1.txt(1): Recursive include file file1.txt"
Bug #131; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Absent | Exists | Fixed | Fixed | Fixed | Fixed | Fixed | Fixed |
function Fails(value: Extended): Extended;
begin
asm
FLD value
FSTP @Result
end;
end; <--- Internal error C3254
function Works(value: Extended): Extended;
var
res: Extended;
begin
asm
FLD value
FSTP res
end;
Result := res;
end;
Bug #132; last modified: 15-Oct-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Exists | Unknown | Unknown | Unknown | Fixed | Fixed | Fixed |
type
TBase = object
Color: Integer;
end;
PBase = ^TBase;
TPoint = object(TBase)
X: Integer;
Y: Integer;
end;
PPoint = ^TPoint;
var
APoint: TPoint;
function GetAPoint: TBase;
begin
Result := APoint;
end;
Here the compiler reports an "internal error C750".
Bug #138; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Absent | Exists | Fixed | Fixed | Fixed | Fixed | Fixed | Fixed |
Bug #145; last modified: 28-Oct-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Exists | Exists | Exists | Exists | Fixed | Fixed | Fixed |
Bug #150; last modified: 12-Jul-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Exists | Exists | Unknown | Unknown | Fixed | Fixed | Fixed |
>type > TInternalError=type TObject; > >In Delphi 2.0, I get an internal error URW337. I tried to report this to >Borland but nobody wanted to hear me...I confirmed that I get the same error in D2. I made the following simple form to test it out in D3:
unit TypeBugU;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
end;
TInternalError = type TObject; { << This is the only line I added }
var
Form1: TForm1;
implementation
{$R *.DFM}
end.
The first attempt to compile this gives:
Bug #153; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Exists | Unknown | Fixed | Fixed | Fixed | Fixed |
Const MaxDim = High(Cardinal);
Const MinDim = Low(Cardinal);
Additional comment by Lukas Masser: I discovered that the Low(Cardinal)
bug (Another compiler error URW376) isn't just linked to Cardinal but rather
to sub types of any ordinal type (which Cardinal is).
An example:
unit LowHighBug; interface type TBaseType = (btValue0, btValue1, btValue2, btValue3, btValue4, btValue5); TSubType1 = Low(TBaseType)..High(TBaseType); TSubType2 = btValue1..btValue5; const LowSubType1 = Low(TSubType1); // No error here, since it's the base type //LowSubType2 = Low(TSubType2); // Uncomment this //HighSubType2 = High(TSubType2); // or this to produce bug implementation end.
Bug #156; last modified: 25-Oct-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| N/A | N/A | Exists | Unknown | Unknown | Unknown | Fixed | Fixed |
{$A+,B-,C+,G+,H+,I+,J+,M-,O+,P+,Q+,R+,T-,U-,V+,W-,X+,Z1}
unit smapi;
{$D-,L-,Y+}
interface
implementation
const
DLLName32 = 'mapi32';
end.
package email3;
{$R *.RES}
{$ALIGN ON}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $00400000}
{$DESCRIPTION 'TEmail - MAPI component'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
requires
vcl30;
contains
Smapi;
end.
Steps to produce the problem:
Bug #426; last modified: 11-Jul-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| N/A | N/A | N/A | N/A | N/A | Exists | Unknown | Unknown |
Bug #449; last modified: 13-Aug-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Absent | Absent | Absent | Absent | Absent | Exists | Exists | Fixed |
Note: A "Syntax check" has no problem with this code: no hints, warnings or errors. So there's probably a problem with code generation.
var WinArbeidsPapir : Boolean; Function Plukktall(Lin:String):double; Begin Result := 0; End; Procedure WindowsArbeidsPapir(Lin:String); Begin WinArbeidsPapir:=Boolean(Round(Plukktall(Lin))); End;
Bug #485; last modified: 28-Oct-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Absent | Absent | Absent | Absent | Absent | Exists | Exists | Exists |
Access violation at address 0083146 in module DCC40.DLLThe compilation halts.
Bug #504; last modified: 4-Nov-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Absent | Absent | Unknown | Unknown | Exists | Exists | Exists | Exists |
unit BugUnit;
interface
type
TClass1 = object
protected
function Func1 : integer;
property Prop1 : integer read Func1;
end;
TClass2 = object(TClass1)
public
property Prop1;
end;
TClass3 = object(TClass1)
public
property Prop1 : integer read Func1;
end;
function Main : integer;
implementation
function TClass1.Func1;
begin
Result:=1;
end;
function Main : integer;
var C2 : TClass2;
C3 : TClass3;
begin
Result:=C3.Prop1; // no crash
Result:=C2.Prop1; // Compiler crash with SY2149 internal error
end;
end.
The characteristics are:
Bug #517; last modified: 24-Dec-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Absent | Absent | Absent | Absent | Absent | Unknown | Unknown | Exists |
library Test; uses SysUtils, Classes; procedure Test; stdcall; export; begin end; exports Test; begin end.When I try to build it, I get "Access violation at address 0081BE75 in module 'dcc40.dll'. Read of address 00000000." My guess is that compiler gets confused about identical project and export procedure name. If I change export name to something else it all compiles just fine.
Bug #522; last modified: 17-Jan-99| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Absent | Exists | Exists | Exists | Exists | Exists | Exists | Exists |
The error seems to occur when the compiler attempts to store the low-order three bytes out of a double word function result. Since the function returns the result in EAX, there is no simple instruction to store the low-order three bytes to a variable. This error does not occur if the source is a variable since Delphi can generate memory move instructions.
program Project1;
type
T3Bytes = packed array[0..2] of Byte;
T4BytesRecord = record
case Integer of
0: (V0: Integer);
1: (V1: T3Bytes);
end;
function Null4BytesRecord: T4BytesRecord;
begin
Result.V0 := 0;
end;
procedure FailProc;
var
V: T3Bytes;
begin
V := Null4BytesRecord.V1;
end; // Internal error C3973 here.
// This procedure works fine.
//
// procedure FailProc;
// var
// V: T3Bytes;
// T: T4BytesRecord;
// begin
// T := Null4BytesRecord;
// V := T.V1;
// end;
begin
FailProc;
end.