うーん・・・
汗を見ながら最適化が掛かるか否かを見てたんだけど
void foo() {
// ← ここに挿入する
printf("%d\n", *p);
printf("%d\n", *p);
return;
}
を基本にして
int* p = static_cast<int*>(malloc(sizeof(int)));
これはmallocの呼び出しからして消えた(つまりメモリリークするようにしか見えないのにメモリリークしないコードが生成された)
int* p = bar(); // 適当な関数
これは最適化が掛からなかった(つまり2回メモリから読み込んだ)

この違いは何だろう。
コンパイラはclang 3.7.0(370/final)