[cfe-dev] Crash with -serialize

Nico Weber nicolasweber at gmx.de
Sat Aug 9 14:45:14 PDT 2008


On 09.08.2008, at 23:27, Argiris Kirtzidis wrote:

>> `clang -serialize` does crash for all input files. This is because  
>> of  the following commit:
>>
>>     URL: http://llvm.org/viewvc/llvm-project?rev=54502&view=rev
>>     Log:
>>     ParseAST now never releases the passed ASTConsumer.  This is  
>> the  responsibility of the client.
>>
>> While I understand why not deleting the Consumer is nice, it's not  
>> as  simple as this patch pretends: The TranslationUnit is a local  
>> variable  of ParseAST() and is destroyed as soon as the function  
>> exits. Most  Consumers keep a reference to the TU and do work in  
>> their destructor,  which will now be always run when the TU is  
>> already dead (e.g. the  ASTSerializers).
>
> How about having all Consumers do work in the HandleTranslationUnit  
> method, instead of their destructor, wouldn't this fix the problem ?

That sounds reasonable. Somewhat unrelated: What about adding a new  
method FinalizeTranslationUnit(TranslationUnit* TU) that is only  
called in ParseAST if !PP.getDiags().hasErrorOccurred()? Nearly all  
the consumers check for that manually at the moment.

Nico



More information about the cfe-dev mailing list