fpc/tests/test/tarray8.pp
sergei 1fcd40ee64 Continue fixing open array handling:
* Unified fpc_initialize_array,fpc_finalize_array with fpc_decref_array and fpc_addref_array by removing 'size' parameter from the former two. Element size is easily calculated from RTTI, so omitting it simplifies code generation. All four helpers are now callable by tcg.g_array_rtti_helper().
* ncgutil.pas: initialization of open array out-parameters is now done properly (using fpc_initialize_array).
+ Test

git-svn-id: trunk@17081 -
2011-03-05 18:45:44 +00:00

28 lines
696 B
ObjectPascal

{ Test correct RTTI handling of open arrays with managed elements.
See also webtbs/tw18859.pp }
{$mode objfpc}{$h+}
procedure test3(out arr: array of string);
begin
{ implicit initialize happens here }
arr[0] := ''; // if initialization does not happen correctly, teststring will be destroyed
end;
var
teststring: string;
arrs: array[0..3] of string;
begin
teststring := 'test';
uniquestring(teststring);
// Must be a string with refcount>1, otherwise decref before call will release it and
// zero the pointer, thus masking the issue.
arrs[0] := teststring;
{ implicit decref happens here }
test3(arrs);
if teststring <> 'test' then
Halt(1);
Halt(0);
end.