> 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                           [EMAIL PROTECTED]

Reply via email to