[Issue 3150] cast from dynamic array to ulong is allowed
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon May 10 02:01:14 PDT 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3150
--- Comment #2 from Don <clugdbug at yahoo.com.au> 2010-05-10 02:00:27 PDT ---
druntime currently relies on this behaviour in one place, and it's pretty nasty
code. For example, it assumes pointers are 32 bits long.
rt/lifetime.d
_d_newarraymT()
_d_newarraymiT()
These both cast a void[] to a ulong.
Instead of:
result = cast(ulong)foo(ti, pdim, ndims);
should be:
static assert((void[]).sizeof == ulong.sizeof);
void[] r = foo(ti, pdim, ndims);
result = *cast(ulong *)&r;
In fact, this is a very ugly bit of code. It only seems to be used in e2ir.c,
NewExp::toElem(), where there's another hack to get the .ptr out of the ulong.
I don't see any reason why extern(D) couldn't be used instead, so that it could
just return an array.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list