Workaround for GCC warning.

This commit is contained in:
Christoffer Lerno
2021-06-11 18:39:48 +02:00
parent 117cc6339b
commit 3a75032ba9
2 changed files with 21 additions and 1 deletions

View File

@@ -32,4 +32,16 @@
#define USE_PTHREAD 1
#else
#define USE_PTHREAD 0
#endif
#define IS_GCC 0
#define IS_CLANG 0
#ifdef __GNUC__
#ifdef __clang__
#undef IS_CLANG
#define IS_CLANG 1
#else
#undef IS_GCC
#define IS_GCC 1
#endif
#endif

View File

@@ -335,7 +335,15 @@ static inline void* expand_(void *vec, size_t element_size)
if (header->size == header->capacity)
{
VHeader_ *new_array = vec_new_(element_size, header->capacity << 1U);
memcpy(new_array, header, element_size * header->capacity + sizeof(VHeader_));
#if IS_GCC
// I've yet to figure out why GCC insists that this is trying to copy
// 8 bytes over a size zero array.
// We use volatile to deoptimize on GCC
volatile size_t copy_size = element_size * header->capacity + sizeof(VHeader_);
#else
size_t copy_size = element_size * header->capacity + sizeof(VHeader_);
#endif
memcpy(new_array, header, copy_size);
header = new_array;
new_array->capacity = header->capacity << 1U;
}