those fall through errors go away if you put a break at the end of each case..
for example
case 7: res <<= 8; res |= *data++; break;
Yes, of course, but then you change meaning of the code and behavior can be unexpected.
Correct fix is to add the comment /* FALLTHRU */, which is recognized by GCC and Clang.