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

Re: [PATCH 2/2] C99 support: remove non-HAVE_VARIADIC_MACROS code

From
Jonathan Nieder <jrnieder@gmail.com>
Date
May 21, 2021, 02:50 UTC
Message-ID
<YKcf95uQ1W7COSsf@google.com>
In-Reply-To
<patch-2.2-f12e3cad57d-20210412T105422Z-avarab@gmail.com>
Hi,
Ævar Arnfjörð Bjarmason wrote:
Show 8 quoted lines
> Remove code that depend on HAVE_VARIADIC_MACROS not being set. Since
> 765dc168882 (git-compat-util: always enable variadic macros,
> 2021-01-28) we've unconditionally defined it to be true, and that
> change went out with v2.31.0. This should have given packagers enough
> time to discover whether variadic macros were an issue.
>
> It seems that they weren't, so let's update the coding guidelines and
> remove all the fallback code for the non-HAVE_VARIADIC_MACROS case.

As discussed in the rest of this thread, that's a pretty short time, so while I would love to be able to use variadic macros unconditionally, I think we'd need a different rationale.

That said, I want us to be ready the moment external conditions allow. Ideally we want it to be as simple as

	git grep --name-only -e HAVE_VARIADIC_MACROS |
	xargs unifdef -m -DHAVE_VARIADIC_MACROS=1

plus removing the #define; is there anything we need to do in advance to make that work well? Let's see.

[...]
Show 13 quoted lines
> --- a/trace.h
> +++ b/trace.h
> @@ -126,66 +126,6 @@ void trace_command_performance(const char **argv);
>  void trace_verbatim(struct trace_key *key, const void *buf, unsigned len);
>  uint64_t trace_performance_enter(void);
>  
> -#ifndef HAVE_VARIADIC_MACROS
> -
> -/**
> - * Prints a formatted message, similar to printf.
> - */
> -__attribute__((format (printf, 1, 2)))
> -void trace_printf(const char *format, ...);

This removes the documentation for these functions and doesn't add it back on the #else side. So I think we'd want the following preparatory patch.

Thanks, Jonathan

-- >8 --
Subject: trace: move comments to variadic macro variant of trace functions

Nowadays compilers not having variadic macros are the exception. Move API documentation to the declarations used in the common case.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 trace.h | 79 +++++++++++++++++++++++++++------------------------------
 1 file changed, 38 insertions(+), 41 deletions(-)
diff --git a/trace.h b/trace.h
index 0dbbad0e41..fc7eb0bc72 100644
--- a/trace.h
+++ b/trace.h
@@ -128,56 +128,22 @@ uint64_t trace_performance_enter(void);
 
 #ifndef HAVE_VARIADIC_MACROS
 
-/**
- * Prints a formatted message, similar to printf.
- */
+/* Fallback implementation that does not add file:line. */
+
 __attribute__((format (printf, 1, 2)))
 void trace_printf(const char *format, ...);
 
 __attribute__((format (printf, 2, 3)))
 void trace_printf_key(struct trace_key *key, const char *format, ...);
 
-/**
- * Prints a formatted message, followed by a quoted list of arguments.
- */
 __attribute__((format (printf, 2, 3)))
 void trace_argv_printf(const char **argv, const char *format, ...);
 
-/**
- * Prints the strbuf, without additional formatting (i.e. doesn't
- * choke on `%` or even `\0`).
- */
 void trace_strbuf(struct trace_key *key, const struct strbuf *data);
 
-/**
- * Prints elapsed time (in nanoseconds) if GIT_TRACE_PERFORMANCE is enabled.
- *
- * Example:
- * ------------
- * uint64_t t = 0;
- * for (;;) {
- * 	// ignore
- * t -= getnanotime();
- * // code section to measure
- * t += getnanotime();
- * // ignore
- * }
- * trace_performance(t, "frotz");
- * ------------
- */
 __attribute__((format (printf, 2, 3)))
 void trace_performance(uint64_t nanos, const char *format, ...);
 
-/**
- * Prints elapsed time since 'start' if GIT_TRACE_PERFORMANCE is enabled.
- *
- * Example:
- * ------------
- * uint64_t start = getnanotime();
- * // code section to measure
- * trace_performance_since(start, "foobar");
- * ------------
- */
 __attribute__((format (printf, 2, 3)))
 void trace_performance_since(uint64_t start, const char *format, ...);
 
@@ -186,11 +152,6 @@ void trace_performance_leave(const char *format, ...);
 
 #else
 
-/*
- * Macros to add file:line - see above for C-style declarations of how these
- * should be used.
- */
-
 /*
  * TRACE_CONTEXT may be set to __FUNCTION__ if the compiler supports it. The
  * default is __FILE__, as it is consistent with assert(), and static function
@@ -227,8 +188,14 @@ void trace_performance_leave(const char *format, ...);
 					    __VA_ARGS__);		    \
 	} while (0)
 
+/**
+ * Prints a formatted message, similar to printf.
+ */
 #define trace_printf(...) trace_printf_key(&trace_default_key, __VA_ARGS__)
 
+/**
+ * Prints a formatted message, followed by a quoted list of arguments.
+ */
 #define trace_argv_printf(argv, ...)					    \
 	do {								    \
 		if (trace_pass_fl(&trace_default_key))			    \
@@ -236,12 +203,32 @@ void trace_performance_leave(const char *format, ...);
 					    argv, __VA_ARGS__);		    \
 	} while (0)
 
+/**
+ * Prints the strbuf, without additional formatting (i.e. doesn't
+ * choke on `%` or even `\0`).
+ */
 #define trace_strbuf(key, data)						    \
 	do {								    \
 		if (trace_pass_fl(key))					    \
 			trace_strbuf_fl(TRACE_CONTEXT, __LINE__, key, data);\
 	} while (0)
 
+/**
+ * Prints elapsed time (in nanoseconds) if GIT_TRACE_PERFORMANCE is enabled.
+ *
+ * Example:
+ * ------------
+ * uint64_t t = 0;
+ * for (;;) {
+ * 	// ignore
+ * t -= getnanotime();
+ * // code section to measure
+ * t += getnanotime();
+ * // ignore
+ * }
+ * trace_performance(t, "frotz");
+ * ------------
+ */
 #define trace_performance(nanos, ...)					    \
 	do {								    \
 		if (trace_pass_fl(&trace_perf_key))			    \
@@ -249,6 +236,16 @@ void trace_performance_leave(const char *format, ...);
 					     __VA_ARGS__);		    \
 	} while (0)
 
+/**
+ * Prints elapsed time since 'start' if GIT_TRACE_PERFORMANCE is enabled.
+ *
+ * Example:
+ * ------------
+ * uint64_t start = getnanotime();
+ * // code section to measure
+ * trace_performance_since(start, "foobar");
+ * ------------
+ */
 #define trace_performance_since(start, ...)				    \
 	do {								    \
 		if (trace_pass_fl(&trace_perf_key))			    \
-- 
2.31.1.818.g46aad6cb9e
Previous: Jeff KingNext: Ævar Arnfjörð Bjarmason
Message 26 of 71 in “SHA-256 / SHA-1 interop, part 1”
  1. 00/15 SHA-256 / SHA-1 interop, part 1brian m. carlson, Apr 10, 2021
  2. 01/15 sha1-file: allow hashing objects literally with any algorithmbrian m. carlson, Apr 10, 2021
  3. Denton LiuApr 15, 2021
  4. brian m. carlsonApr 15, 2021
  5. Ævar Arnfjörð BjarmasonApr 16, 2021
  6. Junio C HamanoApr 16, 2021
  7. 04/15 Always use oidread to read into struct object_idbrian m. carlson, Apr 10, 2021
  8. 05/15 hash: add a function to finalize object IDsbrian m. carlson, Apr 10, 2021
  9. 07/15 builtin/pack-redundant: avoid casting buffers to struct object_idbrian m. carlson, Apr 10, 2021
  10. 08/15 cache: compare the entire buffer for struct object_idbrian m. carlson, Apr 10, 2021
  11. Chris TorekApr 11, 2021
  12. Ævar Arnfjörð BjarmasonApr 11, 2021
  13. brian m. carlsonApr 11, 2021
  14. 10/15 hash: provide per-algorithm null OIDsbrian m. carlson, Apr 10, 2021
  15. Junio C HamanoApr 11, 2021
  16. brian m. carlsonApr 11, 2021
  17. 09/15 hash: set and copy algo field in struct object_idbrian m. carlson, Apr 10, 2021
  18. Ævar Arnfjörð BjarmasonApr 11, 2021
  19. brian m. carlsonApr 11, 2021
  20. Ævar Arnfjörð BjarmasonApr 11, 2021
  21. brian m. carlsonApr 11, 2021
  22. 0/2 C99: harder dependency on variadic macrosÆvar Arnfjörð Bjarmason, Apr 12, 2021
  23. 2/2 C99 support: remove non-HAVE_VARIADIC_MACROS codeÆvar Arnfjörð Bjarmason, Apr 12, 2021
  24. Junio C HamanoApr 12, 2021
  25. Jeff KingApr 13, 2021
  26. Jonathan NiederMay 21, 2021
  27. 1/2 git-compat-util.h: clarify comment on GCC-specific codeÆvar Arnfjörð Bjarmason, Apr 12, 2021
  28. Jeff KingApr 13, 2021
  29. Junio C HamanoApr 13, 2021
  30. Jeff KingApr 14, 2021
  31. Ævar Arnfjörð BjarmasonApr 14, 2021
  32. Jeff KingApr 14, 2021
  33. Jonathan NiederMay 21, 2021
  34. Bagas SanjayaApr 12, 2021
  35. Ævar Arnfjörð BjarmasonApr 12, 2021
  36. brian m. carlsonApr 12, 2021
  37. Junio C HamanoApr 12, 2021
  38. 0/2 C99: remove hardcoded-out !HAVE_VARIADIC_MACROS codeÆvar Arnfjörð Bjarmason, Jan 28, 2022
  39. 1/2 git-compat-util.h: clarify GCC v.s. C99-specific in commentÆvar Arnfjörð Bjarmason, Jan 28, 2022
  40. 2/2 C99: remove hardcoded-out !HAVE_VARIADIC_MACROS codeÆvar Arnfjörð Bjarmason, Jan 28, 2022
  41. Junio C HamanoJan 28, 2022
  42. 0/3 C99: remove dead !HAVE_VARIADIC_MACROS codeÆvar Arnfjörð Bjarmason, Feb 19, 2022
  43. 1/3 git-compat-util.h: clarify GCC v.s. C99-specific in commentÆvar Arnfjörð Bjarmason, Feb 19, 2022
  44. 3/3 trace.h: remove never-used TRACE_CONTEXTÆvar Arnfjörð Bjarmason, Feb 19, 2022
  45. Junio C HamanoFeb 20, 2022
  46. Ævar Arnfjörð BjarmasonFeb 20, 2022
  47. Junio C HamanoFeb 20, 2022
  48. 2/3 C99: remove hardcoded-out !HAVE_VARIADIC_MACROS codeÆvar Arnfjörð Bjarmason, Feb 19, 2022
  49. 0/2 C99: remove dead !HAVE_VARIADIC_MACROS codeÆvar Arnfjörð Bjarmason, Feb 21, 2022
  50. 1/2 git-compat-util.h: clarify GCC v.s. C99-specific in commentÆvar Arnfjörð Bjarmason, Feb 21, 2022
  51. 2/2 C99: remove hardcoded-out !HAVE_VARIADIC_MACROS codeÆvar Arnfjörð Bjarmason, Feb 21, 2022
  52. Junio C HamanoApr 12, 2021
  53. Ævar Arnfjörð BjarmasonApr 12, 2021
  54. 11/15 builtin/show-index: set the algorithm for object IDsbrian m. carlson, Apr 10, 2021
  55. 12/15 commit-graph: don't store file hashes as struct object_idbrian m. carlson, Apr 10, 2021
  56. 15/15 hex: print objects using the hash algorithm memberbrian m. carlson, Apr 10, 2021
  57. 02/15 builtin/hash-object: allow literally hashing with a given algorithmbrian m. carlson, Apr 10, 2021
  58. Ævar Arnfjörð BjarmasonApr 11, 2021
  59. brian m. carlsonApr 11, 2021
  60. Ævar Arnfjörð BjarmasonApr 16, 2021
  61. Ævar Arnfjörð BjarmasonApr 16, 2021
  62. 03/15 cache: add an algo member to struct object_idbrian m. carlson, Apr 10, 2021
  63. Ævar Arnfjörð BjarmasonApr 11, 2021
  64. brian m. carlsonApr 11, 2021
  65. Derrick StoleeApr 13, 2021
  66. brian m. carlsonApr 14, 2021
  67. Ævar Arnfjörð BjarmasonApr 15, 2021
  68. brian m. carlsonApr 15, 2021
  69. 06/15 Use the final_oid_fn to finalize hashing of object IDsbrian m. carlson, Apr 10, 2021
  70. 13/15 builtin/pack-objects: avoid using struct object_id for pack hashbrian m. carlson, Apr 10, 2021
  71. 14/15 hex: default to the_hash_algo on zero algorithm valuebrian m. carlson, Apr 10, 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.