[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