www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Traits question and compiler crash

reply "Filippo Fantini" <ziofu1 gmail.com> writes:
Hello everyone!

I'm new to D.
While playing with around with traits,
I ended up writing this short example:


module test;

class Foo
{
     private int _value = 21;

     void foo()
     {
         import std.traits;

         alias funs = MemberFunctionsTuple!( typeof( this ), "bar" 
);

         version( crash )
	{
             void function( string ) b = &funs[ 0 ];
             b( "world" );
         }

         funs[ 0 ]( "world" );
     }

     void bar( string s )
     {
         import std.stdio;
         writeln( "hello ", s, "! ", _value );
     }
}

void main()
{
     auto f = new Foo();
     f.foo();
}


My first question is why building this with
dmd test.d

the line:
funs[ 0 ]( "world" );

does not crash, as I would expect because there's no this pointer 
to access _value when calling the member function.


The second question is why when building with:
dmd -version=crash test.d

the compiler just crashes instead.


These experiments were done with DMD v2.067.0 on Ubuntu x64 and 
on Windows x64.

Thank you!
Apr 14 2015
parent reply "anonymous" <anonymous example.com> writes:
On Tuesday, 14 April 2015 at 09:24:04 UTC, Filippo Fantini wrote:
 Hello everyone!

 I'm new to D.
 While playing with around with traits,
 I ended up writing this short example:


 module test;

 class Foo
 {
     private int _value = 21;

     void foo()
     {
         import std.traits;

         alias funs = MemberFunctionsTuple!( typeof( this ), 
 "bar" );

         version( crash )
 	{
             void function( string ) b = &funs[ 0 ];
             b( "world" );
         }

         funs[ 0 ]( "world" );
     }

     void bar( string s )
     {
         import std.stdio;
         writeln( "hello ", s, "! ", _value );
     }
 }

 void main()
 {
     auto f = new Foo();
     f.foo();
 }


 My first question is why building this with
 dmd test.d

 the line:
 funs[ 0 ]( "world" );

 does not crash, as I would expect because there's no this 
 pointer to access _value when calling the member function.
That's the same as `Foo.bar("world");`, which also works. The this pointer is passed even though the call does not show it. I don't know if or where this is specified, but I'm pretty sure it's supposed to work like this.
 The second question is why when building with:
 dmd -version=crash test.d

 the compiler just crashes instead.
Every compiler crash is a bug. Please report it at <http://issues.dlang.org/>.
Apr 14 2015
parent reply "Filippo Fantini" <ziofu1 gmail.com> writes:
On Tuesday, 14 April 2015 at 10:43:16 UTC, anonymous wrote:
 On Tuesday, 14 April 2015 at 09:24:04 UTC, Filippo Fantini 
 wrote:
 Hello everyone!

 I'm new to D.
 While playing with around with traits,
 I ended up writing this short example:


 module test;

 class Foo
 {
    private int _value = 21;

    void foo()
    {
        import std.traits;

        alias funs = MemberFunctionsTuple!( typeof( this ), 
 "bar" );

        version( crash )
 	{
            void function( string ) b = &funs[ 0 ];
            b( "world" );
        }

        funs[ 0 ]( "world" );
    }

    void bar( string s )
    {
        import std.stdio;
        writeln( "hello ", s, "! ", _value );
    }
 }

 void main()
 {
    auto f = new Foo();
    f.foo();
 }


 My first question is why building this with
 dmd test.d

 the line:
 funs[ 0 ]( "world" );

 does not crash, as I would expect because there's no this 
 pointer to access _value when calling the member function.
That's the same as `Foo.bar("world");`, which also works. The this pointer is passed even though the call does not show it. I don't know if or where this is specified, but I'm pretty sure it's supposed to work like this.
 The second question is why when building with:
 dmd -version=crash test.d

 the compiler just crashes instead.
Every compiler crash is a bug. Please report it at <http://issues.dlang.org/>.
Thanks. I've created an issue: <https://issues.dlang.org/show_bug.cgi?id=14448/>
Apr 14 2015
parent "Filippo Fantini" <ziofu1 gmail.com> writes:
correct link:

https://issues.dlang.org/show_bug.cgi?id=14448
Apr 14 2015