[Issue 9969] dmd ABI mistake (cfloat static array initialisation)

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Apr 21 04:34:00 PDT 2013


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


Maxim Fomin <maxim at maxim-fomin.ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|major                       |critical


--- Comment #6 from Maxim Fomin <maxim at maxim-fomin.ru> 2013-04-21 04:33:59 PDT ---
(In reply to comment #5)
> I concede that there may well be a frontend problem as well, but in my limited
> experience a properly functioning backend should never emit the code we see
> here.

What backend generates isn't determined only by it, bugs in frontend may lead
to incorrect instructions. Look at:

extern(C) int printf(const char*, ... );

extern(C) long *_memset64(long *p, long value, size_t count);

void main()
{
    long[2] arr = void;
    _memset64(arr.ptr, 1, 2);
    printf("%d %d\n", arr[0], arr[1]);
    //cfloat[2] bug;
}

and _Dmain. In this case call to memset is constructed by CallExp and things
are done right, but in case of cfloat[2] call is constructed by AssignExp and
setArray
(https://github.com/D-Programming-Language/dmd/blob/master/src/e2ir.c#L757) and
invalid code is generated. 

Anyway, this is critical.

-- 
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