# HG changeset patch # User Kelly Wilson # Date 1268274914 25200 # Node ID 638a823ace4501959f42fe04244a7ad1246aa5a9 # Parent a8fc855f156e463ca8ef581d63940d99ebbc9ad2 Strange workaround for returning from within 'void main()'. The new dmdfe sets the ReturnStatement->exp to null. Fixed bug #391. diff -r a8fc855f156e -r 638a823ace45 gen/statements.cpp --- a/gen/statements.cpp Tue Mar 09 23:21:48 2010 +0200 +++ b/gen/statements.cpp Wed Mar 10 19:35:14 2010 -0700 @@ -57,7 +57,7 @@ DtoDwarfStopPoint(loc.linnum); // is there a return value expression? - if (exp) + if (exp || (!exp && (p->topfunc() == p->mainFunc)) ) { // if the functions return type is void this means that // we are returning through a pointer argument @@ -88,8 +88,12 @@ // the return type is not void, so this is a normal "register" return else { - // do abi specific transformations on the return value - LLValue* v = p->func()->type->fty.putRet(exp->type, exp->toElem(p)); + LLValue* v; + if (!exp && (p->topfunc() == p->mainFunc)) + v = LLConstant::getNullValue(p->mainFunc->getReturnType()); + else + // do abi specific transformations on the return value + v = p->func()->type->fty.putRet(exp->type, exp->toElem(p)); if (Logger::enabled()) Logger::cout() << "return value is '" <<*v << "'\n";