config.mak.dev: suppress C11 extension warning for Clang on Linux#2291
Open
kiranani wants to merge 1 commit into
Open
config.mak.dev: suppress C11 extension warning for Clang on Linux#2291kiranani wants to merge 1 commit into
kiranani wants to merge 1 commit into
Conversation
When building Git with Clang on Linux with DEVELOPER=1, the build fails because Clang treats C11 features used in glibc headers as extensions and raises errors due to -std=gnu99, -pedantic, and -Werror. Specifically, glibc's string.h uses _Generic (a C11 feature) in macros like strchr. When these macros are expanded in Git's C files, Clang warns about them being C11 extensions. GCC does not exhibit this behavior because it suppresses pedantic warnings for macros defined in system headers. To fix this, add -Wno-c11-extensions to DEVELOPER_CFLAGS when using Clang, but restrict it to Linux (uname_S == Linux). This suppresses the warning for glibc headers while keeping the build strict on other platforms (like macOS) to catch accidental C11 usage in Git's own code. Signed-off-by: Shnatu <snatu@google.com>
Author
|
/submit |
|
Submitted as pull.2291.git.git.1778120192298.gitgitgadget@gmail.com To fetch this version into To fetch this version to local tag WARNING: kiranani has no public email address set on GitHub; GitGitGadget needs an email address to Cc: you on your contribution, so that you receive any feedback on the Git mailing list. Go to https://github.com/settings/profile to make your preferred email public to let GitGitGadget know which email address to use. |
|
Pablo wrote on the Git mailing list (how to reply to this email): El jue, 7 may 2026 a las 4:16, Shardul Natu via GitGitGadget
(<gitgitgadget@gmail.com>) escribió:
>
> From: Shnatu <snatu@google.com>
>
> When building Git with Clang on Linux with DEVELOPER=1, the build fails
> because Clang treats C11 features used in glibc headers as extensions
> and raises errors due to -std=gnu99, -pedantic, and -Werror.
Hi Shnatu!
This is already being discussed at:
https://lore.kernel.org/git/20260505-b4-pks-ci-tolerate-glibc-generic-v1-1-5786386fe512@pks.im/T/#u
You might want to check out that thread.
Hope this helps,
--
Pablo
>
> Specifically, glibc's string.h uses _Generic (a C11 feature) in macros
> like strchr. When these macros are expanded in Git's C files, Clang
> warns about them being C11 extensions.
>
> GCC does not exhibit this behavior because it suppresses pedantic
> warnings for macros defined in system headers.
>
> To fix this, add -Wno-c11-extensions to DEVELOPER_CFLAGS when using
> Clang, but restrict it to Linux (uname_S == Linux). This suppresses
> the warning for glibc headers while keeping the build strict on other
> platforms (like macOS) to catch accidental C11 usage in Git's own code.
>
> Signed-off-by: Shnatu <snatu@google.com>
> ---
> config.mak.dev: suppress C11 extension warning for Clang on Linux
>
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2291%2Fkiranani%2Fnext-2-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2291/kiranani/next-2-v1
> Pull-Request: https://github.com/git/git/pull/2291
>
> config.mak.dev | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/config.mak.dev b/config.mak.dev
> index c8dcf78779..f1dcf4329a 100644
> --- a/config.mak.dev
> +++ b/config.mak.dev
> @@ -87,6 +87,9 @@ endif
> # The bug was fixed in Apple clang 12.
> #
> ifneq ($(filter clang1,$(COMPILER_FEATURES)),) # if we are using clang
> +ifeq ($(uname_S),Linux)
> +DEVELOPER_CFLAGS += -Wno-c11-extensions
> +endif
> ifeq ($(uname_S),Darwin) # if we are on darwin
> ifeq ($(filter clang12,$(COMPILER_FEATURES)),) # if version < 12
> DEVELOPER_CFLAGS += -Wno-missing-braces
>
> base-commit: 4f69b47b940100b02630f745a52f9d9850f122b2
> --
> gitgitgadget
> |
|
User |
|
Junio C Hamano wrote on the Git mailing list (how to reply to this email): Pablo <pabloosabaterr@gmail.com> writes:
> El jue, 7 may 2026 a las 4:16, Shardul Natu via GitGitGadget
> (<gitgitgadget@gmail.com>) escribió:
>>
>> From: Shnatu <snatu@google.com>
>>
>> When building Git with Clang on Linux with DEVELOPER=1, the build fails
>> because Clang treats C11 features used in glibc headers as extensions
>> and raises errors due to -std=gnu99, -pedantic, and -Werror.
>
> Hi Shnatu!
> This is already being discussed at:
> https://lore.kernel.org/git/20260505-b4-pks-ci-tolerate-glibc-generic-v1-1-5786386fe512@pks.im/T/#u
>
> You might want to check out that thread.
>
> Hope this helps,
Yes, they aim to solve the same issue, but the approach taken by
this patch to use -Wno-c11-extensions on clang may be with less
damage than the other approach that drops -std=gnu99 from Makefile.
The other approach uses the equivalent of this patch on the meson
side, so it may be doubly so that we should use -Wno-c11-extensions
on both build systems, no?
>> Specifically, glibc's string.h uses _Generic (a C11 feature) in macros
>> like strchr. When these macros are expanded in Git's C files, Clang
>> warns about them being C11 extensions.
>>
>> GCC does not exhibit this behavior because it suppresses pedantic
>> warnings for macros defined in system headers.
>>
>> To fix this, add -Wno-c11-extensions to DEVELOPER_CFLAGS when using
>> Clang, but restrict it to Linux (uname_S == Linux). This suppresses
>> the warning for glibc headers while keeping the build strict on other
>> platforms (like macOS) to catch accidental C11 usage in Git's own code.
>>
>> Signed-off-by: Shnatu <snatu@google.com>
>> ---
>> config.mak.dev: suppress C11 extension warning for Clang on Linux
>>
>> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2291%2Fkiranani%2Fnext-2-v1
>> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2291/kiranani/next-2-v1
>> Pull-Request: https://github.com/git/git/pull/2291
>>
>> config.mak.dev | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/config.mak.dev b/config.mak.dev
>> index c8dcf78779..f1dcf4329a 100644
>> --- a/config.mak.dev
>> +++ b/config.mak.dev
>> @@ -87,6 +87,9 @@ endif
>> # The bug was fixed in Apple clang 12.
>> #
>> ifneq ($(filter clang1,$(COMPILER_FEATURES)),) # if we are using clang
>> +ifeq ($(uname_S),Linux)
>> +DEVELOPER_CFLAGS += -Wno-c11-extensions
>> +endif
>> ifeq ($(uname_S),Darwin) # if we are on darwin
>> ifeq ($(filter clang12,$(COMPILER_FEATURES)),) # if version < 12
>> DEVELOPER_CFLAGS += -Wno-missing-braces
>>
>> base-commit: 4f69b47b940100b02630f745a52f9d9850f122b2
>> --
>> gitgitgadget
>> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
cc: Pablo pabloosabaterr@gmail.com