mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-09-12 17:33:15 +08:00
Add static assert that objects on stacks are not too big (bug #491).
This commit is contained in:
parent
e75b1eb883
commit
bf7d986af6
@ -35,8 +35,16 @@ template <typename T, int Size, int MatrixOrArrayOptions,
|
|||||||
struct plain_array
|
struct plain_array
|
||||||
{
|
{
|
||||||
T array[Size];
|
T array[Size];
|
||||||
plain_array() {}
|
|
||||||
plain_array(constructor_without_unaligned_array_assert) {}
|
plain_array()
|
||||||
|
{
|
||||||
|
EIGEN_STATIC_ASSERT(Size * sizeof(T) <= 128 * 128 * 8, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG);
|
||||||
|
}
|
||||||
|
|
||||||
|
plain_array(constructor_without_unaligned_array_assert)
|
||||||
|
{
|
||||||
|
EIGEN_STATIC_ASSERT(Size * sizeof(T) <= 128 * 128 * 8, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT
|
#ifdef EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT
|
||||||
@ -53,8 +61,17 @@ template <typename T, int Size, int MatrixOrArrayOptions>
|
|||||||
struct plain_array<T, Size, MatrixOrArrayOptions, 16>
|
struct plain_array<T, Size, MatrixOrArrayOptions, 16>
|
||||||
{
|
{
|
||||||
EIGEN_USER_ALIGN16 T array[Size];
|
EIGEN_USER_ALIGN16 T array[Size];
|
||||||
plain_array() { EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(0xf) }
|
|
||||||
plain_array(constructor_without_unaligned_array_assert) {}
|
plain_array()
|
||||||
|
{
|
||||||
|
EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(0xf);
|
||||||
|
EIGEN_STATIC_ASSERT(Size * sizeof(T) <= 128 * 128 * 8, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG);
|
||||||
|
}
|
||||||
|
|
||||||
|
plain_array(constructor_without_unaligned_array_assert)
|
||||||
|
{
|
||||||
|
EIGEN_STATIC_ASSERT(Size * sizeof(T) <= 128 * 128 * 8, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, int MatrixOrArrayOptions, int Alignment>
|
template <typename T, int MatrixOrArrayOptions, int Alignment>
|
||||||
|
@ -89,7 +89,8 @@
|
|||||||
YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED,
|
YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED,
|
||||||
YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED,
|
YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED,
|
||||||
THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE,
|
THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE,
|
||||||
THE_STORAGE_ORDER_OF_BOTH_SIDES_MUST_MATCH
|
THE_STORAGE_ORDER_OF_BOTH_SIDES_MUST_MATCH,
|
||||||
|
OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user