Having got 20011123 to compile, I found three differences in the compiler from our previous gpc version 20010604. It objected in two different units to code using a GOTO with the error message: " Label '1' used before containing binding contour'.
The code looks correct and compiles and executes properly with the previous version. Is this a known problem as it looks as though it should be fairly easy to produce a test case if required. However the problem is easily worked around.
Secondly it picked up a number of occurrences of incorrect code of the form St[9]:=Chr(65)+Random(26) that had been accepted by the previous version; so that is progress.
My main problem is that the packing of records appears to have changed. For instance a record of the form
TCompR=Packed Record AName:String(49); AClass:1..40; Awel:Set of 1..120; RLate,RTime:Integer; End;
has the same size as previously (as reported by sizeof) but when using this record to read from a file written by code compiled with our previous version of the compiler gives nonsense values for AClass and Awel. I can work around this particular problem by changing the definition of AClass to Byte but sadly our code has a great many packed records (because it was originally written a long time ago when storage was more precious) but making all the files backwards compatible is not going to be trivial. So two questions: Is there any switch that will restore the previous packing behaviour?
Assuming there is not, could someone explain in more detail what has changed and what are the rules governing packing so that I can work out how to redefine each of the affected records.