When compiling compiler-rt with -fsanitize=undefined and running testcases you
end up with the following warning:
UBSan: floatsidf.c:32:9: negation of -2147483648 cannot be represented in type 'si_int' (aka 'long'); cast to an unsigned type to negate this value to itself
The same kind of pattern exists in floatsisf.c
This was found in an out of tree target.
Just use unary -: -(su_int)a