On Sun, 30 Mar 2014, Martin Frb wrote:

On 30/03/2014 14:35, Jonas Maebe wrote:
On 30/03/14 15:24, Martin Frb wrote:
The below program compiles fine (and generates no warning (fpc 2.6.2 /
win 32)

It only compiles fine with the (default) {$t-}. If you add {$t+}, it doesn't compile. Without typed pointers, the result of the @-operator is an untyped pointer, which by definition is assignment-compatible with all other pointer types.

Making {$t+} the default is hard because it could break existing, correct code (e.g., "untypedptr:=@wordvar+1" would result in a pointer 2 bytes after @wordvar instead of 1 with {$t+}).

Ah yes, so easy to forget... (Now I remember)


Slight change, and  I get
Fatal: Compilation aborted


program project1;
{$t+}
type
 TA = array of integer;
 PA = ^TA;
var
 a : array of integer;
 a1: PA;

procedure Foo(var c: array of integer; var c1: PA);
begin
 //c1:= @c;

 writeln( (@c)^[1] );

 //writeln(PInteger(c1)^);
 //writeln(c1^[1]);
 readln;
end;

begin
 SetLength(a,5);
 a[0]:= 100;
 a[1]:= 101;
 a1:=@a;

If you are counting on the implicit pointer=array as in C, then this should probably be a1:=@A[0] or a1:=PA(a)

Michael.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to