diff --git a/src/e2ir.c b/src/e2ir.c index 11e601fec70f..46c35ba20731 100644 --- a/src/e2ir.c +++ b/src/e2ir.c @@ -3804,10 +3804,7 @@ elem *toElem(Expression *e, IRState *irs) { Expression *elem; if (ve->e1->op == TOKarrayliteral) - { - ArrayLiteralExp *ea = (ArrayLiteralExp *)ve->e1; - elem = (*ea->elements)[i]; - } + elem = ((ArrayLiteralExp *)ve->e1)->getElement(i); else elem = ve->e1; switch (elem->type->toBasetype()->ty) diff --git a/test/runnable/testxmm.d b/test/runnable/testxmm.d index b6497a453a79..f3483cc6b4a2 100644 --- a/test/runnable/testxmm.d +++ b/test/runnable/testxmm.d @@ -1396,6 +1396,20 @@ void test13988() foo13988(arr); } +/*****************************************/ +// 15123 + +void test15123() +{ + alias Vector16s = TypeTuple!( + void16, byte16, short8, int4, long2, + ubyte16, ushort8, uint4, ulong2, float4, double2); + foreach (V; Vector16s) + { + auto x = V.init; + } +} + /*****************************************/ int main()