Почему компилятор Delphi считает что значение локальной переменной присваивается, когда очевидно, что нет?

Справка: 1, 2:

USE_BEFORE_DEF W1036
W1036 Variable '%s' might not have been initialized (Delphi)
This warning is given if a variable has not been assigned a value on every code path leading to a point where it is used.

Есть следующий код в пустой форме:

{$WARN USE_BEFORE_DEF ERROR}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  lHandled: Boolean;
begin
  // Если использовать только этот блок, то ошибки нет!
  if False then
    OnMouseWheelUp(Self, [], Point(0,0), lHandled);

  // Если использовать только этот блок, то ожидаемо будет ошибка E1036
  //if False then
  //  lHandled := True;

  // Ошибка ожидается тут (первое чтение переменной)
  if lHandled then
    Memo1.Lines.Add('Handled = true')  // в зависимости от случая, сработает одна из этих ветвей
  else
    Memo1.Lines.Add('Handled = false'); // в зависимости от случая, сработает одна из этих ветвей 
end;

Очевидно, что lHandled может не присвоиться никакое значение (т.к. нету ветки else). Однако, даже не смотря на {$WARN USE_BEFORE_DEF ERROR} код собирается без предупреждений и без ошибок. Почему же компилятор не видит что переменная не инициализирована, это баг или фича?


Ответы (0 шт):