|
@@ -0,0 +1,51 @@
|
|
|
+program tarrconstr7;
|
|
|
+
|
|
|
+{$mode objfpc}
|
|
|
+
|
|
|
+type
|
|
|
+ TTest = class(TInterfacedObject, IInterface)
|
|
|
+ function _AddRef : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
|
|
|
+ function _Release : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ gRefCount: LongInt = 0;
|
|
|
+
|
|
|
+function TTest._AddRef: LongInt; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
|
|
|
+begin
|
|
|
+ Result := inherited _AddRef;
|
|
|
+ gRefCount := Result;
|
|
|
+end;
|
|
|
+
|
|
|
+function TTest._Release: LongInt; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
|
|
|
+begin
|
|
|
+ Result := inherited _Release;
|
|
|
+ gRefCount := Result;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TestArrConstr(const aIntf: IInterface);
|
|
|
+var
|
|
|
+ a: array of IInterface;
|
|
|
+begin
|
|
|
+ a := [aIntf];
|
|
|
+ a := Nil;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure Test;
|
|
|
+var
|
|
|
+ t: IInterface;
|
|
|
+ c: LongInt;
|
|
|
+begin
|
|
|
+ t := TTest.Create;
|
|
|
+
|
|
|
+ c := gRefCount;
|
|
|
+ TestArrConstr(t);
|
|
|
+ if gRefCount <> c then
|
|
|
+ Halt(1);
|
|
|
+end;
|
|
|
+
|
|
|
+begin
|
|
|
+ Test;
|
|
|
+ if gRefCount <> 0 then
|
|
|
+ Halt(2);
|
|
|
+end.
|