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