From b0a55e6657cbb934837b293a9ea2810b1a74c7e0 Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Sun, 16 Jun 2019 07:50:20 +0000 Subject: re PR d/90559 (Out of memory because of negative length) PR d/90559 d/dmd: Merge upstream dmd 7afcc60c3 Partially fixes out of memory because of negative length. Reviewed-on: https://github.com/dlang/dmd/pull/10025 gcc/d/ChangeLog: 2019-06-16 Iain Buclaw PR d/90559 * d-target.cc (Target::_init): Reduce max static data size to INT_MAX. From-SVN: r272351 --- gcc/d/dmd/expressionsem.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'gcc/d/dmd/expressionsem.c') diff --git a/gcc/d/dmd/expressionsem.c b/gcc/d/dmd/expressionsem.c index 2957c09..88c59a9 100644 --- a/gcc/d/dmd/expressionsem.c +++ b/gcc/d/dmd/expressionsem.c @@ -5851,16 +5851,8 @@ public: if (exp->op != TOKassign) { // If multidimensional static array, treat as one large array - dinteger_t dim = ((TypeSArray *)t1)->dim->toInteger(); - Type *t = t1; - while (1) - { - t = t->nextOf()->toBasetype(); - if (t->ty != Tsarray) - break; - dim *= ((TypeSArray *)t)->dim->toInteger(); - e1x->type = t->nextOf()->sarrayOf(dim); - } + dinteger_t dim = t1->numberOfElems(exp->loc); + e1x->type = t1->baseElemOf()->sarrayOf(dim); } SliceExp *sle = new SliceExp(e1x->loc, e1x, NULL, NULL); sle->arrayop = true; -- cgit v1.1