Dear all,

please consider the following code:


program Project1;

{$booleval off}

var
  v1, v2: variant;
  a: boolean;
  b: integer;

begin
  a := true;
  b := 0;
  // this works as expected:
  if a and (b > 0) and ((0+1) mod b = 0) then Writeln ('ok');

  v1 := true;
  v2 := 0;
  // this gives a "division by zero":
  if v1 and (v2 > 0) and ((0+1) mod v2 = 0) then Writeln ('ok');
end.


The "variant" variant results in a "division by zero". Obviously, it tries to 
evaluate the modulo-expression even though this shouldn't happen because 
complete boolean evaluation is disabled and the "if"-result is already known to 
be false after checking "v2>0".

Can anyone explain this strange behavior?

Kind regards,
Thomas

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to