[Issue 915] New: dmd generate bad form return(retn 4) for invariant func

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Feb 1 05:55:38 PST 2007


http://d.puremagic.com/issues/show_bug.cgi?id=915

           Summary: dmd generate bad form return(retn 4) for invariant func
           Product: D
           Version: 1.004
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: critical
          Priority: P1
         Component: DMD
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: davidl at 126.com


import std.stdio;
interface IUnknown{
        extern(Windows):
        void func();
}
class ComObject :IUnknown
{
extern (Windows):
        void func()
        {writefln(`comobject`);
        }
}
interface IDataObject: IUnknown
{
        extern(Windows):
        void method();
}
package class invarianttest:ComObject, IDataObject
{
        invariant
        {
                writefln(`hello invariant`);
        }

extern (Windows):
        override void func()
        {
        int esp;
        asm{
                mov esp,ESP;
        }
        printf("\n%d",esp);
        printf(`func`);
        }
        void method()
        {
                writefln(`method`);
        }
}
void main()
{
        auto inst= new invarianttest;
        int esp;
        asm{
                mov esp,ESP;
        }
        inst.func();
        inst.method();
        writefln("\n%d",esp);
        asm{
                mov esp,ESP;
        }
        writefln("\n%d",esp);
}

we get runtime AV when the we return from our own invariant to _d_invariant
the problem is dmd generate the retn 4 for the return of our own invariant func


-- 



More information about the Digitalmars-d-bugs mailing list