Hi,

2016/2/18 Thu 9:11:21 UTC+9 Andrei Olsen wrote:
> On Wednesday, February 17, 2016 at 8:48:46 PM UTC+1, Bram Moolenaar wrote:
> > Does anyone know how to avoid these warnings?
> 
> This should help:
> https://gcc.gnu.org/wiki/VerboseDiagnostics#delete-non-virtual-dtor
> 
> PS: you also have this one:
> 
> gui_dwrite.cpp:348:13: warning: deleting object of polymorphic class type 
> 'GdiTextRenderer' which has non-virtual destructor might cause undefined 
> behaviour [-Wdelete-non-virtual-dtor]
>       delete this;
>              ^

These warnings are all false positive because we don't inherit the classes.
I think there are two options to suppress the warnings:

1. Add "virtual" to the each destructor. Or,
2. Use "final" specifier which is available from C++11.
   (See the attached patch.)


Regards,
Ken Takata

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.
# HG changeset patch
# Parent  47ebaeea3185dab7dbd3fe474179ab9ce23cead0

diff --git a/src/Make_cyg_ming.mak b/src/Make_cyg_ming.mak
--- a/src/Make_cyg_ming.mak
+++ b/src/Make_cyg_ming.mak
@@ -418,6 +418,7 @@ WINDRES_CC = $(CC)
 ###########################################################################
 
 CFLAGS = -Iproto $(DEFINES) -pipe -march=$(ARCH) -Wall
+CXXFLAGS = -std=c++11
 WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
 EXTRA_LIBS =
 
@@ -867,14 +868,14 @@ INCL = vim.h feature.h os_win32.h os_dos
 	$(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
 
 $(OUTDIR)/gui_dwrite.o:	gui_dwrite.cpp $(INCL) gui_dwrite.h
-	$(CC) -c $(CFLAGS) gui_dwrite.cpp -o $(OUTDIR)/gui_dwrite.o
+	$(CC) -c $(CFLAGS) $(CXXFLAGS) gui_dwrite.cpp -o $(OUTDIR)/gui_dwrite.o
 
 $(OUTDIR)/if_cscope.o:	if_cscope.c $(INCL) if_cscope.h
 	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
 
 # Remove -D__IID_DEFINED__ for newer versions of the w32api
 $(OUTDIR)/if_ole.o: if_ole.cpp $(INCL)
-	$(CC) $(CFLAGS) -c -o $(OUTDIR)/if_ole.o if_ole.cpp
+	$(CC) $(CFLAGS) $(CXXFLAGS) -c -o $(OUTDIR)/if_ole.o if_ole.cpp
 
 $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
 ifeq (16, $(RUBY))
diff --git a/src/gui_dwrite.cpp b/src/gui_dwrite.cpp
--- a/src/gui_dwrite.cpp
+++ b/src/gui_dwrite.cpp
@@ -33,6 +33,12 @@
 # define __out		SAL__out
 #endif
 
+#if (defined(_MSC_VER) && (_MSC_VER >= 1700)) || (__cplusplus >= 201103L)
+# define FINAL final
+#else
+# define FINAL
+#endif
+
 #ifdef DYNAMIC_DIRECTX
 extern "C" HINSTANCE vimLoadLib(char *name);
 
@@ -222,7 +228,7 @@ public:
     }
 };
 
-class GdiTextRenderer : public IDWriteTextRenderer
+class GdiTextRenderer FINAL : public IDWriteTextRenderer
 {
 public:
     GdiTextRenderer(
diff --git a/src/if_ole.cpp b/src/if_ole.cpp
--- a/src/if_ole.cpp
+++ b/src/if_ole.cpp
@@ -34,6 +34,12 @@ extern HWND s_hwnd;
 extern HWND vim_parent_hwnd;
 }
 
+#if (defined(_MSC_VER) && (_MSC_VER >= 1700)) || (__cplusplus >= 201103L)
+# define FINAL final
+#else
+# define FINAL
+#endif
+
 #if (defined(_MSC_VER) && _MSC_VER < 1300) || !defined(MAXULONG_PTR)
 /* Work around old versions of basetsd.h which wrongly declares
  * UINT_PTR as unsigned long */
@@ -93,7 +99,7 @@ static CVim *app = 0;
  * ----------
  */
 
-class CVim : public IVim
+class CVim FINAL : public IVim
 {
 public:
     ~CVim();
@@ -428,7 +434,7 @@ CVim::Eval(BSTR expr, BSTR *result)
  * ----------
  */
 
-class CVimCF : public IClassFactory
+class CVimCF FINAL : public IClassFactory
 {
 public:
     static CVimCF *Create();

Raspunde prin e-mail lui