パスワードを忘れた? アカウント作成
416257 journal

okuの日記: -fno-builtin-sprintf

日記 by oku

某友人からのメールに曰く、

遊んでいたら GCC 4.1.1 (または GNU libc 2.5) のバグを見つけたよ

#include <stdio.h>

void foobar(char *name)
{
  char buf[256];

  sprintf(buf, "%s");
}

ちなみにこれ↑、GCC-4.x では internal compiler error になります。 GCC-3.x だと大丈夫です。

というわけで、ちょっと調査してみてお返事しました。

これ、compiler builtin のバグぽいですね。
-fno-builtin とか
-fno-builtin-sprintf したら通りました。

再現への最短手はこんな感じかな。

extern int
sprintf(char *__restrict__,
        const char *__restrict__,
        ...) __attribute__ ((__nothrow__));

int main(void)
{
        char name[] = "";
        sprintf(name, "%s");
        return 0;
}

一応、試したのは Gentoo Linux の GCC-4.1.1 だったので、まずは、と言う感じで Gentoo Bugzilla の #163623 へ報告してみました。 で、まあ、色々あった挙げ句、既に 2007-01-17 に本家に #30473 として報告されてることが分かりました。

というわけで、今はそちらのパッチが Gentoo に取り込まれるのを待っています。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

最初のバージョンは常に打ち捨てられる。

読み込み中...