Discussion:
[fpc-pascal] Hint converting to int64
Santiago A.
2018-09-11 10:11:50 UTC
Permalink
Hello:
FPC: 3.0.4 (Realease from Lazarus 1.8.4 SVN: 57972)
OS: Windows7 32bits / Linux 64Bits

I have this code and I get a hint

---------- var  Entity:Longword;FullParagraph:string; pIni:Integer;
begin .... Entity:=Entity*10+ord(FullParagraph[pIni])-48; // <=== Hint
.... end; -----------

Hint: Converting the operands to "Int64" before doing the add could
prevent overflow errors.
I can't see why it mentions int64, there are integer and longword
variables, but no Int64 one.

I have replaced it by

Entity:=Entity*10+LongWord(ord(FullParagraph[pIni]))-48;

That is, I have casted the result of "ord()" to longword. But I get the
same hint.
What should I do to remove the hint?
--
Saludos

Santiago A.

_______________________________________________
fpc-pascal maillist - fpc-***@lists.freepascal.org
http://lists.freepascal.org/cgi-bin
Santiago A.
2018-09-11 16:08:41 UTC
Permalink
Hello:FPC: 3.0.4 (Realease from Lazarus 1.8.4 SVN: 57972)OS: Windows7
32bits / Linux 64Bits
I have this code and I get a hint
---------- var  Entity:Longword;FullParagraph:string; pIni:Integer;
begin .... Entity:=Entity*10+ord(FullParagraph[pIni])-48; // <===
Hint .... end; -----------
Hint: Converting the operands to "Int64" before doing the add could
prevent overflow errors.I can't see why it mentions int64, there are
integer and longword variables, but no Int64 one.
There is you know.
https://www.freepascal.org/docs-html/current/ref/refsu4.html#x26-250003.1.1
----------
var
  Entity:Longword;
  FullParagraph:string;
  pIni:Integer;
begin
  ....
  Entity:=Entity*10+ord(FullParagraph[pIni])-48; // <=== Hint
  ....
end;
 -----------
Do you mean that Entity is promoted to int64 in a 32bits system?
--
Saludos

Santiago A.

_______________________________________________
fpc-pascal maillist - fpc-***@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/li
Martok
2018-09-12 09:30:26 UTC
Permalink
---------- var Entity:Longword;FullParagraph:string; pIni:Integer; begin
.... Entity:=Entity*10+ord(FullParagraph[pIni])-48; // <=== Hint .... end;
-----------
Compiling with -vp shows that the result of the subtraction is a signed Longint.
That makes this an expression mixing Longword and Longint, which is always
computed in Int64 and because of that causes this hint.

The thing I'm missing is the "Mixing signed expressions and longwords gives a
64bit result" hint. Is that because something detects that this was an internal
typeconvn?
--
Regards,
Martok

_______________________________________________
fpc-pascal maillist - fpc-***@lists.freepascal.org
http://lists.freepasc
Loading...