[fpc-devel] open array and address of "@" / crash, why?
Michael Van Canneyt
michael at freepascal.org
Mon Mar 31 08:28:40 CEST 2014
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.
More information about the fpc-devel
mailing list