diff --git a/gen/toir.cpp b/gen/toir.cpp index 627ceaa0..466113f1 100644 --- a/gen/toir.cpp +++ b/gen/toir.cpp @@ -85,6 +85,7 @@ DValue* VarExp::toElem(IRState* p) if (cachedLvalue) { LLValue* V = cachedLvalue; + cachedLvalue = NULL; return new DVarValue(type, V); } @@ -603,9 +604,6 @@ DValue* X##AssignExp::toElem(IRState* p) \ e3.type = e1->type; \ DValue* dst = findLvalue(p, e1)->toElem(p); \ DValue* res = e3.toElem(p); \ - while(e1->op == TOKcast) \ - e1 = ((CastExp*)e1)->e1; \ - e1->cachedLvalue = NULL; \ DValue* stval = DtoCast(loc, res, dst->getType()); \ DtoAssign(loc, dst, stval); \ return DtoCast(loc, res, type); \ @@ -1140,6 +1138,7 @@ DValue* PtrExp::toElem(IRState* p) if (cachedLvalue) { V = cachedLvalue; + cachedLvalue = NULL; } else { @@ -1166,6 +1165,7 @@ DValue* DotVarExp::toElem(IRState* p) { Logger::println("using cached lvalue"); LLValue *V = cachedLvalue; + cachedLvalue = NULL; VarDeclaration* vd = var->isVarDeclaration(); assert(vd); return new DVarValue(type, vd, V); @@ -1304,6 +1304,7 @@ DValue* IndexExp::toElem(IRState* p) if (cachedLvalue) { LLValue* V = cachedLvalue; + cachedLvalue = NULL; return new DVarValue(type, V); }