It might be fun to trot this out again: https://stromberg.dnsalias.org/~strombrg/checking-early.html It's about the sort of things that can happen if you reference undefined regions of memory. I tuses FORTRAN to make its points, but they apply even more to C.
On Tue, Nov 10, 2020 at 5:23 PM 'Thomas Lively' via emscripten-discuss < [email protected]> wrote: > Does the problem reproduce on a newer Emscripten? It sounds like either a > bug in LLVM (which would probably have been fixed by now) or perhaps > undefined behavior in your program. If you can reproduce the issue with the > latest Emscripten, would you be able to provide source code that > demonstrates the problem? > > On Tue, Nov 10, 2020 at 3:12 PM [email protected] < > [email protected]> wrote: > >> I just refactored some old C code of mine. Surprisingly the updated code >> failed in a very unexpected manner that I still don't understand. I >> narrowed the problem down and here is what the relevant code looks like: >> >> static uint8_t _x, _y; // ... _x and _y get both initialized and updated >> elsewhere >> void setOutput(uint8_t val) { ...}void someFunction() { >> static uint8_t tmp; >> ... >> swich(..) { >> case foo: { >> // tmp = _x & _y; >> setOutput( _x & _y); >> } >> ... >> } >> } >> >> The code fails because the _x & _y expression suddenly passes total >> garbage >> to the setOutput() function. Originally I had used the commented tmp >> assignment >> and then used tmp as an argument for that call - and that functions >> correctly. >> >> However what I find most puzzling is this: simply uncommenting the "tmp" >> assignment - without even using tmp later) makes the problem >> disappear...WTF?! >> >> I am still using an older Emscripten version 1.38 and the effect is >> there regardless if I compile to WASM or asm.js and whether or not I am >> using different optimizer options or the closure compiler. >> >> Any ideas what is going on here? Is this some kind of known bug or some C >> feature that I am not aware of.. >> >> -- >> 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 [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/emscripten-discuss/636d73be-ce53-4a55-bdba-66b7ab938887n%40googlegroups.com >> <https://groups.google.com/d/msgid/emscripten-discuss/636d73be-ce53-4a55-bdba-66b7ab938887n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- > 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 [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/emscripten-discuss/CAJZD_EViavdYo5K2J7ZXg%3DDjo1b0aiboaj7nr8H%3DkB8sSoiQAw%40mail.gmail.com > <https://groups.google.com/d/msgid/emscripten-discuss/CAJZD_EViavdYo5K2J7ZXg%3DDjo1b0aiboaj7nr8H%3DkB8sSoiQAw%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- 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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/emscripten-discuss/CAGGBd_ov9aFF1g6-rGCHAb6F48NfJKf_cQGp7oz-27V8UbNijQ%40mail.gmail.com.
