[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