08.02.2015 17:40, Stefan Weil wrote: > Casting to a union type is a gcc (and clang) extension. Other compilers > might not support it. This is not a problem today, but the type casts > can be removed easily. Smatch now no longer complains like before: > > linux-user/syscall.c:3190:18: warning: cast to non-scalar > linux-user/syscall.c:7348:44: warning: cast to non-scalar > > Cc: Riku Voipio <riku.voi...@iki.fi> > Signed-off-by: Stefan Weil <s...@weilnetz.de> > --- > linux-user/syscall.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index 852308e..ec137db 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -2663,8 +2663,9 @@ static inline abi_long host_to_target_semarray(int > semid, abi_ulong target_addr, > } > > static inline abi_long do_semctl(int semid, int semnum, int cmd, > - union target_semun target_su) > + abi_ulong target_arg) > { > + union target_semun target_su; > union semun arg; > struct semid_ds dsarg; > unsigned short *array = NULL; > @@ -2673,6 +2674,8 @@ static inline abi_long do_semctl(int semid, int semnum, > int cmd, > abi_long err; > cmd &= 0xff; > > + target_su.buf = target_arg;
Can we use c99 initializers at declaration, something like union target_semun target_su = { .buf = target_arg } ? Or is it also some gcc/clang extension? :) But I'd like to hear from Riku at least... Thanks, /mjt