<p>Am 12.04.2016 11:17 schrieb "Sven Barth" <<a href="mailto:pascaldragon@googlemail.com">pascaldragon@googlemail.com</a>>:<br>
><br>
> Am 12.04.2016 08:57 schrieb "Maciej Izak" <<a href="mailto:hnb.code@gmail.com">hnb.code@gmail.com</a>>:<br>
> ><br>
> > 2016-04-11 23:36 GMT+02:00 Sven Barth <<a href="mailto:pascaldragon@googlemail.com">pascaldragon@googlemail.com</a>>:<br>
> >><br>
> >> I know this is a rather constructed example, but it's similar to the C++<br>
> >> code we had at work, so it's code that can happen in the real world.<br>
> >> If we don't find a way to solve this problem then I'm afraid that I<br>
> >> won't include your changes in trunk, cause I don't want to open that can<br>
> >> of worms.<br>
> ><br>
> ><br>
> > Eeeee? I am a little shocked by your arguments because that kind of bug is possible since we have initialization/finalization section and uses section in interface/implementation section. *The programmer must be aware of*. The mentioned bugs are here a looong time. For example fixed by me for Lazarus: <a href="http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&root=lazarus&sortby=date&revision=49547">http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&root=lazarus&sortby=date&revision=49547</a><br>
> ><br>
><br>
> That might be, but this just adds a new category of possibilities for such bugs and that is something that we should not do, especially one as subtle as this.<br>
><br>
> One possible solution would be to disallow records with management operators for global variables (variables created for Default() might be an exception here, but I'd need to think that through).</p>
<p>Another possibility I just thought of: have the compiler analyse such inter unit dependencies in the initialization sections (yes, I know, easier said than done) and print a warning in case something might depend on the order of execution.<br>
If the user is at least aware that there might be something fishy going on then I'm more lenient.</p>
<p>Regards,<br>
Sven</p>