I thought those terms where synonymous, but a note in MISRA regarding dead code indicates this to be wrong? What\'s the difference? Is one a subset of the other?
Unreachable code
The code to which control flow never enters during the execution of the program. That is unreachable code is that code that is never executed during the course of execution of the program.
Dead code
The code that has no effect on the codes following it no matter how the control flow flows through the program. That is dead code is that code, that doesn't need to be executed during the course of execution of the program, or in other terms, is useless.
So, in true terms none of them is a subset of another. But both unreachable code and dead code are usually removed by the compiler during compilation process as a part of code optimization.