В gcc-4.9 изменяется в нем говорится:
UndefinedBehaviorSanitizer (ubsan), быстрое поведение undefinedдетектор, и его можно включить с помощью -fsanitize = undefined. Различные вычисления будут использоваться для обнаружения поведения undefinedво время выполнения. UndefinedBehaviorSanitizer в настоящее время доступен для Языки C и С++.
Я рассмотрел этот вопрос (С++-реализация, которая обнаруживает поведение undefined?), но выглядит довольно устаревшей.
Эта ссылка (http://gcc.gnu.org/ml/gcc-patches/2013-06/msg00264.html) содержит некоторую информацию об этом, но ей несколько месяцев.
Это попытка добавить к GCC Behavior Sanitizer. Обратите внимание, что это очень альфа-версия; пока это не так много, момент, когда он должен обрабатывать деление на нулевые случаи, INT_MIN/-1 и различные сдвиговые случаи (смещение отрицательным значением, смещение, когда второй операнд >= чем TYPE_PRECISION (first_operand) и тому подобное. (По целочисленным типам, до сих пор.)
Из того, что я прочитал, он портирован на gcc
из LLVM
.
Я пробовал его с помощью (5 / 0)
, и единственным отличием, похоже, является этот вывод:
main.cpp:5:19: runtime error: division by zero
Есть ли у кого-нибудь больше информации об этом или о том, что у него есть?