On Tue, 24 Jun 2014 12:55:09 -0400, H. S. Teoh via Digitalmars-d <[email protected]> wrote:

On Tue, Jun 24, 2014 at 11:36:26AM -0400, Steven Schveighoffer via Digitalmars-d wrote:
On Tue, 24 Jun 2014 00:24:50 -0400, deadalnix <[email protected]> wrote:
[...]
>Anything that JIT is affected. Consider the pseudocode:
>
>void JIT() {
>     void* code = malloc(XXX);
>     // Write instructions into the allocated chunk of memory.
>
>     membar(); // Memory barrier to avoid reordering.
>
>     auto fun = cast(void function()) code;
> fun(); // Even if your codegen is correct, anything can happen this point.
>}

This is not what we are talking about.

We are talking about whether a valid function pointer can be cast to
void * and back again. It is undefined for C/C++. Should it be defined
for D?
[...]

It's a judgment call. Defining it means that (void*).sizeof must be the
size of the largest pointer type on a particular platform, meaning that
if, for example, pointer to data is 32-bit but pointer to function is
64-bit, then we're effectively doubling the size of void* (it must be
64-bit to support free casting to/from function pointers) relative to
any other non-function pointer. So code that deals only with data void*
will have to pay for this cost for no benefit.

there are other options. We can not support the platform (I don't think this is a huge loss). We can not support casting function pointers to void * on that platform.

-Steve

Reply via email to