[llvm] r216170 - Make format_object_base's destructor protected and non-virtual.
Alexey Samsonov
vonosmas at gmail.com
Thu Aug 21 13:21:12 PDT 2014
I see a lot of GCC warnings after this change:
/llvm/include/llvm/Support/Format.h:82:7: warning: ‘class
llvm::format_object1<long int>’ has virtual functions and accessible
non-virtual destructor [-Wnon-virtual-dtor]
class format_object1 final : public format_object_base {
On Thu, Aug 21, 2014 at 4:22 AM, Benjamin Kramer <benny.kra at googlemail.com>
wrote:
> Author: d0k
> Date: Thu Aug 21 06:22:05 2014
> New Revision: 216170
>
> URL: http://llvm.org/viewvc/llvm-project?rev=216170&view=rev
> Log:
> Make format_object_base's destructor protected and non-virtual.
>
> It's not meant to be used with operator delete and this avoids emitting
> virtual
> dtors for every derived format object.
>
> Modified:
> llvm/trunk/include/llvm/Support/Format.h
>
> Modified: llvm/trunk/include/llvm/Support/Format.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Format.h?rev=216170&r1=216169&r2=216170&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/Format.h (original)
> +++ llvm/trunk/include/llvm/Support/Format.h Thu Aug 21 06:22:05 2014
> @@ -41,6 +41,7 @@ namespace llvm {
> class format_object_base {
> protected:
> const char *Fmt;
> + ~format_object_base() {} // Disallow polymorphic deletion.
> virtual void home(); // Out of line virtual method.
>
> /// Call snprintf() for this object, on the given buffer and size.
> @@ -48,7 +49,6 @@ protected:
>
> public:
> format_object_base(const char *fmt) : Fmt(fmt) {}
> - virtual ~format_object_base() {}
>
> /// Format the object into the specified buffer. On success, this
> returns
> /// the length of the formatted string. If the buffer is too small,
> this
> @@ -79,7 +79,7 @@ public:
> /// returns whether or not it is big enough.
>
> template <typename T>
> -class format_object1 : public format_object_base {
> +class format_object1 final : public format_object_base {
> T Val;
> public:
> format_object1(const char *fmt, const T &val)
> @@ -92,7 +92,7 @@ public:
> };
>
> template <typename T1, typename T2>
> -class format_object2 : public format_object_base {
> +class format_object2 final : public format_object_base {
> T1 Val1;
> T2 Val2;
> public:
> @@ -106,7 +106,7 @@ public:
> };
>
> template <typename T1, typename T2, typename T3>
> -class format_object3 : public format_object_base {
> +class format_object3 final : public format_object_base {
> T1 Val1;
> T2 Val2;
> T3 Val3;
> @@ -121,7 +121,7 @@ public:
> };
>
> template <typename T1, typename T2, typename T3, typename T4>
> -class format_object4 : public format_object_base {
> +class format_object4 final : public format_object_base {
> T1 Val1;
> T2 Val2;
> T3 Val3;
> @@ -138,7 +138,7 @@ public:
> };
>
> template <typename T1, typename T2, typename T3, typename T4, typename T5>
> -class format_object5 : public format_object_base {
> +class format_object5 final : public format_object_base {
> T1 Val1;
> T2 Val2;
> T3 Val3;
> @@ -158,7 +158,7 @@ public:
>
> template <typename T1, typename T2, typename T3, typename T4, typename T5,
> typename T6>
> -class format_object6 : public format_object_base {
> +class format_object6 final : public format_object_base {
> T1 Val1;
> T2 Val2;
> T3 Val3;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
--
Alexey Samsonov
vonosmas at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140821/a8bd26c9/attachment.html>
More information about the llvm-commits
mailing list