[Rcpp-devel] RcppEigen: Windows binary from CRAN crashes R, but not when installing from source.

Henrik Singmann henrik.singmann at psychologie.uni-freiburg.de
Thu Oct 16 00:13:06 CEST 2014


Hi Kevin,

The easiest way for me to reproduce the issue on Linux was to upload the zip file containing the R package folder plus the .Rproj file onto my Rstudio Server. This zip file can be found here: http://singmann.org/download/teaching/r/mptmin.zip

There I opened a new R script, and entered the following lines to crash R:

require(devtools)
load_all(recompile = TRUE)
no_trigger()
trigger()

I just retried it and reliably crashed my RStudio Server.

Thanks a lot,
Henrik

Am 15.10.2014 um 23:53 schrieb Kevin Ushey:
> Hi Henrik,
>
> Thanks for putting this together. FWIW, I cannot reproduce this error
> (either with `trigger()` or `no_trigger()`) on OS X, nor when building
> from source on a Windows VM (while inside RStudio).
>
> I also tried running the address and undefined behavior sanitizers
> when executing the code and nothing was picked up.
>
> Can you post the compiler output you get when using
> `devtools::load_all()` vs. a regular `R CMD INSTALL` ? I wonder if the
> compile flags are somehow different and if that could lead to a
> problem.
>
> Can you also elaborate on how you can reproduce this on Linux? This is
> the environment we're most familiar with and so if we can reproduce
> there then we can most easily discover a solution. I wonder if using
> `gctorture(TRUE)` before running `trigger()` would make the assertion
> failure more likely.
>
> Thanks,
> Kevin
>
>
>
> On Wed, Oct 15, 2014 at 2:15 PM, Henrik Singmann
> <henrik.singmann at psychologie.uni-freiburg.de> wrote:
>>
>> Hi Dirk and list,
>>
>> I have now managed to isolate the problem. The cpp file posted below can on
>> both Windows and Linux crash R if (a) compiled by winbuilder (windows only)
>> or if build via devtools::load_all() or from within Rstudio ("Build &
>> Reload") and (b) when using the appropriate input.
>>
>> The following input crashes R:
>>    S <- 3
>>    Ineq <- structure(0, .Dim = c(1L, 1L))
>>    But this input is okay:
>>    S <- 3
>>    Ineq <- structure(c(-1, 1, 0), .Dim = c(1L, 3L))
>>
>>    The c++ function producing the problem is (where SS = S and ineq = Ineq):
>>
>> #### code follows ######
>>
>> SEXP determinant2( SEXP SS, SEXP ineq){
>> BEGIN_RCPP
>>
>> using namespace Rcpp;
>> using Eigen::Map;
>> using Eigen::VectorXd;
>> using Eigen::RowVectorXd;
>> using Eigen::MatrixXd;
>> const int S = Rcpp::as<int>(SS);
>> const Map<MatrixXd> Ineq(as<Map<MatrixXd> >(ineq));
>>
>> RNGScope scope;
>>
>> VectorXd thetaTMP;
>> RowVectorXd theta;
>> VectorXd IneqT;
>>
>> thetaTMP = Rcpp::as<VectorXd>(rbeta(S, 0.5, 0.5));
>> theta = thetaTMP.transpose();
>>
>> IneqT = (theta*Ineq.transpose());
>>    return wrap(0);
>>
>> END_RCPP
>> }
>>
>> #### code ends ######
>>
>> I have build a package which contains nothing but this code and two
>> functions trigger() and no_trigger() the former of which crashes R and the
>> latter does not crash R. The package can be found here:
>> http://singmann.org/download/teaching/r/MPTbug_1.0.0.tar.gz
>> But as I said, when installing from source, the two functions work. Only
>> when using the binary from winbuilder or building via devtools or RStudio
>> does trigger() crash R. The winbuilder version can be found here
>> (temporarily): http://win-builder.r-project.org/M4yLs8R7tFR1/
>>
>> The problem obviously seems to be (theta*Ineq.transpose()) if Ineq is a
>> scalar 0. But why it works given one compilation and not the other is
>> outside of my knowledge space. Any help would obviously be really
>> appreciated.
>>
>> Cheers,
>> Henrik
>>
>> Am 15.10.2014 um 21:13 schrieb Dirk Eddelbuettel:
>>>
>>> Hi Henrik,
>>>
>>> On 15 October 2014 at 20:59, Henrik Singmann wrote:
>>> | Dear list,
>>> |
>>> | I have the following weird problem and would be really glad for any
>>> input:
>>> |
>>> | The windows binary from CRAN for my package MPTinR, which uses
>>> RcppEigen, leads to an "Assertion failed" error which crashes R with a
>>> simple example given below (which unfortunately is not part of the examples
>>> and henceforth not tested by CRAN).
>>> |
>>> | Interestingly enough, the problem disappears when installing the package
>>> on Windows from source or when using Linux (Ubuntu). But it also appears
>>> when using a binary version of MPTinR from winbuilder (temporarily available
>>> here: http://win-builder.r-project.org/h18PJ7B55VAq), R-devel and
>>> corresponding binary from CRAN, and I could replicate the error on a range
>>> of different Windows machines. The error also always disappears when
>>> installing from source. I am also extremely confident that this problem
>>> didn't exist in the past, I and others have used this functionality
>>> regularly with the CRAN windows binary.
>>> |
>>> | ###### code starts #######
>>> | require(MPTinR)
>>> | data(d.broeder)
>>> | m.2htm <- system.file("extdata", "5points.2htm.model", package =
>>> "MPTinR")
>>> | get.mpt.fia(d.broeder, m.2htm)
>>> | ###### code ends #######
>>> |
>>> | The complete error message is:
>>> |
>>> | ###### error message starts #######
>>> | Assertion failed!
>>> |
>>> | Program: C:\Program Files\RStudio\bin\x64\rsession.exe
>>> | File:
>>> d:/RCompile/CRANpkg/lib/3.1/RcppEigen/include/Eigen/src/Core/ProductBase.h,
>>> Line 95
>>> |
>>> | Expression: a_lhs.cols() == a_rhs.rows() && "invalid matrix product" &&
>>> "if you wanted a coeff-wise or a dot product use the respective explicit
>>> functions"
>>> |
>>> | This application has requested the Runtime to terminate it in an unusual
>>> way.
>>> | Please contact the application's support team for more information.
>>> | ###### error message ends #######
>>> |
>>> | When adding such an example to the code and resubmitting it to
>>> winbuilder it now also crashes, see
>>> http://win-builder.r-project.org/0ei38q0t48h2/00check.log
>>> | But again, when installing the same package on my machine from source it
>>> works.
>>>
>>> It would help us if you could create a minimally reproducible example
>>> exhibit
>>> this behaviour.
>>>
>>> About 24 CRAN packages use RcppEigen.  The error could be yours, or ours.
>>> But
>>> given the information provided so far it is hard to say more.
>>>
>>> You could also try R along with valgrind on Linux to see if that tickles
>>> it.
>>>
>>> Dirk
>>>
>>>
>>> | Best,
>>> | Henrik
>>> |
>>> | PS: A session info (without attaching MPTinR) is given below:
>>> |
>>> | R version 3.1.1 (2014-07-10)
>>> | Platform: x86_64-w64-mingw32/x64 (64-bit)
>>> |
>>> | locale:
>>> | [1] LC_COLLATE=German_Switzerland.1252  LC_CTYPE=German_Switzerland.1252
>>> LC_MONETARY=German_Switzerland.1252
>>> | [4] LC_NUMERIC=C                        LC_TIME=German_Switzerland.1252
>>> |
>>> | attached base packages:
>>> | [1] stats     graphics  grDevices utils     datasets  methods   base
>>> |
>>> | other attached packages:
>>> | [1] devtools_1.6
>>> |
>>> | loaded via a namespace (and not attached):
>>> | [1] fortunes_1.5-2 tools_3.1.1
>>> |
>>> |
>>> |
>>> | --
>>> | Dr. Henrik Singmann
>>> | Universität Zürich, Schweiz
>>> | http://singmann.org
>>> | _______________________________________________
>>> | Rcpp-devel mailing list
>>> | Rcpp-devel-Z+qqJ2/841dDXCDGMXqaGq2UG9VpUWMKQH7oEaQurus at public.gmane.org
>>> | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>>>
>> --
>> Dr. Henrik Singmann
>> Universität Zürich, Schweiz
>> http://singmann.org
>>
>> _______________________________________________
>> 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

-- 
Dr. Henrik Singmann
PostDoc
Universität Zürich, Schweiz
http://singmann.org


More information about the Rcpp-devel mailing list