Always pass a diagnostic handler to the linker.
Before this patch the diagnostic handler was optional. If it was not passed, the one in the LLVMContext was used. That is probably not a pattern we want to follow. If each area has an optional callback, there is a sea of callbacks and it is hard to follow which one is called. Doing this also found cases where the callback is a nice addition, like testing that no errors or warnings are reported. The other option is to always use the diagnostic handler in the LLVMContext. That has a few problems * To implement the C API we would have to set the diag handler and then set it back to the original value. * Code that creates the context might be far away from code that wants the diagnostics. I do have a patch that implements the second option and will send that as an RFC. llvm-svn: 254777
This commit is contained in:
@@ -65,9 +65,10 @@ const char* LTOCodeGenerator::getVersionString() {
|
||||
}
|
||||
|
||||
LTOCodeGenerator::LTOCodeGenerator(LLVMContext &Context)
|
||||
: Context(Context),
|
||||
MergedModule(new Module("ld-temp.o", Context)),
|
||||
IRLinker(new Linker(*MergedModule)) {
|
||||
: Context(Context), MergedModule(new Module("ld-temp.o", Context)),
|
||||
IRLinker(new Linker(*MergedModule, [this](const DiagnosticInfo &DI) {
|
||||
MergedModule->getContext().diagnose(DI);
|
||||
})) {
|
||||
initializeLTOPasses();
|
||||
}
|
||||
|
||||
@@ -123,7 +124,8 @@ void LTOCodeGenerator::setModule(std::unique_ptr<LTOModule> Mod) {
|
||||
AsmUndefinedRefs.clear();
|
||||
|
||||
MergedModule = Mod->takeModule();
|
||||
IRLinker = make_unique<Linker>(*MergedModule);
|
||||
IRLinker =
|
||||
make_unique<Linker>(*MergedModule, IRLinker->getDiagnosticHandler());
|
||||
|
||||
const std::vector<const char*> &Undefs = Mod->getAsmUndefinedRefs();
|
||||
for (int I = 0, E = Undefs.size(); I != E; ++I)
|
||||
|
||||
Reference in New Issue
Block a user