Closed Bug 208048 Opened 22 years ago Closed 22 years ago

ARM constant number definitions are not correct for infinities

Categories

(Core :: JavaScript Engine, defect, P1)

Other
Other
defect

Tracking

()

VERIFIED FIXED
mozilla1.4final

People

(Reporter: justin.fletcher, Assigned: brendan)

References

()

Details

(Keywords: fixed1.4, js1.5)

Attachments

(1 file)

User-Agent: Mozilla/4.72 [en] (Compatible; RISC OS 4.36; Oregano 1.10) Build Identifier: JavaScript-C 1.5 pre-release 5 2003-01-10 [checked out of CVS trunk 2003-30-05] The values declared for POSITIVE_INFINITY, NEGATIVE_INFINITY and NaN are not correct for the ARM platform. As noted in the jsnum.h source as a comment from Stefan Hanske, the words are in little endian byte order, but the two words are reversed. The code was changed to reflect this and macros declared in jsnum.h to access these values in a generic manner. The define CPU_IS_ARM is used, together with IS_LITTLE_ENDIAN to select the correct macros to use at jsnum.h, line 104. This appears to all be correct. jsnum.c, however, has its own declaration of 'union dpun' which is used in the js_InitRuntimeNumberState functions to initialise the number structures. If clauses within the 'union dpun' need to be updated to cater for the ARM CPU with something like : #if defined(IS_LITTLE_ENDIAN) && !defined(CPU_IS_ARM) or the assignment of the values should be updated to use the macros declared in jsnum.c. Reproducible: Always Steps to Reproduce: 1. Build the standard engine and shell application. 2. print(Number.POSITIVE_INFINITY); 3. print(Number.NEGATIVE_INFINITY); Actual Results: Output: 2. 1.06047983e-314 3. 2.1214777256e-314 Expected Results: Should have produced: 2. Infinity 3. -Infinity Making the conditional in 'union dpun' as suggested above generated the Infinity/-Infinity output as expected. I believe that whilst the above change to the 'union dpun' will fix the problem, the correct solution would be to make the code use the macros from jsnum.h as they were intended. If you want a patch putting together for that, let me know and I'll do that. This bug has apparently been unnoticed for quite some time which leads me to believe that I may be incorrect in my assertion.
Reassigning; cc'ing Brendan and Waldemar -
Assignee: rogerl → khanson
Status: UNCONFIRMED → NEW
Ever confirmed: true
Attached patch proposed fixSplinter Review
Thanks, I think this is a real bug. Not sure why it wasn't discovered earlier. I took the opportunity to consolidate the union type, preferring shorter names (making for shorter ugly macros). /be
Easy portability fix, candidate for the 1.4 branch as well as the 1.5 trunk. /be
Assignee: khanson → brendan
Flags: blocking1.4?
Keywords: js1.5
Priority: -- → P1
Target Milestone: --- → mozilla1.4final
Comment on attachment 124841 [details] [diff] [review] proposed fix Roger, can you eyeball this? Thanks, /be
Attachment #124841 - Flags: review?(rogerl)
Flags: blocking1.4? → blocking1.4+
Attachment #124841 - Flags: review?(rogerl) → review+
Comment on attachment 124841 [details] [diff] [review] proposed fix rjesup pre-approved pending review. /be
Attachment #124841 - Flags: approval1.4+
Fixed in trunk and branch, thanks to Justin for reporting this. /be
Status: NEW → RESOLVED
Closed: 22 years ago
Resolution: --- → FIXED
Marking Verified. No regressions introduced on Linux or WinNT, as per the JS testsuite. Also, checkin verified on 1.4 branch.
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: