From 81ae45afe8d2127f4a1d5294ad89d3bb66122111 Mon Sep 17 00:00:00 2001 From: Tomas Lindquist Olsen Date: Wed, 7 May 2008 22:27:45 +0200 Subject: [PATCH] [svn r201] Fixed: return statement could fail codegen with type mismatch for classes, added cast. --- gen/statements.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gen/statements.cpp b/gen/statements.cpp index 9d92156a..8c49e66d 100644 --- a/gen/statements.cpp +++ b/gen/statements.cpp @@ -103,6 +103,13 @@ void ReturnStatement::toIR(IRState* p) 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);