> But you can pass 'X509 **' as 'void *'. So...
> void x509func(void* p) { X509** pp = (X509**)p; ... }
> void trampoline(void* p) { x509func(p); }
> void caller(void) { X509* p; trampoline(&p); }
>
> should (MUST?) work just fine.
>
> /r$


When I change my test programs from 'float *' to either 'void *' or 'char
*', the warning goes away. I believe this is completely safe.

So long as the pointer is a 'char *' or a 'void *' at the point of
contention, you are fine. A union would also work. (Whether you use a real
union with a pointer to every possible type or a bogus union containing just
a 'char **'.

The Linux kernel contains stuff like this:

/*
* Make sure gcc doesn't try to be clever and move things around
* on us. We need to use _exactly_ the address the user gave us,
* not some alias that contains the same information.
*/
typedef struct { volatile int counter; } atomic_t;

DS


__________________________________________________ ____________________
OpenSSL Project http://www.openssl.org
Development Mailing List openssl-dev@openssl.org
Automated List Manager majordomo@openssl.org