From ae35ff2146a24eb537767a87d50d31ebf8fa0899 Mon Sep 17 00:00:00 2001 From: Kasper Hjort Berthelsen Date: Tue, 21 May 2024 15:21:32 +0200 Subject: [PATCH] pkg/flatbuffers: update flatbuffers to version 2.34.1 --- dist/tools/flatc/Makefile | 2 +- pkg/flatbuffers/Makefile | 4 +- ...ilence-Wcast-align-in-public-headers.patch | 237 ++++++++---------- 3 files changed, 103 insertions(+), 140 deletions(-) diff --git a/dist/tools/flatc/Makefile b/dist/tools/flatc/Makefile index 4d645f0c34..6dd9797261 100644 --- a/dist/tools/flatc/Makefile +++ b/dist/tools/flatc/Makefile @@ -1,6 +1,6 @@ PKG_NAME=flatbuffers PKG_URL=https://github.com/google/flatbuffers -PKG_VERSION=9e7e8cbe9f675123dd41b7c62868acad39188cae +PKG_VERSION=595bf0007ab1929570c7671f091313c8fc20644e PKG_LICENSE=Apache2.0 # manually set some RIOT env vars, so this Makefile can be called stand-alone diff --git a/pkg/flatbuffers/Makefile b/pkg/flatbuffers/Makefile index 59cc4a9356..2c8b071e2e 100644 --- a/pkg/flatbuffers/Makefile +++ b/pkg/flatbuffers/Makefile @@ -1,7 +1,7 @@ PKG_NAME=flatbuffers PKG_URL=https://github.com/google/flatbuffers -# v2.0.0 -PKG_VERSION=a9a295fecf3fbd5a4f571f53b01f63202a3e2113 +# v24.3.25 +PKG_VERSION=595bf0007ab1929570c7671f091313c8fc20644e PKG_LICENSE=Apache2.0 include $(RIOTBASE)/pkg/pkg.mk diff --git a/pkg/flatbuffers/patches/0001-Silence-Wcast-align-in-public-headers.patch b/pkg/flatbuffers/patches/0001-Silence-Wcast-align-in-public-headers.patch index e9a92e3cff..7a47ca6130 100644 --- a/pkg/flatbuffers/patches/0001-Silence-Wcast-align-in-public-headers.patch +++ b/pkg/flatbuffers/patches/0001-Silence-Wcast-align-in-public-headers.patch @@ -1,39 +1,113 @@ -From 6ede404cf13233bd75f6af4fc487649c7bfd27c7 Mon Sep 17 00:00:00 2001 -From: Alexandre Abadie -Date: Thu, 7 Apr 2022 11:14:49 +0200 +From 89ecddee041efc5065b6ec015ac273dff5231b57 Mon Sep 17 00:00:00 2001 +From: Kasper Hjort Berthelsen +Date: Tue, 21 May 2024 15:07:30 +0200 Subject: [PATCH 1/1] Silence Wcast-align in public headers --- - include/flatbuffers/flatbuffers.h | 42 +++++++++++++++++++++++++++++++ - 1 file changed, 42 insertions(+) + include/flatbuffers/buffer.h | 3 +++ + include/flatbuffers/flatbuffer_builder.h | 12 ++++++++++++ + include/flatbuffers/table.h | 6 ++++++ + include/flatbuffers/vector_downward.h | 6 ++++++ + 4 files changed, 27 insertions(+) -diff --git a/include/flatbuffers/flatbuffers.h b/include/flatbuffers/flatbuffers.h -index ee34d54e..52cad4c6 100644 ---- a/include/flatbuffers/flatbuffers.h -+++ b/include/flatbuffers/flatbuffers.h -@@ -107,7 +107,10 @@ template struct IndirectHelper { - typedef T mutable_return_type; - static const size_t element_stride = sizeof(T); - static return_type Read(const uint8_t *p, uoffset_t i) { +diff --git a/include/flatbuffers/buffer.h b/include/flatbuffers/buffer.h +index 94d4f790..4f163f6e 100644 +--- a/include/flatbuffers/buffer.h ++++ b/include/flatbuffers/buffer.h +@@ -119,9 +119,12 @@ struct IndirectHelper> { + + // Then read the scalar value of the offset (which may be 32 or 64-bits) and + // then determine the relative location from the offset location. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-align" - return EndianScalar((reinterpret_cast(p))[i]); -+#pragma GCC diagnostic pop + return reinterpret_cast( + offset_location + ReadScalar(offset_location)); } - }; - template struct IndirectHelper> { -@@ -116,7 +119,10 @@ template struct IndirectHelper> { - static const size_t element_stride = sizeof(uoffset_t); - static return_type Read(const uint8_t *p, uoffset_t i) { - p += i * sizeof(uoffset_t); ++#pragma GCC diagnostic pop + static mutable_return_type Read(uint8_t *const p, const offset_type i) { + // Offsets are relative to themselves, so first update the pointer to + // point to the offset location. +diff --git a/include/flatbuffers/flatbuffer_builder.h b/include/flatbuffers/flatbuffer_builder.h +index 9a2d6254..4ea23b88 100644 +--- a/include/flatbuffers/flatbuffer_builder.h ++++ b/include/flatbuffers/flatbuffer_builder.h +@@ -54,7 +54,10 @@ const T *data(const std::vector &v) { + // Eventually the returned pointer gets passed down to memcpy, so + // we need it to be non-null to avoid undefined behavior. + static uint8_t t; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-align" - return reinterpret_cast(p + ReadScalar(p)); + return v.empty() ? reinterpret_cast(&t) : &v.front(); ++#pragma GCC diagnostic pop + } + template> + T *data(std::vector &v) { +@@ -440,7 +443,10 @@ template class FlatBufferBuilderImpl { + // Write the offsets into the table + for (auto it = buf_.scratch_end() - num_field_loc * sizeof(FieldLoc); + it < buf_.scratch_end(); it += sizeof(FieldLoc)) { ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wcast-align" + auto field_location = reinterpret_cast(it); ++#pragma GCC diagnostic pop + const voffset_t pos = + static_cast(vtable_offset_loc - field_location->off); + // If this asserts, it means you've set a field twice. +@@ -449,7 +455,10 @@ template class FlatBufferBuilderImpl { + WriteScalar(buf_.data() + field_location->id, pos); + } + ClearOffsets(); ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wcast-align" + auto vt1 = reinterpret_cast(buf_.data()); ++#pragma GCC diagnostic pop + auto vt1_size = ReadScalar(vt1); + auto vt_use = GetSizeRelative32BitRegion(); + // See if we already have generated a vtable with this exact same +@@ -457,8 +466,11 @@ template class FlatBufferBuilderImpl { + if (dedup_vtables_) { + for (auto it = buf_.scratch_data(); it < buf_.scratch_end(); + it += sizeof(uoffset_t)) { ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wcast-align" + auto vt_offset_ptr = reinterpret_cast(it); + auto vt2 = reinterpret_cast(buf_.data_at(*vt_offset_ptr)); ++#pragma GCC diagnostic pop + auto vt2_size = ReadScalar(vt2); + if (vt1_size != vt2_size || 0 != memcmp(vt2, vt1, vt1_size)) continue; + vt_use = *vt_offset_ptr; +diff --git a/include/flatbuffers/table.h b/include/flatbuffers/table.h +index e92d8ae8..c2400a3b 100644 +--- a/include/flatbuffers/table.h ++++ b/include/flatbuffers/table.h +@@ -51,8 +51,11 @@ class Table { + P GetPointer(voffset_t field) { + auto field_offset = GetOptionalFieldOffset(field); + auto p = data_ + field_offset; ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wcast-align" + return field_offset ? reinterpret_cast

(p + ReadScalar(p)) + : nullptr; +#pragma GCC diagnostic pop } - }; - template struct IndirectHelper { -@@ -1034,12 +1040,18 @@ class vector_downward { + template + P GetPointer(voffset_t field) const { +@@ -70,7 +73,10 @@ class Table { + template P GetStruct(voffset_t field) const { + auto field_offset = GetOptionalFieldOffset(field); + auto p = const_cast(data_ + field_offset); ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wcast-align" + return field_offset ? reinterpret_cast

(p) : nullptr; ++#pragma GCC diagnostic pop + } + + template +diff --git a/include/flatbuffers/vector_downward.h b/include/flatbuffers/vector_downward.h +index 2b5a92cf..dd869444 100644 +--- a/include/flatbuffers/vector_downward.h ++++ b/include/flatbuffers/vector_downward.h +@@ -199,12 +199,18 @@ template class vector_downward { // Specialized version of push() that avoids memcpy call for small data. template void push_small(const T &little_endian_t) { make_space(sizeof(T)); @@ -52,117 +126,6 @@ index ee34d54e..52cad4c6 100644 scratch_ += sizeof(T); } -@@ -1121,13 +1133,19 @@ const T *data(const std::vector &v) { - // Eventually the returned pointer gets passed down to memcpy, so - // we need it to be non-null to avoid undefined behavior. - static uint8_t t; -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wcast-align" - return v.empty() ? reinterpret_cast(&t) : &v.front(); -+#pragma GCC diagnostic pop - } - template T *data(std::vector &v) { - // Eventually the returned pointer gets passed down to memcpy, so - // we need it to be non-null to avoid undefined behavior. - static uint8_t t; -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wcast-align" - return v.empty() ? reinterpret_cast(&t) : &v.front(); -+#pragma GCC diagnostic pop - } - - /// @endcond -@@ -1465,7 +1483,10 @@ class FlatBufferBuilder { - // Write the offsets into the table - for (auto it = buf_.scratch_end() - num_field_loc * sizeof(FieldLoc); - it < buf_.scratch_end(); it += sizeof(FieldLoc)) { -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wcast-align" - auto field_location = reinterpret_cast(it); -+#pragma GCC diagnostic pop - auto pos = static_cast(vtableoffsetloc - field_location->off); - // If this asserts, it means you've set a field twice. - FLATBUFFERS_ASSERT( -@@ -1473,7 +1494,10 @@ class FlatBufferBuilder { - WriteScalar(buf_.data() + field_location->id, pos); - } - ClearOffsets(); -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wcast-align" - auto vt1 = reinterpret_cast(buf_.data()); -+#pragma GCC diagnostic pop - auto vt1_size = ReadScalar(vt1); - auto vt_use = GetSize(); - // See if we already have generated a vtable with this exact same -@@ -1481,8 +1505,11 @@ class FlatBufferBuilder { - if (dedup_vtables_) { - for (auto it = buf_.scratch_data(); it < buf_.scratch_end(); - it += sizeof(uoffset_t)) { -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wcast-align" - auto vt_offset_ptr = reinterpret_cast(it); - auto vt2 = reinterpret_cast(buf_.data_at(*vt_offset_ptr)); -+#pragma GCC diagnostic pop - auto vt2_size = ReadScalar(vt2); - if (vt1_size != vt2_size || 0 != memcmp(vt2, vt1, vt1_size)) continue; - vt_use = *vt_offset_ptr; -@@ -2184,8 +2211,11 @@ class FlatBufferBuilder { - struct StringOffsetCompare { - StringOffsetCompare(const vector_downward &buf) : buf_(&buf) {} - bool operator()(const Offset &a, const Offset &b) const { -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wcast-align" - auto stra = reinterpret_cast(buf_->data_at(a.o)); - auto strb = reinterpret_cast(buf_->data_at(b.o)); -+#pragma GCC diagnostic pop - return StringLessThan(stra->data(), stra->size(), strb->data(), - strb->size()); - } -@@ -2578,8 +2608,11 @@ class Table { - template P GetPointer(voffset_t field) { - auto field_offset = GetOptionalFieldOffset(field); - auto p = data_ + field_offset; -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wcast-align" - return field_offset ? reinterpret_cast

(p + ReadScalar(p)) - : nullptr; -+#pragma GCC diagnostic pop - } - template P GetPointer(voffset_t field) const { - return const_cast(this)->GetPointer

(field); -@@ -2588,7 +2621,10 @@ class Table { - template P GetStruct(voffset_t field) const { - auto field_offset = GetOptionalFieldOffset(field); - auto p = const_cast(data_ + field_offset); -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wcast-align" - return field_offset ? reinterpret_cast

(p) : nullptr; -+#pragma GCC diagnostic pop - } - - template -@@ -2691,7 +2727,10 @@ inline flatbuffers::Optional Table::GetOptional( - - template - void FlatBufferBuilder::Required(Offset table, voffset_t field) { -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wcast-align" - auto table_ptr = reinterpret_cast(buf_.data_at(table.o)); -+#pragma GCC diagnostic pop - bool ok = table_ptr->GetOptionalFieldOffset(field) != 0; - // If this fails, the caller will show what field needs to be set. - FLATBUFFERS_ASSERT(ok); -@@ -2703,7 +2742,10 @@ void FlatBufferBuilder::Required(Offset table, voffset_t field) { - /// This may be useful if you want to pass on a root and have the recipient - /// delete the buffer afterwards. - inline const uint8_t *GetBufferStartFromRootPointer(const void *root) { -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wcast-align" - auto table = reinterpret_cast(root); -+#pragma GCC diagnostic pop - auto vtable = table->GetVTable(); - // Either the vtable is before the root or after the root. - auto start = (std::min)(vtable, reinterpret_cast(root)); -- -2.32.0 +2.34.1