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