mirror of
https://gitlab.com/libeigen/eigen.git
synced 2024-11-27 06:30:28 +08:00
Ensure that destructor's needed by lldb make it into binary in non-inlined fashion
This commit is contained in:
parent
0fb2ed140d
commit
040180078d
@ -109,6 +109,20 @@ struct EigenBase {
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DeviceWrapper<Derived, Device> device(Device& device);
|
||||
template <typename Device>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DeviceWrapper<const Derived, Device> device(Device& device) const;
|
||||
|
||||
/**
|
||||
* By defining the empty destructor here, subclasses which override the destructor with `~SubClass = default` will not
|
||||
* inline their destructor. This ensures ensures the destructor symbol will exists in the binary.
|
||||
* This is needed to support expression evaluation in lldb (for _some_ reason). Without this hack, the destructor
|
||||
* will be inlined and lldb will produce a missing symbol error (referring to eg ~MatrixBase destructor) when trying
|
||||
* to evaluate an expression that returns an Eigen::Matrix.
|
||||
*
|
||||
* We use the normal default destructor to make the object trivially destructible when not debugging or when testing
|
||||
* as the testsuite asserts std::is_trivially_destructible
|
||||
*/
|
||||
#if !defined(EIGEN_NO_DEBUG) && !defined(EIGEN_TESTING_PLAINOBJECT_CTOR)
|
||||
EIGEN_DEVICE_FUNC ~EigenBase() {}
|
||||
#endif
|
||||
};
|
||||
|
||||
/***************************************************************************
|
||||
|
@ -38,6 +38,13 @@ static_assert(std::is_trivially_default_constructible<Array4f>::value, "Array4f
|
||||
// all fixed-size, fixed-dimension plain object types are trivially move constructible
|
||||
static_assert(std::is_trivially_move_constructible<Matrix4f>::value, "Matrix4f not trivially_move_constructible");
|
||||
static_assert(std::is_trivially_move_constructible<Array4f>::value, "Array4f not trivially_move_constructible");
|
||||
// all statically-allocated plain object types are trivially destructible
|
||||
static_assert(std::is_trivially_destructible<Matrix4f>::value, "Matrix4f not trivially_destructible");
|
||||
static_assert(std::is_trivially_destructible<Array4f>::value, "Array4f not trivially_destructible");
|
||||
static_assert(std::is_trivially_destructible<Matrix<float, 4, Dynamic, 0, 4, 4>>::value,
|
||||
"Matrix4X44 not trivially_destructible");
|
||||
static_assert(std::is_trivially_destructible<Array<float, 4, Dynamic, 0, 4, 4>>::value,
|
||||
"Array4X44 not trivially_destructible");
|
||||
#if !defined(EIGEN_DENSE_STORAGE_CTOR_PLUGIN)
|
||||
// all fixed-size, fixed-dimension plain object types are trivially copy constructible
|
||||
static_assert(std::is_trivially_copy_constructible<Matrix4f>::value, "Matrix4f not trivially_copy_constructible");
|
||||
|
Loading…
Reference in New Issue
Block a user