Прошу прощения, если это концепция uber-easy, но мне трудно найти правильное мышление, чтобы правильно использовать дезинфицирующее средство, предоставленное clang
.
float foo(float f) { return (f / 0); }
Я компилирую этот небольшой фрагмент с помощью
clang++ -fsanitize=float-divide-by-zero -std=c++11 -stdlib=libc++ -c source.cpp -o osan
и я также компилирую "нормальную" версию моего объекта без использования дезинфицирующего средства
clang++ -std=c++11 -stdlib=libc++ -c source.cpp -o onorm
Я ожидал некоторого подробного вывода или некоторой ошибки с консоли, но при проверке файла с помощью nm
я нашел только 1 разницу
nm o* --demangle
onorm:
0000000000000000 T foo(float)
osan:
U __ubsan_handle_divrem_overflow
0000000000000000 T foo(float)
Таким образом, в санированной версии есть символ undefined с именем, которое напоминает дезинфицирующее средство, которое я использовал при компиляции; но все на самом деле "безмолвно" без вывода из интерфейса clang.
Как я должен использовать дезинфицирующее средство и какой правильный рабочий процесс? Какова точка этого символа undefined?