From bfd8f297e6af00841d93e807e3e33e5a6e6e226e Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Fri, 28 Jun 2019 07:46:40 +0200 Subject: XDR: Add notes about undefined behaviour --- src/os/object/xdrinput.cc | 4 ++++ src/os/object/xdrstream.cc | 4 ++++ 2 files changed, 8 insertions(+) (limited to 'src/os') diff --git a/src/os/object/xdrinput.cc b/src/os/object/xdrinput.cc index 612244e..e722fdd 100644 --- a/src/os/object/xdrinput.cc +++ b/src/os/object/xdrinput.cc @@ -41,6 +41,8 @@ float XDRInput::get_float() uint32_t i; float f; } v; + // Setting one member of a struct and then reading another is undefined + // behaviour, but works as intended in nearly any (embedded) compiler v.i = get_uint32(); return v.f; } @@ -51,6 +53,8 @@ double XDRInput::get_double() uint64_t i; double d; } v; + // Setting one member of a struct and then reading another is undefined + // behaviour, but works as intended in nearly any (embedded) compiler v.i = get_uint64(); return v.d; } diff --git a/src/os/object/xdrstream.cc b/src/os/object/xdrstream.cc index ad708be..f0c9365 100644 --- a/src/os/object/xdrstream.cc +++ b/src/os/object/xdrstream.cc @@ -74,6 +74,8 @@ XDRStream & XDRStream::operator<<(float number) uint32_t i; float f; } v; + // Setting one member of a struct and then reading another is undefined + // behaviour, but works as intended in nearly any (embedded) compiler v.f = number; *this << v.i; return *this; @@ -85,6 +87,8 @@ XDRStream & XDRStream::operator<<(double number) uint64_t i; double d; } v; + // Setting one member of a struct and then reading another is undefined + // behaviour, but works as intended in nearly any (embedded) compiler v.d = number; *this << v.i; return *this; -- cgit v1.2.3