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

Sean Kelly sean at invisibleduck.org
Fri Jul 23 09:47:57 PDT 2010


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



More information about the D-runtime mailing list