www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 5188] New: alias this and compare expression generates wrong code

reply d-bugmail puremagic.com writes:
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
next sibling parent d-bugmail puremagic.com writes:
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
prev sibling next sibling parent d-bugmail puremagic.com writes:
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
prev sibling parent d-bugmail puremagic.com writes:
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