On Mon, Nov 24, 2014 at 5:30 AM, David Howells <dhowells@xxxxxxxxxx> wrote: > Christian Borntraeger <borntraeger@xxxxxxxxxx> wrote: > >> +#define get_scalar_volatile_pointer(x) ({ \ >> + typeof(x) *__p = &(x); \ >> + volatile typeof(x) *__vp = __p; \ >> + (void)(long)*__p; __vp; }) >> +#define ACCESS_ONCE(x) (*get_scalar_volatile_pointer(x)) If the goal is to catch non-scalar users, the following is shorter: #define ACCESS_ONCE(x) (((typeof(x))0) + *(volatile typeof(x) *)&(x)) it will block union and struct accesses. If you want to allow union and disallow struct, then replace + with , -- To unsubscribe from this list: send the line "unsubscribe linux-x86_64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html