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.