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