[fpc-devel] "Case statement does not handle all possible cases" Warning

J. Gareth Moreton gareth at moreton-family.com
Sat May 18 14:10:16 CEST 2019


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 at 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




More information about the fpc-devel mailing list