/* 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. */