From 37ed0d991a441e938c9cefba682f4b99ebfd69ee Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Sat, 13 Jun 2015 21:49:11 +0200 Subject: [PATCH] aligned-on-scalar assertion was still too aggressive: it now takes into account the sizes at runtime --- Eigen/src/Core/Map.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Eigen/src/Core/Map.h b/Eigen/src/Core/Map.h index 3a925b350..306178a19 100644 --- a/Eigen/src/Core/Map.h +++ b/Eigen/src/Core/Map.h @@ -174,14 +174,16 @@ template class Ma protected: - static void checkPointer(const Scalar* dataPtr) + void checkPointer(const Scalar* dataPtr) { enum { MightTryToAlignOnScalar = internal::packet_traits::AlignedOnScalar && bool(internal::traits::Flags&PacketAccessBit) - && internal::is_lvalue::value + && internal::is_lvalue::value, + PacketSize = internal::packet_traits::size }; - eigen_assert(EIGEN_IMPLIES(bool(MightTryToAlignOnScalar), (size_t(dataPtr) % sizeof(Scalar)) == 0) + Index linear_size = bool(internal::traits::Flags&LinearAccessBit) ? this->size() : this->innerSize(); + eigen_assert(EIGEN_IMPLIES(bool(MightTryToAlignOnScalar) && (linear_size>=PacketSize), (size_t(dataPtr) % sizeof(Scalar)) == 0) && "input pointer is not aligned on scalar boundary, e.g., use \"EIGEN_ALIGN8 T ptr[N];\" for double or complex"); }