[Rcpp-devel] XPtr
Romain Francois
romain at r-enthusiasts.com
Tue Jun 15 17:42:41 CEST 2010
Le 15/06/10 17:27, Dominick Samperi a écrit :
> This code seems simple enough (from cxxPack)...
>
> RcppExport SEXP testBankOpen(SEXP name, SEXP id, SEXP balance) {
> BEGIN_RCPP
> BankAccount *p = new BankAccount(Rcpp::as<std::string>(name),
> Rcpp::as<int>(id),
> Rcpp::as<double>(balance));
> Rcpp::XPtr<BankAccount> xp(p, true);
> return xp;
> END_RCPP
> }
>
> Yet I get this from the Sun/Solaris compiler;
>
> "/home/ripley/R/Lib32/Rcpp/include/Rcpp/XPtr.h", line 46: Warning:
> m_sexp hides Rcpp::RObject::m_sexp.
> "testBankAccount.cpp", line 35: Where: While instantiating
> "Rcpp::XPtr<BankAccount>::XPtr(SEXPREC*, SEXPREC*, SEXPREC*)".
> "testBankAccount.cpp", line 35: Where: Instantiated from non-template code.
> "/home/ripley/R/Lib32/Rcpp/include/Rcpp/XPtr.h", line 180: Warning
> (Anachronism): Formal argument fun of type extern "C" void(*)(SEXPREC*)
> in call to R_RegisterCFinalizerEx(SEXPREC*, extern "C"
> void(*)(SEXPREC*), Rboolean) is being passed void(*)(SEXPREC*).
> "/home/ripley/R/Lib32/Rcpp/include/Rcpp/XPtr.h", line 174: Where: While
> instantiating "Rcpp::XPtr<BankAccount>::setDeleteFinalizer()".
> "/home/ripley/R/Lib32/Rcpp/include/Rcpp/XPtr.h", line 174: Where:
> Instantiated from Rcpp::XPtr<BankAccount>::XPtr(BankAccount*, bool,
> SEXPREC*, SEXPREC*).
> "testBankAccount.cpp", line 25: Where: Instantiated from non-template code.
This is just a warning. The problem is that a function with C linkage is
expected, see the file Rinternals.h :
typedef void (*R_CFinalizer_t)(SEXP);
void R_RegisterFinalizer(SEXP s, SEXP fun);
void R_RegisterCFinalizer(SEXP s, R_CFinalizer_t fun);
void R_RegisterFinalizerEx(SEXP s, SEXP fun, Rboolean onexit);
void R_RegisterCFinalizerEx(SEXP s, R_CFinalizer_t fun, Rboolean onexit);
this is enclosed in a extern "C" so suncc adds the extern "C" to the
R_CFinalizer_t type, and we cannot provide a function with C linkage
because we generate it from a template.
Not sure what the right fix is, and not sure this can be fixed at the
Rcpp level, and something in R might be required to allow registration
of finalizers with C++ linkage. OTOH, this is just a warning.
> The same compiler warns when I wrap a std::vector<double>:
>
> "/home/ripley/R/Lib32/Rcpp/include/Rcpp/traits/is_convertible.h", line
> 40: Warning: A non-POD object of type "std::vector<double>" passed as a
> variable argument to function "static
> Rcpp::traits::is_convertible<std::vector<double>, SEXPREC*>::Test(...)".
> "/home/ripley/R/Lib32/Rcpp/include/Rcpp/internal/wrap.h", line 510:
> Where: While specializing
> "Rcpp::traits::is_convertible<std::vector<double>, SEXPREC*>".
> "/home/ripley/R/Lib32/Rcpp/include/Rcpp/internal/wrap.h", line 510:
> Where: Instantiated from
> Rcpp::internal::wrap_dispatch_unknown_importable<std::vector<double>>(const
> std::vector<double>&, Rcpp::traits::integral_constant<bool, 0>).
> "/home/ripley/R/Lib32/Rcpp/include/Rcpp/internal/wrap.h", line 527:
> Where: Instantiated from
> Rcpp::internal::wrap_dispatch<std::vector<double>>(const
> std::vector<double>&, Rcpp::traits::wrap_type_unknown_tag).
> "/home/ripley/R/Lib32/Rcpp/include/Rcpp/internal/wrap.h", line 624:
> Where: Instantiated from Rcpp::wrap<std::vector<double>>(const
> std::vector<double>&).
> "testFFT.cpp", line 29: Where: Instantiated from non-template code.
This is suncc not reacting well to SFINAE. Apparently it does not know
we are not actually calling Test(...), as the sizeof trick is used.
This again is just a warning. I don't know of another way to do this.
tr1 has the is_convertible class built in, but I have no idea if the stl
implementation in use has tr1.
In our adventures to make Rcpp work on solaris/suncc, we recorded these
findings here: http://rwiki.sciviews.org/doku.php?id=developers:rcpp:solaris
The cran checks for your package indicates that it passes with just a
NOTE, which is fine.
Romain
> Odd thing about the last message is that there are two lines that do
> exactly the same thing (wrap a std::vector<double>) but
> the compiler issues a warning about only one of them.
>
> Ideas?
>
> Thanks,
> Dominick
--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://bit.ly/98Uf7u : Rcpp 0.8.1
|- http://bit.ly/c6YnCi : graph gallery collage
`- http://bit.ly/bZ7ltC : inline 0.3.5
More information about the Rcpp-devel
mailing list