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. Он был подтвержден и, по-видимому, зафиксирован в багажнике. Здесь, надеясь, что исправление в конечном итоге истощится до моего дистрибутива. Спасибо всем!