tbs0141.pp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. { $OPT= -S2 }
  2. program bug;
  3. { uses objpas; not with -S2 !! }
  4. type
  5. //
  6. TObjectAB = class;
  7. TObjectABCD = class;
  8. TObjectABCDEF = class;
  9. // }
  10. TObjectAB = class(tobject)
  11. a, b: integer;
  12. end ;
  13. TObjectABCD = class(TObjectAB)
  14. c, d: integer;
  15. end ;
  16. TObjectABCDEF = class(TObjectABCD)
  17. e, f: integer;
  18. end ;
  19. var
  20. a, b, c: TObject;
  21. begin
  22. a := TObjectAB.Create;
  23. WriteLn(a.InstanceSize, ' Should be: 12');
  24. if a.InstanceSize + SizeOf(integer)*2 <> TObjectABCD.InstanceSize then
  25. Halt(1);
  26. b := TObjectABCD.Create;
  27. if b.InstanceSize + SizeOf(integer)*2 <> TObjectABCDEF.InstanceSize then
  28. Halt(1);
  29. WriteLn(b.InstanceSize, ' Should be: 20');
  30. c := TObjectABCDEF.Create;
  31. WriteLn(c.InstanceSize, ' Should be: 28');
  32. end.
  33. {
  34. Here are the VMT tables from the assembler file:
  35. .globl VMT_TD$_TOBJECTAB
  36. VMT_TD$_TOBJECTAB:
  37. .long 12,-12
  38. .long VMT_OBJPAS$_TOBJECT
  39. .long _OBJPAS$$_$$_TOBJECT_DESTROY
  40. .long _OBJPAS$$_$$_TOBJECT_NEWINSTANCE
  41. .long _OBJPAS$$_$$_TOBJECT_FREEINSTANCE
  42. .long _OBJPAS$$_$$_TOBJECT_SAFECALLEXCEPTION$TOBJECT$POINTER
  43. .long _OBJPAS$$_$$_TOBJECT_DEFAULTHANDLER$$$$
  44. .globl VMT_TD$_TOBJECTABCD
  45. VMT_TD$_TOBJECTABCD:
  46. .long 12,-12
  47. .long VMT_TD$_TOBJECTAB
  48. .long _OBJPAS$$_$$_TOBJECT_DESTROY
  49. .long _OBJPAS$$_$$_TOBJECT_NEWINSTANCE
  50. .long _OBJPAS$$_$$_TOBJECT_FREEINSTANCE
  51. .long _OBJPAS$$_$$_TOBJECT_SAFECALLEXCEPTION$TOBJECT$POINTER
  52. .long _OBJPAS$$_$$_TOBJECT_DEFAULTHANDLER$$$$
  53. .globl VMT_TD$_TOBJECTABCDEF
  54. VMT_TD$_TOBJECTABCDEF:
  55. .long 12,-12
  56. .long VMT_TD$_TOBJECTABCD
  57. .long _OBJPAS$$_$$_TOBJECT_DESTROY
  58. .long _OBJPAS$$_$$_TOBJECT_NEWINSTANCE
  59. .long _OBJPAS$$_$$_TOBJECT_FREEINSTANCE
  60. .long _OBJPAS$$_$$_TOBJECT_SAFECALLEXCEPTION$TOBJECT$POINTER
  61. .long _OBJPAS$$_$$_TOBJECT_DEFAULTHANDLER$$$$
  62. }