Это вопрос дизайна языка:
Как вы думаете, недоступный код (в языках программирования вообще) должен поднять предупреждение (т.е. "проблема отчета и компиляция в любом случае" ) или ошибка ( "отказаться от компиляции" )?
Лично я сильно чувствую, что это должна быть ошибка: если программист пишет фрагмент кода, он всегда должен быть с намерением фактически запустить его в каком-то сценарии. Но компилятор С#, например, не согласен с этим и просто сообщает о предупреждении.
Примечание. Я понимаю, что обнаружение хорошего мертвого кода - очень сложная проблема, но это не в центре внимания этого вопроса.
Вот несколько примеров фрагментов кода, где некоторые утверждения явно недостижимы:
return;
foo();
-
throw new Exception();
foo();
-
if (...) {
return;
} else {
throw new Exception();
}
foo();