Aah okay.  Thanks Martok and Jonas.  Adding internal errors is definitely a good haul then.  I do think a warning is a bit harsh though over a hint or a note, but if that is what you desire for the compiler (since it does reduce errors), then I'll accept it. I just missed the part where it only does it for small types.

Gareth aka. Kit


On 18/05/2019 13:03, Jonas Maebe wrote:
On 18/05/2019 13:30, J. Gareth Moreton wrote:

So it looks like this new warning has appeared as part of the data flow analysis of -O4.

The case-completeness warning is not related to any optimization level, nor to the data flow analysis mentioned in the other thread.

  The thing is, I personally have a problem with this being a warning, because there's nothing inherently wrong with not covering every case branch or omitting an else block (especially if one isn't needed).  Adding "else ;" everywhere seems to just cause bloat.

The question is whether or not an else block is needed or not (or perhaps even superfluous). When I adapted the compiler code to compile warning-free with this new option, about 2/3 of the cases got an empty else-block and 1/3 got either an internalerror or extra case blocks to handle options that were not handled previously, but that should have been handled. I don't think that's a bad haul. There were also a number of case-statements that handled all possible options and yet still contained an else block (so the else-block got removed).

However, it is absolutely true that this is not an issue in all cases. If you do not wish to see such warnings at all, you can always suppress them using -vm6060 (warning numbers can be discovered with the -vq command line options).

For information on the background of this warning, see http://lists.freepascal.org/pipermail/fpc-devel/2019-January/039972.html

Still, code style aside, can I suggest the warning be downgraded into a hint? Warnings should indicate the possibility of unstable code due to uninitialised values, for example, and DFA should be able to detect that anyway as a separate warning (e.g. if a case block doesn't initialise an output value in all of its branches).

This warning can detect errors that cannot be found by DFA, because they may not be related to initialising a variable (but e.g. to modifying an already initialised variable, or to outputting something).


Jonas
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel



---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to