Build fix: missing initializer for member 'rotation_positions'
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 16 Jun 2022 21:31:20 +0000 (17:31 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 17 Jun 2022 14:56:44 +0000 (10:56 -0400)
gcc 5.4.0 complains that:
  main.cpp: In function 'ssize_t relay_unpack_rotate_streams_header(const lttng_buffer_view*, lttcomm_relayd_rotate_streams*)':
  main.cpp:2547:2: warning: missing initializer for member 'lttcomm_relayd_rotate_streams::rotation_positions' [-Wmissing-field-initializers]

The structure's members are initialized one by one.

At the same time, the use of the address of a packed
member (stream_count) is eliminated, which fixes another unrelated
warning emited by clang.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I5fd90d75cc6e0ba17350fc8092929f476e93757e

src/bin/lttng-relayd/main.cpp
src/bin/lttng-sessiond/ust-app.hpp
src/bin/lttng-sessiond/ust-registry-event.hpp
src/common/format.hpp

index 41c5e1d4419d740b452528410b2345156717cfbe..318af66f787526f049faef36f9c4cf1a78425c71 100644 (file)
@@ -2539,12 +2539,14 @@ static ssize_t relay_unpack_rotate_streams_header(
         * We start by "unpacking" `stream_count` to figure out the padding length
         * emited by our peer.
         */
-       memcpy(&rotate_streams.stream_count, payload->data,
-                       sizeof(rotate_streams.stream_count));
-       rotate_streams = (typeof(rotate_streams)) {
-               .stream_count = be32toh(rotate_streams.stream_count),
-               .new_chunk_id = LTTNG_OPTIONAL_INIT_UNSET,
-       };
+       {
+               decltype(rotate_streams.stream_count) stream_count;
+
+               memcpy(&stream_count, payload->data, sizeof(stream_count));
+               rotate_streams.stream_count = be32toh(stream_count);
+       }
+
+       rotate_streams.new_chunk_id = LTTNG_OPTIONAL_INIT_UNSET;
 
        /*
         * Payload size expected given the possible padding lengths in
@@ -2574,13 +2576,11 @@ static ssize_t relay_unpack_rotate_streams_header(
                memcpy(&packed_rotate_streams, payload->data, header_len);
 
                /* Unpack the packed structure to the natively-packed version. */
-               *_rotate_streams = (typeof(*_rotate_streams)) {
-                       .stream_count = be32toh(packed_rotate_streams.stream_count),
-                       .new_chunk_id = (typeof(_rotate_streams->new_chunk_id)) {
-                               .is_set = !!packed_rotate_streams.new_chunk_id.is_set,
-                               .value = be64toh(packed_rotate_streams.new_chunk_id.value),
-                       }
+               _rotate_streams->new_chunk_id = (typeof(_rotate_streams->new_chunk_id)){
+                       .is_set = !!packed_rotate_streams.new_chunk_id.is_set,
+                       .value = be64toh(packed_rotate_streams.new_chunk_id.value),
                };
+               _rotate_streams->stream_count = be32toh(packed_rotate_streams.stream_count);
        } else if (payload->size == expected_payload_size_3_bytes_padding) {
                struct lttcomm_relayd_rotate_streams_3_bytes_padding padded_rotate_streams;
 
@@ -2590,13 +2590,11 @@ static ssize_t relay_unpack_rotate_streams_header(
                memcpy(&padded_rotate_streams, payload->data, header_len);
 
                /* Unpack the 3-byte padded structure to the natively-packed version. */
-               *_rotate_streams = (typeof(*_rotate_streams)) {
-                       .stream_count = be32toh(padded_rotate_streams.stream_count),
-                       .new_chunk_id = (typeof(_rotate_streams->new_chunk_id)) {
-                               .is_set = !!padded_rotate_streams.new_chunk_id.is_set,
-                               .value = be64toh(padded_rotate_streams.new_chunk_id.value),
-                       }
+               _rotate_streams->new_chunk_id = (typeof(_rotate_streams->new_chunk_id)){
+                       .is_set = !!padded_rotate_streams.new_chunk_id.is_set,
+                       .value = be64toh(padded_rotate_streams.new_chunk_id.value),
                };
+               _rotate_streams->stream_count = be32toh(padded_rotate_streams.stream_count);
        } else if (payload->size == expected_payload_size_7_bytes_padding) {
                struct lttcomm_relayd_rotate_streams_7_bytes_padding padded_rotate_streams;
 
@@ -2606,13 +2604,11 @@ static ssize_t relay_unpack_rotate_streams_header(
                memcpy(&padded_rotate_streams, payload->data, header_len);
 
                /* Unpack the 7-byte padded structure to the natively-packed version. */
-               *_rotate_streams = (typeof(*_rotate_streams)) {
-                       .stream_count = be32toh(padded_rotate_streams.stream_count),
-                       .new_chunk_id = (typeof(_rotate_streams->new_chunk_id)) {
-                               .is_set = !!padded_rotate_streams.new_chunk_id.is_set,
-                               .value = be64toh(padded_rotate_streams.new_chunk_id.value),
-                       }
+               _rotate_streams->new_chunk_id = (typeof(_rotate_streams->new_chunk_id)){
+                       .is_set = !!padded_rotate_streams.new_chunk_id.is_set,
+                       .value = be64toh(padded_rotate_streams.new_chunk_id.value),
                };
+               _rotate_streams->stream_count = be32toh(padded_rotate_streams.stream_count);
 
                header_len = sizeof(padded_rotate_streams);
        } else {
index 0db462e7d7fe22d8eb8194c1418e2ca7ab8541e4..c48e2b9e25b97f95e745b4cbd47d667583c0eb26 100644 (file)
@@ -326,6 +326,10 @@ struct ust_app {
        struct lttng_ht *token_to_event_notifier_rule_ht;
 };
 
+/*
+ * Due to a bug in g++ < 7.1, this specialization must be enclosed in the fmt namespace,
+ * see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56480.
+ */
 namespace fmt {
 template <>
 struct formatter<ust_app> : formatter<std::string> {
index 06f24a12050f4942316ba614f5eed2dd390d728d..5dc98032a2900d58f650bdbdbfa213b90c22164f 100644 (file)
@@ -63,6 +63,10 @@ void registry_event_destroy(registry_event *event);
 } /* namespace sessiond */
 } /* namespace lttng */
 
+/*
+ * Due to a bug in g++ < 7.1, this specialization must be enclosed in the fmt namespace,
+ * see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56480.
+ */
 namespace fmt {
 template <>
 struct formatter<lttng::sessiond::ust::registry_event> : formatter<std::string> {
index dace2c027b31a1d9926f63c0fb55f3f4e4f5ed95..020766eb5ddd788dfd7c8114a6bd993e7817cfdf 100644 (file)
@@ -19,6 +19,10 @@ DIAGNOSTIC_IGNORE_DUPLICATED_BRANCHES
 #include <vendor/fmt/core.h>
 DIAGNOSTIC_POP
 
+/*
+ * Due to a bug in g++ < 7.1, this specialization must be enclosed in the fmt namespace,
+ * see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56480.
+ */
 namespace fmt {
 template <>
 struct formatter<std::type_info> : formatter<std::string> {
This page took 0.028795 seconds and 4 git commands to generate.