git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH RESEND] sane-ctype: fix compiler error on Amazon Linux 2

From
Patrick Steinhardt <ps@pks.im>
Date
Jul 10, 2025, 09:14 UTC
Message-ID
<aG-EfIfyXxmS_x22@pks.im>
In-Reply-To
<20250710-pks-ctype-v1-1-1db7e7568ea2@pks.im>
On Thu, Jul 10, 2025 at 11:12:40AM +0200, Patrick Steinhardt wrote:
Show 63 quoted lines
> Compiling Git fails on Amazon Linux 2 when using GCC 7.3.1 with the
> following compiler error:
> 
>     In file included from compat/posix.h:449:0,
>                      from git-compat-util.h:26,
>                      from daemon.c:3:
>     compat/../sane-ctype.h:29:60: error: expected expression before ']' token
>      #define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0)
>                                                                 ^
>     compat/../sane-ctype.h:29:72: error: expected ')' before '!=' token
>      #define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0)
>                                                                             ^
>     compat/../sane-ctype.h:29:60: error: expected expression before ']' token
>      #define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0)
>                                                                 ^
>     ... lots of similar lines ...
> 
>     compat/../sane-ctype.h:45:50: error: expected declaration specifiers or '...' before numeric constant
>      #define toupper(x) sane_case((unsigned char)(x), 0)
>                                                       ^
>     /usr/include/ctype.h:142:12: error: expected identifier or '(' before 'int'
>      extern int isascii (int __c) __THROW;
>                 ^
>     compat/../sane-ctype.h:30:26: error: expected ')' before '&' token
>      #define isascii(x) (((x) & ~0x7f) == 0)
>                               ^
>     compat/../sane-ctype.h:30:35: error: expected ')' before '==' token
>      #define isascii(x) (((x) & ~0x7f) == 0)
>                                        ^
>     In file included from /usr/include/features.h:423:0,
>                      from /usr/include/unistd.h:25,
>                      from compat/posix.h:90,
>                      from git-compat-util.h:26,
>                      from daemon.c:3:
>     compat/../sane-ctype.h:44:30: error: expected declaration specifiers or '...' before '(' token
>      #define tolower(x) sane_case((unsigned char)(x), 0x20)
>                                   ^
>     compat/../sane-ctype.h:44:50: error: expected declaration specifiers or '...' before numeric constant
>      #define tolower(x) sane_case((unsigned char)(x), 0x20)
>                                                       ^
>     compat/../sane-ctype.h:45:30: error: expected declaration specifiers or '...' before '(' token
>      #define toupper(x) sane_case((unsigned char)(x), 0)
>                                   ^
>     compat/../sane-ctype.h:45:50: error: expected declaration specifiers or '...' before numeric constant
>      #define toupper(x) sane_case((unsigned char)(x), 0)
>                                                       ^
> 
> This error bisect back to 75a044f748 (git-compat-util.h: split out
> POSIX-emulating bits, 2025-02-18), where lots of bits got split out of
> "git-compat-util.h" into a new "compat/posix.h" header.
> 
> The compiler error isn't immediately obvious, doubly so because the
> actual errors are ~3x as long as the above snippet. But what happens
> here is that we transitively include <ctype.h> after we have included
> our own "sane-ctype.h" header. Consequently, the function declarations
> that exist in <ctype.h> for isascii(3p) et al will be mangled by our
> macros of the same type. The result is of course completely broken.
> 
> It's unclear why this issue only happens on Amazon Linux 2. My guess is
> that it's either specific to the compiler version or specific to the
> glibc version. We don't explicitly include <ctypes.h> anywhere, but it's
> being transitively included. So chances are that later versions of the
> toolchain reorganized their headers so

Hrmpf, what's going on here? Both this email and the first one at [1] are getting truncated... I'll debug.

Patrick
[1]: <20250710-pks-ctype-v1-1-c668b308d628@pks.im>
Previous: Patrick SteinhardtNext: Patrick Steinhardt
Message 2 of 7 in “sane-ctype: fix compiler error on Amazon Linux 2”
  1. sane-ctype: fix compiler error on Amazon Linux 2Patrick Steinhardt, Jul 10, 2025
  2. Patrick SteinhardtJul 10, 2025
  3. Patrick SteinhardtJul 10, 2025
  4. Toon ClaesJul 10, 2025
  5. Junio C HamanoJul 10, 2025
  6. Patrick SteinhardtJul 11, 2025
  7. Junio C HamanoJul 11, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.