[Issue 5974] New: Incorrect nested function address in expression (&f).ptr

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon May 9 23:50:43 PDT 2011


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

           Summary: Incorrect nested function address in expression
                    (&f).ptr
           Product: D
           Version: D1 & D2
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: verylonglogin.reg at gmail.com


--- Comment #0 from Denis <verylonglogin.reg at gmail.com> 2011-05-09 23:46:44 PDT ---
Created an attachment (id=966)
Problem curious test case

Simple program:

void main()
{
    void f() { }

    void* t;

    t = (&f).ptr;
    //t = (&f).funcptr; //Uncommented: Error: &f is not an lvalue
}

First, look at lines 00402019 and 0040201E in disassembled main (dmd 1.067):

void main()
00402010  enter       4,0  

    void* t;
00402014  xor         eax,eax 
00402016  mov         dword ptr [t],eax 

    t = (&f).ptr;
00402019  mov         ecx,offset main at main@f (402028h) 
0040201E  mov         dword ptr [t],eax 
00402021  xor         eax,eax 
    //t = (&f).funcptr; //Uncommented: Error: &f is not an lvalue
}
00402023  leave            
00402024  ret              
00402025  int         3    
00402026  int         3    
00402027  int         3    
{
    void f() { }
00402028  enter       4,0  
0040202C  mov         dword ptr [ebp-4],eax 
0040202F  leave            
00402030  ret              


Second, why "&f is not an lvalue" error occurs for "(&f).funcptr"? Maybe, I
don't understand something?

Third, look at curiousTest.d attachment - it fails only if both asserts are
uncommented.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list