Такой переход действительно разрешен стандартом, так что это не ошибка в GCC. Стандарт перечисляет эту ситуацию в качестве рекомендуемого предупреждения в Приложении I.
Единственное ограничение, налагаемое на переходы в C99 в отношении области видимости, состоит в том, что незаконно переходить в область видимости переменной с изменяемым типом, например VLA
int main() {
int n = 5;
goto label; // <- ERROR: illegal jump
int a[n];
label:;
}
Другими словами, неправильно говорить, что «прыжок - это просто прыжок в Си». Переходы несколько ограничены, когда дело доходит до ввода переменной области, хотя и не так строго, как в C ++. Ситуация, которую вы описываете, не является одной из ограниченных.