Re: [fpc-pascal] Hint converting to int64
Am 11.09.2018 um 12:11 schrieb Santiago A.: > -- 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-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Hint converting to int64
On 11/09/18 16:15, Santiago A. wrote: El 11/09/18 a las 12:30, Mark Morgan Lloyd escribió:> On 11/09/18 10:15, Santiago A. wrote:>> 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? The operands Entity*10 and 10+ord(FullParagraph[pIni])-48 are both 32 bits, but the addition could overflow. The compiler writer's trying to be nice to you, quit kvetching :-) -- Mark Morgan Lloyd markMLl .AT. telemetry.co .DOT. uk [Opinions above are the author's, not those of his employers or colleagues] ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Hint converting to int64
El 11/09/18 a las 12:30, Mark Morgan Lloyd escribió: On 11/09/18 10:15, Santiago A. wrote: 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-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Hint converting to int64
On 11/09/18 10:15, Santiago A. wrote: 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 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? -- Mark Morgan Lloyd markMLl .AT. telemetry.co .DOT. uk [Opinions above are the author's, not those of his employers or colleagues] ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
[fpc-pascal] Hint converting to int64
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-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal