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
_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to