[svn r241] Fixed missing terminator for void main() with inline asm block.

This commit is contained in:
Tomas Lindquist Olsen
2008-06-06 22:30:31 +02:00
parent cf4d71b02c
commit 47ac84b223
4 changed files with 19 additions and 3 deletions

View File

@@ -694,6 +694,19 @@ void DtoDefineFunc(FuncDeclaration* fd)
}
}
// if the last block is not terminated we return a null value or void
// for some unknown reason this is needed when a void main() has a inline asm block ...
// this should be harmless for well formed code!
lastbb = &func->getBasicBlockList().back();
if (!lastbb->getTerminator())
{
Logger::println("adding missing return statement");
if (func->getReturnType() == llvm::Type::VoidTy)
llvm::ReturnInst::Create(lastbb);
else
llvm::ReturnInst::Create(llvm::Constant::getNullValue(func->getReturnType()), lastbb);
}
gIR->functions.pop_back();
}
}