BUG compilação -w3

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BUG compilação -w3

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BUG compilação -w3

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

BUG compilação -w3

Mensagem 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.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BUG compilação -w3

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

BUG compilação -w3

Mensagem 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
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BUG compilação -w3

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BUG compilação -w3

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BUG compilação -w3

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder