From 1bb19638f2ec0d63ed131b51ca8d9542d1a9afee Mon Sep 17 00:00:00 2001 From: Sam Bishop Date: Fri, 11 Apr 2008 18:04:39 +0000 Subject: Invoke destructors in Decl::Destroy(). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49547 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/Decl.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'lib/AST/Decl.cpp') diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 43da07cc24..c0ec3085e5 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -329,10 +329,43 @@ const Attr *Decl::getAttrs() const { return (*DeclAttrs)[this]; } +#define CASE(KIND) case KIND: cast(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(this)->~RecordDecl(); + break; + + default: assert(0 && "Unknown decl kind!"); + } + C.getAllocator().Deallocate((void *)this); } +#undef CASE + //===----------------------------------------------------------------------===// // DeclContext Implementation //===----------------------------------------------------------------------===// -- cgit v1.2.3-18-g5258