Should the different variants in a variant record overlay in the same memory?
Previous Pascals I have used have guaranteed this, and I've got low-level code that relies on this.
The simple example below shows that this is not true for GPC - the version as reported by gpc -v is: Reading specs from /usr/local/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/specs gpc version 19991030, based on 2.95.2 19991024 (release)
The output from the program is:
addr of i is: -1073742896 addr of s is: -1073742760 addr of ic is: -1073742668
program daj15(input,output); type trec = record case integer of 1:(i:array [1..34] of integer); 2:(s:string(80)); 3:(ic:packed array[0..79] of char); end;
var r:trec;
procedure sub(r:trec); begin writeln('addr of i is: ',integer(addr(r.i)):1); writeln('addr of s is: ',integer(addr(r.s)):1); writeln('addr of ic is: ',integer(addr(r.ic)):1); end;
begin sub(r); end.
If the string s is removed from the record, then the same address is reported for i and ic.
(I know the variants are not the same length, and they are intended not to be.)