http://d.puremagic.com/issues/show_bug.cgi?id=10763
--- Comment #9 from Iain Buclaw <[email protected]> 2013-08-19 05:29:09 PDT --- (In reply to comment #8) > (In reply to comment #7) > > (In reply to comment #3) > > > It's basically the same as issue 10266. > > > The corner cases arise if you still disallow &x + 1. My guess is that > > > you're > > > allowing it in your implementation? > > > > > > The problem with allowing it is that we're departing from C. And there's > > > annoying things like: > > > > > > // global scope > > > int x; > > > int *p = &x + 1; // points to junk! - must not compile > > > > > > > > > Is there really a use case for this unsafe behaviour? > > > > Only one would be in std.math if we want to make the elementary functions > > CTFE-able (we've discussed this before). > > That's why my proposed solution for that is to allow only the complete > expression, where the pointer is instantly dereferenced: > > (cast(ulong *)cast(void *)&f)[0]; > > and it really only needs to be allowed for 80-bit reals, since casting > float<->int and double<->long is already supported. > And (speaking as someone who stubbed out your implementation of float<->int and double<->long cast) the only reason why it's supported is because the backend I implement against can (thankfully) do re-interpreted native casts between basic types such as integer, float, complex and vectors. You will need to support all reals that have support in std.math. This includes 64-bit, 80-bit, 96-bit (really just 80-bit), 128-bit (likewise), and 128-bit (quadruple). There are only three supported formats really... (double-double will have to keep with partial support for the time being, sorry PPC!) > The minimal operations are: > - significand <-> ulong > - sign + exponent <-> ushort > > That would give us four special-case hacks which are x87 specific. Effectively > they are intrinsics with ugly syntax. > I veto any new addition that is x87 specific - or, more accurately endian specific. Remember its: version(BigEndian) short sign_exp = (cast(ushort*)&x)[0]; else short sign_exp = (cast(ushort*)&x)[5]; -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
