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