]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/msg_types.h: do not cast `ceph_entity_name` to `entity_name_t` for printing 31275/head
authorKefu Chai <kchai@redhat.com>
Thu, 7 Feb 2019 13:13:14 +0000 (21:13 +0800)
committerDavid Zafman <dzafman@redhat.com>
Thu, 31 Oct 2019 13:28:04 +0000 (06:28 -0700)
in GCC-9, `-Waddress-of-packed-member` is enabled, so we have warnings like:

src/msg/msg_types.h:142:41: warning: converting a packed 'const
ceph_entity_name' pointer (alignment 1) to a 'const entity_name_t'
pointer (alignment 8) may result in an unaligned pointer value
[-Waddress-of-packed-member]
  142 |   return out << *(const entity_name_t*)&addr;
      |                                         ^~~~

since the alignment of these two structures are different, we cannot
cast a structure with the alignment of 1 to a structure with the
alignment of 8. as the code generated by compiler accessing the members
of alignment 8 won't work with the members of alignment 1, we need to
create a temporary structure for printing it.

Signed-off-by: Kefu Chai <kchai@redhat.com>
(cherry picked from commit f1bfe9dbad669faacfde4e74f38fe92253e5a91e)

src/msg/msg_types.h

index 66ca945a56c45bb06330b37d1152494571ad142d..84625aeff24cb450b0770802f61b92807dc7b59b 100644 (file)
@@ -137,7 +137,7 @@ inline std::ostream& operator<<(std::ostream& out, const entity_name_t& addr) {
     return out << addr.type_str() << '.' << addr.num();
 }
 inline std::ostream& operator<<(std::ostream& out, const ceph_entity_name& addr) {
-  return out << *(const entity_name_t*)&addr;
+  return out << entity_name_t{addr.type, static_cast<int64_t>(addr.num)};
 }
 
 namespace std {