[PATCH 1/3] include: Define FIELD_OFFSET to the standard offsetof macro
Michael Stefaniuc
mstefani at redhat.com
Mon Dec 10 14:16:17 CST 2012
On 12/10/2012 07:37 PM, Amine Khaldi wrote:
> This prevents the undefined behavior (null pointer dereference)
> diagnostics (clang with ubsan checks for example).
This is a bug in clang. There is no null pointer dereference.
Afair gcc tried to pull this trick too but got educated about their error.
>
> ---
> include/winnt.h | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/include/winnt.h b/include/winnt.h
> index 207adaa..a3b996a 100644
> --- a/include/winnt.h
> +++ b/include/winnt.h
> @@ -746,8 +746,12 @@ typedef struct _MEMORY_BASIC_INFORMATION
>
> #define UNICODE_STRING_MAX_CHARS 32767
>
> +#if defined(__GNUC__) || defined(__clang__)
> +#define FIELD_OFFSET(type, field) offsetof(type, field)
> +#else
> #define FIELD_OFFSET(type, field) \
> ((LONG)(INT_PTR)&(((type *)0)->field))
> +#endif
>
> #define CONTAINING_RECORD(address, type, field) \
> ((type *)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
bye
michael
More information about the wine-devel
mailing list