tst_QGlobal: work around ubsan issue in toString(qint128)
Found a problem on GCC 9.4 where asan/ubsan seems to break std::numeric_limits<int128>::min(): runtime error: negation of 0x80000000000000000000000000000000 cannot be represented in type '__int128'; cast to an unsigned type to negate this value to itself This is the -i _after_ we've already checked for ::min() two lines above. It works with Q_INT128_MIN, though, so use that. Pick-to: 6.6 Change-Id: I778980baf4e7eea9f8de06697d792241314acacd Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
parent
ecef704624
commit
28f1eb6c83
@ -37,7 +37,7 @@ namespace detail {
|
||||
template <>
|
||||
char *toString(const qint128 &i)
|
||||
{
|
||||
if (i == std::numeric_limits<qint128>::min()) // -i is not representable, hardcode:
|
||||
if (i == Q_INT128_MIN) // -i is not representable, hardcode:
|
||||
return qstrdup("-170141183460469231731687303715884105728");
|
||||
std::array<char, 64> buffer;
|
||||
auto dst = detail::i128ToStringHelper(buffer, i < 0 ? -i : i);
|
||||
|
Loading…
x
Reference in New Issue
Block a user