Comencé el proyecto en Delphi 2010, luego migré a XE y ahora trato de migrar a XE2. Después de compilar en XE2 (Actualización 4 Hotfix 1), las pruebas unitarias comenzaron a fallar con AV. Después de algún depuración, se hizo evidente que el siguiente código no está correctamente compilada: salidasError del compilador al usar genéricos y declaración de reenvío en Delphi XE2
program ForwardDeclaration;
{$APPTYPE CONSOLE}
uses
System.SysUtils;
type
TEntityBase = class(TObject)
protected
FModel: Integer;
public
constructor Create(const AModel: Integer);
end;
TEntity<TKey> = class(TEntityBase)
end;
TMyEntity2 = class;
TMyEntity1 = class(TEntity<Integer>)
FData: Integer;
end;
TMyEntity2 = class(TMyEntity1)
end;
constructor TEntityBase.Create(const AModel: Integer);
begin
inherited Create;
FModel := AModel;
end;
var
MyEntity: TMyEntity1;
begin
try
Writeln(TEntityBase.ClassName, ': ', TEntityBase.InstanceSize, ' bytes');
Writeln(TMyEntity1.ClassName, ': ', TMyEntity1.InstanceSize, ' bytes');
MyEntity := TMyEntity1.Create(100);
Assert(MyEntity.FData = 0);
except
on E: Exception do Writeln(E.ClassName, ': ', E.Message);
end;
end.
programa:
TEntityBase: 12 bytes
TMyEntity1: 12 bytes <-- Must be 16 bytes!
EAssertionFailed: Assertion failure (ForwardDeclaration.dpr, line 41)
¿Es posible resolver el problema mediante las opciones de optimización del compilador?
Si este problema se repite en otra persona?
P.S. QC107110
Envíelo a QualityCentral. Además, ¿dónde entran las declaraciones directas? La única declaración de este tipo no se usa. –
El código es muy simplificado, por lo que se reprodujo el error del compilador. En un proyecto real se utilizan declaraciones futuras. Si esto no solo me afecta, entonces escribo a QC. – Chaa
OK. Cuando envíe el error, debe desmantelarlo aún más. Parece que la declaración de avance no es relevante. Simplemente un problema de codegen con InstanceSize. Si tiene un contrato de soporte, puede abrir un problema de soporte, aunque incluso hacerlo no necesariamente significa que obtendrá una respuesta. –