digitalmars.D.bugs - [Issue 4491] New: Assigning large const value to ulong type results in "signed integer overflow"
- d-bugmail puremagic.com (41/41) Jul 21 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4491
- d-bugmail puremagic.com (19/19) Jul 21 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4491
- d-bugmail puremagic.com (11/11) Jul 21 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4491
- d-bugmail puremagic.com (9/20) Jul 22 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4491
http://d.puremagic.com/issues/show_bug.cgi?id=4491
Summary: Assigning large const value to ulong type results in
"signed integer overflow"
Product: D
Version: D1 & D2
Platform: x86
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody puremagic.com
ReportedBy: ibuclaw ubuntu.com
The following code:
import std.stdio;
void main()
{
ulong t;// = 18446744073709551615;
printf("%llu\n", t.max);
}
Outputs:
18446744073709551615
However, I get a "signed integer overflow" when I try to assign the value
directly.
Code:
import std.stdio;
void main()
{
ulong t = 18446744073709551615;
printf("%llu\n", t);
}
Outputs:
bug.d(4): signed integer overflow
Using 'cast(ulong)18446744073709551615' doesn't help either, so I presume this
happens before D knows what datatype the large integer will be assigned to.
IMO, assignments of constant values within the range of foo.min to foo.max
should be allowed for all types.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 21 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4491
Don <clugdbug yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |diagnostic
CC| |clugdbug yahoo.com.au
You need to add an 'L' suffix when it's larger than int.max, and a 'U' suffix
when it's unsigned.
import std.stdio;
void main()
{
ulong t = 18446744073709551615UL;
printf("%llu\n", t);
}
The error message should make this clearer. Marking as a 'diagnostic' bug.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 21 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4491
bearophile_hugs eml.cc changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |bearophile_hugs eml.cc
What's bad in the compiler/language accepting a line like:
ulong t = 18446744073709551615;
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 21 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4491
You need to add an 'L' suffix when it's larger than int.max, and a 'U' suffix
when it's unsigned.
import std.stdio;
void main()
{
ulong t = 18446744073709551615UL;
printf("%llu\n", t);
}
The error message should make this clearer. Marking as a 'diagnostic' bug.
I suppose that makes sense once you know. Though it seems that it should more
like syntactical sugar to me, rather than a mandatory marking.
For example, "1e6" gets translated to 1_000_000.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 22 2010









d-bugmail puremagic.com 