[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 ?
-Argiris
_______________________________________________
cfe-dev mailing list
cfe-dev at cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
More information about the cfe-dev
mailing list