[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