mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-11 19:28:10 +02:00

An uninitialized function Result of a managed type needs special handling. When passing it as a var parameter a warning need to be emitted, since a user may expect Result to be empty (nil) by default as it happens with local vars of a managed type. But this is not true for Result and may lead to serious issues. The only exception is SetLength(Result, ?) for a string Result. A user always expects undefined contents of the string after calling SetLength(). In such case a hint need to be emitted. + Tests for this. git-svn-id: trunk@40216 -
65 lines
1.1 KiB
ObjectPascal
65 lines
1.1 KiB
ObjectPascal
{ %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.
|