Use non virtual destructors for sections.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 7 Oct 2015 13:46:06 +0000 (13:46 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 7 Oct 2015 13:46:06 +0000 (13:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249548 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCSection.h
include/llvm/MC/MCSectionCOFF.h
include/llvm/MC/MCSectionELF.h
include/llvm/MC/MCSectionMachO.h
lib/Target/NVPTX/NVPTXISelLowering.cpp
lib/Target/NVPTX/NVPTXSection.h

index f5490fcd173a1b9cd9d2f77bc290f9a1ce54348c..c049ad5455bf31268b35209cb18d4d857e21e26b 100644 (file)
@@ -105,10 +105,9 @@ protected:
   MCSection(SectionVariant V, SectionKind K, MCSymbol *Begin);
   SectionVariant Variant;
   SectionKind Kind;
+  ~MCSection();
 
 public:
-  virtual ~MCSection();
-
   SectionKind getKind() const { return Kind; }
 
   SectionVariant getVariant() const { return Variant; }
index 7dcec1e2b27da648cf8dc9e2dc8a216c529c0f91..d94682c8c381d866ac6b48496bfca0208af69406 100644 (file)
@@ -21,7 +21,7 @@ namespace llvm {
 class MCSymbol;
 
 /// This represents a section on Windows
-class MCSectionCOFF : public MCSection {
+class MCSectionCOFF final : public MCSection {
   // The memory for this string is stored in the same MCContext as *this.
   StringRef SectionName;
 
@@ -51,9 +51,10 @@ private:
     assert((Characteristics & 0x00F00000) == 0 &&
            "alignment must not be set upon section creation");
   }
-  ~MCSectionCOFF() override;
 
 public:
+  ~MCSectionCOFF();
+
   /// Decides whether a '.section' directive should be printed before the
   /// section name
   bool ShouldOmitSectionDirective(StringRef Name, const MCAsmInfo &MAI) const;
index 38740612edd9731b28e190dc361aac3ee03d51cf..52e6d949376f16775c7a047856a8c26b6e0afd2d 100644 (file)
@@ -27,7 +27,7 @@ class MCSymbol;
 
 /// This represents a section on linux, lots of unix variants and some bare
 /// metal systems.
-class MCSectionELF final : public MCSection {
+class MCSectionELF final  : public MCSection {
   /// This is the name of the section.  The referenced memory is owned by
   /// TargetLoweringObjectFileELF's ELFUniqueMap.
   StringRef SectionName;
@@ -61,11 +61,12 @@ private:
     if (Group)
       Group->setIsSignature();
   }
-  ~MCSectionELF() override;
 
   void setSectionName(StringRef Name) { SectionName = Name; }
 
 public:
+  ~MCSectionELF();
+
   /// Decides whether a '.section' directive should be printed before the
   /// section name
   bool ShouldOmitSectionDirective(StringRef Name, const MCAsmInfo &MAI) const;
index 860c27fa6e691b18a7329a7f043c8c1a3f9204cf..658dfcda7268814e989f7f8091bfa8f3046fbd3d 100644 (file)
@@ -22,7 +22,7 @@ namespace llvm {
 
 /// This represents a section on a Mach-O system (used by Mac OS X).  On a Mac
 /// system, these are also described in /usr/include/mach-o/loader.h.
-class MCSectionMachO : public MCSection {
+class MCSectionMachO final : public MCSection {
   char SegmentName[16];  // Not necessarily null terminated!
   char SectionName[16];  // Not necessarily null terminated!
 
index 3f1bde4586d032054f41d349f8a782af4707ddb7..b5ebc91c692813313e7f8a7c71f744e7fadb5d07 100644 (file)
@@ -4566,25 +4566,25 @@ void NVPTXTargetLowering::ReplaceNodeResults(
 void NVPTXSection::anchor() {}
 
 NVPTXTargetObjectFile::~NVPTXTargetObjectFile() {
-  delete TextSection;
-  delete DataSection;
-  delete BSSSection;
-  delete ReadOnlySection;
-
-  delete StaticCtorSection;
-  delete StaticDtorSection;
-  delete LSDASection;
-  delete EHFrameSection;
-  delete DwarfAbbrevSection;
-  delete DwarfInfoSection;
-  delete DwarfLineSection;
-  delete DwarfFrameSection;
-  delete DwarfPubTypesSection;
-  delete DwarfDebugInlineSection;
-  delete DwarfStrSection;
-  delete DwarfLocSection;
-  delete DwarfARangesSection;
-  delete DwarfRangesSection;
+  delete static_cast<NVPTXSection*>(TextSection);
+  delete static_cast<NVPTXSection*>(DataSection);
+  delete static_cast<NVPTXSection*>(BSSSection);
+  delete static_cast<NVPTXSection*>(ReadOnlySection);
+
+  delete static_cast<NVPTXSection*>(StaticCtorSection);
+  delete static_cast<NVPTXSection*>(StaticDtorSection);
+  delete static_cast<NVPTXSection*>(LSDASection);
+  delete static_cast<NVPTXSection*>(EHFrameSection);
+  delete static_cast<NVPTXSection*>(DwarfAbbrevSection);
+  delete static_cast<NVPTXSection*>(DwarfInfoSection);
+  delete static_cast<NVPTXSection*>(DwarfLineSection);
+  delete static_cast<NVPTXSection*>(DwarfFrameSection);
+  delete static_cast<NVPTXSection*>(DwarfPubTypesSection);
+  delete static_cast<const NVPTXSection*>(DwarfDebugInlineSection);
+  delete static_cast<NVPTXSection*>(DwarfStrSection);
+  delete static_cast<NVPTXSection*>(DwarfLocSection);
+  delete static_cast<NVPTXSection*>(DwarfARangesSection);
+  delete static_cast<NVPTXSection*>(DwarfRangesSection);
 }
 
 MCSection *
index 3108ce2faa0ae367abb43754db8abfd3052564dc..45a7309479ee2aa887703f69930e62d8690f35cc 100644 (file)
@@ -22,11 +22,11 @@ namespace llvm {
 /// Represents a section in PTX PTX does not have sections. We create this class
 /// in order to use the ASMPrint interface.
 ///
-class NVPTXSection : public MCSection {
+class NVPTXSection final : public MCSection {
   virtual void anchor();
 public:
   NVPTXSection(SectionVariant V, SectionKind K) : MCSection(V, K, nullptr) {}
-  virtual ~NVPTXSection() {}
+  ~NVPTXSection() {}
 
   /// Override this as NVPTX has its own way of printing switching
   /// to a section.