[cfe-dev] Crash with -serialize

Daniel Dunbar daniel at zuster.org
Sat Aug 9 14:49:19 PDT 2008

Yes I think this is the correct solution (but haven't looked closely).

The TranslationUnit passed in to Initialize should be spec'd to only
be valid between Initialize and Finalize.

----- Original Message ----
From: Argiris Kirtzidis <akyrtzi at gmail.com>
To: Nico Weber <nicolasweber at gmx.de>
Cc: cfe-dev at cs.uiuc.edu
Sent: Saturday, August 9, 2008 2:27:33 PM
Subject: Re: [cfe-dev] Crash with -serialize

Nico Weber wrote:
> Hi,
> `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).
> So, either that commit is undone, or the TranslationUnit has to be  
> allocated on the stack somehow.

How about having all Consumers do work in the HandleTranslationUnit 
method, instead of their destructor, wouldn't this fix the problem ?

cfe-dev mailing list
cfe-dev at cs.uiuc.edu

More information about the cfe-dev mailing list