Bug 7424 – Segfault when trying to call a templated property with different const-ancy.
Status
RESOLVED
Resolution
FIXED
Severity
regression
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-02-02T09:45:00Z
Last change time
2012-02-06T00:39:09Z
Keywords
ice, pull
Assigned to
nobody
Creator
kennytm
Comments
Comment #0 by kennytm — 2012-02-02T09:45:27Z
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.
Comment #1 by kennytm — 2012-02-05T13:55:34Z
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; }
}
--------------------------------------------------