Mercurial > projects > ldc
comparison gen/statements.cpp @ 974:815e1b8c6b00
Allow 'return exp;' for void main().
It's unfortunate that for main the llvm type and D type don't match up...
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Tue, 17 Feb 2009 18:53:15 +0100 |
parents | 03d7c4aac654 |
children | fe93215deb82 |
comparison
equal
deleted
inserted
replaced
973:d96471e8b5e5 | 974:815e1b8c6b00 |
---|---|
88 } | 88 } |
89 | 89 |
90 if (Logger::enabled()) | 90 if (Logger::enabled()) |
91 Logger::cout() << "return value is '" <<*v << "'\n"; | 91 Logger::cout() << "return value is '" <<*v << "'\n"; |
92 | 92 |
93 // can happen for classes | 93 // can happen for classes and void main |
94 if (v->getType() != p->topfunc()->getReturnType()) | 94 if (v->getType() != p->topfunc()->getReturnType()) |
95 { | 95 { |
96 v = gIR->ir->CreateBitCast(v, p->topfunc()->getReturnType(), "tmp"); | 96 // for main and a void expression: return 0 instead, else bitcast |
97 if (p->topfunc() == p->mainFunc && v->getType() == LLType::VoidTy) | |
98 v = llvm::Constant::getNullValue(p->mainFunc->getReturnType()); | |
99 else | |
100 v = gIR->ir->CreateBitCast(v, p->topfunc()->getReturnType(), "tmp"); | |
101 | |
97 if (Logger::enabled()) | 102 if (Logger::enabled()) |
98 Logger::cout() << "return value after cast: " << *v << '\n'; | 103 Logger::cout() << "return value after cast: " << *v << '\n'; |
99 } | 104 } |
100 | 105 |
101 DtoEnclosingHandlers(enclosinghandler, NULL); | 106 DtoEnclosingHandlers(enclosinghandler, NULL); |