Is there anything nondeterministic here? The results on different OSes and browsers should be 100% identical except for things like random numbers, input events, etc. (unless you are seeing a browser bug).
For debugging purposes you can build with -s DETERMINISTIC=1 which will force random numbers and timer events to be identical as well. Also worth building with ASSERTIONS and SAFE_HEAP, as an error like this might be a stack overflow or a heap corruption. On Tue, Apr 3, 2018 at 7:50 AM, Jeff Schindler <jas...@gmail.com> wrote: > We have some audio processing C code that we've brought to JS via > emscripten. We're seeing odd behavior with the heap under certain > conditions. We have a boolean value that we are setting, which is later > checked to determine the processing path. In the right context, this > boolean, which resides in the HEAP32 array, somehow gets changed and > processing proceeds incorrectly. We are seeing this within a certain > context only (so far) on Windows machines (tested in latest Chrome and > Firefox). On Mac Chrome and Firefox, the HEAP32 check comes back as > expected. What's really odd, and probably because of my naiveté on how > emscripten actually does its work, is that upon debugging on the Mac, I can > see that the first (and only the first) time the code checks the boolean, > it's looking at a different location than I would expect it to look (ie it > doesn't check the location that actually gets set when the boolean is > set). On Windows, when it doesn't work, it always uses the expected > location and on that first check, it has the wrong value. To further add > confusion, we have another JS client app where we're using the exact same > code and it works fine with it on the same Windows machine. If anyone has > any insight at all, it'd be greatly appreciated! > > If it's useful, here are snippets of the relevant asm.js code: > > // set the boolean, where $0 is a passed parameter > $0 = $0 | 0; > var label = 0, > sp = 0; > sp = STACKTOP; > HEAP32[(169880) >> 2] = $0; > > // check the boolean, where $1 is a passed parameter > // the $6 var has the incorrect value on windows > // on the mac, $4 is 339904 on the first check, and then 169889 thereafter > // on windows, $4 is always 169889 when it fails > // note that on the mac, both heap locations have the correct value > $4 = ((($1)) + 24 | 0); > $5 = HEAP32[$4 >> 2] | 0; > $6 = ($5 | 0) != (0); > $7 = ($0 | 0) != (2); > $or$cond = $7 | $6; > if ($or$cond) { > return; > } > > -- > You received this message because you are subscribed to the Google Groups > "emscripten-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to emscripten-discuss+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.