Profile

Masanori Ogino 𓀁

181351 posts 1993 follows 1215 followers

Please pay attention to random failures.

https://mstdn.maud.io/@omasanori

Masanori Ogino 𓀁 omasanori@mstdn.maud.io

blog.llvm.org/2011/05/what-eve の例はこれですね。

void contains_null_check(int *P) {
 int dead = *P;
 if (P == 0) return;
 *P = 4;
}

このコードに「不要なNULLチェックを削除する」最適化を行うと、int dead = *P;という(PがNULLだとその時点で止まる)文があることから、if (P == 0) return;に到達する場合はチェックせずともNULLでないことは明らかなので if (P == 0) return;が消えます。
その後で「使われていない変数を削除する」最適化を行うとint dead = *P;も消えます。

void contains_null_check(int *P) {
 *P = 4;
}

結果、NULLチェックがあったはずのコードからNULLチェックが消えます。何が悪かったかというと最適化の順番……ではなく、int dead = *P;が悪い