From 5eb9f7b4542cca34d4af96ea43be362446a4794f Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Fri, 18 Jul 2014 09:14:35 -0700 Subject: pdfium: Fix all -Wdelete-non-virtual-dtor violations on Mac. Calling `delete` on an object of a type that has virtual functions but not a virtual destructor is questionable: Since the object has virtual functions, it likely has subclasses, so if it's deleted through the base pointer and the destructor isn't virtual, the subclass destructor won't be called. In most cases, the classes getting deleted can just be marked final to tell the compiler that it can't possibly have subclasses (this also enables the compiler to generate better code). Two classes didn't have any sub- or superclasses but virtual functions - this doesn't make sense, so make all methods of these classes non-virtual. (Also delete an unused function on one of the two classes.) In one case, a class actually did have a subclass that needs to be deleted virtually, so mark one destructor as virtual. BUG=none R=bo_xu@foxitsoftware.com Review URL: https://codereview.chromium.org/370853002 --- core/include/fpdfapi/fpdf_parser.h | 4 ++-- core/include/fxcrt/fx_system.h | 9 +++++++++ core/include/fxge/fx_font.h | 2 +- core/src/fpdfapi/fpdf_font/ttgsubtable.h | 2 +- core/src/fpdfdoc/tagged_int.h | 2 +- core/src/fxcrt/extension.h | 4 ++-- core/src/fxcrt/fx_arabic.h | 2 +- core/src/fxge/apple/apple_int.h | 2 +- 8 files changed, 18 insertions(+), 9 deletions(-) (limited to 'core') diff --git a/core/include/fpdfapi/fpdf_parser.h b/core/include/fpdfapi/fpdf_parser.h index c6c80778a1..feac6c67dc 100644 --- a/core/include/fpdfapi/fpdf_parser.h +++ b/core/include/fpdfapi/fpdf_parser.h @@ -397,7 +397,7 @@ public: #define PDFPARSE_ERROR_PASSWORD 3 #define PDFPARSE_ERROR_HANDLER 4 #define PDFPARSE_ERROR_CERT 5 -class CPDF_Parser : public IPDF_DocParser +class CPDF_Parser FX_FINAL : public IPDF_DocParser { public: @@ -945,7 +945,7 @@ enum PDF_DATAAVAIL_STATUS { PDF_DATAAVAIL_LOADALLFILE, PDF_DATAAVAIL_TRAILER_APPEND }; -class CPDF_DataAvail : public CFX_Object, public IPDF_DataAvail +class CPDF_DataAvail FX_FINAL : public CFX_Object, public IPDF_DataAvail { public: diff --git a/core/include/fxcrt/fx_system.h b/core/include/fxcrt/fx_system.h index 9f43360fa7..a757de4c5e 100644 --- a/core/include/fxcrt/fx_system.h +++ b/core/include/fxcrt/fx_system.h @@ -275,5 +275,14 @@ int FXSYS_round(FX_FLOAT f); #define FXSYS_sqrt2(a, b) (FX_FLOAT)FXSYS_sqrt((a)*(a) + (b)*(b)) #ifdef __cplusplus }; + +#if defined(__clang__) || defined(_MSC_VER) +#define FX_FINAL final +#elif defined(__GNUC__) && __cplusplus >= 201103 && \ + (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= 40700 +#define FX_FINAL final +#else +#define FX_FINAL +#endif #endif #endif diff --git a/core/include/fxge/fx_font.h b/core/include/fxge/fx_font.h index dc96debeb6..52f8f30d8d 100644 --- a/core/include/fxge/fx_font.h +++ b/core/include/fxge/fx_font.h @@ -316,7 +316,7 @@ class CFX_FolderFontInfo : public IFX_SystemFontInfo { public: CFX_FolderFontInfo(); - ~CFX_FolderFontInfo(); + virtual ~CFX_FolderFontInfo(); void AddPath(FX_BSTR path); virtual void Release(); virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper); diff --git a/core/src/fpdfapi/fpdf_font/ttgsubtable.h b/core/src/fpdfapi/fpdf_font/ttgsubtable.h index bf9c7a4c42..26f67fbd18 100644 --- a/core/src/fpdfapi/fpdf_font/ttgsubtable.h +++ b/core/src/fpdfapi/fpdf_font/ttgsubtable.h @@ -406,7 +406,7 @@ private: struct TFeatureList FeatureList; struct TLookupList LookupList; }; -class CFX_GSUBTable : public IFX_GSUBTable, public CFX_Object +class CFX_GSUBTable FX_FINAL : public IFX_GSUBTable, public CFX_Object { public: virtual void Release() diff --git a/core/src/fpdfdoc/tagged_int.h b/core/src/fpdfdoc/tagged_int.h index 0ebf4084a4..d190db6427 100644 --- a/core/src/fpdfdoc/tagged_int.h +++ b/core/src/fpdfdoc/tagged_int.h @@ -32,7 +32,7 @@ protected: CFX_ArrayTemplate m_Kids; friend class CPDF_StructElementImpl; }; -class CPDF_StructElementImpl : public CPDF_StructElement +class CPDF_StructElementImpl FX_FINAL : public CPDF_StructElement { public: CPDF_StructElementImpl(CPDF_StructTreeImpl* pTree, CPDF_StructElementImpl* pParent, CPDF_Dictionary* pDict); diff --git a/core/src/fxcrt/extension.h b/core/src/fxcrt/extension.h index db35387908..a736425d57 100644 --- a/core/src/fxcrt/extension.h +++ b/core/src/fxcrt/extension.h @@ -25,7 +25,7 @@ public: virtual FX_BOOL Truncate(FX_FILESIZE szFile) = 0; }; IFXCRT_FileAccess* FXCRT_FileAccess_Create(); -class CFX_CRTFileStream : public IFX_FileStream, public CFX_Object +class CFX_CRTFileStream FX_FINAL : public IFX_FileStream, public CFX_Object { public: CFX_CRTFileStream(IFXCRT_FileAccess* pFA) : m_pFile(pFA), m_dwCount(1), m_bUseRange(FALSE), m_nOffset(0), m_nSize(0) {} @@ -117,7 +117,7 @@ public: #define FX_MEMSTREAM_BlockSize (64 * 1024) #define FX_MEMSTREAM_Consecutive 0x01 #define FX_MEMSTREAM_TakeOver 0x02 -class CFX_MemoryStream : public IFX_MemoryStream, public CFX_Object +class CFX_MemoryStream FX_FINAL : public IFX_MemoryStream, public CFX_Object { public: CFX_MemoryStream(FX_BOOL bConsecutive) diff --git a/core/src/fxcrt/fx_arabic.h b/core/src/fxcrt/fx_arabic.h index 503ec01696..1dc275b8c3 100644 --- a/core/src/fxcrt/fx_arabic.h +++ b/core/src/fxcrt/fx_arabic.h @@ -6,7 +6,7 @@ #ifndef _FX_ARABIC_IMP #define _FX_ARABIC_IMP -class CFX_BidiChar : public IFX_BidiChar, public CFX_Object +class CFX_BidiChar FX_FINAL : public IFX_BidiChar, public CFX_Object { public: CFX_BidiChar(); diff --git a/core/src/fxge/apple/apple_int.h b/core/src/fxge/apple/apple_int.h index 42d63628f2..a8fbe2fbaa 100644 --- a/core/src/fxge/apple/apple_int.h +++ b/core/src/fxge/apple/apple_int.h @@ -185,7 +185,7 @@ protected: FX_INT32 _horzSize; FX_INT32 _vertSize; }; -class CFX_FontProvider : public IFX_FileRead +class CFX_FontProvider FX_FINAL : public IFX_FileRead { public: virtual void Release() -- cgit v1.2.3