[PATCH v3 0/3] C99: remove dead !HAVE_VARIADIC_MACROS code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



A too-late re-roll of the v2[1], sorry. But this should address all
issues raised the last time around.

Since v2 I've:

 * Improved the documentation of the now onnly-macros. I opted to just
   quote the argument list of the old C functions for explanation.

 * Some miscellanious commit message grammar fixes.

 * Whitespace fixes in 2/3.

 * There's a new 3/3 which removes an indirection used to define
   __FILE__, instead we now use __FILE__ directly.

1. https://lore.kernel.org/git/cover-v2-0.2-00000000000-20220128T110330Z-avarab@xxxxxxxxx/

Ævar Arnfjörð Bjarmason (3):
  git-compat-util.h: clarify GCC v.s. C99-specific in comment
  C99: remove hardcoded-out !HAVE_VARIADIC_MACROS code
  trace.h: remove never-used TRACE_CONTEXT

 Documentation/CodingGuidelines |   3 +
 banned.h                       |   5 --
 git-compat-util.h              |  16 +---
 trace.c                        |  80 +-----------------
 trace.h                        | 145 ++++++++++++++-------------------
 trace2.c                       |  39 ---------
 trace2.h                       |  25 ------
 usage.c                        |  15 +---
 8 files changed, 67 insertions(+), 261 deletions(-)

Range-diff against v2:
1:  31079a71ecb = 1:  1a15fe4fd74 git-compat-util.h: clarify GCC v.s. C99-specific in comment
2:  966d96505cb ! 2:  bd0f969be55 C99: remove hardcoded-out !HAVE_VARIADIC_MACROS code
    @@ Commit message
         C99: remove hardcoded-out !HAVE_VARIADIC_MACROS code
     
         Remove the "else" branches of the HAVE_VARIADIC_MACROS macro, which
    -    has been unconditionally omitted since 765dc168882 (git-compat-util:
    +    have been unconditionally omitted since 765dc168882 (git-compat-util:
         always enable variadic macros, 2021-01-28).
     
    -    Since they were hardcoded out anyone trying to compile a version of
    +    Since were always omitted, anyone trying to use a compiler without
    +    variadic macro support to compile a git since version
         git v2.31.0 or later would have had a compilation error. 10 months
         across a few releases since then should have been enough time for
         anyone who cared to run into that and report the issue.
    @@ trace.h: void trace_command_performance(const char **argv);
     - */
     -void trace_strbuf(struct trace_key *key, const struct strbuf *data);
     -
    - /**
    +-/**
     - * Prints elapsed time (in nanoseconds) if GIT_TRACE_PERFORMANCE is enabled.
    -+ * Macros to add the file:line of the calling code, instead of that of
    -+ * the trace function itself.
    -  *
    +- *
     - * Example:
     - * ------------
     - * uint64_t t = 0;
    @@ trace.h: void trace_command_performance(const char **argv);
     - * 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
    +@@ trace.h: void trace_performance_leave(const char *format, ...);
    + # define TRACE_CONTEXT __FILE__
    + #endif
    + 
     -/*
    -- * 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
    -- * names are not necessarily unique.
    -- *
    -- * __FILE__ ":" __FUNCTION__ doesn't work with GNUC, as __FILE__ is supplied
    -- * by the preprocessor as a string literal, and __FUNCTION__ is filled in by
    -- * the compiler as a string constant.
    -- */
    --#ifndef TRACE_CONTEXT
    --# define TRACE_CONTEXT __FILE__
    --#endif
    --
    --/*
    ++/**
    ++ * Macros to add the file:line of the calling code, instead of that of
    ++ * the trace function itself.
    ++ *
       * Note: with C99 variadic macros, __VA_ARGS__ must include the last fixed
       * parameter ('format' in this case). Otherwise, a call without variable
       * arguments will have a surplus ','. E.g.:
     @@ trace.h: void trace_performance_leave(const char *format, ...);
    -  *
    -  * which is invalid (note the ',)'). With GNUC, '##__VA_ARGS__' drops the
       * comma, but this is non-standard.
    +  */
    + 
    ++/**
    ++ * trace_printf(), accepts "const char *format, ...".
     + *
    -+ * 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
    -+ * names are not necessarily unique.
    -+ *
    -+ * __FILE__ ":" __FUNCTION__ doesn't work with GNUC, as __FILE__ is supplied
    -+ * by the preprocessor as a string literal, and __FUNCTION__ is filled in by
    -+ * the compiler as a string constant.
    ++ * Prints a formatted message, similar to printf.
     + */
    -+#ifndef TRACE_CONTEXT
    -+# define TRACE_CONTEXT __FILE__
    -+#endif
    ++#define trace_printf(...) trace_printf_key(&trace_default_key, __VA_ARGS__)
     +
     +/**
    -+ * Prints a formatted message, similar to printf.
    -  */
    -+#define trace_printf(...) trace_printf_key(&trace_default_key, __VA_ARGS__)
    - 
    ++ * trace_printf_key(), accepts "struct trace_key *key, const char *format, ...".
    ++ */
      #define trace_printf_key(key, ...)					    \
      	do {								    \
    + 		if (trace_pass_fl(key))					    \
     @@ trace.h: void trace_performance_leave(const char *format, ...);
      					    __VA_ARGS__);		    \
      	} while (0)
    @@ trace.h: void trace_performance_leave(const char *format, ...);
     -#define trace_printf(...) trace_printf_key(&trace_default_key, __VA_ARGS__)
     -
     +/**
    ++ * trace_argv_printf(), accepts "struct trace_key *key, const char *format, ...)".
    ++ *
     + * Prints a formatted message, followed by a quoted list of arguments.
     + */
      #define trace_argv_printf(argv, ...)					    \
    @@ trace.h: void trace_performance_leave(const char *format, ...);
      	} while (0)
      
     +/**
    ++ * trace_strbuf(), accepts "struct trace_key *key, const struct strbuf *data".
    ++ *
     + * Prints the strbuf, without additional formatting (i.e. doesn't
     + * choke on `%` or even `\0`).
     + */
    @@ trace.h: void trace_performance_leave(const char *format, ...);
      	} while (0)
      
     +/**
    ++ * trace_performance(), accepts "uint64_t nanos, const char *format, ...".
    ++ *
     + * Prints elapsed time (in nanoseconds) if GIT_TRACE_PERFORMANCE is enabled.
     + *
     + * Example:
    @@ trace.h: void trace_performance_leave(const char *format, ...);
      	} while (0)
      
     +/**
    ++ * trace_performance_since(), accepts "uint64_t start, const char *format, ...".
    ++ *
     + * Prints elapsed time since 'start' if GIT_TRACE_PERFORMANCE is enabled.
     + *
     + * Example:
    @@ trace.h: void trace_performance_leave(const char *format, ...);
      	do {								    \
      		if (trace_pass_fl(&trace_perf_key))			    \
     @@ trace.h: void trace_performance_leave(const char *format, ...);
    - 						   __VA_ARGS__);	    \
    + 					     __VA_ARGS__);		    \
      	} while (0)
      
    -+
    - /* backend functions, use non-*fl macros instead */
    - __attribute__((format (printf, 4, 5)))
    - void trace_printf_key_fl(const char *file, int line, struct trace_key *key,
    ++/**
    ++ * trace_performance_leave(), accepts "const char *format, ...".
    ++ */
    + #define trace_performance_leave(...)					    \
    + 	do {								    \
    + 		if (trace_pass_fl(&trace_perf_key))			    \
     @@ trace.h: static inline int trace_pass_fl(struct trace_key *key)
      	return key->fd || !key->initialized;
      }
-:  ----------- > 3:  27ea260bbea trace.h: remove never-used TRACE_CONTEXT
-- 
2.35.1.1129.g03fd99ecb8d




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux