Volatileは正確にコンパイルされないことがある

"Volatiles Are Miscompiled, and What to Do about It"

C言語のvolatile変数が、最適化によって正確にコンパイルされなくなるという話。組み込みシステムにおいて、メモリマップトなI/Oレジスタへの処理はvolatileな変数への処理として行ったりするが、それが最適化によって消滅するケースが有る。
(volatile付け忘れで処理が消滅するというのはよくあるケースだけど、付けても消えるバグがコンパイラに存在する/した)
そういうエラーを検出するために、特定順でのメモリアクセスとなるプログラムをランダムに生成するツールと、その実行結果の検証ツールを製作し、コンパイラをテストしたところ数%でエラーになり、簡単なhelper関数の挿入でその割合を減らすことはできた。
経験的にはみんな知ってることだけど、ちゃんと論文になるんだなぁと思った。日頃から着眼点を鍛えないと。