[Issue 9449] Segmentation fault in main()

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Apr 21 09:25:56 PDT 2013


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


John Colvin <john.loughran.colvin at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |john.loughran.colvin at gmail.
                   |                            |com


--- Comment #7 from John Colvin <john.loughran.colvin at gmail.com> 2013-04-21 17:25:52 BST ---
(In reply to comment #5)
> (In reply to comment #4)
> > Seems to be related to bug 8518.
> 
> Thanks for founding. The root of the problem (at least this one) is when dmd
> frontend parses and generates list of expressions, it does not create "hidden"
> expression which calls _memset128ii. Instead it does this when it executes
> AssignExpression::toElem() and later calls setArray() which issues call to
> _memset128ii. However it does not convert ubyte16[1] from static array to
> dynamic array and passes it as a static array. Since _memset128ii expects
> dynamic array, the program goes off the rails.

I'm pretty sure the use of void[] in _memset128ii is simply so as to have a
128bit data type. It's never used as, or expected to be, an array.

_memset128ii doesn't care whether it's being passed a static or dynamic array,
it just blindly increments a pointer and writes to it "count" times.

(In reply to comment #3)
> _memset128ii expects:
> 
> %rcx => size_t count
> %rdx => .ptr of value array
> $rsi => .length of value array
> %rdi => pointer to first argument array 

This is incorrect. _memset128 expects:

RCX: size_t count
RDX: higher 64 bits of value
RSI: lower 64 bits of value
RDI: pointer to the 1st element of the destination array.

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