From: Ramsay Jones Date: Mon, 27 Apr 2020 16:28:03 GMT Subject: Re: [PATCH v2 2/4] compat/regex: include alloca.h before undef it Message-ID: In-Reply-To: <20200427010821.GD14800@danh.dev> On 27/04/2020 02:08, Danh Doan wrote: [snip] >>> musl's alloca.h is available here: >>> >>> https://git.musl-libc.org/cgit/musl/tree/include/alloca.h >> >> Hmm, OK, so that partly explains the problem. I wonder if the >> musl guys would accept a bug report? > > I don't think they have a policy of no `#undef` whatsoever. That's fair enough. > But, I think they're picky when come to C-correctly and > POSIX-correctly. > Does C or POSIX define alloca(3) at all? No alloca() is not in either the POSIX or C standard(s). This was an extension from the early days of BSD Unix. For some reason, I thought you had to explicitly '#include ' to use it, but it appears that (by default) you get a bonus include from the header, unless you restrict the headers using the various macros and/or compiler command-line options. As it happens, even on glibc systems, the header is included by the header, unless you take steps to suppress it. So, we would have had the same issue, if it wasn't for the aforementioned '#undef alloca' the the glibc header file. When I need to look at pp output, while debugging things like this, I cherry-pick a patch to the Makefile: $ git diff diff --git a/Makefile b/Makefile index 6d5cee270c..cd8753bf54 100644 --- a/Makefile +++ b/Makefile @@ -2423,6 +2423,9 @@ $(ASM_OBJ): %.o: %.S GIT-CFLAGS $(missing_dep_dirs) %.s: %.c GIT-CFLAGS FORCE $(QUIET_CC)$(CC) -o $@ -S $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $< +%.i: %.c GIT-CFLAGS FORCE + $(QUIET_CC)$(CC) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) -E $< >$*.i + ifdef USE_COMPUTED_HEADER_DEPENDENCIES # Take advantage of gcc's on-the-fly dependency generation # See . @@ -2474,7 +2477,7 @@ http-walker.sp http-walker.s http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT endif ifdef NO_REGEX -compat/regex/regex.sp compat/regex/regex.o: EXTRA_CPPFLAGS = \ +compat/regex/regex.i compat/regex/regex.sp compat/regex/regex.o: EXTRA_CPPFLAGS = \ -DGAWK -DNO_MBSUPPORT endif $ [The second hunk above is not actually part of the cherry-picked patch, but I needed it in this instance to get GAWK and NO_MBSUPPORT passed to the compiler!] $ make NO_REGEX=1 compat/regex/regex.i CC compat/regex/regex.i $ vim compat/regex/regex.i $ ... which shows is indeed being #included from . [it is protected by a __USE_MISC pp variable, but I didn't bother to track it down! ;-)] ATB, Ramsay Jones