goto a
local x = 42
::a::
не приведет к ошибке. С другой стороны, даже в 5.2
goto a
local x = 42
::a::
print("oh no")
не будет.
Предварительная компиляция Lua будет только жаловаться, если вы перейдете в область действия локального и что-то сделаете после метки, пока ещев рамках местного. Так что вы можете прыгнуть туда, но вы не можете сделать что-то в этой неверной ситуации.
То же самое со вторым примером. ::b::
это конец блока. Ничего не происходит в пределах x
после этого, так что можно прыгнуть туда.
goto b
local x = 42
::a::
print("oh no")
::b::
будет в порядке.