[Bug 50845] jscript crashes on internal assert(0) in PE build with clang

WineHQ Bugzilla wine-bugs at winehq.org
Tue Mar 23 05:07:48 CDT 2021


https://bugs.winehq.org/show_bug.cgi?id=50845

--- Comment #1 from Dmitry Timoshkov <dmitry at baikal.ru> ---
The problem is caused by difference in the code, generated by clang and gcc for
jsdisp_define_data_property() for storing the jsval_t value: clang generates 
fldl + fstpl while gcc uses ordinal movl instructions.

That leads to the following (with additional debug output):

clang:

0024:err:jscript:init_global NAN: v = 7ff00000ffffffff => tag 0x7ff00000,
jsval_type() = 0x7ff80005
1: NaN: 7ff8000000000000 => tag 0x7ff80000, jsval_type() = 0x7ff80000
2: NaN: 7ff00000ffffffff => tag 0x7ff00000, jsval_type() = 0x7ff80005
0024:err:jscript:jsdisp_define_property L"NaN", v = 7ff80000ffffffff => tag
0x7ff80000, jsval_type() = 0x7ff80000
0024:err:jscript:jsval_copy v = 7ff80000ffffffff => tag 0x7ff80000,
jsval_type() = 0x7ff80000
Assertion failed: 0, file ../wine.src/dlls/jscript/jsutils.c, line 247

gcc:

0024:err:jscript:init_global NAN: v = 7ff00000ffffffff => tag 0x7ff00000,
jsval_type() = 0x7ff80005
1: NaN: 7ff8000000000000 => tag 0x7ff80000, jsval_type() = 0x7ff80000
2: NaN: 7ff00000ffffffff => tag 0x7ff00000, jsval_type() = 0x7ff80005
0024:err:jscript:jsdisp_define_property L"NaN", v = 7ff00000ffffffff => tag
0x7ff00000, jsval_type() = 0x7ff80005
0024:err:jscript:jsval_copy v = 7ff00000ffffffff => tag 0x7ff00000,
jsval_type() = 0x7ff80005


Adding 'ULONGLONG ull;' to struct _jsval_t definition forces clang to use movl
instead of fldl + fstpl like gcc does, and fixes the problem.

I'll attach the diff here.

Jacek, what do you think? Is that an acceptable solution? Is there a concern
that there might be more places in Wine that suffer from the same problem?

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list