On Tue, Jan 12, 2021 at 8:50 PM Andrey Konovalov <andreyknvl@xxxxxxxxxx> wrote: > > On Tue, Jan 12, 2021 at 9:18 AM Alexander Potapenko <glider@xxxxxxxxxx> wrote: > > > > On Tue, Jan 5, 2021 at 7:28 PM Andrey Konovalov <andreyknvl@xxxxxxxxxx> wrote: > > > > > > It might not be obvious to the compiler that the expression must be > > > executed between writing and reading to fail_data. In this case, the > > > compiler might reorder or optimize away some of the accesses, and > > > the tests will fail. > > > > Have you seen this happen in practice? > > Yes. > > > Are these accesses to fail_data that are optimized (in which case we > > could make it volatile)? > > Yes. AFAIU compiler doesn't expect expression to change fail_data > fields, no those accesses and checks are optimized away. Ah, actually no, it reorders the expression and puts it after fail_data fields checks. That's why I put the barriers. > > Note that compiler barriers won't probably help against removing > > memory accesses, they only prevent reordering. But using WRITE/READ_ONCE() might also be a good idea, as technically the compiler can optimize away the accesses.