On Thu, 2019-11-28 at 11:39 +0800, Pi-Hsun Shih wrote: > Use offsetof to calculate offset of a field to take advantage of > compiler built-in version when possible, and avoid UBSAN warning when > compiling with Clang: [] > diff --git a/include/uapi/linux/wireless.h b/include/uapi/linux/wireless.h [] > @@ -1090,8 +1090,7 @@ struct iw_event { > /* iw_point events are special. First, the payload (extra data) come at > * the end of the event, so they are bigger than IW_EV_POINT_LEN. Second, > * we omit the pointer, so start at an offset. */ > -#define IW_EV_POINT_OFF (((char *) &(((struct iw_point *) NULL)->length)) - \ > - (char *) NULL) > +#define IW_EV_POINT_OFF offsetof(struct iw_point, length) > #define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point) - \ > IW_EV_POINT_OFF) This is uapi. Is offsetof guaranteed to be available? Perhaps this is better without using another macro #define IW_EV_POINT_OFF ((size_t)&((struct iw_point *)NULL)->length)