diff gen/statements.cpp @ 610:1b62222581fb

Change bool type to i8
author Christian Kamm <kamm incasoftware de>
date Sat, 20 Sep 2008 10:13:15 +0200
parents fbb1a366cfbc
children 83ca663ecc20
line wrap: on
line diff
--- a/gen/statements.cpp	Fri Sep 19 21:45:05 2008 +0200
+++ b/gen/statements.cpp	Sat Sep 20 10:13:15 2008 +0200
@@ -81,11 +81,15 @@
             delete e;
             Logger::cout() << "return value is '" <<*v << "'\n";
 
-            // can happen for classes
             if (v->getType() != p->topfunc()->getReturnType())
             {
-                v = gIR->ir->CreateBitCast(v, p->topfunc()->getReturnType(), "tmp");
-                Logger::cout() << "return value after cast: " << *v << '\n';
+                // can happen for classes
+                if(isaPointer(v) && isaPointer(p->topfunc()->getReturnType()))
+                    v = gIR->ir->CreateBitCast(v, p->topfunc()->getReturnType(), "tmp");
+                // or for i1 vs i8 bools
+                if(v->getType() == LLType::Int1Ty && p->topfunc()->getReturnType() == LLType::Int8Ty)
+                    v = gIR->ir->CreateZExt(v, LLType::Int8Ty);
+                Logger::cout() << "adjusted return value: " << *v << '\n';
             }
 
             DtoEnclosingHandlers(enclosinghandler, NULL);