Lazarus
Home
Help
TinyPortal
Search
Login
Register
Lazarus
»
Forum
»
Free Pascal
»
General
(Moderators:
FPK
,
Tomas Hajny
) »
Can't wrap around
Free Pascal
Website
Downloads
Wiki
Documentation
Bugtracker
Mailing List
Lazarus
Website
Downloads (Laz+FPC)
Packages (OPM)
FAQ
Wiki
Documentation (RTL/FCL/LCL)
Bugtracker
CCR Bugs
GIT
Mailing List
Other languages
Foundation
Website
Useful Wiki Links
Project Roadmap
Getting the Source
Screenshots
How to use the forum
Forum Rules
About donations (wiki)
Bookstore
Computer Math and Games in Pascal
(preview)
Lazarus Handbook
Search
Advanced search
Recent
Cannot get FTP to work
by
garymq
[
Today
at 02:54:07 am]
Infernal error when decom...
by
Fibonacci
[
Today
at 12:56:28 am]
Linking a PortAudio stati...
by
Fred vS
[May 18, 2026, 10:53:41 pm]
Feature suggestion - repe...
by
ASerge
[May 18, 2026, 09:15:26 pm]
Anubis activated
by
440bx
[May 18, 2026, 09:14:22 pm]
When will lazarus actuall...
by
Curt Carpenter
[May 18, 2026, 08:59:21 pm]
wildcard utilities list
by
mas steindorff
[May 18, 2026, 08:35:41 pm]
StringGrid: which is "cur...
by
Bart
[May 18, 2026, 08:18:51 pm]
LazNodeEditor (visual nod...
by
fcu
[May 18, 2026, 07:16:40 pm]
TShellTreeView TopItem
by
Paolo
[May 18, 2026, 06:53:15 pm]
duplicate an Object at ru...
by
Thaddy
[May 18, 2026, 03:57:51 pm]
How to wait until a WebDA...
by
Hartmut
[May 18, 2026, 03:47:14 pm]
Can /my/ AI help me with ...
by
microxa
[May 18, 2026, 01:16:57 pm]
Nothing but chaotic attem...
by
mdalacu
[May 18, 2026, 12:45:46 pm]
Flamerobin error-message
by
Zvoni
[May 18, 2026, 09:11:06 am]
search via TSQLQuery
by
Zvoni
[May 18, 2026, 08:55:43 am]
Can I enter MySQL prompt ...
by
Zvoni
[May 18, 2026, 08:50:42 am]
TLazSerial : serial port ...
by
mas steindorff
[May 17, 2026, 10:50:34 pm]
PopupMenu on dock menu
by
systemgvp
[May 17, 2026, 08:32:50 pm]
[SOLVED] Dark Theme
by
Hansvb
[May 17, 2026, 07:29:22 pm]
Bug with constref?
by
LemonParty
[May 17, 2026, 07:15:45 pm]
FPC Unleashed (inline var...
by
Okoba
[May 17, 2026, 03:49:31 pm]
is this code correct?
by
Thaddy
[May 17, 2026, 03:23:29 pm]
Anubis's website security...
by
ALLIGATOR
[May 17, 2026, 02:45:52 pm]
Pure Pascal LZ4, LZ5 and ...
by
LemonParty
[May 17, 2026, 01:38:07 pm]
« previous
next »
Print
Pages: [
1
]
Author
Topic: Can't wrap around (Read 448 times)
LemonParty
Sr. Member
Posts: 470
Can't wrap around
«
on:
May 02, 2026, 01:37:38 pm »
Hello.
I create this topic because of this problem
https://forum.lazarus.freepascal.org/index.php/topic,73945.msg581824.html#msg581824
.
I simplified the problem in this code:
Code: Pascal
[Select]
[+]
[-]
{$mode ObjFPC}{$H+}{$R-}
const
PRIME64_1
=
Uint64
(
11400714785074694791
)
;
PRIME64_2
=
Uint64
(
14029467366897019727
)
;
var
a
:
UInt64
;
begin
a
:
=
PRIME64_1
+
PRIME64_2
;
end
.
This code not compile with error:
Quote
(10,16) Error: Overflow in arithmetic operation
Desirable to have a wrap around of values PRIME64_1 and PRIME64_2 in this situation.
Checked in trunk and 3.0.4+dfsg-22 [2019/01/24] of FPC. In both gives an error. In Lazarus 4.4 this code compiles with no problem (at least topic starter say that).
Why it doesn't wrap around in pointed versions of compiler?
Logged
Lazarus v. 4.99. FPC v. 3.3.1. Windows 11
Lutz Mändle
Jr. Member
Posts: 89
Re: Can't wrap around
«
Reply #1 on:
May 02, 2026, 02:39:14 pm »
With FPC 3.2.2 on Linux 64bit it doesn't work either.
It gives the same error (Error: Overflow in arithmetic operation).
Logged
Thaddy
Hero Member
Posts: 19165
Glad to be alive.
Re: Can't wrap around
«
Reply #2 on:
May 02, 2026, 02:56:08 pm »
This is only the case when the consts are untyped, because of the internal representation of untyped consts as signed types.
But this works:
Code: Pascal
[Select]
[+]
[-]
{$mode ObjFPC}{$H+}
const
PRIME64_1
:
Uint64
=
11400714785074694791
;
PRIME64_2
:
Uint64
=
14029467366897019727
;
var
a
:
UInt64
;
begin
a
:
=
PRIME64_1
+
PRIME64_2
;
end
.
«
Last Edit: May 02, 2026, 03:08:51 pm by Thaddy
»
Logged
objects are fine constructs. You can even initialize them with constructors.
LemonParty
Sr. Member
Posts: 470
Re: Can't wrap around
«
Reply #3 on:
May 02, 2026, 04:06:16 pm »
Thank you for checking, Lutz Mändle.
Great Thaddy, I hope this will cure the problem.
Logged
Lazarus v. 4.99. FPC v. 3.3.1. Windows 11
Martin_fr
Administrator
Hero Member
Posts: 12345
Debugger - SynEdit - and more
Re: Can't wrap around
«
Reply #4 on:
May 02, 2026, 04:16:41 pm »
Thaddy's example might want a {$WriteableConst off}
Or as a workaround:
Code: Pascal
[Select]
[+]
[-]
{$mode ObjFPC}{$H+}{$R-}
const
PRIME64_1
=
Uint64
(
11400714785074694791
)
;
PRIME64_2
=
Uint64
(
14029467366897019727
)
;
var
a
:
UInt64
;
begin
a
:
=
qword
(
pointer
(
PRIME64_1
)
+
PRIME64_2
)
;
end
.
I don't know, it might be worth opening an issue on this.
As for the example {$R-} is range checking. What should have been there is overflow checking {$Q-}. But that doesn't help either.
Logged
Ide Tools, Code completion and more
/
IDE cool features
/
Debugger Status
LemonParty
Sr. Member
Posts: 470
Re: Can't wrap around
«
Reply #5 on:
May 03, 2026, 07:27:55 pm »
I can't for some reason create an issue on gitlab. Previously I was able to do that.
Can someone post this issue?
Logged
Lazarus v. 4.99. FPC v. 3.3.1. Windows 11
LemonParty
Sr. Member
Posts: 470
Re: Can't wrap around
«
Reply #6 on:
May 06, 2026, 01:56:28 pm »
I successfully created an issue in bugtracker.
Logged
Lazarus v. 4.99. FPC v. 3.3.1. Windows 11
Print
Pages: [
1
]
« previous
next »
Lazarus
»
Forum
»
Free Pascal
»
General
(Moderators:
FPK
,
Tomas Hajny
) »
Can't wrap around
TinyPortal
© 2005-2018