changeset 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 f5ca6bbbf1d7
children 395223f9875e
files gen/statements.cpp
diffstat 1 files changed, 7 insertions(+), 0 deletions(-) [+]
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);