RFR(S): 8213419: C2 may hang in MulLNode::Ideal()/MulINode::Ideal() with gcc 8.2.1
Andrew Haley
aph at redhat.com
Sat Nov 10 09:08:39 UTC 2018
On 11/07/2018 09:06 PM, dean.long at oracle.com wrote:
> OK, I just wanted to make sure the code was doing what you intended.
> Isn't this still undefined behavior:
>
> jint abs_con = uabs(con);
>
> if the unsigned value is too big to fit in a signed int?
No, because the conversion of unsigned to signed is not undefined but
implementation-defined.
For gcc the behavior is:
The result of, or the signal raised by, converting an integer to a
signed integer type when the value cannot be represented in an
object of that type (C90 6.2.1.2, C99 6.3.1.3).
For conversion to a type of width N, the value is reduced modulo
2^N to be within range of the type; no signal is raised.
Nevertheless, I agree with the decision to make everything unsigned.
It's really to only correct way to do arithmetic in C++ on jints. I
wonder if we could redefine a jint type correctly, which is to say it
had the same behaviour as Java. It'd need overloads for all the
arithmetic operations.
--
Andrew Haley
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671
More information about the hotspot-compiler-dev
mailing list