Thanks, that's very useful.

AFAICT, in the problematic case we are doing some linear algebra with zero-column matrices that are mathematically well-defined (and whose base-R equivalents work correctly). It's maybe not surprising that Eigen/RcppEigen would do some weird stuff in this edge case. I'll see if I can come up with some pure RcppEigen/Eigen examples to illustrate the problem ...

  cheers
   Ben



On 2024-06-10 10:12 a.m., Mikael Jagan wrote:

The ASan output is:

    > reference binding to misaligned address 0x000000000001 for type 'const double', which requires 8 byte alignment

That there is a "reference" to 0x1 means that there really _is_ an attempt to access memory there.  The stack trace provided by ASan tells you exactly where
it happens: line 100 of
RcppEigen/inst/include/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h:

     for(Index k2=0; k2<depth; k2+=kc)
     {
       const Index actual_kc = (std::min)(k2+kc,depth)-k2;


       // note that the actual rhs is the transpose/adjoint of mat
       pack_rhs(blockB, rhs.getSubMapper(k2,0), actual_kc, size);
                        ^^^^^^^^^^^^^^^^^^^^^^

where 'rhs' is an object wrapping the pointer with a method getSubMapper(i, j) for accessing the data like a matrix.  In the first loop iteration, you access
rhs[0]; there is no defensive test for 'rhs' of positive length.

So ASan _is_ revealing an illegal access, complaining only now (since r86629)
because _now_ the address that you access illegally is misaligned.

--
Dr. Benjamin Bolker
Professor, Mathematics & Statistics and Biology, McMaster University
Director, School of Computational Science and Engineering
(Acting) Graduate chair, Mathematics & Statistics
> E-mail is sent at my convenience; I don't expect replies outside of working hours.

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to