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.

Denis


On 05/06/2017 15:22, Juha Manninen wrote:
Wiki tells about problems the dfa encounters:
  http://wiki.freepascal.org/FPC_New_Features_3.0#Node_dfa_for_liveness_analysis

In this code if "b" is true in the first test, it will be true also in
the second test, thus using "i" is safe and valid.
   ...
   if b then
     i:=1;
   writeln;
   if b then
     writeln(i);

I understand that complex code can have many variations of such
constructs and analysing them all is difficult.

However for "case ... of" construct with enum types the dfa could be
improved easily, at least I could imagine so.
There is plenty of code like this:

   function TControlBorderSpacing.GetSpace(Kind: TAnchorKind): Integer;
   begin
     case Kind of
     akLeft: Result:=Left;
     akTop: Result:=Top;
     akRight: Result:=Right;
     akBottom: Result:=Bottom;
     end;
   end;

All the enum values are listed and the Result is set for sure, yet FPC
complains:
  controls.pp(3721,1) Warning: Function result variable does not seem
to be initialized

If the compiler used the information about all enums being present, it
would reduce the number of dfa false positives in eg. Lazarus sources
dramatically.

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

Reply via email to