[compiler-rt] Avoid signed overflow in floatdidf.c and floatdisf.c
authorKarl-Johan Karlsson <karl-johan.karlsson@ericsson.com>
Fri, 17 Mar 2023 06:28:38 +0000 (07:28 +0100)
committerKarl-Johan Karlsson <karl-johan.karlsson@ericsson.com>
Fri, 17 Mar 2023 07:14:57 +0000 (08:14 +0100)
commitbb0548a6edf0027eca8d92e021c45afd51b29c9e
tree40d00879b229c799a4c2b485c332cf9200dbb98e
parent684955a2302daacb4136b0247c00f6f95472614b
[compiler-rt] Avoid signed overflow in floatdidf.c and floatdisf.c

When compiling compiler-rt with -fsanitize=undefined and running testcases you
end up with the following warning:

UBSan: floatdisf.c:27:15: signed integer overflow: 9223372036854775807 - -1 cannot be represented in type 'di_int' (aka 'long long')

This can be avoided by doing the subtraction in a matching unsigned variant of
the type, given that the overflow is the expected result of the subtraction.

The same kind of pattern exists in floatdidf.c

This was found in an out of tree target.

Reviewed By: phosek

Differential Revision: https://reviews.llvm.org/D146135
compiler-rt/lib/builtins/floatdidf.c
compiler-rt/lib/builtins/floatdisf.c