[Bug libstdc++/87544] alloc-size-larger-than incorrectly triggered

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Oct 9 14:45:00 GMT 2018


--- Comment #11 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I can make these changes to libstdc++, but why is the compiler warning anyway?

It says:

In function ‘T* my_allocator<T>::allocate(std::size_t, const void*) [with T =
    inlined from ‘void std::vector<_Tp,
_Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...)
[with _Args = {int}; _Tp = int; _Alloc = my_allocator<int>]’ at
alloc_limit.cpp:18:11: warning: argument 1 value ‘18446744073709551612’ exceeds
maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
     void *result = std::malloc(size);
In file included from /usr/include/c++/7/cstdlib:75:0,
                 from alloc_limit.cpp:1:
/usr/include/stdlib.h: In member function ‘void std::vector<_Tp,
_Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...)
[with _Args = {int}; _Tp = int; _Alloc = my_allocator<int>]’:
/usr/include/stdlib.h:424:14: note: in a call to allocation function ‘void*
malloc(size_t)’ declared here
 extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;

But this is nonsense, the value is 1*sizeof(cplx) which is 8.

Why does it think we're calling it with max_size()?

More information about the Gcc-bugs mailing list