diff --git a/driver/main.cpp b/driver/main.cpp index 59b0f5f13f..03142d1e05 100644 --- a/driver/main.cpp +++ b/driver/main.cpp @@ -847,6 +847,29 @@ void genCmain(Scope *sc) rootHasMain = sc->module; } +static void emitEntryPointInto(llvm::Module* lm) +{ + assert(entrypoint && "Entry point Dmodule has not been generated."); +#if LDC_LLVM_VER >= 303 + llvm::Linker linker(lm); +#else + llvm::Linker linker("ldc", lm); +#endif + + llvm::Module* entryModule = entrypoint->genLLVMModule(lm->getContext()); + + std::string linkError; +#if LDC_LLVM_VER >= 303 + const bool hadError = linker.linkInModule(entryModule, &linkError); +#else + const bool hadError = linker.LinkInModule(entryModule, &linkError); + linker.releaseModule(); +#endif + if (hadError) + error(Loc(), "%s", linkError.c_str()); +} + + int main(int argc, char **argv) { // stack trace on signals @@ -1258,25 +1281,7 @@ int main(int argc, char **argv) { llvm::Module* lm = m->genLLVMModule(context); if (entrypoint && rootHasMain == m) - { -#if LDC_LLVM_VER >= 303 - llvm::Linker linker(lm); -#else - llvm::Linker linker("ldc", lm); -#endif - - llvm::Module* entryModule = entrypoint->genLLVMModule(context); - std::string linkError; - -#if LDC_LLVM_VER >= 303 - const bool hadError = linker.linkInModule(entryModule, &linkError); -#else - const bool hadError= linker.LinkInModule(entryModule, &linkError); - linker.releaseModule(); -#endif - if (hadError) - error(Loc(), "%s", linkError.c_str()); - } + emitEntryPointInto(lm); if (!singleObj) { m->deleteObjFile();