summaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/bits/allocator.h
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/include/bits/allocator.h')
-rw-r--r--libstdc++-v3/include/bits/allocator.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/libstdc++-v3/include/bits/allocator.h b/libstdc++-v3/include/bits/allocator.h
index f7770165273..a4b80d924d6 100644
--- a/libstdc++-v3/include/bits/allocator.h
+++ b/libstdc++-v3/include/bits/allocator.h
@@ -179,7 +179,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
allocate(size_t __n)
{
if (std::__is_constant_evaluated())
- return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
+ {
+ if (__builtin_mul_overflow(__n, sizeof(_Tp), &__n))
+ std::__throw_bad_array_new_length();
+ return static_cast<_Tp*>(::operator new(__n));
+ }
+
return __allocator_base<_Tp>::allocate(__n, 0);
}