3 ms·
Can anyone explain? It didn't work for me but still gives odd results depending on optimization level that I don't understand.
by tgb 12y ago
Can anyone explain? It didn't work for me but still gives odd results depending on optimization level that I don't understand.
- comex 12y agoBecause nums is a length 5 array, and the loop condition checks nums[i], GCC assumes going into the loop that i is a valid index, i.e. i <= 4. The division then rules out the possibility that i < 4, so for the purposes of optimization, my version of GCC thinks that i always equals 4 at the printfs, even if it's actually higher. It's based on an old Linux bug... I should learn more about GCC internals in order to tell tell why I couldn't get it to work without a loop. In general, any sequence where some property not holding would cause undefined behavior to occur allows a conforming compiler to assume it does hold, but for most basic examples neither GCC nor Clang does anything special.
- tgb 12y agoGreat explanation and fun exploit, thanks!