14

次の関数をコンパイルして、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 バージョンに影響を与えます。
これは本物のコンパイラのバグですか、それとも関数が壊れていますか?

4

1 に答える 1

3

バグは gcc bugzilla、https: //gcc.gnu.org/bugzilla/show_bug.cgi?id=65518 にあります。確認済みで、どうやらトランクに固定されているようです。修正が最終的に私のディストリビューションに滴り落ちることを願っています。みんな、ありがとう!

于 2015-03-23T22:36:33.303 に答える