Is void* compatible with function pointers?

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 23 18:41:12 PDT 2014


On Mon, 23 Jun 2014 20:48:34 -0400, deadalnix <deadalnix at gmail.com> wrote:

> If it will work that way on most plateforms, the other way around
> can do VERY nasty things, even on common plateforms like ARM.

Casting to and from a function pointer should not do anything horrific,  
unless the intermediate type cannot hold the full function pointer.

It is no different than casting from immutable pointer to mutable pointer,  
and then back to immutable pointer. As long as you don't write to it while  
it's mutable, it's not illegal.

> This is because most CPUs consider the instructions as immutable.
> Even x86 do not provide any guarantee (which makes it very hard
> to swap implementation outside of a VM).

Remember, these are not functions, but function pointers. You are not  
modifying the function at all.

> Casting from void* to function is pretty guaranteed to be
> undefined behavior on all plateforms, unless you emit the proper
> barriers.

Can you demonstrate a C example that will fail on ARM?

-Steve


More information about the Digitalmars-d mailing list