diff --git a/dmd/expression.c b/dmd/expression.c index 4914515c..6569de4c 100644 --- a/dmd/expression.c +++ b/dmd/expression.c @@ -7532,8 +7532,8 @@ Expression *SliceExp::semantic(Scope *sc) if (t->ty == Ttuple) { - lwr = lwr->optimize(WANTvalue); - upr = upr->optimize(WANTvalue); + lwr = lwr->optimize(WANTvalue | WANTinterpret); + upr = upr->optimize(WANTvalue | WANTinterpret); uinteger_t i1 = lwr->toUInteger(); uinteger_t i2 = upr->toUInteger(); diff --git a/dmd/mtype.c b/dmd/mtype.c index 40f04a71..ca10d19e 100644 --- a/dmd/mtype.c +++ b/dmd/mtype.c @@ -5492,11 +5492,11 @@ Type *TypeSlice::semantic(Loc loc, Scope *sc) TypeTuple *tt = (TypeTuple *)tbn; lwr = semanticLength(sc, tbn, lwr); - lwr = lwr->optimize(WANTvalue); + lwr = lwr->optimize(WANTvalue | WANTinterpret); uinteger_t i1 = lwr->toUInteger(); upr = semanticLength(sc, tbn, upr); - upr = upr->optimize(WANTvalue); + upr = upr->optimize(WANTvalue | WANTinterpret); uinteger_t i2 = upr->toUInteger(); if (!(i1 <= i2 && i2 <= tt->arguments->dim)) @@ -5536,11 +5536,11 @@ void TypeSlice::resolve(Loc loc, Scope *sc, Expression **pe, Type **pt, Dsymbol sc = sc->push(sym); lwr = lwr->semantic(sc); - lwr = lwr->optimize(WANTvalue); + lwr = lwr->optimize(WANTvalue | WANTinterpret); uinteger_t i1 = lwr->toUInteger(); upr = upr->semantic(sc); - upr = upr->optimize(WANTvalue); + upr = upr->optimize(WANTvalue | WANTinterpret); uinteger_t i2 = upr->toUInteger(); sc = sc->pop();