Hi Joe, Thank you for your review comments.
I agree with you that the specification says that "The floating-point operations of the Java Virtual Machine do not throw exceptions, trap, or otherwise signal the IEEE 754 exceptional conditions of invalid operation, division by zero, overflow, underflow, or inexact." as per the JVM specification https://docs.oracle.com/javase/specs/jvms/se10/html/jvms-2.html#jvms-2.8.1 . I noticed that the SIGFPE is consumed and no exception is thrown when SIGFPE is enabled before create JVM. Hence, there is an inconsistency in the hotspot behavior when the SIGFPE is enabled before and after create JVM. If the trap is enabled before create JVM, it just catch the exception and continue where as if the trap is enabled after create JVM, then it result in the ArithmeticException. Hence, the JVM behavior needs to be fixed to make the behavior consistent. Still, I feel it makes more sense to check the sign bit to decide a number is negative or positive rather than divide-by-zro to make infinity and compare with zero. If you agree with my view, a separate bug can be opened to fix the JVM inconsistent behavior. Otherwise, we can change the component of this bug. Please comment. Thank you, Nasser Ebrahim From: joe darcy <joe.da...@oracle.com> To: Nasser Ebrahim <enas...@in.ibm.com>, core-libs-dev Libs <core-libs-dev@openjdk.java.net> Date: 09/26/2018 10:29 PM Subject: Re: RFR: JDK-8211161: java.lang.ArithmeticException: divide by zero from java.text.DecimalFormat.format() Hello, It may be reasonable to replace a divide by zero with check for a floating-point -0.0 with a bit-level check, but the stated motivation is not reasonable. The Java platform requires that floating-point divide by zero return an infinity (or NaN as the case may be) and it is *incorrect* and non-conformant to throw an ArithmeticException in that case. Such behavior violates the language the JVM specs. Cheers, -Joe On 9/26/2018 9:33 AM, Nasser Ebrahim wrote: > Hello, > > In java.text.DecimalFormat.format(), there is a validation to check > whether a number is negative zero or not and for that divide by zero is > used to check for negative infinity which caused the ArithmeticException > when SIGFPE is enabled in the system. Andrew has opened a bug on my > behalf. Thank you Andrew. > > The corresponding bug is https://bugs.openjdk.java.net/browse/JDK-8211161 . > > The webrev and stand alone test case is uploaded to > http://cr.openjdk.java.net/~aleonard/8211161/ . > The recreate step is documented in the bug description. > > I have tested the fix with the test cases of the following bugs and > confirm that it is working. > https://bugs.java.com/view_bug.do?bug_id=4106658 > https://bugs.java.com/view_bug.do?bug_id=4106667 > https://bugs.java.com/view_bug.do?bug_id=4147706 > > I did not add any new jtreg test for the current issue as it is not > functional. Hope that is fine. > > Kindly request you to review and comment. > > Thank you, > Nasser Ebrahim >