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

Re: [PATCH v2 1/1] git-compat-util: add a test balloon for C99 support

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Nov 16, 2021, 19:44 UTC
Message-ID
<a1961817-27d4-5be5-3b6f-231b77d3b916@gmail.com>
In-Reply-To
<YZOh370ZMMqSADUE@coredump.intra.peff.net>
On 16/11/2021 12:19, Jeff King wrote:
Show 12 quoted lines
> On Tue, Nov 16, 2021 at 02:12:41AM +0000, brian m. carlson wrote:
> 
>> The C99 standard was released in January 1999, now 22 years ago.  It
>> provides a variety of useful features, including variadic arguments for
>> macros, declarations after statements, variable length arrays, and a
>> wide variety of other useful features, many of which we already use.
> 
> I like the idea of being able to assume C99. And I know this list is
> just "here are some things we could do". But I'd like to express caution
> over variable length arrays. We've already had problems with alloca()
> causing stack exhaustion, and VLAs are basically the same thing. And the
> worst part is there's no way to recover; you just get a segfault.

I agree with this, also C11 and later make variable length array support an optional compiler feature which is another reason not to rely on them.

Best Wishes
Phillip
Show 44 quoted lines
>> Let's add a test balloon to git-compat-util.h to see if anyone is using
>> an older compiler.  We'll add a comment telling people how to enable
>> this functionality on GCC and Clang, even though modern versions of both
>> will automatically do the right thing, and ask people still experiencing
>> a problem to report that to us on the list.
>>
>> Note that C89 compilers don't provide the __STDC_VERSION__ macro, so we
>> use a well-known hack of using "- 0".  On compilers with this macro, it
>> doesn't change the value, and on C89 compilers, the macro will be
>> replaced with nothing, and our value will be 0.
> 
> This part makes sense to me. The macro check will complain if any
> compiler isn't C99. But this hunk seems like it is going to cause
> headaches:
> 
>> diff --git a/Makefile b/Makefile
>> index 12be39ac49..893d533d22 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -1204,7 +1204,7 @@ endif
>>   # Set CFLAGS, LDFLAGS and other *FLAGS variables. These might be
>>   # tweaked by config.* below as well as the command-line, both of
>>   # which'll override these defaults.
>> -CFLAGS = -g -O2 -Wall
>> +CFLAGS = -g -O2 -Wall -std=gnu99
>>   LDFLAGS =
>>   CC_LD_DYNPATH = -Wl,-rpath,
>>   BASIC_CFLAGS = -I.
> 
> Do most compilers understand -std=gnu99? It seems like we're breaking
> the out-of-the-box build for everything that isn't gcc or clang.
> 
> I understand that older versions of gcc (prior to 5.1.0, from my
> digging) default to gnu89, and so they would be broken _without_ this.
> So it is a tradeoff one way or the other. But somehow this seems
> backwards to me. We should assume that modern compilers support C99 out
> of the box, and put the burden on older ones to trigger C99 support in
> whatever non-portable way they need.
> 
> I also checked clang, and it looks like it has defaulted to gnu11 since
> clang-7 (I'm not sure about clang-6; its documentation wasn't clear).
> 
> -Peff
> 
Previous: Junio C HamanoNext: brian m. carlson
Message 25 of 32 in “Add a test balloon for C99”
  1. 0/1 Add a test balloon for C99brian m. carlson, Nov 14, 2021
  2. 1/1 git-compat-util: add a test balloon for C99 supportbrian m. carlson, Nov 14, 2021
  3. Ævar Arnfjörð BjarmasonNov 15, 2021
  4. brian m. carlsonNov 15, 2021
  5. Eric SunshineNov 15, 2021
  6. brian m. carlsonNov 16, 2021
  7. Johannes SchindelinNov 22, 2021
  8. brian m. carlsonNov 14, 2021
  9. Junio C HamanoNov 15, 2021
  10. brian m. carlsonNov 15, 2021
  11. Junio C HamanoNov 16, 2021
  12. brian m. carlsonNov 17, 2021
  13. 0/1 Add a test balloon for C99 supportbrian m. carlson, Nov 16, 2021
  14. 1/1 git-compat-util: add a test balloon for C99 supportbrian m. carlson, Nov 16, 2021
  15. Jeff KingNov 16, 2021
  16. Ævar Arnfjörð BjarmasonNov 16, 2021
  17. Jeff KingNov 16, 2021
  18. brian m. carlsonNov 17, 2021
  19. Jeff KingNov 17, 2021
  20. brian m. carlsonNov 17, 2021
  21. Carlo ArenasNov 17, 2021
  22. Ævar Arnfjörð BjarmasonNov 18, 2021
  23. Junio C HamanoNov 18, 2021
  24. Junio C HamanoNov 17, 2021
  25. Phillip WoodNov 16, 2021
  26. brian m. carlsonNov 17, 2021
  27. Jeff KingNov 17, 2021
  28. Microsoft's C language policy (was: [PATCH 0/1] Add a test balloon for C99)Ævar Arnfjörð Bjarmason, Nov 30, 2021
  29. brian m. carlsonNov 30, 2021
  30. 0/1 Add a test balloon for C99 supportbrian m. carlson, Dec 1, 2021
  31. 1/1 git-compat-util: add a test balloon for C99 supportbrian m. carlson, Dec 1, 2021
  32. Johannes SchindelinDec 2, 2021

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.