[fpc-devel] Question about runtime error 219

Pierre Free Pascal pierre at freepascal.org
Sat Jan 10 10:17:59 CET 2015



> -----Message d'origine-----
> De : fpc-devel-bounces at lists.freepascal.org [mailto:fpc-devel-
> bounces at lists.freepascal.org] De la part de Gennady Agranov
> Envoyé : samedi 10 janvier 2015 05:19
> À : FPC developers' list
> Objet : [fpc-devel] Question about runtime error 219
> 
> Hi All,
> 
> What exactly -CR (Verify object method call validity) code generation
> is
> checking and how tested is it?
> 
> For debugging I prefer to enable all possibles checks - range,
> overflow, ...
> 
> But i can not use -CR:
> 
> 1. I passed some "var array of array" parameter - error 219 - changed
> to
> var array - works...
> 
> 2. I use generics and 2.7.1 and when I am calling some method that is
> implemented in grandfather class - runtime error 219 :(
> 
> But, If I do not set -CR - everything works just fine...
> 
> Any internal scoop about -CR - please?

  The -CR option add, before any virtual method call,
a call to a special function fpc_check_object_ext 
to check that the real class of the class variable which is used
is indeed a child of the explicit class type specification of 
this method.

  Example

    var
         c : class;

   begin
      derivedclass(c).method1;
  
  the call to fpc_check_object_ext will be done with
the true class of c (as given by the address of the vitual method table)
to the virtual method table of derived type 

  This is more or less equivalent to 
  assert that c is indeed a child type of derivedclass.

  It is possible that this option -CR will
generate a RTE 219 in perfectly working code,
a possible case is when two different derived classes implement
"compatible" child methods, that end up at the same position in 
the virtual method table, but without a common virtual definition
for the common ancestor.


Pierre Muller


  assert
  



More information about the fpc-devel mailing list