[fpc-devel] Data flow analysis (dfa) and "case ... of"

Denis Kozlov dezlov at gmail.com
Mon Jun 5 19:39:00 CEST 2017


I have just created a new GUI application, enabled range checking "-Cr" 
and executed the following:

ShowMessage(IntToStr(Form1.BorderSpacing.GetSpace(TAnchorKind(-1))));

The displayed value is a semi-random integer. No compiler errors or 
run-time errors.

P.S. Same behaviour for Lazarus 1.6.4 + FPC 3.0.2 and Lazarus 1.4.4 + 
FPC 2.6.4.

Denis


On 05/06/2017 17:51, Jonas Maebe wrote:
> On 05/06/17 18:46, Denis Kozlov wrote:
>> Result is undefined if caller passes an out of range value.
>
> That would be an error at the time this out-of-range value would be 
> converted to TAnchorKind. If range checking is off there or disabled 
> via an explicit type cast, then the result is undefined by definition. 
> The compiler can and does assume in various cases that a type only 
> holds values valid for that type. 

On 05/06/2017 18:07, Juha Manninen wrote:
> On Mon, Jun 5, 2017 at 7:46 PM, Denis Kozlov <dezlov at gmail.com> wrote:
>> Result is undefined if caller passes an out of range value.
>> An example: TControlBorderSpacing.GetSpace(TAnchorKind(-1));
>> Result is indeed not initialized, so silencing this message may be harmful.
> Yes but that is an illegal situation. It is already trapped by range check -Cr.
> The compiler can safely assume that such situation does not happen.
> Actually the compiler already assumes that in other situations. I
> remember a bug years ago in Lazarus, caused by an out of range enum
> value. FPC had changed its behavior and the bug got triggered.



More information about the fpc-devel mailing list