{ %norun }
{ %opt=-Sewn -vwn -O- }

{
  Test for correct emitting of warnings/hints for uninitialized variables of management types
  See also tbf/tb0258.pp
}

// Only hints about uninitialized managed variables must be issued for this code

{$mode objfpc}

type
  TLongArray = array of longint;

procedure p;
var
  a : TLongArray;
  s: ansistring;
begin
  setlength(a,100);  // hint for local var
  setlength(s,100);  // hint for local var
  a[1]:=1;
  writeln(a[1]);
  s[1]:='a';
  writeln(s[1]);
end;

procedure svar(var s: ansistring; len: longint);
begin
  setlength(s,len);
end;

procedure avar(var a: TLongArray; len: longint);
begin
  setlength(a,len);
end;

procedure p2;
var
  a : TLongArray;
  s: ansistring;
begin
  avar(a,100);  // hint for local var
  svar(s,100);  // hint for local var
  a[1]:=1;
  writeln(a[1]);
  s[1]:='a';
  writeln(s[1]);
end;

function f2: ansistring;
begin
  // Hint for the ansistring Result, since all contents of the Result
  // after calling SetLength() is expected to be undefined.
  setlength(Result,1);
  Result[1]:='a';
end;

begin
  p;
  p2;
  f2;
end.