aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/util/Memory.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2018-10-07 15:00:05 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2018-10-07 15:00:05 +0200
commit6512c5e1364d466f1c225039e3a02c83a79ada17 (patch)
tree51a4038698ebfccece0437bf4ea1cea31874a892 /Eigen/src/Core/util/Memory.h
parent409132bb817f2a3f77e0a0ecb9baeb73af386984 (diff)
Implement a better workaround for GCC's bug #87544
Diffstat (limited to 'Eigen/src/Core/util/Memory.h')
-rw-r--r--Eigen/src/Core/util/Memory.h19
1 files changed, 10 insertions, 9 deletions
diff --git a/Eigen/src/Core/util/Memory.h b/Eigen/src/Core/util/Memory.h
index 46a0dbc69..6664770f3 100644
--- a/Eigen/src/Core/util/Memory.h
+++ b/Eigen/src/Core/util/Memory.h
@@ -884,18 +884,19 @@ public:
~aligned_allocator() {}
+ #if EIGEN_COMP_GNUC_STRICT && EIGEN_GNUC_AT_LEAST(7,0)
+ // In gcc std::allocator::max_size() is bugged making gcc triggers a warning:
+ // eigen/Eigen/src/Core/util/Memory.h:189:12: warning: argument 1 value '18446744073709551612' exceeds maximum object size 9223372036854775807
+ // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87544
+ size_type max_size() const {
+ return (std::numeric_limits<std::ptrdiff_t>::max)()/sizeof(T);
+ }
+ #endif
+
pointer allocate(size_type num, const void* /*hint*/ = 0)
{
internal::check_size_for_overflow<T>(num);
- 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) );
+ return static_cast<pointer>( internal::aligned_malloc(num * sizeof(T)) );
}
void deallocate(pointer p, size_type /*num*/)