海老原と申します。
ずいぶん前からml購読していました。以後よろしくお願いいたします。
>どもども、神戸の澤です。
>もちろん、これが正解です。しかし、volatileを付けないとあんなコードにな
>ってしまうのって正しいんでしょうかねぇ。うーーむ......
めっちゃ正しいです。コンパイラ君の正解です。:-)
gccのバグじゃないです。
だって数学的に考えて、
for (; x != 0; )
;
は一度評価が真であったら未来永劫、真であり続けますもん。
ここだけみて、『他所でxが書き換えられているかも知れない』という
前提はコンパイラは考えないので
人間がvolatile(揮発性...データは毎回評価しなければならない)
をつけてあげる必要がありますです。
H8みたいにメモリマップドI/Oの、メモリリードのポーリングなんかも
同じ問題がおきます。