[Issue 5570] 64 bit C ABI not followed for passing structs and complex numbers as function parameters

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Jun 27 09:59:49 PDT 2012


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



--- Comment #29 from Iain Buclaw <ibuclaw at ubuntu.com> 2012-06-27 10:02:08 PDT ---
(In reply to comment #27)
> (In reply to comment #26)
> > (In reply to comment #25)
> > > Sigh – seems like I was not exactly right about how GDC and LDC are handling
> > > arrays. Instead of treating them like the equivalent struct, they are treated
> > > as if length and pointer were two separate arguments […]
> > They are created as a two field struct in GDC.
> 
> Oh well, apparently GDC handles dynamic arrays like structs in most cases, but
> as size_t/void* pairs for variadic arguments, ABI-wise – I discovered this
> behavior looking at the generated assembly while working on the LDC vararg ABI,
> and didn't expect formal arguments to be treated differently. Maybe the
> behavior should be unified?
> 

Yes, that is correct for dynamic arrays. :~)

It does it on a condition that's pre-set as 'true' and can't be altered by the
user.  Of course, if all two field types in D (D arrays; delegates) should
*always* be passed in the same way as two field struct should be, then I can
turn it off (and add a switch to toggle it), or remove this code.

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