Есть ли portable аналог __attribute__((noinline))?
По идее, данная вещь должна чиниться правильно расставленными барьерами…
У вас где-то в другом месте проблема, а это не решение, а просто уход от неё.

Портабельного аналога в стандарте нет. А Clang понимает __attribute__((noinline)).

Но если у вас там действительно всякие нестандартные атомики, то:

1. используйте стандартные атомики;

2. используйте ordered атомики;

3. используйте барьеры (или для процессора, или только для компилятора asm volatile("":::"memory"););

4. выясните, почему компилятор себе позволяет делать reordering вокруг ваших ассемблерных вставок или интринсиков. Баг компилятора?

А то потом придёт какой-нибудь link-time optimization и снова всё вам сломает.

И да, вы уверены что вы правильно написали свою критическую секцию? И зачем?