[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
egcs bug?
青木@kinotropeです。
PostgreSQLのコンパイルで最適化オプション(-O, -O2)を付けると正常に動作
しない件をちょっと調べてみました。
問題を簡単にしていくと、下記のようなものになると思います。
プロトタイプ宣言はわざと外しています。
% cat i.c
char
int2eq(short arg1, short arg2)
{
return arg1 == arg2;
}
% cat t.c
#include <stdio.h>
int main()
{
short s1 = -2;
int s2 = 65534; /* 呼び出し側がintかどうかは未確認ですが */
extern char int2eq();
printf("%d == %d: %d\n", s1, s2, int2eq(s1, s2));
}
最適化をかけた場合、 int2eq()は short ではなく int で処理しているよう
です。
cc -S -O i.c すると、
int2eq:
xor 3,3,4
subfic 0,3,0
adde 3,0,3
blr
のようになります。
本来int2eq()の呼び出し側でshortを渡すようにすべきですが、まだ追い切れ
ていません。