[cfe-commits] r51364 - in /cfe/trunk: Driver/SerializationTest.cpp include/clang/AST/TranslationUnit.h lib/AST/TranslationUnit.cpp
Ted Kremenek
kremenek at apple.com
Wed May 21 08:17:33 PDT 2008
Looks good. Thanks!
On May 20, 2008, at 10:33 PM, Eli Friedman wrote:
> Author: efriedma
> Date: Wed May 21 00:33:10 2008
> New Revision: 51364
>
> URL: http://llvm.org/viewvc/llvm-project?rev=51364&view=rev
> Log:
> Fix the destruction "properly" in the sense that we actually destroy
> the
> ASTs. This is a hack, but I haven't considered how we really
> want to do this.
>
>
> Modified:
> cfe/trunk/Driver/SerializationTest.cpp
> cfe/trunk/include/clang/AST/TranslationUnit.h
> cfe/trunk/lib/AST/TranslationUnit.cpp
>
> Modified: cfe/trunk/Driver/SerializationTest.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/SerializationTest.cpp?rev=51364&r1=51363&r2=51364&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- cfe/trunk/Driver/SerializationTest.cpp (original)
> +++ cfe/trunk/Driver/SerializationTest.cpp Wed May 21 00:33:10 2008
> @@ -44,7 +44,10 @@
> ~SerializationTest();
>
> virtual void Initialize(ASTContext& context) {
> - if (!TU) TU.reset(new TranslationUnit(context, lopts));
> + if (!TU) {
> + TU.reset(new TranslationUnit(context, lopts));
> + TU->SetOwnsDecls(false);
> + }
> }
>
> virtual void HandleTopLevelDecl(Decl *D) {
>
> Modified: cfe/trunk/include/clang/AST/TranslationUnit.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/TranslationUnit.h?rev=51364&r1=51363&r2=51364&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- cfe/trunk/include/clang/AST/TranslationUnit.h (original)
> +++ cfe/trunk/include/clang/AST/TranslationUnit.h Wed May 21
> 00:33:10 2008
> @@ -35,13 +35,18 @@
> ASTContext* Context;
> std::vector<Decl*> TopLevelDecls;
> bool OwnsMetaData;
> + bool OwnsDecls;
>
> // The default ctor is only invoked during deserialization.
> - explicit TranslationUnit() : Context(NULL), OwnsMetaData(true) {}
> + explicit TranslationUnit() : Context(NULL), OwnsMetaData(true),
> + OwnsDecls(true) {}
>
> public:
> explicit TranslationUnit(ASTContext& Ctx, const LangOptions& lopt)
> - : LangOpts(lopt), Context(&Ctx), OwnsMetaData(false) {}
> + : LangOpts(lopt), Context(&Ctx), OwnsMetaData(false),
> + OwnsDecls(true) {}
> +
> + void SetOwnsDecls(bool val) { OwnsDecls = val; }
>
> ~TranslationUnit();
>
>
> Modified: cfe/trunk/lib/AST/TranslationUnit.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/TranslationUnit.cpp?rev=51364&r1=51363&r2=51364&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- cfe/trunk/lib/AST/TranslationUnit.cpp (original)
> +++ cfe/trunk/lib/AST/TranslationUnit.cpp Wed May 21 00:33:10 2008
> @@ -31,7 +31,7 @@
> DeclsBlock = 3 };
>
> TranslationUnit::~TranslationUnit() {
> - if (OwnsMetaData && Context) {
> + if (OwnsDecls) {
> llvm::DenseSet<Decl*> Killed;
> for (iterator I=begin(), E=end(); I!=E; ++I) {
> if (Killed.count(*I)) continue;
> @@ -39,10 +39,13 @@
> Killed.insert(*I);
> (*I)->Destroy(*Context);
> }
> + }
>
> + if (OwnsMetaData && Context) {
> // The ASTContext object has the sole references to the
> IdentifierTable
> // Selectors, and the Target information. Go and delete them,
> since
> // the TranslationUnit effectively owns them.
> +
> delete &(Context->Idents);
> delete &(Context->Selectors);
> delete &(Context->Target);
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list