On Sunday, 7 February 2016 at 23:11:34 UTC, anonymous wrote:
On 07.02.2016 23:49, Matt Elkins wrote:
Oi. Yes, I can, but it is quite a lot of code even if you don't count that it is dependent on OpenGL, GLFW, and gl3n to run to this point. This is why I was disappointed that simpler reproducing cases weren't appearing. I should probably spend more time trying to reduce the case
some...

Minimal test cases are great, but if you're not able to get it down in size, or not willing to, then a larger test case is ok, too. The problem is clear, and I'd expect reducing it to be relatively straight-foward (but possibly time-consuming). Just don't forget about it completely, that would be bad.

Also be aware of DustMite, a tool for automatic reduction:

https://github.com/CyberShadow/DustMite

Turns out it was less hard to reduce than I thought. Maybe it could be taken down some more, too, but this is reasonably small:

[code]
import std.stdio;

struct TextureHandle
{
    ~this() {}
}

TextureHandle create() {return TextureHandle();}

 struct TileView
 {
     @disable this();
     @disable this(this);
     this(TextureHandle a, TextureHandle b) {}
     ~this() {writeln("HERE2");}
 }

 struct View
 {
     this(int)
     {
         writeln("HERE1a");
         m_tileView = TileView(create(), create());
         writeln("HERE1b");
     }

     private TileView m_tileView;
}

unittest
{
    auto v = View(5);
}
[/code]

This yields the following:

[output]
HERE1a
HERE2
HERE1b
HERE2
[/output]

I would have expected only one "HERE2", the last one. Any of a number of changes cause it to behave in the expected way, including (but probably not limited to): * Creating the TextureHandles directly rather than calling create()
* Using only one argument to TileView's constructor
* Removing TextureHandle's empty destructor

That last one especially seems to indicate a bug to me...

Reply via email to