tw2053b.pp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. { %Fail }
  2. { new with type of size > 2Gb }
  3. { Source provided for Free Pascal Bug Report 2053 }
  4. { Submitted by "Luis Castedo" on 2002-07-24 }
  5. { e-mail: [email protected] }
  6. program tb2;
  7. {$MODE TP}
  8. {$C+}
  9. type
  10. PosInteger = 0 .. high(integer);
  11. Posptrint = 0 .. high(ptrint);
  12. TMyRecord = record
  13. mr_sglDummy1: array[0..3] of Single;
  14. mr_lDummy2 : ptrint;
  15. mr_iDummy3 : Integer;
  16. mr_iDummy4 : Integer;
  17. end;
  18. TMyRecordArray = array[PosInteger] of TMyRecord;
  19. TMyLongRecordArray = array[ptrint] of TMyRecord;
  20. PMyRecordArray = ^TMyRecordArray;
  21. PMyLongRecordArray = ^TMyLongRecordArray;
  22. var
  23. pArray: PMyRecordArray;
  24. pLongArray : PMyLongRecordArray;
  25. size : ptrint;
  26. begin
  27. new(parray);
  28. new(pLongArray);
  29. size:= 50 * SizeOf(TMyRecord);
  30. GetMem(pArray, size);
  31. FillChar(pArray^,size,#0);
  32. GetMem(pLongArray, 50 * SizeOf(TMyRecord));
  33. FillChar(pLongArray^,size,#0);
  34. Assert(Assigned(pArray));
  35. WriteLn('pArray = ', ptrint(pArray));
  36. WriteLn('@(pArray^[0]) = ', ptrint(@(pArray^[0])));
  37. pArray^[0].mr_lDummy2 := 24;
  38. if (pArray^[0].mr_lDummy2<>24) then
  39. begin
  40. Halt(1);
  41. end;
  42. WriteLn('pLongArray = ', ptrint(pLongArray));
  43. WriteLn('@(pLongArray^[0]) = ', ptrint(@(pLongArray^[0])));
  44. pLongArray^[0].mr_lDummy2 := 25;
  45. if (pLongArray^[0].mr_lDummy2<>25) then
  46. begin
  47. Halt(1);
  48. end;
  49. FreeMem(pArray, size);
  50. FreeMem(pLongArray, size);
  51. end.