Página 1 de 1

BUG compilação -w3

Enviado: 22 Nov 2023 18:58
por JoséQuintas
Faz tempo aconteciam diferenças e eu não entendia porque.
Agora consegui isolar o problema.

Código: Selecionar todos

PROCEDURE Main
   LOCAL A
   A := 'X'
   A += 'X' + hb_Eol()
   RETURN

Código: Selecionar todos

PROCEDURE Main
   LOCAL A
   A := 'X'
   A += 'X' 
   RETURN
test.prg:9: warning W0032 Variable 'A' is assigned but not used in function '6:MAIN'
o erro só é mostrado no segundo fonte.

BUG compilação -w3

Enviado: 22 Nov 2023 19:19
por JoséQuintas
Tava até rindo aqui da situação.
O normal do pessoal é procurar solução pra erro.
Estou procurando solução por não dar erro kkkk

BUG compilação -w3

Enviado: 23 Nov 2023 13:54
por clodoaldomonteiro
Sendo que, depurando:
Na linha 3, A recebe "X" e na linha 4, A é concatenada a mais um "X" e fica igual a "XX".
Ou seja, a variável A foi utilizada.

BUG compilação -w3

Enviado: 23 Nov 2023 20:44
por JoséQuintas
clodoaldomonteiro escreveu:Sendo que, depurando:
Na linha 3, A recebe "X" e na linha 4, A é concatenada a mais um "X" e fica igual a "XX".
Ou seja, a variável A foi utilizada.
Não, não é assim que funciona a compilação -w3.
Somou e não usou pra nada.

Um fonte acusa erro e o outro não.

Colocando x := "X" + "X", acusa o erro
Colocando X := "X" + hb_Eol(), NÃO acusa o erro

Seria normal se usasse algo( X ) mas não algo() sem o X.

Ou.... pra evitar erro... (X)
Uma espécie de enganação pro compilador, fingindo que usa a variável.
comp1.png
comp2.png
Uso igual, resultado diferente.

BUG compilação -w3

Enviado: 24 Nov 2023 08:12
por Fernando queiroz
quintas realmente esta errado pois:
x:= 1 ok inicializado
x:= x + 1 esta sendo inicializado novamente

no caso seria

x = x + 1

estou vendo essa situação ocorrer direto no curso que estou fazendo

BUG compilação -w3

Enviado: 24 Nov 2023 09:22
por JoséQuintas
Fernando queiroz escreveu:quintas realmente esta errado pois:
x:= 1 ok inicializado
x:= x + 1 esta sendo inicializado novamente
no caso seria
x = x + 1
estou vendo essa situação ocorrer direto no curso que estou fazendo
Eita, agora viajou kkkk

A mensagem de erro -w3 -es2 é sobre NÃO USAR A VARIÁVEL
Faça o que fizer, some o que somar, := ou =, a variável não está sendo usada pra NADA.
O erro é NÃO USAR A VARIÁVEL.
Até aí tudo bem.

A questão é: porque ao somar hb_Eol() o erro deixa de existir ?
É falha na checagem -w3 quando se usa uma função.

BUG compilação -w3

Enviado: 24 Nov 2023 09:28
por JoséQuintas
Vamos por partes, pra ficar mais claro o problema.

Código: Selecionar todos

LOCAL X
test.prg:7: warning W0003 Variable 'X' declared but not used in function '3:MAIN'

Código: Selecionar todos

LOCAL x := 0
test.prg:7: warning W0032 Variable 'X' is assigned but not used in function '3:MAIN'

Código: Selecionar todos

   LOCAL x := 0
   x += 1
test.prg:8: warning W0032 Variable 'X' is assigned but not used in function '5:MAIN'

Código: Selecionar todos

   LOCAL x := 0
   x += hb_Eol()
1118208 -> 430592 38.51% win32/pe test.exe
Então, com hb_Eol() não deu erro, mas era pra dar.

Código: Selecionar todos

   LOCAL x := hb_Eol()
test.prg:6: warning W0032 Variable 'X' is assigned but not used in function '3:MAIN'
assim dá erro, ok, está certo dar erro.

Código: Selecionar todos

   LOCAL x := hb_Eol()
   x += hb_Eol()
E assim volta a não dar erro, mas era pra dar.

Talvez até eu tenha me expressado mal:
Um erro -w3 é sobre não usar variável
Outro erro -w3 é sobre atribuir valor e não usar a variável DEPOIS de atribuir valor

Código: Selecionar todos

LOCAL x := 0
x += 1
x += 1
x += 1
x += 1
test.prg:10: warning W0032 Variable 'X' is assigned but not used in function '7:MAIN'
a mensagem é sempre referente à última linha, porque todas as linhas usaram o valor que vém sendo atribuído, mas o valor atribuído na última não foi usado depois.

Aqui é apenas curiosidade extra, não tem a ver com o problema

Código: Selecionar todos

   LOCAL x
   ? x
test.prg:8: warning W0033 Variable 'X' is never assigned in function '3:MAIN'
Nesse caso é o contrário, a variável foi usada, mas não foi colocado nenhum valor nela.

BUG compilação -w3

Enviado: 25 Nov 2023 20:24
por JoséQuintas
Só mais 4:

Código: Selecionar todos

PROCEDURE Main

   LOCAL x := 0

   x += 1
   x += 1
   x += 1
   x += 1

   RETURN
test.prg:12: warning W0032 Variable 'X' is assigned but not used in function '9:MAIN'

Código: Selecionar todos

PROCEDURE Main

   LOCAL x := 0

   x += 1
   x += hb_Eol()
   x += 1
   x += 1

   RETURN
assim sem mensagem de erro.

Código: Selecionar todos

PROCEDURE Main

   LOCAL x := 0

   x += 1
   x += 1
   x += 1
   x += 1
   (x)

   RETURN
assim sem mensagem de erro, é o "truque" do harbour com HB_SYMBOL_UNUSED() pra não dar erro em -w3
ao que parece, ele considerou os parêntesis de hb_Eol() como sendo o truque.

Código: Selecionar todos


PROCEDURE Main
   LOCAL x := 0

   (x)
   x += 1
   x += 1
   x += 1
   x += 1

   RETURN
test.prg:13: warning W0032 Variable 'X' is assigned but not used in function '10:MAIN'
E mesmo assim, não vale em qualquer lugar do fonte.

NÃO TESTEI com harbour 3.4 nem xharbour pra ver se aparece a mensagem de erro.
Mas pra mim não faz diferença, porque não pretendo trocar de versão só por conta disso, mesmo considerando ser um BUG.
Quem quiser fique à vontade pra testar no 3.4, porque COM CERTEZA o analisador do 3.4 é diferente do 3.2.