Hi Eli, > A recent MinGW runtime changed its definition of alloca from an > inline function to a macro. As result, there's a warning when > compiling Gnulib's malloca.c: > > CC malloca.o > In file included from malloca.h:21, > from malloca.c:22: > ./alloca.h:46: warning: "alloca" redefined > 46 | # define alloca __builtin_alloca > | > In file included from ./alloca.h:44, > from malloca.h:21, > from malloca.c:22: > d:\usr\include\alloca.h:81: note: this is the location of the previous > definition > 81 | #define alloca( __request ) __builtin_alloca( __request ) > | > > Proposed patch is below. Thanks.
Thanks for the report. I like your patch. It is better than the '#undef alloca' solution that I had considered before. 2020-06-29 Bruno Haible <br...@clisp.org> alloca-opt: Fix warning on mingw. Reported and solution by Eli Zaretskii <e...@gnu.org> in <https://lists.gnu.org/archive/html/bug-gnulib/2020-06/msg00069.html>. * lib/alloca.in.h: On mingw, include <alloca.h> and then test again whether alloca is defined. diff --git a/lib/alloca.in.h b/lib/alloca.in.h index 73516ca..beb022c 100644 --- a/lib/alloca.in.h +++ b/lib/alloca.in.h @@ -35,13 +35,16 @@ */ #ifndef alloca + /* Some version of mingw have an <alloca.h> that causes trouble when + included after 'alloca' gets defined as a macro. As a workaround, + include this <alloca.h> first and define 'alloca' as a macro afterwards + if needed. */ +# if defined __GNUC__ && (defined _WIN32 && ! defined __CYGWIN__) && @HAVE_ALLOCA_H@ +# include_next <alloca.h> +# endif +#endif +#ifndef alloca # ifdef __GNUC__ - /* Some version of mingw have an <alloca.h> that causes trouble when - included after 'alloca' gets defined as a macro. As a workaround, include - this <alloca.h> first and define 'alloca' as a macro afterwards. */ -# if (defined _WIN32 && ! defined __CYGWIN__) && @HAVE_ALLOCA_H@ -# include_next <alloca.h> -# endif # define alloca __builtin_alloca # elif defined _AIX # define alloca __alloca