]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/msg_types.h: do not cast `ceph_entity_name` to `entity_name_t` for printing 26315/head
authorKefu Chai <kchai@redhat.com>
Thu, 7 Feb 2019 13:13:14 +0000 (21:13 +0800)
committerKefu Chai <kchai@redhat.com>
Wed, 13 Feb 2019 16:42:59 +0000 (00:42 +0800)
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>
src/msg/msg_types.h

index 5de7a0c6a75899aaaa8f562a80288dd61931861d..ddb18c6b05d3fb9af123317cb25c84a766cf6ae7 100644 (file)
@@ -139,7 +139,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 {