# HG changeset patch # User lindquist # Date 1210192065 -7200 # Node ID 89e21eeaf4c47a5c99d298d3455ddef23d633336 # Parent f5ca6bbbf1d7647da43f45e1610a611c0a574500 [svn r201] Fixed: return statement could fail codegen with type mismatch for classes, added cast. diff -r f5ca6bbbf1d7 -r 89e21eeaf4c4 gen/statements.cpp --- 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);