diff --git a/js/ref/jsatom.c b/js/ref/jsatom.c index 410ac6871f8..86ce81db73c 100644 --- a/js/ref/jsatom.c +++ b/js/ref/jsatom.c @@ -111,8 +111,18 @@ js_compare_atom_keys(const void *k1, const void *k2) v1 = (jsval)k1, v2 = (jsval)k2; if (JSVAL_IS_STRING(v1) && JSVAL_IS_STRING(v2)) return !js_CompareStrings(JSVAL_TO_STRING(v1), JSVAL_TO_STRING(v2)); - if (JSVAL_IS_DOUBLE(v1) && JSVAL_IS_DOUBLE(v2)) - return *JSVAL_TO_DOUBLE(v1) == *JSVAL_TO_DOUBLE(v2); + if (JSVAL_IS_DOUBLE(v1) && JSVAL_IS_DOUBLE(v2)) { + double d1 = *JSVAL_TO_DOUBLE(v1); + double d2 = *JSVAL_TO_DOUBLE(v2); +#ifdef XP_PC + /* XXX MSVC miscompiles such that (NaN == 0) */ + if (JSDOUBLE_IS_NaN(d1)) + return JSDOUBLE_IS_NaN(d2); + else if (JSDOUBLE_IS_NaN(d2)) + return JS_FALSE; +#endif + return d1 == d2; + } return v1 == v2; }