When compiling libiberty (as part of GDB) with MinGW on MS-Windows, I see the following warning:
gcc -c -DHAVE_CONFIG_H -O2 -gdwarf-4 -g3 -D__USE_MINGW_ACCESS -I. -I./../include -W -Wall -Wwrite-strings -Wc++-compat -Wstrict-prototypes -pedantic -D_GNU_SOURCE ./setenv.c -o setenv.o In file included from ./setenv.c:64:0: ./../include/environ.h:30:1: warning: function declaration isn't a prototype [-Wstrict-prototypes] extern char **environ; ^ This was already reported 4 years ago, here: https://gcc.gnu.org/ml/gcc-patches/2013-03/msg00471.html and was solved back then. But it looks like the offending code was copied to include/environ.h without the fix, and the warning is thus back. The problem is with this code in environ.h: #ifndef HAVE_ENVIRON_DECL # ifdef __APPLE__ # include <crt_externs.h> # define environ (*_NSGetEnviron ()) # else extern char **environ; # endif # define HAVE_ENVIRON_DECL #endif which causes the MinGW compiler to see the declaration of environ, whereas MinGW's stdlib.h has this: #ifdef __MSVCRT__ # define _environ (*__p__environ()) extern _CRTIMP __cdecl __MINGW_NOTHROW char ***__p__environ(void); # define _wenviron (*__p__wenviron()) extern _CRTIMP __cdecl __MINGW_NOTHROW wchar_t ***__p__wenviron(void); #else /* ! __MSVCRT__ */ # ifndef __DECLSPEC_SUPPORTED # define _environ (*_imp___environ_dll) extern char ***_imp___environ_dll; # else /* __DECLSPEC_SUPPORTED */ # define _environ _environ_dll __MINGW_IMPORT char ** _environ_dll; # endif /* __DECLSPEC_SUPPORTED */ #endif /* ! __MSVCRT__ */ #define environ _environ Can this be fixed again, please? The solution, as back then, is this: #ifndef HAVE_ENVIRON_DECL # ifdef __APPLE__ # include <crt_externs.h> # define environ (*_NSGetEnviron ()) # else # ifndef environ extern char **environ; # endif # endif # define HAVE_ENVIRON_DECL #endif Thanks.