未定義動作は「セグフォで済む」という幻想をGCCが粉砕
Attention people who think UB is fine
Cの未定義動作(UB)は「最悪セグフォで済む」と主張する人々に、著者がコンパイラの実例で反論する。std::unreachable()を含む関数を置くと、GCC 16.2は呼ばれていないexplode()のコードまで生成してしまう。さらにnullポインタへの書き込みでは、99ではなく0を書き込んでから不正命令でクラッシュ。同じUBでもコンパイラ次第で結果は全く変わる。
「nullポインタの参照外し? そんなことは起こり得ないから、バイナリサイズを節約するためにこの関数の命令生成をやめよう」と、GCCとclangは考えたように見える。