Relax aligned-on-scalar assert as in the 3.2 branch

This commit is contained in:
Gael Guennebaud 2015-06-12 11:25:57 +02:00
parent 84d103bee8
commit 91b64a9c65
2 changed files with 15 additions and 2 deletions

View File

@ -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;
};

View File

@ -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");
}