struct A { static A a; alias a this; } struct B { int opSlice(size_t, size_t); int opSlice(size_t, A); } void main() { B b; b[0..A]; } Causes a segmentation fault using the latest git. Possibly related to issue #6029.
$ gdb --batch -ex 'run test4.d' -ex 'bt 25' dmd Program received signal SIGSEGV, Segmentation fault. 0x0000000000517f40 in aliasthisConvTo (ad=Cannot access memory at address 0x7fffff7fefe8) at mtype.c:7193 7193 { #0 0x0000000000517f40 in aliasthisConvTo (ad=Cannot access memory at address 0x7fffff7fefe8) at mtype.c:7193 #1 0x0000000000518380 in TypeStruct::implicitConvTo (this=0x86f2c0, to=0x8631d0) at mtype.c:7269 #2 0x0000000000518120 in aliasthisConvTo (ad=0x86f110, from=0x86f2c0, to=0x8631d0) at mtype.c:7213 #3 0x0000000000518380 in TypeStruct::implicitConvTo (this=0x86f2c0, to=0x8631d0) at mtype.c:7269 #4 0x0000000000518120 in aliasthisConvTo (ad=0x86f110, from=0x86f2c0, to=0x8631d0) at mtype.c:7213 #5 0x0000000000518380 in TypeStruct::implicitConvTo (this=0x86f2c0, to=0x8631d0) at mtype.c:7269 #6 0x0000000000518120 in aliasthisConvTo (ad=0x86f110, from=0x86f2c0, to=0x8631d0) at mtype.c:7213 ...
Mutually recursion version. struct A { static B b; alias b this; } struct B { static A a; alias a this; } struct C { int opSlice(size_t, size_t){ return 0; } int opSlice(size_t, A){ return 0; } } void main() { C c; c[0..A]; }
This has nothing to do with method overloading. It's a stack overflow caused by aliasthisConvTo. *** This issue has been marked as a duplicate of issue 6029 ***