GCC превратил неопределённое поведение в «взрыв шоколада»

Attention people who think UB is fine

Автор показывает на примерах, что неопределённое поведение в C — это не «в худшем случае segfault». Вызов std::unreachable() заставляет GCC 16.2 с -O1 встроить в код функцию explode(), которую никто не вызывал, а разыменование nullptr записывает в адрес ноль неожиданное значение и падает на инструкции ud2. Компилятор не обязан обнаруживать UB: он вправе считать, что такого кода просто не бывает, и выкидывать его.

Ни один компилятор не обязан «обнаруживать» UB вообще.

Ещё за этот день

2026-10-25