[fpc-devel] "Case statement does not handle all possible cases" Warning
J. Gareth Moreton
gareth at moreton-family.com
Sat May 18 16:17:33 CEST 2019
Ah yes, I see now - I've found the relevant line in ISO7185, section
6.8.3.5:
"One of the case-constants shall be equal to the value of thecase-index
upon entry to the case-statement; otherwise, it shall be an error."
Strict, but I guess that was what Pascal was built upon, and a good way
to ensure the code is well-behaved. Besides, I think my label count
refactoring that Martok mentioned is quite good at redirecting labels to
the endpoint if a branch is empty. I can't say I fully agree with it
being a warning or an error, but I can't argue with an ISO! I guess I
should be grateful that it's only a warning and not a straight-up
compiler or run-time error. I would still ponder about making it a note
under FPC and ObjFPC, one level below a warning.
Gareth aka. Kit
On 18/05/2019 13:10, J. Gareth Moreton wrote:
> 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
>
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20190518/fa13ed70/attachment.html>
More information about the fpc-devel
mailing list