[Rcpp-devel] RcppEigen fails on win-builder i386, and a possibly related issue.

Dirk Eddelbuettel edd at debian.org
Sun May 22 16:13:37 CEST 2016


Hi Francois,

Thanks for taking the time to track this down and to create an example.
I just opened a GitHub issue for it:
  https://github.com/RcppCore/RcppEigen/issues/34
Feel free to comment there as well.

On 22 May 2016 at 12:09, François Rousset wrote:
| Hi,
| 
| RcppEigen no longer passes the CRAN checks for Windows i386 architecture:
| https://cran.r-project.org/web/checks/check_results_RcppEigen.html
| This problem seems to have appeared in the middle of last month, 
| presumably following some change on CRAN.
| 
| A similar problem appeared at the same time in some packages I maintain, 
| which link to RcppEigen. For one package, execution stops on a line of 
| the form
| MatrixXd 
| someMatrix(MatrixXd(nb,nb).setZero().selfadjointView<Lower>().rankUpdate( 
| anotherMatrix ));
| I have reduced the code causing the error to a small reproducible 
| example, and since I can reproduce the error only on the win-builder 
| service on CRAN, not on my Windows PC, this example takes the form of a 
| package 'minimalTest'. It can be downloaded from 
| http://kimura.univ-montp2.fr/~rousset/minimalTest_1.1.3.tar.gz.
| 
| I hope the following may help in correcting RcppEigen (as I think I can 
| circumvent the problem in my package), but I am also curious whether I 
| am missing some obvious error in my code.
| 
| In this small example, the checks fail (on Windows i386 only; the 
| relevant part of the check log is pasted at the end of this message) 
| when executing
| 
| mini(14)
| 
| where the mini() function is
| 
| // [[Rcpp::export]]
| int mini( int nb ){
|    MatrixXd swZ(nb,nb);
|    swZ.setZero();
|    Rcout <<"Trivial code: 
| swZ.selfadjointView<Lower>().rankUpdate(swZ):"<<std::endl;
|    swZ.selfadjointView<Lower>().rankUpdate(swZ);
|    Rcout << "after minimal test. "<<std::endl; // not printed when error 
| occurs
|    return(0);
| }
| 
| However, the problem occurs only when two other functions, derived from 
| more meaningful functions in the original package, are included in the 
| sources (yet are not called by the tests):
| 
| // [[Rcpp::export]]
| List unusedFn1( SEXP XX ) {
|    const MappedSparseMatrix<double> X(as<MappedSparseMatrix<double> >(XX));
|    SparseQR<SparseMatrix<double, Eigen::ColMajor>, 
| Eigen::COLAMDOrdering<int> > spQR(X);
|    SparseMatrix<double> Q_ap(5,5);
|    Q_ap.setZero();
|    List out = List::create(Named("Q_ap") = Q_ap);
|    return(out);
| }
| 
| // [[Rcpp::export]]
| SEXP unusedFn2( SEXP ZZ ) {
|    const Map<MatrixXd> Z(as<Map<MatrixXd> >(ZZ));
|    int c(Z.cols());
|    if (c==0) return(wrap(MatrixXd(0,0)));
|    MatrixXd bidon(MatrixXd(c,c).setZero());
|    MatrixXd 
| swZ(MatrixXd(c,c).setZero().selfadjointView<Lower>().rankUpdate(bidon.transpose()));
|    return(wrap(swZ));
| }
| 
| The problem does not occur if either of these two functions is removed 
| from the sources. I found that I could resolve the problem in my 
| original package by removing any Eigen::SparseMatrix-related code from 
| it. Much as in the checks for the small example package, that code was 
| not called in the checks for my original package.
| 
| The small example package does not contain other C++ or R functions 
| (except those generated automatically by Rcpp).
| 
| Can anyone make sense of this?

The fact that inclusion of other code, which is not called and should be
optimized away, is involved is really, really weird.

All I can think of so far is maybe some macro going haywire?

Dirk
 
| Thanks in advance,
| 
| F.R.
| 
| ==============================================
| ** running examples for arch 'i386' ... ERROR
| Running examples in 'minimalTest-Ex.R' failed
| The error most likely occurred in:
| 
|  > base::assign(".ptime", proc.time(), pos = "CheckExEnv")
|  > ### Name: mini
|  > ### Title: Test RcppEigen code
|  > ### Aliases: mini unusedFn1 unusedFn2
|  >
|  > ### ** Examples
|  >
|  > sessionInfo()
| R Under development (unstable) (2016-05-21 r70655)
| Platform: i386-w64-mingw32/i386 (32-bit)
| Running under: Windows Server 2008 x64 (build 6002) Service Pack 2
| 
| locale:
| [1] LC_COLLATE=C                 LC_CTYPE=German_Germany.1252
| [3] LC_MONETARY=C                LC_NUMERIC=C
| [5] LC_TIME=C
| 
| attached base packages:
| [1] stats     graphics  grDevices utils     datasets  methods   base
| 
| other attached packages:
| [1] minimalTest_1.1.3
| 
| loaded via a namespace (and not attached):
| [1] Rcpp_0.12.5
|  > mini(14)
| Trivial code: swZ.selfadjointView<Lower>().rankUpdate(swZ):
| ** running examples for arch 'x64' ... [1s] OK
| * checking PDF version of manual ... OK
| * DONE
| ===============================================
| _______________________________________________
| Rcpp-devel mailing list
| Rcpp-devel at lists.r-forge.r-project.org
| https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

-- 
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org


More information about the Rcpp-devel mailing list