diff gen/statements.cpp @ 185:89e21eeaf4c4 trunk

[svn r201] Fixed: return statement could fail codegen with type mismatch for classes, added cast.
author lindquist
date Wed, 07 May 2008 22:27:45 +0200
parents ef4108f34db6
children bfcb657756f6
line wrap: on
line diff
--- a/gen/statements.cpp	Wed May 07 22:01:59 2008 +0200
+++ b/gen/statements.cpp	Wed May 07 22:27:45 2008 +0200
@@ -103,6 +103,13 @@
             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';
+            }
+
             emit_finallyblocks(p, enclosingtryfinally, NULL);
 
             if (global.params.symdebug) DtoDwarfFuncEnd(p->func()->decl);