From 1228595e7ee359328a990e2c390933e17e06b392 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 14 Nov 2008 16:26:12 +0100 Subject: [PATCH] Cast result of ...AssignExp to type the frontend expects if necessary. Fixes #116. --- gen/toir.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/gen/toir.cpp b/gen/toir.cpp index a61b6b07..4038ab49 100644 --- a/gen/toir.cpp +++ b/gen/toir.cpp @@ -537,7 +537,7 @@ DValue* AddExp::toElem(IRState* p) DValue* AddAssignExp::toElem(IRState* p) { - Logger::print("AddAssignExp::toElem: %s\n", toChars()); + Logger::print("AddAssignExp::toElem: %s | %s\n", toChars(), type->toChars()); LOG_SCOPE; DValue* l = e1->toElem(p); @@ -558,6 +558,9 @@ DValue* AddAssignExp::toElem(IRState* p) } DtoAssign(loc, l, res); + if (res->getType() != type) + res = DtoCast(loc, res, type); + return res; } @@ -631,6 +634,9 @@ DValue* MinAssignExp::toElem(IRState* p) } DtoAssign(loc, l, res); + if (res->getType() != type) + res = DtoCast(loc, res, type); + return res; } @@ -670,6 +676,9 @@ DValue* MulAssignExp::toElem(IRState* p) } DtoAssign(loc, l, res); + if (res->getType() != type) + res = DtoCast(loc, res, type); + return res; } @@ -709,6 +718,9 @@ DValue* DivAssignExp::toElem(IRState* p) } DtoAssign(loc, l, res); + if (res->getType() != type) + res = DtoCast(loc, res, type); + return res; } @@ -738,6 +750,9 @@ DValue* ModAssignExp::toElem(IRState* p) DValue* res = DtoBinRem(l->getType(), l, r); DtoAssign(loc, l, res); + if (res->getType() != type) + res = DtoCast(loc, res, type); + return res; }