Я пытаюсь остановить gcc от встраивания функции следующим образом:
template <typename T, precision P> __attribute__ ((noinline)) void func () {}
Но она по-прежнему встроена в функцию.
Есть ли способ заставить ее?
Привет
__attribute__((noipa)) отключает больше оптимизаций, чем просто встраивание. В частности, он также отключает оптимизацию, которая замечает, что функция является чистой (и, следовательно, вызовы могут быть удалены, если только не будет возвращено значение). В документации для __attribute__((noinline)) явно упоминаются пустые функции и необходимость добавить, например, asm("");, чтобы они не были оптимизированы.
__attribute__((noipa))
__attribute__((noinline))
asm("");
Заставьте gcc поверить, что у этой функции есть побочные эффекты:
template <typename T, precision P> __attribute__ ((noinline)) void func () { asm volatile(""); }
демо