Это единственный случай, когда достижимый переход указывает на недостижимую метку?

Вдохновленный вопросом

И прежде чем задать этот вопрос, я прочитал:

Проблема в вопросе

написать программу, у которой есть достижимый оператор goto, но соответствующий помеченный оператор недоступен - Эрик Липперт

и один возможный ответ похож на

    // the 3 lines are not important but declare variable for afterwards use
    var whateverException=new Exception("whatever exception");
    var whateverAction=default(Action);
    whateverAction=() => whateverAction();
    try {
        goto whateverLabel; // (1) the goto is reachable
    }
    finally {
        throw whateverException; // (3) because finally hijacks
    }

whateverLabel: // (2) but the label is not really reached
    whateverAction();

Мне интересно, что в однопоточной программе это единственный случай, когда достижимый переход указывает на недостижимую метку? И считается ли следующий код возможным ответом на это?

here:
    int d=0, n=1/d;
    goto here;

person Ken Kin    schedule 04.03.2013    source источник
comment
Вопрос без какого-либо голосования, ответа или даже комментария в течение четырех часов - это действительно странно ...   -  person Ken Kin    schedule 05.03.2013
comment
Спецификация C # будет считать вашу goto here; достижимой, потому что достижимость учитывает только значения констант. 1/d не является константой.   -  person Eric Lippert    schedule 05.03.2013


Ответы (1)


Уловка finally-blocked goto на самом деле является единственным способом получить доступный переход, нацеленный на недостижимую метку.

person Eric Lippert    schedule 05.03.2013
comment
Большое тебе спасибо! Не зря этот вопрос висел 7 часов! - person Ken Kin; 05.03.2013