[Spice-devel] [spice-common 8/8] log: Let gcc know about the logging macros which abort

Frediano Ziglio fziglio at redhat.com
Thu Mar 28 18:02:58 UTC 2019


> 
> The for(;;) hack was taken from glib's logging macros.
> 
> Signed-off-by: Christophe Fergeau <cfergeau at redhat.com>
> ---
>  common/log.h | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/common/log.h b/common/log.h
> index 7c67e7a..b397306 100644
> --- a/common/log.h
> +++ b/common/log.h
> @@ -20,6 +20,7 @@
>  
>  #include <stdarg.h>
>  #include <stdio.h>
> +#include <stdlib.h>
>  #include <glib.h>
>  #include <spice/macros.h>
>  
> @@ -42,6 +43,7 @@ void spice_log(GLogLevelFlags log_level,
>  #define spice_return_if_fail(x) G_STMT_START {                          \
>      if G_LIKELY(x) { } else {                                           \
>          spice_log(G_LOG_LEVEL_CRITICAL, SPICE_STRLOC, G_STRFUNC, "condition
>          `%s' failed", #x); \
> +        abort();
> \
>          return;                                                         \
>      }                                                                   \
>  } G_STMT_END
> @@ -49,6 +51,7 @@ void spice_log(GLogLevelFlags log_level,
>  #define spice_return_val_if_fail(x, val) G_STMT_START {                 \
>      if G_LIKELY(x) { } else {                                           \
>          spice_log(G_LOG_LEVEL_CRITICAL, SPICE_STRLOC, __FUNCTION__,
>          "condition `%s' failed", #x); \
> +        abort();
> \
>          return (val);                                                   \
>      }                                                                   \
>  } G_STMT_END
> @@ -69,12 +72,17 @@ void spice_log(GLogLevelFlags log_level,
>      spice_log(G_LOG_LEVEL_WARNING, SPICE_STRLOC, __FUNCTION__, "" format, ##
>      __VA_ARGS__); \
>  } G_STMT_END
>  
> +/* for(;;) ; so that GCC knows that control doesn't go past g_error().

g_error? copy&paste error?

> + * Put space before ending semicolon to avoid C++ build warnings.
> + */
>  #define spice_critical(format, ...) G_STMT_START {
>  \
>      spice_log(G_LOG_LEVEL_CRITICAL, SPICE_STRLOC, __FUNCTION__, "" format,
>      ## __VA_ARGS__); \
> +    for (;;) ;

I suppose you can use "for(;;) continue;" and remove the comment (that
"continue" was an old suggestion I had, I agree with C++ warning like
I agreed at that time with the continue).

Why some are for and some abort?

> \
>  } G_STMT_END
>  
>  #define spice_error(format, ...) G_STMT_START {                         \
>      spice_log(G_LOG_LEVEL_ERROR, SPICE_STRLOC, __FUNCTION__, "" format, ##
>      __VA_ARGS__); \
> +    for (;;) ;
> \
>  } G_STMT_END
>  
>  #define spice_warn_if_fail(x) G_STMT_START {            \

Frediano


More information about the Spice-devel mailing list