digitalmars.D.bugs - [Issue 5188] New: alias this and compare expression generates wrong code
- d-bugmail puremagic.com (49/49) Nov 08 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5188
- d-bugmail puremagic.com (30/30) Jul 22 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5188
- d-bugmail puremagic.com (13/13) Jul 26 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5188
- d-bugmail puremagic.com (12/12) Aug 11 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5188
http://d.puremagic.com/issues/show_bug.cgi?id=5188 Summary: alias this and compare expression generates wrong code Product: D Version: D2 Platform: x86 OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: k.hara.pg gmail.com // bug.d struct S { int v = 10; alias v this; } void main() { S s; assert(s <= 20); // fail!? } // use ddbg 0.11 beta bug.d:6 void main() 00402010: c8040000 enter 0x4, 0x0 bug.d:8 S s; 00402014: a180504100 mov eax, [0x415080] 00402019: 8945fc mov [ebp-0x4], eax bug.d:9 assert(s <= 20); 0040201c: 837dfc14 cmp dword [ebp-0x4], 0x14 00402020: b901000000 mov ecx, 0x1 00402025: 7e02 jle 0x402029 _Dmain bug.d:9 // jump to 0x402029 00402027: 31c9 xor ecx, ecx // not run 00402029: 31d2 xor edx, edx // edx = 0 0040202b: 3bca cmp ecx, edx // ecx==1, edx==0 0040202d: 7e0a jle 0x402039 _Dmain bug.d:9 // fail 0040202f: b809000000 mov eax, 0x9 // eax = 9 00402034: e807000000 call 0x402040 bug.__assert // assert! 00402039: 31c0 xor eax, eax bug.d:10 } 0040203b: c9 leave 0040203c: c3 ret -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 08 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5188 kennytm gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code CC| |kennytm gmail.com Platform|x86 |All OS/Version|Windows |All If we set a break point at FuncDeclaration::toObjFile at glue.c and print 'fbody->toChars()', we'll see that the function void main() { S s; assert(s <= 20); // fail!? } has been semantic into int main() { S s = _D1x1S6__initZ; assert(cast(int)(s.v <= 20) <= 0); // ^^ return 0; } The extra '<= 0' causes the assertion to fail. Apparently DMD thinks there is an opCmp/opEquals. This also applies for '!=': assert(s != 14); which is semantic into assert(!(s.v != 14)); -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 22 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5188 Kenji Hara <k.hara.pg gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch Thanks for your explaining. Today I can create patch for this bug. https://github.com/D-Programming-Language/dmd/pull/275 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 26 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5188 Walter Bright <bugzilla digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |bugzilla digitalmars.com Resolution| |FIXED 01:28:57 PDT --- https://github.com/D-Programming-Language/dmd/commit/d419e8c4b675f70cae5e1784e500c2fc6fdf0f9d -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 11 2011