[cfe-dev] [UBsan suppression] implicit-integer-sign-change
Pascal Cremer via cfe-dev
cfe-dev at lists.llvm.org
Fri Jan 25 08:39:02 PST 2019
Thanks Roman,
Here is a more detailed report:
My program is
int main() {
int i = 1073741824;
while (i > 0) {
i *= 2;
}
i = 139;
char c = i;
}
I use clang version 7.0.1
My suppression file:
#implicit-integer-sign-change:main.cpp
signed-integer-overflow:main.cpp
I start and compile in fish shell:
export UBSAN_OPTIONS=suppressions=suppression; and clang++
-fsanitize=address,integer main.cpp -o main; and ./main
which gives the output:
main.cpp:8:11: runtime error: implicit conversion from type 'int' of
value 139 (32-bit, signed) to type 'char' changed the value to -117
(8-bit, signed)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior main.cpp:8:11 in
If I remove the implicit-integer-sign-change suppression, I get as expected
main.cpp:4:5: runtime error: signed integer overflow: 1073741824 * 2
cannot be represented in type 'int'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior main.cpp:4:5 in
main.cpp:8:11: runtime error: implicit conversion from type 'int' of
value 139 (32-bit, signed) to type 'char' changed the value to -117
(8-bit, signed)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior main.cpp:8:11 in
If I have both suppressions active, I get:
AddressSanitizer: failed to parse suppressions
I double checked: changes in the suppression file need no recompilation.
Pascal
On 25/01/2019 14:21, Roman Lebedev wrote:
> On Fri, Jan 25, 2019 at 4:07 PM Pascal Cremer via cfe-dev
> <cfe-dev at lists.llvm.org> wrote:
>> I would like to suppress implicit-integer-sign-change warnings which
>> encounter in
>>
>> 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)
> Can you please show the whole output, including "SUMMARY:
> UndefinedBehaviorSanitizer: implicit-????" line?
> (IIRC you need to also enable asan to get that line)
>
>> I tried with this line in my suppressions file (which works great for
>> other types of warnings)
>>
>> implicit-integer-sign-change:/path/to/boost/*
> Assuming that you are actually seeing the implicit-integer-sign-change
> issue, according to
> https://github.com/llvm-mirror/compiler-rt/blob/dd358a8a7ce65eb3189740d99b6a450605947aab/test/ubsan/TestCases/ImplicitConversion/integer-sign-change-blacklist.c#L12
> that should work.
>
> I'm not sure, is that blacklist read at runtime or not, do you need to
> recompile the code in order for it to be updated?
>
>> However, I get at runtime:
>>
>> UndefinedBehaviorSanitizer: failed to parse suppressions
>>
>> I also reported this on SO a while ago:
>>
>> https://stackoverflow.com/questions/53466501/c-clang-ubsan-suppression-flag-name
>>
>> Any help would be much appreciated.
> Roman.
>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
More information about the cfe-dev
mailing list