From 3a75032ba9bd31a4ebe843a63bcb38dea0f200c2 Mon Sep 17 00:00:00 2001 From: Christoffer Lerno Date: Fri, 11 Jun 2021 18:39:48 +0200 Subject: [PATCH] Workaround for GCC warning. --- src/utils/common.h | 12 ++++++++++++ src/utils/lib.h | 10 +++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/utils/common.h b/src/utils/common.h index d4d82d021..03d25ed65 100644 --- a/src/utils/common.h +++ b/src/utils/common.h @@ -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 \ No newline at end of file diff --git a/src/utils/lib.h b/src/utils/lib.h index 45f7a0d13..b8bd51e16 100644 --- a/src/utils/lib.h +++ b/src/utils/lib.h @@ -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; }