t-nissieの日記: 【電脳】gcc 4.8.0 が無限ループにするというやつが無限ループにならない 2
http://cpplover.blogspot.jp/2013/03/gcc-48spec.html より
gcc 4.8.0 が無限ループにするというやつが無限ループにならない。
警告は出るけど…
(追記)
SourceForge.JP Magazineの記事には
ループ最適化機構「Graphite」を有効にするためには「CLooG 0.18.0」および「ISL 0.11.1」も必要となる。
とあります.これらを入れていないので無限ループにならずエラーメッセージだけなのかもしれません.
不注意で申し訳ないです.4月下旬に試してまたレポートできると思うんですが.
タレコミをするなら,いろいろわかっていないとダメですねぇ.
$ gcc --version
gcc (GCC) 4.8.0
$ head -22 *
==> satd.c <==
/* satd.c */
#include <stdio.h>
#include <stdlib.h>
#include "undef_gcc48.h"
int main()
{
int i;
int s=-1;
for (i=0; i<16; i++) {
d[i] = s*i;
printf("%d\n", d[i]);
s = -s;
}
printf("%d\n", SATD());
return 0;
}
==> undef_gcc48.c <==
#include "undef_gcc48.h"
int SATD()
{
int satd = 0, dd, k;
for (dd=d[k=0]; k<16; dd=d[++k]) {
satd += (dd < 0 ? -dd : dd);
}
return satd;
}
==> undef_gcc48.h <==
int d[16];
int SATD();
$ gcc -Wall -c -O3 undef_gcc48.c
undef_gcc48.c: 関数 ‘SATD’ 内:
undef_gcc48.c:5:29: 警告: 配列の添字が配列の境界を上回っています [-Warray-bounds]
for (dd=d[k=0]; k<16; dd=d[++k]) {
^
$ gcc -Wall -c -O3 satd.c
$ gcc -Wall -o satd -O3 satd.o undef_gcc48.o
$ ./satd
0
1
-2
3
-4
5
-6
7
-8
9
-10
11
-12
13
-14
15
120
$
リンク先で訂正されてる (スコア:2, 参考になる)
http://blog.regehr.org/archives/918 [regehr.org]
リリース直前に土壇場で修正が入ったそうな。
Re:リンク先で訂正されてる (スコア:1)
love && peace && free_software
t-nissie