diff gen/binops.cpp @ 524:ca2dfe98036c

Binary ops had the wrong result type for real op imaginary. Fixes: run/creal_03
author Christian Kamm <kamm incasoftware de>
date Sun, 17 Aug 2008 12:21:53 +0200
parents a95056b3c996
children cc5fee7836dc
line wrap: on
line diff
--- a/gen/binops.cpp	Sun Aug 17 11:39:36 2008 +0200
+++ b/gen/binops.cpp	Sun Aug 17 12:21:53 2008 +0200
@@ -24,15 +24,15 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-DValue* DtoBinMul(DValue* lhs, DValue* rhs)
+DValue* DtoBinMul(Type* targettype, DValue* lhs, DValue* rhs)
 {
     LLValue* v = gIR->ir->CreateMul(lhs->getRVal(), rhs->getRVal(), "tmp");
-    return new DImValue( lhs->getType(), v );
+    return new DImValue( targettype, v );
 }
 
 //////////////////////////////////////////////////////////////////////////////
 
-DValue* DtoBinDiv(DValue* lhs, DValue* rhs)
+DValue* DtoBinDiv(Type* targettype, DValue* lhs, DValue* rhs)
 {
     Type* t = lhs->getType();
     LLValue *l, *r;
@@ -45,12 +45,12 @@
         res = gIR->ir->CreateSDiv(l, r, "tmp");
     else
         res = gIR->ir->CreateUDiv(l, r, "tmp");
-    return new DImValue( lhs->getType(), res );
+    return new DImValue( targettype, res );
 }
 
 //////////////////////////////////////////////////////////////////////////////
 
-DValue* DtoBinRem(DValue* lhs, DValue* rhs)
+DValue* DtoBinRem(Type* targettype, DValue* lhs, DValue* rhs)
 {
     Type* t = lhs->getType();
     LLValue *l, *r;
@@ -63,5 +63,5 @@
         res = gIR->ir->CreateSRem(l, r, "tmp");
     else
         res = gIR->ir->CreateURem(l, r, "tmp");
-    return new DImValue( lhs->getType(), res );
+    return new DImValue( targettype, res );
 }