Gcc потребляет всю память при оптимизации -O3
Я попытался скомпилировать следующую функцию, чтобы увидеть, что из нее сделал gcc:
#include <stdint.h>
#include <stddef.h>
typedef struct giga
{
uint64_t g[0x10000000];
} giga;
uint64_t addfst(giga const *gptr, size_t num)
{
uint64_t retval = 0;
for (size_t i = 0; i < num; i++)
{
retval += gptr[i].g[0];
}
return retval;
}
И обнаружил, что gcc максимизирует мою память, заменяя себя до смерти.
Я обнаружил, что это происходит при оптимизации в -O3
, не пытались вскрыть точный флаг (ы), ответственный. Тестирование функции на gcc.godbolt показывает, что это gcc-специфический, но затрагивающий версии 4.8 и 4.9.
Является ли это подлинной ошибкой компилятора или моя функция нарушена?
Ответы
Ответ 1
Ошибка находится на gcc bugzilla, https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65518. Он был подтвержден и, по-видимому, зафиксирован в багажнике. Здесь, надеясь, что исправление в конечном итоге истощится до моего дистрибутива. Спасибо всем!