On Mon, 03 Mar 2014 15:34:18 -0500, Namespace <[email protected]> wrote:

On Monday, 3 March 2014 at 18:36:56 UTC, Steven Schveighoffer wrote:
On Mon, 03 Mar 2014 12:03:12 -0500, Namespace <[email protected]> wrote:

On Monday, 3 March 2014 at 02:44:09 UTC, Namespace wrote:
It's working now, I get all my debug infos I need.
But: I have absolutly no idea how to get the correct TypeInfo in rt_finalize2. The ClassInfo is identified by casting the void* pointer to a void** and then cast this void** to ClassInfo*. But for other TypeInfos this weird trick doesn't work. How can I extract the correct TypeInfo from this void**? :P

I get the real TypeInfo (not sure if this was intended this way) and in my test base it works! But in druntime I get the weird error:
src\rt\lifetime.d(1256): Error: variable a1 used before set

----
    if (gc_getAttr(p) & BlkAttr.APPENDABLE)
    {
        void[] a1 = *cast(void[]*) ppv;
        //printf("len = %d\n", a1.length);

        void* p_a1 = &a1;
        void* tp = p_a1 + 12;

        TypeInfo* ti = cast(TypeInfo*) tp;

        import std.string : toStringz;
        string s = ti.toString(); // line 1256
        printf("Type = %s\n", toStringz(s));

        return;
    }
----

Any call to ti will invoke the error. Any idea why?

Not really any clue.

But if this is in druntime, it should not be importing anything from std.

Even without I get this weird error. Is this a bug?

It sounds suspicious. Clearly, you are not accessing a1 there, and clearly a1 is set before being used.

Any chance to reduce it?

-Steve

Reply via email to