On 01/11/2016 05:33 PM, Matthew Wahab wrote:
The case I'm trying to fix has (short)abs((int)short_var). I'd thought that if abs(short_var) was undefined because the result couldn't be represented then the type conversion from int to short would also be undefined. In fact, it's implementation defined and S4.5 of the GCC manual says that the value is reduced until it can be represented. So (short)abs((int)short_var) will produce a value when abs(short_var) is undefined meaning this transformation isn't correct. I'll drop this patch.
Maybe we could have an optab and corresponding internal function for an abs that's always defined.
Bernd