diff --git a/src/common/buffer.cc b/src/common/buffer.cc index b71af2ec75e..f8b0a65d269 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -2147,13 +2147,17 @@ buffer::list buffer::list::static_from_string(string& s) { // const makes me generally sad. } +// buffer::raw is not a standard layout type. +#define BUF_OFFSETOF(type, field) \ + (reinterpret_cast(&(((type*)1024)->field)) - 1024u) + bool buffer::ptr_node::dispose_if_hypercombined( buffer::ptr_node* const delete_this) { // in case _raw is nullptr const std::uintptr_t bptr = (reinterpret_cast(delete_this->_raw) + - offsetof(buffer::raw, bptr_storage)); + BUF_OFFSETOF(buffer::raw, bptr_storage)); const bool is_hypercombined = reinterpret_cast(delete_this) == bptr; if (is_hypercombined) {