Test case: ----------------- struct S7424 { @property inout(int) g()() inout { return 0; } void test() { int f = g; } } ----------------- The @property is optional. Compile with 'dmd -c bug7424.d'. The expression 'this.g()' has a NULL 'type', so the statement at expression.c:10112 Type *t2 = e2->type->toBasetype(); caused SEGFAULT. The regression is introduced in commit 1d4438f151143fcdcb807e257959dd1d588f9048.
Further test cases: -------------------------------------------------- // Should compile: struct S7424a { @property inout(int) g()() inout { return 0; } void test1() { int f = g; } void test2() const { int f = g; } void test3() immutable { int f = g; } } -------------------------------------------------- // Should fail: struct S7424b { @property int g()() { return 0; } void test() const { int f = g; } } struct S7424c { @property int g()() { return 0; } void test() immutable { int f = g; } } struct S7424d { @property int g()() immutable { return 0; } void test() const { int f = g; } } struct S7424e { @property int g()() immutable { return 0; } void test() { int f = g; } } struct S7424f { @property int g()() shared { return 0; } void test() { int f = g; } } struct S7424g { @property int g()() { return 0; } void test() shared { int f = g; } } --------------------------------------------------
Pull #698. https://github.com/D-Programming-Language/dmd/pull/698