[fpc-devel] I've asked this before, but perhaps I wasn't specific enough that time: what do I *personally*, specifically need to do to ensure that a native Windows 64-bit build winds up on the FPC website for the next release?

Martin Frb lazarus at mfriebe.de
Wed Jan 12 18:06:38 CET 2022


On 12/01/2022 17:31, Tomas Hajny via fpc-devel wrote:
> On 2022-01-12 16:03, Martin Frb via fpc-devel wrote:
>>
>>
>> But, if any change to the code (not even necessarily a functional
>> change) would allow the compiler to do those calculations at compile
>> time, then the value changes. And the entire behaviour of the app may
>> change.
>> Possible, this could even be a change just in optimization settings
>> (or upgrading FPC), allowing the compiler to to propagate constants...
>>
>> So does that mean, any code (that is to be compiled for Win-64bit) is
>> considered "unstable" if it contains "extended" ?
>
> Not necessarily - when targetting Win64, the user needs to be prepared 
> for the lower precision. However, imagine that that the user compiles 
> his source code for target x86_64-linux. The resulting binary and its 
> output will be exactly the same if the source code is compiled (with 
> the same options, etc.) on Linux or if it is compiled on Windows using 
> a Win32 hosted compiler, but it will differ if using a Win64 hosted 
> compiler. From compiler support point of view, this is an issue.

Ok. So a question of priority. (E.g., reducing maintenance on tests?)

Not to say, that due to ABI different registers may be used. Triggering 
different subsequent optimizations.....

And yes, I can see your point. That exact problem, that a bug in the 
optimizer manifested on windows, but not linux has cost me several 
weeks. (Because I could not get it with valgrind).
So, I do get, that trying to minimize such things, is very appealing.


-----------------

 >> when targetting Win64, the user needs to be prepared for the lower 
precision
Yes, but It is one thing to be prepared for:
- One (exactly one) "lower precision", and all behaviour (on that 
platform [1]) to be always according to that specific precision.

[1] on that platform, with that exact revision of the compiler.
      But with any compile options, and independent of none functional 
changes to the users code.

It is another thing to be prepared for
- A random[2] "precision" that will change depending on compiler options 
and/or seemingly unrelated changes in the user's code

[2] From the users view "random", in that the user can not predict all 
the factors that will affect the selection.


Currently the user must be prepared for the latter.

Because if for example anything changes that affects constant 
propagation, calculation may move from run to compile time, or vice 
versa. And with that the used "precision" for an individual calculation 
will change.
The user may not be able to predict under which conditions that happens. 
So for the user there are random changes to the behaviour of his program.

And this is not comparing the behaviour between the Linux and Windows 
exe (both 64 bit). I agree that different behaviour must be expected.
This is the behaviour between compiling the same code, with the same 
compiler, several times for the same target win-64.
Changing a compiler option, will/can change the behaviour of the 
resulting exe.

Such "optimization" depend changes normally happen, if
- the code has (hidden) bugs
- the code uses undocumented behaviour
But I believe "extended" is documented.....

-----
Just to say, I am not saying it has to be changed. Really does not 
matter to me.
Just trying to fully understand the matter, the possible side effects 
(of either path that can be taken), and so on.


More information about the fpc-devel mailing list