The for(;;) hack was taken from glib's logging macros. Signed-off-by: Christophe Fergeau <cfergeau@xxxxxxxxxx> --- 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(). + * 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 (;;) ; \ } 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 { \ -- 2.21.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel