Dead-end blocks are blocks from which there is no path to the function exit (`return`, `throw` or unwind). These are blocks which end with an unreachable instruction and blocks from which all paths end in "unreachable" blocks.