diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2019-06-16 07:50:20 +0000 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gcc.gnu.org> | 2019-06-16 07:50:20 +0000 |
commit | b0a55e6657cbb934837b293a9ea2810b1a74c7e0 (patch) | |
tree | 84e3d719a3b7181744a750bb09ccd7984f277ea4 /gcc/d/dmd/expressionsem.c | |
parent | e5d0ba591e28d8be1fb5775fb0418fee04af17d7 (diff) | |
download | gcc-b0a55e6657cbb934837b293a9ea2810b1a74c7e0.zip gcc-b0a55e6657cbb934837b293a9ea2810b1a74c7e0.tar.gz gcc-b0a55e6657cbb934837b293a9ea2810b1a74c7e0.tar.bz2 |
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 <ibuclaw@gdcproject.org>
PR d/90559
* d-target.cc (Target::_init): Reduce max static data size to INT_MAX.
From-SVN: r272351
Diffstat (limited to 'gcc/d/dmd/expressionsem.c')
-rw-r--r-- | gcc/d/dmd/expressionsem.c | 12 |
1 files changed, 2 insertions, 10 deletions
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; |