diff --git a/src/test/vector.cpp b/src/test/vector.cpp index 0bc2aeb362..a206b278ef 100644 --- a/src/test/vector.cpp +++ b/src/test/vector.cpp @@ -19,6 +19,7 @@ Revision History: #include "util/vector.h" #include "util/rational.h" #include +#include static void tst_resize_rational() { // grow from empty using default initialization (zero) @@ -141,8 +142,16 @@ static void tst1() { } } +static void tst_expand_vector_byte_count() { + vector v; + for (unsigned i = 0; i < 192; ++i) + v.push_back(i); + ENSURE(v.size() == 192); +} + void tst_vector() { tst_resize_rational(); tst_resize(); tst1(); + tst_expand_vector_byte_count(); } diff --git a/src/util/vector.h b/src/util/vector.h index 41f81fc953..6ccda5adc7 100644 --- a/src/util/vector.h +++ b/src/util/vector.h @@ -80,9 +80,9 @@ class vector { static_assert(std::is_nothrow_move_constructible::value); SASSERT(capacity() > 0); SZ old_capacity = reinterpret_cast(m_data)[CAPACITY_IDX]; - SZ old_capacity_T = sizeof(T) * old_capacity + sizeof(SZ) * 2; + size_t old_capacity_T = sizeof(T) * static_cast(old_capacity) + sizeof(SZ) * 2; SZ new_capacity = (3 * old_capacity + 1) >> 1; - SZ new_capacity_T = sizeof(T) * new_capacity + sizeof(SZ) * 2; + size_t new_capacity_T = sizeof(T) * static_cast(new_capacity) + sizeof(SZ) * 2; if (new_capacity <= old_capacity || new_capacity_T <= old_capacity_T) { throw default_exception("Overflow encountered when expanding vector"); }