Bug (1) do GnuCOBOL 3.x e sua solução de contorno
A comunidade responsável pelo projeto GnuCOBOL lançou uma nova versão do compilador em setembro do ano passado com algumas features interessantes, especialmente relacionadas à integração do programa COBOL com diferentes plataformas.
Como é normal em qualquer nova versão de software, alguns bugs já foram reconhecidos pela comunidade responsável pelo projeto, que já está trabalhando nas correções.
Neste artigo vou comentar sobre um desses bugs (#699) que detectei durante os testes que estou executando para migrar o compilador para essa nova versão.
O que provoca o bug
O compilador fica em loop se o programa tiver tabela interna declarada com occurs e ascending key e algum item pai dessa tabela estiver nomeado como filler.
Exemplo
01 conteudo. 03 filler pic x(22) value "ACACRE ". 03 filler pic x(22) value "ALALAGOAS ". (...) 03 filler pic x(22) value "SPSAO PAULO ". 03 filler pic x(22) value "TOTOCANTINS ". 01 filler redefines conteudo. 03 tabela occurs 28 ascending key cd-uf indexed by indice. 05 cd-uf pic x(02). 05 nm-uf pic x(20).
Solução de contorno
Até que uma nova release seja lançada com uma correção para isso, a solução de contorno é dar um nome para o filler, como no exemplo abaixo:
01 conteudo. 03 filler pic x(22) value "ACACRE ". 03 filler pic x(22) value "ALALAGOAS ". (...) 03 filler pic x(22) value "SPSAO PAULO ". 03 filler pic x(22) value "TOTOCANTINS ". 01 contaudo-da-tabela redefines conteudo. 03 tabela occurs 28 ascending key cd-uf indexed by indice. 05 cd-uf pic x(02). 05 nm-uf pic x(20).