最適化バグ?

/etc/mk.confにこんな感じで最適化オプションを指定する。

.if ${MACHINE} == "zaurus"
CPUFLAGS+= -Os -mcpu=xscale
.endif

この状態でビルドをかけるとこんなエラーで止まる。

src/../obj.zaurus/destdir.zaurus/usr/include/math.h: In function 'exp2':
src/lib/libm/src/s_exp2.c:346:15: error: 'twopk' may be used uninitialized in this function
src/lib/libm/src/s_exp2.c:346:15: note: 'twopk' was declared here
src/lib/libm/src/s_exp2.c:346:22: error: 'twopkp1000' may be used uninitialized in this function
src/lib/libm/src/s_exp2.c:346:22: note: 'twopkp1000' was declared here

一方さっきのオプションを外してやるとビルドが通るようになる。

ソースはsrc/lib/libm/src/s_exp2.cなんだが、別に未初期化の状態で参照されることは無さそうに思える。
変数に適当な初期値を設定しておけばエラーは黙るけど、これが単なる誤検出だった場合はいいが実際に未初期化で参照を行いうるパスがあるバイナリを吐いていた場合は初期値を入れたところで結局異常動作をすることに変わりはないわけで。

まぁ気がむいたら逆アセンブラでもして確認してみるかねぇ。


そして-xでXのビルドも行う予定がうっかり-Xでパス指定するのを忘れてビルドをやり直す ('・ω・`)