clang ++ — C ++ clang UBsan имя флага подавления

Запуск gzip.hpp код от Boost версии 1.64 с убсаном clang выдает следующее сообщение:

path/to/boost/1_64_0/include/boost/iostreams/filter/gzip.hpp:674:16: runtime error: implicit conversion from type 'int' of value 139 (32-bit, signed) to type 'char' changed the value to -117 (8-bit, signed)
#0 0x7fed40b77bc2 in boost::iostreams::basic_gzip_compressor<std::allocator<char> >::basic_gzip_compressor(boost::iostreams::gzip_params const&, long)

Я хотел бы подавить это с помощью файла подавления. Для других предупреждений это сработало:

 unsigned-integer-overflow:path/to/boost/*

В этом случае я ожидаю, что это должно работать

implicit-integer-sign-change:/lfs/vlsi/tools/boost/*

но это дает во время выполнения

UndefinedBehaviorSanitizer: failed to parse suppressions

Каково правильное название этого флага sanatizer?

Смотрите также: https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#runtime-suppressions

и из https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#available-checks

-fsanitize = implicit-integer-sign-change: неявное преобразование между целочисленными типами, если это меняет знак значения. То есть, если
исходное значение было отрицательным, а новое значение положительным (или
ноль), или исходное значение было положительным, а новое значение
отрицательный. Проблемы, обнаруженные этим дезинфицирующим средством, не являются неопределенным поведением,
но часто непреднамеренно.

4

Решение

Согласно этой самой документации, которую вы читаете, вы подавляете сообщения UBSan, используя следующий шаг:

Отключение Инструментовки
with__attribute __ ((no_sanitize ( «не определено»))) ¶

Вы отключаете проверки UBSan для определенных функций
с __attribute__((no_sanitize("undefined"))). Вы можете использовать все значения
-fsanitize = флаг в этом атрибуте, например если ваша функция
намеренно содержит возможные целочисленные переполнения со знаком, вы можете
use__attribute __ ((no_sanitize ( «знаково-целочисленное переполнение»))).

Этот атрибут может не поддерживаться другими компиляторами, поэтому рассмотрим
используя его вместе с #ifdefined (лязг).

Итак, что вы должны сделать, это: проверить документацию на той же странице на предмет того, что вы хотите подавить, и связать ее с use__attribute__((no_sanitize("here_goes_checks_you_want_to_suppress"))). или же use__attribute__((no_sanitize("undefined"))). отключить UBSan вообще.

Помимо этого, кажется, что UBSan создает переполнение целых чисел SIGNED, и вы пытаетесь подавить переполнение целых чисел UNSIGNED.

ССЫЛКИ: https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]