From d836692c8cae0ee3b91eb77699de170fdd43626b Mon Sep 17 00:00:00 2001 From: k-hara Date: Sat, 16 Jul 2011 15:06:56 +0900 Subject: [PATCH] [CTFE] Cannot evaluate SliceExp on if condition --- src/expression.c | 5 +++++ src/expression.h | 1 + test/compilable/interpret3.d | 12 ++++++++++++ 3 files changed, 18 insertions(+) diff --git a/src/expression.c b/src/expression.c index 04acefa85cf7..eea18e69e30c 100644 --- a/src/expression.c +++ b/src/expression.c @@ -8610,6 +8610,11 @@ Expression *SliceExp::modifiableLvalue(Scope *sc, Expression *e) return this; } +int SliceExp::isBool(int result) +{ + return e1->isBool(result); +} + void SliceExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs) { expToCBuffer(buf, hgs, e1, precedence[op]); diff --git a/src/expression.h b/src/expression.h index 026cdb0e03e7..798541010ee6 100644 --- a/src/expression.h +++ b/src/expression.h @@ -1101,6 +1101,7 @@ struct SliceExp : UnaExp int isLvalue(); Expression *toLvalue(Scope *sc, Expression *e); Expression *modifiableLvalue(Scope *sc, Expression *e); + int isBool(int result); void toCBuffer(OutBuffer *buf, HdrGenState *hgs); Expression *optimize(int result); Expression *interpret(InterState *istate, CtfeGoal goal = ctfeNeedRvalue); diff --git a/test/compilable/interpret3.d b/test/compilable/interpret3.d index ec46fec400d0..8189f4331982 100644 --- a/test/compilable/interpret3.d +++ b/test/compilable/interpret3.d @@ -1914,3 +1914,15 @@ int bug4448b() } static assert(bug4448b()==3); + +/************************************************** + 6331 - evaluate SliceExp on if condition +**************************************************/ + +bool bug6331(string s) +{ + if (s[0..1]) + return true; + return false; +} +static assert(bug6331("str"));