Ensure that destructor's needed by lldb make it into binary in non-inlined fashion
diff --git a/Eigen/src/Core/EigenBase.h b/Eigen/src/Core/EigenBase.h
index 6d16700..7a5fdc8 100644
--- a/Eigen/src/Core/EigenBase.h
+++ b/Eigen/src/Core/EigenBase.h
@@ -109,6 +109,20 @@
   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
 };
 
 /***************************************************************************
diff --git a/test/dense_storage.cpp b/test/dense_storage.cpp
index 0f6ab64..d394a94 100644
--- a/test/dense_storage.cpp
+++ b/test/dense_storage.cpp
@@ -38,6 +38,13 @@
 // 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");