diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-03-29 23:56:53 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-03-29 23:56:53 +0000 |
commit | b836518bfc0a2ad5e22a670c82fa070ed83ea909 (patch) | |
tree | 1fbca9bc927901163328ad7b8f1e8a3c3d2ac151 /lib/AST/DeclBase.cpp | |
parent | fe6b2d481d91140923f4541f273b253291884214 (diff) |
When copying a partial diagnostic into a DependentDiagnostic, allocate
storage for that partial diagnostic via the ASTContext's
BumpPtrAllocator rather than using up slots in the ASTContext's
cache. Now that we do this, we don't have to worry about destroying
dependent diagnostics when destroying a DependentStoredDeclsMap.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99854 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/DeclBase.cpp')
-rw-r--r-- | lib/AST/DeclBase.cpp | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp index cb6b76c248..c693e153dd 100644 --- a/lib/AST/DeclBase.cpp +++ b/lib/AST/DeclBase.cpp @@ -994,17 +994,6 @@ void StoredDeclsMap::DestroyAll(StoredDeclsMap *Map, bool Dependent) { } } -DependentStoredDeclsMap::~DependentStoredDeclsMap() { - // Kill off the dependent diagnostics. They don't need to be - // deleted, but they do need to be destructed. - DependentDiagnostic *CurD = FirstDiagnostic; - while (CurD) { - DependentDiagnostic *NextD = CurD->NextDiagnostic; - CurD->~DependentDiagnostic(); - CurD = NextD; - } -} - DependentDiagnostic *DependentDiagnostic::Create(ASTContext &C, DeclContext *Parent, const PartialDiagnostic &PDiag) { @@ -1017,9 +1006,13 @@ DependentDiagnostic *DependentDiagnostic::Create(ASTContext &C, DependentStoredDeclsMap *Map = static_cast<DependentStoredDeclsMap*>(Parent->LookupPtr); - // FIXME: Allocate the copy of the PartialDiagnostic via the ASTContext's + // Allocate the copy of the PartialDiagnostic via the ASTContext's // BumpPtrAllocator, rather than the ASTContext itself. - DependentDiagnostic *DD = new (C) DependentDiagnostic(PDiag); + PartialDiagnostic::Storage *DiagStorage = 0; + if (PDiag.hasStorage()) + DiagStorage = new (C) PartialDiagnostic::Storage; + + DependentDiagnostic *DD = new (C) DependentDiagnostic(PDiag, DiagStorage); // TODO: Maybe we shouldn't reverse the order during insertion. DD->NextDiagnostic = Map->FirstDiagnostic; |