Paul Eggert wrote: > I see the problem on Fedora 33 as well. It doesn't appear to be a GCC > bug. unistd.h's declaration expands to this: > > extern int getgroups (int __size, __gid_t __list[]) __attribute__ > ((__nothrow__, __leaf__)) __attribute__ ((__access__ (__write_only__, 2, > 1))); > > and the "__write_only__, 2, 1" means that getgroup's 1st argument > specifies the number of items in the 2nd-argument array, which means if > the 1st argument is -1 the call is invalid. This checking is enabled by > -Wstringop-overflow=2 which is the GCC default in 10.2.1.
I see. Thanks for explaining. Now that makes sense. 2021-01-02 Bruno Haible <br...@clisp.org> getgroups test: Avoid warning with glibc >= 2.32 and gcc >= 10. Reported by Bernhard Voelker <m...@bernhard-voelker.de> in <https://lists.gnu.org/archive/html/bug-gnulib/2020-12/msg00090.html>. * tests/test-getgroups.c: Silence gcc warnings of type -Wstringop-overflow. diff --git a/tests/test-getgroups.c b/tests/test-getgroups.c index 14e0e8f..dcea033 100644 --- a/tests/test-getgroups.c +++ b/tests/test-getgroups.c @@ -30,6 +30,15 @@ SIGNATURE_CHECK (getgroups, int, (int, gid_t[])); #include "macros.h" +/* Tell GCC not to warn about the specific edge cases tested here. + GCC >= 10 with glibc >= 2.32 would otherwise trigger warnings, even without + any -W options, because getgroups() is declared with + __attribute__ ((__access__ (__write_only__, 2, 1))) + */ +#if __GNUC__ >= 7 +# pragma GCC diagnostic ignored "-Wstringop-overflow" +#endif + int main (int argc, char **argv _GL_UNUSED) {