Temporary objects as function parameters or when-is-this-shit-going-to-end?
Dgame
r.schuett.1987 at gmail.com
Fri Oct 13 12:03:55 UTC 2017
On Friday, 13 October 2017 at 10:35:56 UTC, Jack Applegame wrote:
> If you don't want to get the great PITA, never create temporary
> objects in function parameters.
> I recently spent a whole day digging through my reference
> counted containers library. But nasty bug was not there, but in
> the compiler.
>
> Look at this: https://glot.io/snippets/eui2l8ov0r
>
> Result:
>> Bar.this(int): 7FFD3D60CD38
>> fun: 7FFD3D60CD20
>> Bar.~this(): 7FFD3D60CD20
>
> Compiler creates struct on the stack and silently (without
> postblitting and destruction old object) moves it to another
> address. Is it normal? I don't think so.
>
> But that's not the most fun.
>
> Look at this: https://glot.io/snippets/eui2pjrwvi
>
> Result:
>> Bar.this(int): 7FFF87DD2D31
>> fun: 7FFF87DD2CE0
>> Bar.~this(): 7FFF87DD2CE0
>> Bar.~this(): 7FFF87DD2D31
>
> WAT??? Compiler creates struct on the stack copies it without
> postblitting and destructs both objects.
>
> But if you create the structure before calling the function,
> then all will be well:
> https://glot.io/snippets/eui2vn2bu1
>
> All this greatly angered me because there are several issues
> related wrong struct construction and destruction in the
> bugtracker. Because of these bugs my low level libraries full
> of strange hacks.
>
> I want to ask. How you guys are going to create a reliable RC
> library, if such fundamental bugs hang in the issue tracker for
> months and years. And instead of fixing them, you develop new
> minor bells and whistles.
>
> See: https://issues.dlang.org/buglist.cgi?quicksearch=destructor
>
> Since I myself can't fix such bugs (my knowledge in this area
> are extremely small), I have a question to Andrei Alexandrescu:
> Can I donate to the D Foundation and that my donations would be
> aimed at fixing exactly these bugs?
Interesting. If you remove the CTor in Foo it works again.
More information about the Digitalmars-d-learn
mailing list