void x(int i) throws IOException {
if(++i<0) return;
x(-1);
System.out.println("c"); // Está linha nunca será executada, o compilador nesse caso não consegue identificar isso em tempo de compilação?
}
// Reescrevendo para
void x(int i) throws IOException {
if(++i<0) return;
if(true) x(-1);
System.out.println("c"); // Nesse caso o compilador identifica?
}