On Tue, Jan 12, 2021 at 9:18 AM Alexander Potapenko [off-list ref] wrote:
On Tue, Jan 5, 2021 at 7:28 PM Andrey Konovalov [off-list ref] wrote:
quoted
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.
Note that compiler barriers won't probably help against removing
memory accesses, they only prevent reordering.
quoted
+ barrier(); \
expression; \
+ barrier(); \
The need for barriers is not obvious to the reader, so a comment in
the code clarifying that would be nice.
Will add a comment in v2, thanks!