aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-06-12 11:25:57 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-06-12 11:25:57 +0200
commit91b64a9c65cac7d967c9be8f8cade068ed421877 (patch)
tree15e59b1a37343acfc71b3aeb9d1f32d3d67fff82 /Eigen
parent84d103bee88d8a3ba7ccdeecb296ebae6c6920ff (diff)
Relax aligned-on-scalar assert as in the 3.2 branch
Diffstat (limited to 'Eigen')
-rw-r--r--Eigen/src/Core/Map.h15
-rw-r--r--Eigen/src/Core/MapBase.h2
2 files changed, 15 insertions, 2 deletions
diff --git a/Eigen/src/Core/Map.h b/Eigen/src/Core/Map.h
index 6b2b3ade4..ce431edc8 100644
--- a/Eigen/src/Core/Map.h
+++ b/Eigen/src/Core/Map.h
@@ -124,6 +124,7 @@ template<typename PlainObjectType, int MapOptions, typename StrideType> class Ma
: Base(cast_to_pointer_type(dataPtr)), m_stride(stride)
{
PlainObjectType::Base::_check_template_params();
+ checkPointer(dataPtr);
}
/** Constructor in the dynamic-size vector case.
@@ -137,6 +138,7 @@ template<typename PlainObjectType, int MapOptions, typename StrideType> class Ma
: Base(cast_to_pointer_type(dataPtr), size), m_stride(stride)
{
PlainObjectType::Base::_check_template_params();
+ checkPointer(dataPtr);
}
/** Constructor in the dynamic-size matrix case.
@@ -151,11 +153,24 @@ template<typename PlainObjectType, int MapOptions, typename StrideType> class Ma
: Base(cast_to_pointer_type(dataPtr), rows, cols), m_stride(stride)
{
PlainObjectType::Base::_check_template_params();
+ checkPointer(dataPtr);
}
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Map)
protected:
+
+ static void checkPointer(const Scalar* dataPtr)
+ {
+ enum {
+ MightTryToAlignOnScalar = internal::packet_traits<Scalar>::AlignedOnScalar
+ && bool(internal::traits<Map>::Flags&PacketAccessBit)
+ && internal::is_lvalue<Map>::value
+ };
+ eigen_assert(EIGEN_IMPLIES(bool(MightTryToAlignOnScalar), (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<float>");
+ }
+
StrideType m_stride;
};
diff --git a/Eigen/src/Core/MapBase.h b/Eigen/src/Core/MapBase.h
index 0d85085c8..fe61d2a28 100644
--- a/Eigen/src/Core/MapBase.h
+++ b/Eigen/src/Core/MapBase.h
@@ -160,8 +160,6 @@ template<typename Derived> class MapBase<Derived, ReadOnlyAccessors>
EIGEN_DEVICE_FUNC
void checkSanity() const
{
- eigen_assert(EIGEN_IMPLIES(internal::packet_traits<Scalar>::AlignedOnScalar, (size_t(m_data) % sizeof(Scalar)) == 0)
- && "input pointer is not aligned on scalar boundary, e.g., use \"EIGEN_ALIGN8 T ptr[N];\" for double or complex<float>");
eigen_assert(EIGEN_IMPLIES(internal::traits<Derived>::IsAligned, (size_t(m_data) % EIGEN_ALIGN_BYTES) == 0) && "data is not aligned");
}