Thread overview
[phobos] Variant broken for large types
Jun 19, 2010
Sean Kelly
Jun 19, 2010
Sean Kelly
Aug 27, 2010
Sean Kelly
June 18, 2010
Variant hurts my brain.  Something's screwy with using large values (ones that dynamic storage is allocated for automatically) but I haven't figured out what yet.  Help?


    import std.variant;
    import std.typecons;
    import std.stdio;

    void main()
    {
        struct Large
        {
            int[1024] x;
        }
        Large large;
        Variant v = large;
        if( v.convertsTo!(Large) )
            writeln( "yay" );
    }

(gdb) run
Starting program: /Users/sean/Projects/3p/test/vtest
Reading symbols for shared libraries +. done

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
0x00002754 in D3std7variant17__T8VariantNVk32Z8VariantN24__T7handlerTSmain5LargeZ7handlerFE3std7variant17__T8VariantNVk32Z8VariantN4OpIDPG32hPvZi6getPtrFPvZPSmain5Large ()
(gdb) bt
#0  0x00002754 in D3std7variant17__T8VariantNVk32Z8VariantN24__T7handlerTSmain5LargeZ7handlerFE3std7variant17__T8VariantNVk32Z8VariantN4OpIDPG32hPvZi6getPtrFPvZPSmain5Large ()
#1  0x000023c5 in D3std7variant17__T8VariantNVk32Z8VariantN24__T7handlerTSmain5LargeZ7handlerFE3std7variant17__T8VariantNVk32Z8VariantN4OpIDPG32hPvZi ()
#2  0x000032e8 in D3std7variant17__T8VariantNVk32Z8VariantN28__T10convertsToTSmain5LargeZ10convertsToMFZb ()
#3  0x000022a1 in _Dmain ()
#4  0x0000e92f in D2rt6dmain24mainUiPPaZi7runMainMFZv ()
#5  0x0000e866 in D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv ()
#6  0x0000e972 in D2rt6dmain24mainUiPPaZi6runAllMFZv ()
#7  0x0000e866 in D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv ()
#8  0x0000e7f4 in main ()
(gdb)

June 18, 2010
Never mind.  Three cheers for printf debugging.
August 26, 2010
Works fine for me. Did you or someone else fix it in the meantime?

Andrei

On 6/18/10 21:51 PDT, Sean Kelly wrote:
> Variant hurts my brain.  Something's screwy with using large values (ones that dynamic storage is allocated for automatically) but I haven't figured out what yet.  Help?
>
>
>      import std.variant;
>      import std.typecons;
>      import std.stdio;
>
>      void main()
>      {
>          struct Large
>          {
>              int[1024] x;
>          }
>          Large large;
>          Variant v = large;
>          if( v.convertsTo!(Large) )
>              writeln( "yay" );
>      }
>
> (gdb) run
> Starting program: /Users/sean/Projects/3p/test/vtest
> Reading symbols for shared libraries +. done
>
> Program received signal EXC_BAD_ACCESS, Could not access memory.
> Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
> 0x00002754 in D3std7variant17__T8VariantNVk32Z8VariantN24__T7handlerTSmain5LargeZ7handlerFE3std7variant17__T8VariantNVk32Z8VariantN4OpIDPG32hPvZi6getPtrFPvZPSmain5Large ()
> (gdb) bt
> #0  0x00002754 in D3std7variant17__T8VariantNVk32Z8VariantN24__T7handlerTSmain5LargeZ7handlerFE3std7variant17__T8VariantNVk32Z8VariantN4OpIDPG32hPvZi6getPtrFPvZPSmain5Large ()
> #1  0x000023c5 in D3std7variant17__T8VariantNVk32Z8VariantN24__T7handlerTSmain5LargeZ7handlerFE3std7variant17__T8VariantNVk32Z8VariantN4OpIDPG32hPvZi ()
> #2  0x000032e8 in D3std7variant17__T8VariantNVk32Z8VariantN28__T10convertsToTSmain5LargeZ10convertsToMFZb ()
> #3  0x000022a1 in _Dmain ()
> #4  0x0000e92f in D2rt6dmain24mainUiPPaZi7runMainMFZv ()
> #5  0x0000e866 in D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv ()
> #6  0x0000e972 in D2rt6dmain24mainUiPPaZi6runAllMFZv ()
> #7  0x0000e866 in D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv ()
> #8  0x0000e7f4 in main ()
> (gdb)
>
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
August 27, 2010
Probably.  I know that I made a few changes to Variant, and others have as well.

On Aug 26, 2010, at 11:15 PM, Andrei Alexandrescu wrote:

> Works fine for me. Did you or someone else fix it in the meantime?
> 
> Andrei
> 
> On 6/18/10 21:51 PDT, Sean Kelly wrote:
>> Variant hurts my brain.  Something's screwy with using large values (ones that dynamic storage is allocated for automatically) but I haven't figured out what yet.  Help?
>> 
>> 
>>     import std.variant;
>>     import std.typecons;
>>     import std.stdio;
>> 
>>     void main()
>>     {
>>         struct Large
>>         {
>>             int[1024] x;
>>         }
>>         Large large;
>>         Variant v = large;
>>         if( v.convertsTo!(Large) )
>>             writeln( "yay" );
>>     }
>> 
>> (gdb) run
>> Starting program: /Users/sean/Projects/3p/test/vtest
>> Reading symbols for shared libraries +. done
>> 
>> Program received signal EXC_BAD_ACCESS, Could not access memory.
>> Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
>> 0x00002754 in D3std7variant17__T8VariantNVk32Z8VariantN24__T7handlerTSmain5LargeZ7handlerFE3std7variant17__T8VariantNVk32Z8VariantN4OpIDPG32hPvZi6getPtrFPvZPSmain5Large ()
>> (gdb) bt
>> #0  0x00002754 in D3std7variant17__T8VariantNVk32Z8VariantN24__T7handlerTSmain5LargeZ7handlerFE3std7variant17__T8VariantNVk32Z8VariantN4OpIDPG32hPvZi6getPtrFPvZPSmain5Large ()
>> #1  0x000023c5 in D3std7variant17__T8VariantNVk32Z8VariantN24__T7handlerTSmain5LargeZ7handlerFE3std7variant17__T8VariantNVk32Z8VariantN4OpIDPG32hPvZi ()
>> #2  0x000032e8 in D3std7variant17__T8VariantNVk32Z8VariantN28__T10convertsToTSmain5LargeZ10convertsToMFZb ()
>> #3  0x000022a1 in _Dmain ()
>> #4  0x0000e92f in D2rt6dmain24mainUiPPaZi7runMainMFZv ()
>> #5  0x0000e866 in D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv ()
>> #6  0x0000e972 in D2rt6dmain24mainUiPPaZi6runAllMFZv ()
>> #7  0x0000e866 in D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv ()
>> #8  0x0000e7f4 in main ()
>> (gdb)
>> 
>> _______________________________________________
>> phobos mailing list
>> phobos at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/phobos