non-exiting diagnostic handler for LTO code generator

Duncan P. N. Exon Smith via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 9 14:28:28 PDT 2015


(The patch looks correct to me too.  LGTM once there's a good test.)

> On 2015-Sep-09, at 05:33, Rafael EspĂ­ndola <rafael.espindola at gmail.com> wrote:
> 
> I think the included patch is correct. You should be able to write a
> test for it with llvm-lto, no?
> 
> On 8 September 2015 at 23:01, Gao, Yunzhong
> <yunzhong_gao at playstation.sony.com> wrote:
>> Hi Rafael, Duncan, Peter,
>> 
>> With r220732, when calling the Linker::Linker(Module *M) constructor, the
>> default
>> 
>> diagnostic handler is set to use LLVMContext::diagnose().
>> Linker::Linker(Module *M)
>> 
>> is the constructor called by LTOCodeGenerator::LTOCodeGenerator()
>> constructor. This
>> 
>> change is somewhat problematic for our LTO client, because we use a wrapper
>> 
>> executable to relay communications with the LTO library.
>> LLVMContext::diagnose()
>> 
>> calls exit(1) on errors, which causes the wrapper executable to exit before
>> the
>> 
>> linker gets a chance to do any clean-up. I was wondering whether the
>> 
>> LTOCodeGenerator is now expected to provide a non-exiting diagnostic handler
>> (like
>> 
>> below), and whether/how the other LTO clients are affected (or not). Any
>> advice?
>> 
>> Thanks,
>> 
>> - Gao
>> 
>> 
>> 
>> diff --git a/llvm/lib/LTO/LTOCodeGenerator.cpp
>> b/llvm/lib/LTO/LTOCodeGenerator.c
>> 
>> index c7a50bc..20ab4a2 100644
>> 
>> --- a/llvm/lib/LTO/LTOCodeGenerator.cpp
>> 
>> +++ b/llvm/lib/LTO/LTOCodeGenerator.cpp
>> 
>> @@ -75,7 +75,12 @@ const char* LTOCodeGenerator::getVersionString() {
>> 
>> }
>> 
>> 
>> 
>> LTOCodeGenerator::LTOCodeGenerator()
>> 
>> -    : Context(getGlobalContext()), IRLinker(new Module("ld-temp.o",
>> Context)) {
>> 
>> +    : Context(getGlobalContext()), IRLinker(new Module("ld-temp.o",
>> Context),
>> 
>> +       [&](const DiagnosticInfo &DI) {
>> 
>> +         DiagnosticPrinterRawOStream DP(errs());
>> 
>> +         DI.print(DP);
>> 
>> +         errs() << "\n";
>> 
>> +       }) {
>> 
>>   initializeLTOPasses();
>> 
>> }



More information about the llvm-commits mailing list