[D-runtime] Bug 3150: requires changes to rt/lifetime.d

Sean Kelly sean at invisibleduck.org
Sat Jul 24 06:46:36 PDT 2010


It does allow them to be moved to a different module without compiler changes, but otherwise you're right.

On Jul 24, 2010, at 1:44 AM, Don Clugston wrote:

> You can still make the change I suggested in the bug report, adding a
> static assert to check that the sizes are the same, and doing a cast
> to ulong via a cast(void *), instead of a direct cast.
> BTW I can't see any reason for any of those functions to use C calling
> conventions. I presume they only reason they use C is because they're
> so ancient.
> 
> 
> On 23 July 2010 18:47, Sean Kelly <sean at invisibleduck.org> wrote:
>> That's why I never changed it myself :-)  The compiler needs to be changed to use the new functions.
>> 
>> On Jul 23, 2010, at 8:54 AM, Steve Schveighoffer wrote:
>> 
>>> I have a problem here.  If I change a function that returns a ulong to having it
>>> return an Array struct, the compiler expects the caller to push a reference to
>>> the return value on the stack, where it doesn't do that when returning a ulong.
>>> 
>>> Easily demonstrated with this code:
>>> 
>>> testlongtoarray2.d:
>>> struct Array
>>> {
>>>    size_t length;
>>>    ubyte* ptr;
>>> }
>>> 
>>> extern(C) Array callme()
>>> {
>>>    Array d;
>>>    d.length = 5;
>>>    d.ptr = null;
>>>    return d;
>>> }
>>> 
>>> testlongtoarray.d:
>>> extern(C) ulong callme();
>>> 
>>> void main()
>>> {
>>>    ulong x = callme();
>>> }
>>> [steves at steveslaptop testd]$ dmd -gc testlongtoarray*.d[steves at steveslaptop
>>> testd]$ gdb testlongtoarray2
>>> GNU gdb (GDB) Fedora (6.8.50.20090302-40.fc11)
>>> Copyright (C) 2009 Free Software Foundation, Inc.
>>> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
>>> This is free software: you are free to change and redistribute it.
>>> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
>>> and "show warranty" for details.
>>> This GDB was configured as "i586-redhat-linux-gnu".
>>> For bug reporting instructions, please see:
>>> <http://www.gnu.org/software/gdb/bugs/>...
>>> (gdb) run
>>> Starting program: /home/steves/testd/testlongtoarray2
>>> [Thread debugging using libthread_db enabled]
>>> 
>>> Program received signal SIGSEGV, Segmentation fault.
>>> 0x08049073 in callme (__HID1=0x180fc4) at testlongtoarray2.d:9  <------ note the
>>> hidden argument which is garbage!
>>> 9        Array d;
>>> Missing separate debuginfos, use: debuginfo-install glibc-2.10.2-1.i686
>>> (gdb)
>>> 
>>> What's happening is that main is simply calling the function without pushing
>>> anything on the stack, but the implementation expects that the reference to the
>>> return value is on the stack.
>>> 
>>> Does this make any sense to anyone?  What should I do here?  I can't really
>>> change what the compiler expects the return value to be.
>>> 
>>> -Steve
>>> 
>>> 
>>> 
>>> ----- Original Message ----
>>>> From: Don Clugston <dclugston at googlemail.com>
>>>> To: D-runtime at puremagic.com
>>>> Sent: Fri, July 23, 2010 5:31:04 AM
>>>> Subject: [D-runtime] Bug 3150: requires changes to rt/lifetime.d
>>>> 
>>>> Fixing this bug will be important for 64 bits:
>>>> 3150 cast from dynamic array  to ulong is allowed
>>>> 
>>>> As discussed in the comments to that bug, a change is  required at two
>>>> places in druntime, because druntime currently relies on the  compiler
>>>> bug. I don't think it's particularly difficult, but I don't want to  do
>>>> it myself. Can one of you guys take care of  it?
>>>> _______________________________________________
>>>> D-runtime mailing  list
>>>> D-runtime at puremagic.com
>>>> http://lists.puremagic.com/mailman/listinfo/d-runtime
>>>> 
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> D-runtime mailing list
>>> D-runtime at puremagic.com
>>> http://lists.puremagic.com/mailman/listinfo/d-runtime
>> 
>> _______________________________________________
>> D-runtime mailing list
>> D-runtime at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/d-runtime
>> 
> _______________________________________________
> D-runtime mailing list
> D-runtime at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/d-runtime



More information about the D-runtime mailing list