Remove the unnecessary virtual dtor from the DIEUnit hierarchy (in favor of protected dtor in the base, final derived classes with public non-virtual dtors)

These objects are never polymorphically owned/destroyed, so the virtual
dtor was unnecessary.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301068 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Blaikie 2017-04-22 02:18:00 +00:00
parent 9254ae141b
commit a753d9a103
5 changed files with 15 additions and 8 deletions

View File

@ -793,6 +793,9 @@ class DIEUnit {
uint32_t Length; /// The length in bytes of all of the DIEs in this unit.
const uint16_t Version; /// The Dwarf version number for this unit.
const uint8_t AddrSize; /// The size in bytes of an address for this unit.
protected:
~DIEUnit() = default;
public:
DIEUnit(uint16_t Version, uint8_t AddrSize, dwarf::Tag UnitTag);
DIEUnit(const DIEUnit &RHS) = delete;
@ -822,6 +825,10 @@ public:
const DIE &getUnitDie() const { return Die; }
};
struct BasicDIEUnit final : DIEUnit {
BasicDIEUnit(uint16_t Version, uint8_t AddrSize, dwarf::Tag UnitTag)
: DIEUnit(Version, AddrSize, UnitTag) {}
};
//===--------------------------------------------------------------------===//
/// DIELoc - Represents an expression location.

View File

@ -28,7 +28,7 @@ class DwarfFile;
class MCSymbol;
class LexicalScope;
class DwarfCompileUnit : public DwarfUnit {
class DwarfCompileUnit final : public DwarfUnit {
/// A numeric ID unique among all CUs in the module
unsigned UniqueID;

View File

@ -104,8 +104,6 @@ protected:
bool applySubprogramDefinitionAttributes(const DISubprogram *SP, DIE &SPDie);
public:
virtual ~DwarfUnit();
// Accessors.
AsmPrinter* getAsmPrinter() const { return Asm; }
uint16_t getLanguage() const { return CUNode->getSourceLanguage(); }
@ -289,6 +287,8 @@ public:
void constructTypeDIE(DIE &Buffer, const DICompositeType *CTy);
protected:
~DwarfUnit();
/// Create new static data member DIE.
DIE *getOrCreateStaticMemberDIE(const DIDerivedType *DT);
@ -337,7 +337,7 @@ private:
virtual bool isDwoUnit() const = 0;
};
class DwarfTypeUnit : public DwarfUnit {
class DwarfTypeUnit final : public DwarfUnit {
uint64_t TypeSignature;
const DIE *Ty;
DwarfCompileUnit &CU;

View File

@ -223,7 +223,7 @@ public:
DIE *getOutputUnitDIE() const {
if (NewUnit)
return &const_cast<DIEUnit &>(*NewUnit).getUnitDie();
return &const_cast<BasicDIEUnit &>(*NewUnit).getUnitDie();
return nullptr;
}
@ -333,7 +333,7 @@ private:
DWARFUnit &OrigUnit;
unsigned ID;
std::vector<DIEInfo> Info; ///< DIE info indexed by DIE index.
Optional<DIEUnit> NewUnit;
Optional<BasicDIEUnit> NewUnit;
uint64_t StartOffset;
uint64_t NextUnitOffset;

View File

@ -138,7 +138,7 @@ public:
/// contained inside this class.
class CompileUnit {
Generator &DG;
DIEUnit DU;
BasicDIEUnit DU;
public:
CompileUnit(Generator &D, uint16_t V, uint8_t A)