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();