[Spice-devel] [PATCH spice-server] build: do not warn about address-of-packed-member

Frediano Ziglio fziglio at redhat.com
Tue May 7 12:08:27 UTC 2019


> 
> On 5/7/19 12:53 PM, Frediano Ziglio wrote:
> >>
> >> The gcc warning address-of-packed-member is new and on by
> >> default in gcc 9.
> >>
> >> Many of the structures sent over the network are packed
> >> and with unaligned fields.
> >>
> >> This breaks the build -- due to -Werror.
> >> Tell gcc to not warn about it.
> >>
> >> Signed-off-by: Uri Lublin <uril at redhat.com>
> > 
> > What are the warning exactly for?
> 
> https://gcc.gnu.org/gcc-9/changes.html
> 
>    -Waddress-of-packed-member, enabled by default, warns about an
>      unaligned pointer value from the address of a packed member
>      of a struct or union.
> 
> 
> > Sure we don't want to fix them?
> 
> I think it would not be too hard to overcome this specific warning, by
> copying the structures, or sending their content instead of a pointer.
> We would still have unaligned access, but not for unaligned pointers.
> 
> It's not easy to change the structures themselves.
> For example if we change SpiceMigrateDataDisplay to make it aligned,
> we likely break migration from older versions.
> 
> Uri.
> 

The warning is not about that. Packed structures are perfectly fine,
the problem is when you cast a pointer with alignment X to a pointer
with aligned Y and Y > X (in the case of packed X == 1).
So you don't have to change the structures definition but the pointers
you are using.
Maybe I have a patch to fix most, if not all, of these (was doing so for
mips where these warning are much stricter).

> > 
> >> ---
> >>   m4/manywarnings.m4 | 1 +
> >>   meson.build        | 1 +
> >>   2 files changed, 2 insertions(+)
> >>
> >> diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4
> >> index 4f701f4ea..20543d4a4 100644
> >> --- a/m4/manywarnings.m4
> >> +++ b/m4/manywarnings.m4
> >> @@ -174,6 +174,7 @@ AC_DEFUN([gl_MANYWARN_ALL_GCC],
> >>       -Wmultichar \
> >>       -Wnarrowing \
> >>       -Wnested-externs \
> >> +    -Wno-address-of-packed-member \
> >>       -Wnonnull \
> >>       -Wnonnull-compare \
> >>       -Wnull-dereference \
> >> diff --git a/meson.build b/meson.build
> >> index 93fbdfff9..b8dde96a8 100644
> >> --- a/meson.build
> >> +++ b/meson.build
> >> @@ -42,6 +42,7 @@ spice_server_global_cflags = ['-DSPICE_SERVER_INTERNAL',
> >>                                 '-Wall',
> >>                                 '-Wextra',
> >>                                 '-Wno-sign-compare',
> >> +                              '-Wno-address-of-packed-member',
> >>                                 '-Wno-unused-parameter']
> >>   
> >>   compiler = meson.get_compiler('c')
> 
> 


More information about the Spice-devel mailing list