On Mon, Nov 24, 2014 at 11:07 AM, Christian Borntraeger <borntraeger@xxxxxxxxxx> wrote: > > Anyone with a new propopal? ;-) ^ one more proposal :) #define __ACCESS_ONCE(x) ({ typeof(x) __var = 0; (volatile typeof(x) *)&(x); }) #define ACCESS_ONCE(x) (*__ACCESS_ONCE(x)) works as lvalue... the basic idea is the same: constant zero can be used to initialize any scalar (including pointers), but unions and structs will fail to compile as: "error: invalid initializer" If I'm reading pr58145 gcc bug report correctly, it miscompiles only structs, so we can let ACCESS_ONCE to work on unions. Then the following will rejects structs only: #define __ACCESS_ONCE(x) ({ (typeof(x))0; (volatile typeof(x) *)&(x); }) #define ACCESS_ONCE(x) (*__ACCESS_ONCE(x))