<div dir="ltr">I see a lot of GCC warnings after this change:<div><div><br></div><div>/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]</div>
<div> class format_object1 final : public format_object_base {</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Aug 21, 2014 at 4:22 AM, Benjamin Kramer <span dir="ltr"><<a href="mailto:benny.kra@googlemail.com" target="_blank">benny.kra@googlemail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: d0k<br>
Date: Thu Aug 21 06:22:05 2014<br>
New Revision: 216170<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=216170&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=216170&view=rev</a><br>
Log:<br>
Make format_object_base's destructor protected and non-virtual.<br>
<br>
It's not meant to be used with operator delete and this avoids emitting virtual<br>
dtors for every derived format object.<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/Support/Format.h<br>
<br>
Modified: llvm/trunk/include/llvm/Support/Format.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Format.h?rev=216170&r1=216169&r2=216170&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Format.h?rev=216170&r1=216169&r2=216170&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/include/llvm/Support/Format.h (original)<br>
+++ llvm/trunk/include/llvm/Support/Format.h Thu Aug 21 06:22:05 2014<br>
@@ -41,6 +41,7 @@ namespace llvm {<br>
 class format_object_base {<br>
 protected:<br>
   const char *Fmt;<br>
+  ~format_object_base() {} // Disallow polymorphic deletion.<br>
   virtual void home(); // Out of line virtual method.<br>
<br>
   /// Call snprintf() for this object, on the given buffer and size.<br>
@@ -48,7 +49,6 @@ protected:<br>
<br>
 public:<br>
   format_object_base(const char *fmt) : Fmt(fmt) {}<br>
-  virtual ~format_object_base() {}<br>
<br>
   /// Format the object into the specified buffer.  On success, this returns<br>
   /// the length of the formatted string.  If the buffer is too small, this<br>
@@ -79,7 +79,7 @@ public:<br>
 /// returns whether or not it is big enough.<br>
<br>
 template <typename T><br>
-class format_object1 : public format_object_base {<br>
+class format_object1 final : public format_object_base {<br>
   T Val;<br>
 public:<br>
   format_object1(const char *fmt, const T &val)<br>
@@ -92,7 +92,7 @@ public:<br>
 };<br>
<br>
 template <typename T1, typename T2><br>
-class format_object2 : public format_object_base {<br>
+class format_object2 final : public format_object_base {<br>
   T1 Val1;<br>
   T2 Val2;<br>
 public:<br>
@@ -106,7 +106,7 @@ public:<br>
 };<br>
<br>
 template <typename T1, typename T2, typename T3><br>
-class format_object3 : public format_object_base {<br>
+class format_object3 final : public format_object_base {<br>
   T1 Val1;<br>
   T2 Val2;<br>
   T3 Val3;<br>
@@ -121,7 +121,7 @@ public:<br>
 };<br>
<br>
 template <typename T1, typename T2, typename T3, typename T4><br>
-class format_object4 : public format_object_base {<br>
+class format_object4 final : public format_object_base {<br>
   T1 Val1;<br>
   T2 Val2;<br>
   T3 Val3;<br>
@@ -138,7 +138,7 @@ public:<br>
 };<br>
<br>
 template <typename T1, typename T2, typename T3, typename T4, typename T5><br>
-class format_object5 : public format_object_base {<br>
+class format_object5 final : public format_object_base {<br>
   T1 Val1;<br>
   T2 Val2;<br>
   T3 Val3;<br>
@@ -158,7 +158,7 @@ public:<br>
<br>
 template <typename T1, typename T2, typename T3, typename T4, typename T5,<br>
           typename T6><br>
-class format_object6 : public format_object_base {<br>
+class format_object6 final : public format_object_base {<br>
   T1 Val1;<br>
   T2 Val2;<br>
   T3 Val3;<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div>
</div>