aboutsummaryrefslogtreecommitdiff
path: root/gcc/d/dmd/expressionsem.c
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2019-06-16 07:50:20 +0000
committerIain Buclaw <ibuclaw@gcc.gnu.org>2019-06-16 07:50:20 +0000
commitb0a55e6657cbb934837b293a9ea2810b1a74c7e0 (patch)
tree84e3d719a3b7181744a750bb09ccd7984f277ea4 /gcc/d/dmd/expressionsem.c
parente5d0ba591e28d8be1fb5775fb0418fee04af17d7 (diff)
downloadgcc-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.c12
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;