Dynamic arrays allocation size
"Luís
"Luís
Mon Mar 25 19:23:10 PDT 2013
Hi,
There seems to be a bug allocating large dynamic arrays in a
64-bit aware dmd (v2.062). Apparently, the size argument makes a
trip through 32-bit ptrdiff_t land or something like that:
unittest
{
immutable size_t size = 3 * 1024 * 1024 * 1024;
auto data = new byte[size]; // compiler error:
// file.d(line): Error: negative array index
18446744072635809792LU
}
unittest
{
immutable size_t size = 4 * 1024 * 1024 * 1024;
auto data = new byte[size]; // fails silently, zero length
array
assert(data.length != 0); // assert error
}
Have you seen this before? I can open a bug, but just checking.
In any case, I don't understand why the compiler doesn't complain
about overflows at compile time:
unittest
{
size_t s1 = uint.max + 1; // shouldn't it complain with -m32
flag? it does not.
assert(s1 != 0); // fails for -m32, as expected
uint s2 = 0xFFFFFFFF + 1; // shouldn't it complain? it does
not.
}
Regards,
Luís
More information about the Digitalmars-d
mailing list