changeset 770:50eae902f77e

Cast result of ...AssignExp to type the frontend expects if necessary. Fixes #116.
author Christian Kamm <kamm incasoftware de>
date Fri, 14 Nov 2008 16:26:12 +0100
parents 038ea84f2d9d
children bfabbac8e705
files gen/toir.cpp
diffstat 1 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/gen/toir.cpp	Wed Nov 12 06:35:20 2008 +0100
+++ b/gen/toir.cpp	Fri Nov 14 16:26:12 2008 +0100
@@ -537,7 +537,7 @@
 
 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 @@
     }
     DtoAssign(loc, l, res);
 
+    if (res->getType() != type)
+        res = DtoCast(loc, res, type);
+
     return res;
 }
 
@@ -631,6 +634,9 @@
     }
     DtoAssign(loc, l, res);
 
+    if (res->getType() != type)
+        res = DtoCast(loc, res, type);
+
     return res;
 }
 
@@ -670,6 +676,9 @@
     }
     DtoAssign(loc, l, res);
 
+    if (res->getType() != type)
+        res = DtoCast(loc, res, type);
+
     return res;
 }
 
@@ -709,6 +718,9 @@
     }
     DtoAssign(loc, l, res);
 
+    if (res->getType() != type)
+        res = DtoCast(loc, res, type);
+
     return res;
 }
 
@@ -738,6 +750,9 @@
     DValue* res = DtoBinRem(l->getType(), l, r);
     DtoAssign(loc, l, res);
 
+    if (res->getType() != type)
+        res = DtoCast(loc, res, type);
+
     return res;
 }