aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Eigen/src/Core/util/Memory.h10
-rw-r--r--test/stdvector.cpp10
2 files changed, 19 insertions, 1 deletions
diff --git a/Eigen/src/Core/util/Memory.h b/Eigen/src/Core/util/Memory.h
index c624556c5..46a0dbc69 100644
--- a/Eigen/src/Core/util/Memory.h
+++ b/Eigen/src/Core/util/Memory.h
@@ -887,7 +887,15 @@ public:
pointer allocate(size_type num, const void* /*hint*/ = 0)
{
internal::check_size_for_overflow<T>(num);
- return static_cast<pointer>( internal::aligned_malloc(num * sizeof(T)) );
+ size_type size = num * sizeof(T);
+#if EIGEN_COMP_GNUC_STRICT && EIGEN_GNUC_AT_LEAST(7,0)
+ // workaround gcc bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87544
+ // It triggered eigen/Eigen/src/Core/util/Memory.h:189:12: warning: argument 1 value '18446744073709551612' exceeds maximum object size 9223372036854775807
+ if(size>=std::size_t((std::numeric_limits<std::ptrdiff_t>::max)()))
+ return 0;
+ else
+#endif
+ return static_cast<pointer>( internal::aligned_malloc(size) );
}
void deallocate(pointer p, size_type /*num*/)
diff --git a/test/stdvector.cpp b/test/stdvector.cpp
index e2b7bd061..9a7040874 100644
--- a/test/stdvector.cpp
+++ b/test/stdvector.cpp
@@ -117,6 +117,16 @@ void check_stdvector_quaternion(const QuaternionType&)
}
}
+// the code below triggered an invalid warning with gcc >= 7
+// eigen/Eigen/src/Core/util/Memory.h:189:12: warning: argument 1 value '18446744073709551612' exceeds maximum object size 9223372036854775807
+// This has been reported to gcc there: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87544
+void std_vector_gcc_warning()
+{
+ typedef Eigen::Vector3f T;
+ std::vector<T, Eigen::aligned_allocator<T> > v;
+ v.push_back(T());
+}
+
EIGEN_DECLARE_TEST(stdvector)
{
// some non vectorizable fixed sizes