O while considera a existência de uma variável y no contexto do programa. Contudo o y só passa a existir dentro do while na sua versão.
Na sua versão, tecnicamente o compilador executaria o while antes de ser criado a variavel y. Por isso não rodou. Já que ele não está achando a mesma que considerando que o while está tentando checar algo que ainda não existe.
Como eu criei a variavel y antes do DO WHILE, o programa entende que a minha variável y existe antes de executar o loop, o DO WHILE ficaria responsável apenas por fazer o processamento de somar +1 e depois checar se o y é menor que 5.