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
[New Component] ExtTabCtr...
by
ovidio
[
Today
at 07:31:41 pm]
IndySecOpenSSL is now ava...
by
Thaddy
[
Today
at 06:24:37 pm]
Toying Pascal Documenting...
by
paule32
[
Today
at 05:22:32 pm]
Gitlab site history date.
by
Fred vS
[
Today
at 05:07:59 pm]
Cursor changes to arrow o...
by
atlatl
[
Today
at 05:02:45 pm]
Sizes and SizeInt
by
440bx
[
Today
at 02:15:13 pm]
how to add a ForEach call...
by
jamie
[
Today
at 12:42:04 pm]
XLibre, finally and fortu...
by
kagamma
[
Today
at 12:15:10 pm]
[SOLVED] Watches panel is...
by
CM630
[
Today
at 12:06:33 pm]
How to monitor changes in...
by
Martin_fr
[
Today
at 11:55:18 am]
Conscious Artificial Inte...
by
Dzandaa
[
Today
at 11:50:59 am]
Printer Info
by
J-G
[
Today
at 11:26:52 am]
Strange Behaviour at Runt...
by
andrew Bubble
[
Today
at 11:19:45 am]
Can I get the position an...
by
CM630
[
Today
at 11:00:33 am]
WEBP, no DLLs
by
CM630
[
Today
at 08:52:43 am]
Dataset EnableControls/Di...
by
Sharfik
[
Today
at 07:40:21 am]
TVirtualDBTreeEx and upda...
by
Sharfik
[
Today
at 07:36:30 am]
made hooking newinstance ...
by
Thaddy
[
Today
at 06:56:17 am]
Interesting video
by
Curt Carpenter
[
Today
at 04:28:27 am]
I found an actual use for...
by
jamie
[June 09, 2026, 11:48:04 pm]
Lazarus Main and Gnome/Wa...
by
Jonax
[June 09, 2026, 09:02:10 pm]
MacOS post compilation sc...
by
marcou
[June 09, 2026, 07:30:07 pm]
water filling simulation
by
Dzandaa
[June 09, 2026, 06:53:35 pm]
Pdf Viewer in Pascal
by
Tomxe
[June 09, 2026, 05:00:32 pm]
How can 'Canvas does not ...
by
J-G
[June 09, 2026, 03:05:01 pm]
« previous
next »
Print
Pages: [
1
]
Author
Topic: Can't wrap around (Read 465 times)
LemonParty
Hero Member
Posts: 530
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: 99
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: 19268
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
Hero Member
Posts: 530
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: 12405
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
Hero Member
Posts: 530
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
Hero Member
Posts: 530
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