diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h
index 019673a..ac08f96 100644
--- a/include/clang/AST/Decl.h
+++ b/include/clang/AST/Decl.h
@@ -372,6 +372,7 @@
   static FunctionDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C);
   
   friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C);
+  friend void Decl::Destroy(ASTContext& C) const;
 };
 
 
@@ -452,6 +453,7 @@
   static EnumConstantDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C);
   
   friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C);
+  friend void Decl::Destroy(ASTContext& C) const;
 };
 
 
@@ -504,6 +506,7 @@
   static TypedefDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C);
   
   friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C);
+  friend void Decl::Destroy(ASTContext& C) const;
 };
 
 
diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h
index ec3c753..058cb92 100644
--- a/include/clang/AST/DeclBase.h
+++ b/include/clang/AST/DeclBase.h
@@ -118,12 +118,10 @@
     HasAttrs(false) {
     if (Decl::CollectingStats()) addDeclKind(DK);
   }
-  
-public:
-  // TODO: This should probably be made protected once derived classes have
-  // destructors.
+
   virtual ~Decl();
-  
+
+public:
   SourceLocation getLocation() const { return Loc; }
   void setLocation(SourceLocation L) { Loc = L; }
 
diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h
index e9d03a1..0efdd2e 100644
--- a/include/clang/AST/DeclObjC.h
+++ b/include/clang/AST/DeclObjC.h
@@ -103,7 +103,7 @@
     SelName(SelInfo), MethodDeclType(T), 
     ParamInfo(0), NumMethodParams(0),
     MethodAttrs(M), EndLoc(endLoc), Body(0), SelfDecl(0) {}
-  virtual ~ObjCMethodDecl();
+  ~ObjCMethodDecl();
 public:
 
   static ObjCMethodDecl *Create(ASTContext &C,
@@ -175,6 +175,8 @@
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Decl *D) { return D->getKind() == ObjCMethod; }
   static bool classof(const ObjCMethodDecl *D) { return true; }
+
+  friend void Decl::Destroy(ASTContext& C) const;
 };
   
 /// ObjCInterfaceDecl - Represents an ObjC class declaration. For example:
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index 43da07c..c0ec308 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -329,10 +329,43 @@
   return (*DeclAttrs)[this];
 }
 
+#define CASE(KIND) case KIND: cast<KIND##Decl>(this)->~KIND##Decl(); break
+
 void Decl::Destroy(ASTContext& C) const {
+  switch (getKind()) {
+  CASE(Field);
+  CASE(ObjCIvar);
+  CASE(ObjCCategory);
+  CASE(ObjCCategoryImpl);
+  CASE(ObjCImplementation);
+  CASE(ObjCProtocol);
+  CASE(ObjCProperty);
+  CASE(Typedef);
+  CASE(Enum);
+  CASE(EnumConstant);
+  CASE(Function);
+  CASE(BlockVar);
+  CASE(FileVar);
+  CASE(ParmVar);
+  CASE(ObjCInterface);
+  CASE(ObjCCompatibleAlias);
+  CASE(ObjCMethod);
+  CASE(ObjCClass);
+  CASE(ObjCForwardProtocol);
+  CASE(LinkageSpec);
+
+  case Struct: case Union: case Class:
+    cast<RecordDecl>(this)->~RecordDecl();
+    break;
+
+  default: assert(0 && "Unknown decl kind!");
+  }
+
   C.getAllocator().Deallocate((void *)this);
 }
 
+#undef CASE
+
 //===----------------------------------------------------------------------===//
 // DeclContext Implementation
 //===----------------------------------------------------------------------===//
