[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: toolchain/53618: bogus warnings from printf %u and ntohs with -O1
The following reply was made to PR toolchain/53618; it has been noted by GNATS.
From: Hal Murray <murray+net%ip-64-139-1-69.sjc.megapath.net@localhost>
Cc: toolchain-manager%netbsd.org@localhost, gnats-admin%netbsd.org@localhost,
Subject: Re: toolchain/53618: bogus warnings from printf %u and ntohs with -O1
Date: Wed, 19 Sep 2018 01:28:10 -0700
> This is how it traditionally worked. It does not even depend on
> optimization level, on big endian CPUs all ntoh* are no-ops.
Thanks, but I don't understand what you are trying to tell me.
I'm running on X86 so the no-op case shouldn't be happening. Even if it did
happen, the argument to ntohs is an unsigned so it shouldn't complain.
There are 4 printfs. The first is there to make sure that I've got the
command line switches set to generate this type of warning. The second is
there because I was curious.
The last 2 are the interesting ones. There are no complaints without -O1, but
warnings with -O1.
If I actually run the code, both produce the same output and it is what I
3328 == 0xD00
> this is because the definition of ntohs is
> #define ntohs(x) (x)
> in sys/endian.h.
That's the BYTE_ORDER == BIG_ENDIAN case
I'm running on X86 which is LITTLE_ENDIAN
#define ntohs(x) bswap16(__CAST(uint16_t, (x)))
These are my opinions. I hate spam.
Main Index |
Thread Index |