4

gzip.hppブースト バージョン 1.64 のコードを clang の ubsan で実行すると、次のメッセージが表示されます。

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

このサナタイザーの旗の正しい名前は?

参照: https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#runtime-suppressions

およびhttps://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#available-checksから

-fsanitize=implicit-integer-sign-change: 整数型間の暗黙的な変換 (値の符号が変わる場合)。つまり、元の値が負で新しい値が正 (またはゼロ) の場合、または元の値が正で新しい値が負の場合です。このサニタイザーによって検出される問題は、未定義の動作ではありませんが、多くの場合、意図的ではありません。

4

2 に答える 2