[llvm-branch-commits] [cfe-tag] r95868 - in /cfe/tags/cremebrulee/cremebrulee-36.3: include/clang/AST/ASTContext.h lib/AST/ASTContext.cpp lib/AST/DeclBase.cpp
Ted Kremenek
kremenek at apple.com
Thu Feb 11 00:46:01 PST 2010
Author: kremenek
Date: Thu Feb 11 02:46:01 2010
New Revision: 95868
URL: http://llvm.org/viewvc/llvm-project?rev=95868&view=rev
Log:
Merge in r95861.
Modified:
cfe/tags/cremebrulee/cremebrulee-36.3/include/clang/AST/ASTContext.h
cfe/tags/cremebrulee/cremebrulee-36.3/lib/AST/ASTContext.cpp
cfe/tags/cremebrulee/cremebrulee-36.3/lib/AST/DeclBase.cpp
Modified: cfe/tags/cremebrulee/cremebrulee-36.3/include/clang/AST/ASTContext.h
URL: http://llvm.org/viewvc/llvm-project/cfe/tags/cremebrulee/cremebrulee-36.3/include/clang/AST/ASTContext.h?rev=95868&r1=95867&r2=95868&view=diff
==============================================================================
--- cfe/tags/cremebrulee/cremebrulee-36.3/include/clang/AST/ASTContext.h (original)
+++ cfe/tags/cremebrulee/cremebrulee-36.3/include/clang/AST/ASTContext.h Thu Feb 11 02:46:01 2010
@@ -46,6 +46,7 @@
class SourceManager;
class TargetInfo;
// Decls
+ class DeclContext;
class CXXMethodDecl;
class CXXRecordDecl;
class Decl;
@@ -1187,6 +1188,14 @@
const ASTRecordLayout &getObjCLayout(const ObjCInterfaceDecl *D,
const ObjCImplementationDecl *Impl);
+private:
+ // FIXME: This currently contains the set of StoredDeclMaps used
+ // by DeclContext objects. This probably should not be in ASTContext,
+ // but we include it here so that ASTContext can quickly deallocate them.
+ std::vector<void*> SDMs;
+ friend class DeclContext;
+ void *CreateStoredDeclsMap();
+ void ReleaseDeclContextMaps();
};
/// @brief Utility function for constructing a nullary selector.
Modified: cfe/tags/cremebrulee/cremebrulee-36.3/lib/AST/ASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/tags/cremebrulee/cremebrulee-36.3/lib/AST/ASTContext.cpp?rev=95868&r1=95867&r2=95868&view=diff
==============================================================================
--- cfe/tags/cremebrulee/cremebrulee-36.3/lib/AST/ASTContext.cpp (original)
+++ cfe/tags/cremebrulee/cremebrulee-36.3/lib/AST/ASTContext.cpp Thu Feb 11 02:46:01 2010
@@ -56,6 +56,10 @@
}
ASTContext::~ASTContext() {
+ // Release the DenseMaps associated with DeclContext objects.
+ // FIXME: Is this the ideal solution?
+ ReleaseDeclContextMaps();
+
if (FreeMemory) {
// Deallocate all the types.
while (!Types.empty()) {
Modified: cfe/tags/cremebrulee/cremebrulee-36.3/lib/AST/DeclBase.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/tags/cremebrulee/cremebrulee-36.3/lib/AST/DeclBase.cpp?rev=95868&r1=95867&r2=95868&view=diff
==============================================================================
--- cfe/tags/cremebrulee/cremebrulee-36.3/lib/AST/DeclBase.cpp (original)
+++ cfe/tags/cremebrulee/cremebrulee-36.3/lib/AST/DeclBase.cpp Thu Feb 11 02:46:01 2010
@@ -448,7 +448,10 @@
}
DeclContext::~DeclContext() {
- delete static_cast<StoredDeclsMap*>(LookupPtr);
+ // FIXME: Currently ~ASTContext will delete the StoredDeclsMaps because
+ // ~DeclContext() is not guaranteed to be called when ASTContext uses
+ // a BumpPtrAllocator.
+ // delete static_cast<StoredDeclsMap*>(LookupPtr);
}
void DeclContext::DestroyDecls(ASTContext &C) {
@@ -622,7 +625,8 @@
// Load the declaration IDs for all of the names visible in this
// context.
assert(!LookupPtr && "Have a lookup map before de-serialization?");
- StoredDeclsMap *Map = new StoredDeclsMap;
+ StoredDeclsMap *Map =
+ (StoredDeclsMap*) getParentASTContext().CreateStoredDeclsMap();
LookupPtr = Map;
for (unsigned I = 0, N = Decls.size(); I != N; ++I) {
(*Map)[Decls[I].Name].setFromDeclIDs(Decls[I].Declarations);
@@ -830,8 +834,11 @@
if (isa<ClassTemplateSpecializationDecl>(D))
return;
- if (!LookupPtr)
- LookupPtr = new StoredDeclsMap;
+ ASTContext *C = 0;
+ if (!LookupPtr) {
+ C = &getParentASTContext();
+ LookupPtr = (StoredDeclsMap*) C->CreateStoredDeclsMap();
+ }
// Insert this declaration into the map.
StoredDeclsMap &Map = *static_cast<StoredDeclsMap*>(LookupPtr);
@@ -844,7 +851,10 @@
// If it is possible that this is a redeclaration, check to see if there is
// already a decl for which declarationReplaces returns true. If there is
// one, just replace it and return.
- if (DeclNameEntries.HandleRedeclaration(getParentASTContext(), D))
+ if (!C)
+ C = &getParentASTContext();
+
+ if (DeclNameEntries.HandleRedeclaration(*C, D))
return;
// Put this declaration into the appropriate slot.
@@ -896,3 +906,18 @@
}
}
}
+
+//===----------------------------------------------------------------------===//
+// Creation and Destruction of StoredDeclsMaps. //
+//===----------------------------------------------------------------------===//
+
+void *ASTContext::CreateStoredDeclsMap() {
+ StoredDeclsMap *M = new StoredDeclsMap();
+ SDMs.push_back(M);
+ return M;
+}
+
+void ASTContext::ReleaseDeclContextMaps() {
+ for (std::vector<void*>::iterator I = SDMs.begin(), E = SDMs.end(); I!=E; ++I)
+ delete (StoredDeclsMap*) *I;
+}
More information about the llvm-branch-commits
mailing list