[Rcpp-devel] compiler warning (-Wdelete-non-virtual-dtor)

Greg Minshall minshall at umich.edu
Sun Mar 10 14:56:47 CET 2013


hi.  i normally build under macosx, but trying to track down a memory
problem have started using (the wonderful) valgrind under linux.  the
linux machine has a newer g++ (4.7.2 versus 4.2.1).  the compiler on the
linux machine was giving me warnings like:
----
warning: deleting object of polymorphic class type ‘Rcpp::CppProperty<Num>’ which has non-virtual destructor might cause undefined behaviour
----
(where "<Num>" varies between error messages).

i started whittling down my program to a minimal case, but when i got
near the null set, took a different approach.  i used the normal tools
to build a skeleton:
----
/sw/Library/Frameworks/R.framework/Versions/2.15/Resources/Rscript -e \
    'Rcpp::Rcpp.package.skeleton(name="play", path="packages", \
    attributes=TRUE, module=TRUE)'
/sw/Library/Frameworks/R.framework/Versions/2.15/Resources/Rscript -e \
    'Rcpp::compileAttributes("packages/play")'
R CMD build packages/play/
----
i then copied this to the linux machine, tried installing it, and got
the same (sorts of) error messages (see below).

note that my ~/.R/Makevars contains:
----
## http://stackoverflow.com/a/11363085/1527747 (thanks, Dirk!)
CXXFLAGS=-g -O0 -Wall
----

since this is C++ at a level beyond my pay grade, i'm wondering what to
make of it.  any thoughts?  (in the case of my code, there is *some*
correlation between the sites producing these warnings and the sites
where valgrind finds memory irregularities, but that may be
coincidental.)

cheers, Greg

----
bash whatever: {568} R CMD INSTALL --dsym play_1.0.tar.gz 
* installing to library ‘/home/minshall/R/x86_64-pc-linux-gnu-library/2.15’
* installing *source* package ‘play’ ...
** libs
g++ -I/usr/share/R/include -DNDEBUG   -I"/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include"   -fpic  -g -O0 -Wall -c Num.cpp -o Num.o
In file included from /home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp.h:48:0,
                 from Num.cpp:22:
/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp/XPtr.h: In instantiation of ‘void Rcpp::standard_delete_finalizer(T*) [with T = Rcpp::CppProperty<Num>]’:
/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp/Module.h:313:13:   required from ‘Rcpp::S4_field<Class>::S4_field(Rcpp::CppProperty<Class>*, SEXP) [with Class = Num; SEXP = SEXPREC*]’
/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp/module/class.h:392:17:   required from ‘Rcpp::List Rcpp::class_<Class>::fields(SEXP) [with Class = Num; Rcpp::List = Rcpp::Vector<19>; SEXP = SEXPREC*]’
Num.cpp:51:1:   required from here
/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp/XPtr.h:39:5: warning: deleting object of polymorphic class type ‘Rcpp::CppProperty<Num>’ which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
g++ -I/usr/share/R/include -DNDEBUG   -I"/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include"   -fpic  -g -O0 -Wall -c RcppExports.cpp -o RcppExports.o
g++ -I/usr/share/R/include -DNDEBUG   -I"/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include"   -fpic  -g -O0 -Wall -c rcpp_hello_world.cpp -o rcpp_hello_world.o
g++ -I/usr/share/R/include -DNDEBUG   -I"/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include"   -fpic  -g -O0 -Wall -c rcpp_module.cpp -o rcpp_module.o
In file included from /home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp.h:48:0,
                 from rcpp_module.cpp:22:
/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp/XPtr.h: In instantiation of ‘void Rcpp::standard_delete_finalizer(T*) [with T = Rcpp::CppProperty<World>]’:
/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp/Module.h:313:13:   required from ‘Rcpp::S4_field<Class>::S4_field(Rcpp::CppProperty<Class>*, SEXP) [with Class = World; SEXP = SEXPREC*]’
/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp/module/class.h:392:17:   required from ‘Rcpp::List Rcpp::class_<Class>::fields(SEXP) [with Class = World; Rcpp::List = Rcpp::Vector<19>; SEXP = SEXPREC*]’
rcpp_module.cpp:83:1:   required from here
/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp/XPtr.h:39:5: warning: deleting object of polymorphic class type ‘Rcpp::CppProperty<World>’ which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
g++ -I/usr/share/R/include -DNDEBUG   -I"/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include"   -fpic  -g -O0 -Wall -c stdVector.cpp -o stdVector.o
In file included from /home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp.h:48:0,
                 from stdVector.cpp:22:
/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp/XPtr.h: In instantiation of ‘void Rcpp::standard_delete_finalizer(T*) [with T = Rcpp::CppProperty<std::vector<double> >]’:
/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp/Module.h:313:13:   required from ‘Rcpp::S4_field<Class>::S4_field(Rcpp::CppProperty<Class>*, SEXP) [with Class = std::vector<double>; SEXP = SEXPREC*]’
/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp/module/class.h:392:17:   required from ‘Rcpp::List Rcpp::class_<Class>::fields(SEXP) [with Class = std::vector<double>; Rcpp::List = Rcpp::Vector<19>; SEXP = SEXPREC*]’
stdVector.cpp:90:1:   required from here
/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/include/Rcpp/XPtr.h:39:5: warning: deleting object of polymorphic class type ‘Rcpp::CppProperty<std::vector<double> >’ which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
g++ -shared -o play.so Num.o RcppExports.o rcpp_hello_world.o rcpp_module.o stdVector.o -L/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/lib -lRcpp -Wl,-rpath,/home/minshall/R/x86_64-pc-linux-gnu-library/2.15/Rcpp/lib -L/usr/lib/R/lib -lR
installing to /home/minshall/R/x86_64-pc-linux-gnu-library/2.15/play/libs
** R
** preparing package for lazy loading
** help
Warning: /tmp/RtmpV5N6bo/R.INSTALLe88448c4569/play/man/play-package.Rd:31: All text must be in a section
Warning: /tmp/RtmpV5N6bo/R.INSTALLe88448c4569/play/man/play-package.Rd:32: All text must be in a section
*** installing help indices
** building package indices
** testing if installed package can be loaded

* DONE (play)
bash whatever: {569} g++ --version
g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


More information about the Rcpp-devel mailing list