]> granicus.if.org Git - clang/commitdiff
Use a smart pointer instead of delete.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 25 Aug 2010 00:32:14 +0000 (00:32 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 25 Aug 2010 00:32:14 +0000 (00:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112005 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/RecordLayoutBuilder.cpp

index b8ce97740b38072ec20ba5a1e1abda3d8b54f99c..13fae299d8771e3d540756e91de708b740fc73de 100644 (file)
@@ -588,8 +588,6 @@ protected:
       NonVirtualSize(0), NonVirtualAlignment(8), PrimaryBase(0),
       PrimaryBaseIsVirtual(false), FirstNearlyEmptyVBase(0) { }
 
-  virtual ~RecordLayoutBuilder() { }
-
   void Layout(const RecordDecl *D);
   void Layout(const CXXRecordDecl *D);
   void Layout(const ObjCInterfaceDecl *D);
@@ -671,6 +669,8 @@ protected:
   void operator=(const RecordLayoutBuilder&); // DO NOT IMPLEMENT
 public:
   static const CXXMethodDecl *ComputeKeyFunction(const CXXRecordDecl *RD);
+
+  virtual ~RecordLayoutBuilder() { }
 };
 } // end anonymous namespace
 
@@ -1513,13 +1513,13 @@ const ASTRecordLayout &ASTContext::getASTRecordLayout(const RecordDecl *D) {
     EmptySubobjectMap EmptySubobjects(*this, RD);
 
     // When compiling for Microsoft, use the special MS builder.
-    RecordLayoutBuilder *Builder;
+    llvm::OwningPtr<RecordLayoutBuilder> Builder;
     switch (Target.getCXXABI()) {
     default:
-      Builder = new RecordLayoutBuilder(*this, &EmptySubobjects);
+      Builder.reset(new RecordLayoutBuilder(*this, &EmptySubobjects));
       break;
     case CXXABI_Microsoft:
-      Builder = new MSRecordLayoutBuilder(*this, &EmptySubobjects);
+      Builder.reset(new MSRecordLayoutBuilder(*this, &EmptySubobjects));
     }
     Builder->Layout(RD);
 
@@ -1544,7 +1544,6 @@ const ASTRecordLayout &ASTContext::getASTRecordLayout(const RecordDecl *D) {
                                   Builder->PrimaryBase,
                                   Builder->PrimaryBaseIsVirtual,
                                   Builder->Bases, Builder->VBases);
-    delete Builder;
   } else {
     RecordLayoutBuilder Builder(*this, /*EmptySubobjects=*/0);
     Builder.Layout(D);