Does gcc make any kind of assumptions about signed-overflow? For example, would it eliminate the comparison in this code:
int8_t i;
/* ... */
i += 1;
if (i == 0) {
/* ... */
}