https://issues.dlang.org/show_bug.cgi?id=12904
Issue ID: 12904
Summary: Wrong-code for some slice to slice assignments when
using `opDollar`
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Keywords: wrong-code
Severity: regression
Priority: P1
Component: DMD
Assignee: [email protected]
Reporter: [email protected]
This code should run fine:
---
struct S
{
size_t opDollar(size_t dim)() // never called but should
{ return 7; }
int opSlice(size_t dim)(size_t, size_t to)
{
assert(to == 7); // fails
return 1;
}
int opIndex(int, int)
{
return 1;
}
void opSliceAssign(int)
{ }
// This functions existence prevents `opDollar` from being called:
void opIndexAssign(U, A...)(U value, A args)
{
static assert(0);
}
}
void main()
{
S s;
// `s[0..$, 0..$]` causes ICE Issue 12902
s[] = s[0..$, 1];
}
---
Probably has the same root as Issue 12902.
--