On 7/28/26 6:38 AM, Bradley Morgan wrote:
On 28 July 2026 11:31:23 BST, Mikhail Karpov <[email protected]>
wrote:
Hello,
When compiling GNU/Hurd, quite a few warnings were generated. I fixed some
of
them, and now it compiles with flags:
CFLAGS += -std=gnu99 $(gnu89-inline-CFLAGS) -Wall -Werror \
-Werror=old-style-definition \
-Werror=implicit-function-declaration \
-Werror=strict-prototypes \
-g -O3 -fno-strict-aliasing $($*-CFLAGS)
Completes successfully.
I have a few questions:
1. Is this flag even necessary?
2. Should I remove the -fno-strict-aliasing flag? I didn't remove it, so
the
-Wstrict-aliasing warnings are ignored.
3. Should I add the -Wextra flag?
I agree that warnings are sometimes annoying, but I believe that catching
a
real error at compile time can save a lot of time searching for it in the
code. However, I'd still like to hear people's opinions on this matter.
Now on to the patches.
I'm not sure about some of them, and they probably require more time to
study. For example, in pfinet/linux-src/include/linux/in_route.h there was
#define RTCF_NAT (RTCF_DNAT|RTCF_SNAT) (0x08000000|0x00800000), but
previously in tools-i686/include/net/route.h there was also #define
RTCF_NAT
0x00800000. The same problem occurs with #define NET_MAX_FILTER 512 from
libbpf/bpf_impl.h and #define NET_MAX_FILTER 128 from
tools-i686/include/device/net_status.h.
I simply removed unused variables and moved unused functions to #if 0.
pfinet encountered a false-positive warning -Werror=array-bounds in the
queue
handling functions. I couldn't find a simple solution, so I simply added
-Wno-array-bounds to the pfinet Makefile.
And a few places that were unclear to me:
The -Werror=maybe-uninitialized warning was in
pfinet/linux-src/net/ipv4/igmp.c because im->loaded = 0 was only set
within
CONFIG_IP_MULTICAST, and the igmp_group_added function checked im->loaded
for 0 when it was called.
The -Werror=address warning was in pfinet/linux-src/net/ipv4/devinet.c
because ifa->ifa_label is an array, not a pointer, so the if
(ifa->ifa_label)
condition is always true. I removed this check and left only
strcpy(ifr.ifr_name, ifa->ifa_label).
The Werror=shift-overflow warning was in the libps/ps.h file: #define
PSTAT_USER_BASE 0x20000000, and #define W_PSTAT_LOGIN (PSTAT_USER_BASE <<
3),
so the result didn't fit into the int type. I added the ULL suffix to
0x20000000 and that solved the problem.
The fixing-structure-declaration-inside-parameter-list.patch patch applies
to
the libtirpc-1.3.6/tirpc/rpc/rpc_msg.h file. It must be applied
separately.
Thanks,
Hi, Where's the patch?
Adding -WError is relatively a non issue, (as the user could build with
W1,or W128 if they are feeling crazy) Forcing the user to build with
warnings as errors makes the build(er) responsible for fixing
someone elses BS
So I am not a Hurd developer, but I think this is a good idea to turn on
WError be default. Didn't Linus just turn on WError by default for the
kernel? I could be wrong.
Also, GCC 14 is WAY more strict about how you compile C (1). I feel
like the GCC developers are making C more strict to combat the
competition from rust?
1) https://gcc.gnu.org/gcc-14/porting_to.html I learned about that
url via reading guix's blog post:
https://guix.gnu.org/en/blog/2026/the-64-bit-hurd/
Joshua
If I see the patch, I'll have a look 😀
Thanks!