Hi Folks,
I have a 32 bit system running openSUSE 10.3 with FPC 2.2.0 installed on it. On the other system the 64 bit variants installed of the OS and the compiler. I have a code that compiles and runs fine in the 32 bit environment. The same code compiles on 64-bit but it hits a division by zero for the same input that works on 32-bit. The compiler distributions are downloaded from the official FPC site as RPM packages. It looks like a real bad bug on 64-bit platform.
I traced back the problem to a line looking like:
score:= score + martix[vector[i,table[i,k]],vector[j,table[j,k]]];The nested indirect reference above always results zero and this is the final cause of the fail.
When I restructure the code as:
begin
x:=table[i,k];
y:=table[j,k];
a:=vector[i,x];
b:=vector[j,y];
score:= score + matrix[a,b];
end;'score' gets non-zero value but the result is not realistic compared to the result of the 32-bit variant.
Then I coded a short sample source using similar structures as in the original in a hope to reproduce the fail. Unfortunately the code compiles and runs on both of the platforms, however, gives different results.
I guess the real problem is well before the critical line but I have no idea where could it be and how to find it. Now I wonder, if the same code supposed to compile and run in the same manner on 32 and 64 bit architecture? Is this sort of anomaly a known problem? Can you advice me how to locate the problem? Is there a command line switch instructing the compiler to generate 32-bit executable on 64-bit environment? If not, can the two versions of the complier coexists in parallel?
Cheers,
miklos
