diff --git a/src/makeint.h b/src/makeint.h index c4cc4dfd..70ee2b6d 100644 --- a/src/makeint.h +++ b/src/makeint.h @@ -43,10 +43,18 @@ char *alloca (); /* Some versions of GCC (e.g., 10.x) set the warn_unused_result attribute on __builtin_alloca. This causes alloca(0) to fail and is not easily worked - around so make a helper. + around so avoid it via the preprocessor. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98055 */ -#define free_alloca() do{ void *__p = alloca (0); (void)__p; }while(0) +#if defined (__has_builtin) +# if __has_builtin (__builtin_alloca) +# define free_alloca() +# else +# define free_alloca() alloca (0) +# endif +#else +# define free_alloca() alloca (0) +#endif /* Disable assert() unless we're a maintainer. Some asserts are compute-intensive. */