Re: More weird compiler warnings
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2022-03-26T20:55:49Z
Lists: pgsql-hackers
Hi,
On 2022-03-26 16:23:26 -0400, Tom Lane wrote:
> serinus' experimental gcc whines about a few places in network.c:
>
> ../../../../../pgsql/src/backend/utils/adt/network.c: In function 'inetnot':
> ../../../../../pgsql/src/backend/utils/adt/network.c:1893:34: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
> 1893 | pdst[nb] = ~pip[nb];
> | ~~~~~~~~~^~~~~~~~~~
> ../../../../../pgsql/src/include/utils/inet.h:27:23: note: at offset -1 into destination object 'ipaddr' of size 16
> 27 | unsigned char ipaddr[16]; /* up to 128 bits of address */
> | ^~~~~~
> ../../../../../pgsql/src/include/utils/inet.h:27:23: note: at offset -1 into destination object 'ipaddr' of size 16
>
> The code in question looks like
>
> {
> int nb = ip_addrsize(ip);
> unsigned char *pip = ip_addr(ip);
> unsigned char *pdst = ip_addr(dst);
>
> while (nb-- > 0)
> pdst[nb] = ~pip[nb];
> }
>
> There's nothing actually wrong with this
I reported this to the gcc folks, that's clearly a bug. I suspect that it
might not just cause spurious warnings, but also code generation issues - but
I don't know that part for sure.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104986
> but I'm wondering if we could silence the warning by changing the loop condition to
>
> while (--nb >= 0)
>
> which seems like it might be marginally more readable anyway.
Yes, that looks like it silences it. I modified the small reproducer I had in
that bug (https://godbolt.org/z/ejK9h6von) and the warning vanishes.
Greetings,
Andres Freund
Commits
-
Work around spurious compiler warning in inet operators
- c1266562feeb 12.15 landed
- 25ae3bba7922 11.20 landed
- a7a92738ffce 14.8 landed
- 51cb789aa420 13.11 landed
- fb1132e50fb8 15.3 landed
- 0dc40196f275 16.0 landed