From c80316a3efc9244af035e1ebfe2b4df15d691c96 Mon Sep 17 00:00:00 2001 From: Sergey Avseyev Date: Thu, 10 Jan 2019 07:37:09 +0300 Subject: [PATCH] generate gcc pragmas to ignore -Wclass-memaccess --- samples/monster_generated.h | 7 +++++++ src/idl_gen_cpp.cpp | 7 +++++++ tests/monster_test_generated.h | 21 +++++++++++++++++++ .../namespace_test1_generated.h | 7 +++++++ tests/union_vector/union_vector_generated.h | 14 +++++++++++++ 5 files changed, 56 insertions(+) diff --git a/samples/monster_generated.h b/samples/monster_generated.h index 5ac4be3..ae1fd04 100644 --- a/samples/monster_generated.h +++ b/samples/monster_generated.h @@ -164,7 +164,14 @@ FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) Vec3 FLATBUFFERS_FINAL_CLASS { public: Vec3() { +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wclass-memaccess" +#endif memset(this, 0, sizeof(Vec3)); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif } Vec3(float _x, float _y, float _z) : x_(flatbuffers::EndianScalar(_x)), diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index a0abfdd..8d35673 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -2585,7 +2585,14 @@ class CppGenerator : public BaseGenerator { // Generate a default constructor. code_ += " {{STRUCT_NAME}}() {"; + code_ += "#if defined(__GNUC__)"; + code_ += "#pragma GCC diagnostic push"; + code_ += "#pragma GCC diagnostic ignored \"-Wclass-memaccess\""; + code_ += "#endif"; code_ += " memset(this, 0, sizeof({{STRUCT_NAME}}));"; + code_ += "#if defined(__GNUC__)"; + code_ += "#pragma GCC diagnostic pop"; + code_ += "#endif"; code_ += " }"; // Generate a constructor that takes all fields as arguments. diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index 0f5e252..4b0aa9f 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -269,7 +269,14 @@ FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(2) Test FLATBUFFERS_FINAL_CLASS { public: Test() { +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wclass-memaccess" +#endif memset(this, 0, sizeof(Test)); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif } Test(int16_t _a, int8_t _b) : a_(flatbuffers::EndianScalar(_a)), @@ -312,7 +319,14 @@ FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(16) Vec3 FLATBUFFERS_FINAL_CLASS { public: Vec3() { +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wclass-memaccess" +#endif memset(this, 0, sizeof(Vec3)); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif } Vec3(float _x, float _y, float _z, double _test1, Color _test2, const Test &_test3) : x_(flatbuffers::EndianScalar(_x)), @@ -384,7 +398,14 @@ FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) Ability FLATBUFFERS_FINAL_CLASS { public: Ability() { +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wclass-memaccess" +#endif memset(this, 0, sizeof(Ability)); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif } Ability(uint32_t _id, uint32_t _distance) : id_(flatbuffers::EndianScalar(_id)), diff --git a/tests/namespace_test/namespace_test1_generated.h b/tests/namespace_test/namespace_test1_generated.h index d82a577..a7637bc 100644 --- a/tests/namespace_test/namespace_test1_generated.h +++ b/tests/namespace_test/namespace_test1_generated.h @@ -56,7 +56,14 @@ FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) StructInNestedNS FLATBUFFERS_FINAL_CLASS public: StructInNestedNS() { +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wclass-memaccess" +#endif memset(this, 0, sizeof(StructInNestedNS)); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif } StructInNestedNS(int32_t _a, int32_t _b) : a_(flatbuffers::EndianScalar(_a)), diff --git a/tests/union_vector/union_vector_generated.h b/tests/union_vector/union_vector_generated.h index c5b2250..57d208e 100644 --- a/tests/union_vector/union_vector_generated.h +++ b/tests/union_vector/union_vector_generated.h @@ -188,7 +188,14 @@ FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) Rapunzel FLATBUFFERS_FINAL_CLASS { public: Rapunzel() { +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wclass-memaccess" +#endif memset(this, 0, sizeof(Rapunzel)); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif } Rapunzel(int32_t _hair_length) : hair_length_(flatbuffers::EndianScalar(_hair_length)) { @@ -213,7 +220,14 @@ FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) BookReader FLATBUFFERS_FINAL_CLASS { public: BookReader() { +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wclass-memaccess" +#endif memset(this, 0, sizeof(BookReader)); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif } BookReader(int32_t _books_read) : books_read_(flatbuffers::EndianScalar(_books_read)) { -- 2.20.1