On Sun, Jun 06, 2021 at 12:22:44PM -0700, Linus Torvalds wrote: > On Sun, Jun 6, 2021 at 11:59 AM Jakub Jelinek <jakub@xxxxxxxxxx> wrote: > > > > I think just > > #define barrier() __asm__ __volatile__("" : : "i" (__COUNTER__) : "memory") > > should be enough > > Oh, I like that. Much better. > > It avoids all the issues with comments etc, and because it's not using > __COUNTER__ as a string, it doesn't need the preprocessor games with > double expansion either. > > So yeah, that seems like a nice solution to the issue, and should make > the barriers all unique to the compiler. __COUNTER__ is a preprocessor thing as well, and it may not do all that you expect. Ex.: === #define fm() __COUNTER__ int gm(void) { return fm(); } int hm(void) { return fm(); } int fi(void) { return __COUNTER__; } int gi(void) { return fi(); } int hi(void) { return fi(); } === The macro version here works as you would hope, but the inlined one has the same number everywhere. Segher