[Spice-devel] [PATCH spice] Add some more 'noreturn' annotations

Daniel P. Berrange berrange at redhat.com
Wed Apr 25 03:33:10 PDT 2012


Methods which longjump, unconditionally raise an
exception, or call _exit()  cannot return control
to the caller so should be annotated with 'noreturn'

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 client/canvas.h         |    2 +-
 client/jpeg_decoder.cpp |    3 +--
 client/red_client.h     |    2 +-
 client/red_peer.cpp     |    2 +-
 client/x11/platform.cpp |    3 +--
 server/red_worker.c     |    6 ++++--
 6 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/client/canvas.h b/client/canvas.h
index cd6a89b..7702568 100644
--- a/client/canvas.h
+++ b/client/canvas.h
@@ -252,7 +252,7 @@ public:
 /* TODO: unite with the window debug callbacks? */
 class GlzDecoderCanvasDebug: public GlzDecoderDebug {
 public:
-    virtual void error(const std::string& str)
+    virtual SPICE_GNUC_NORETURN void error(const std::string& str)
     {
         throw Exception(str);
     }
diff --git a/client/jpeg_decoder.cpp b/client/jpeg_decoder.cpp
index 2b2d5e4..c85902f 100644
--- a/client/jpeg_decoder.cpp
+++ b/client/jpeg_decoder.cpp
@@ -52,10 +52,9 @@ extern "C" {
     {
     }
 
-    static jpeg_boolean jpeg_decoder_fill_input_buffer(j_decompress_ptr cinfo)
+    static SPICE_GNUC_NORETURN jpeg_boolean jpeg_decoder_fill_input_buffer(j_decompress_ptr cinfo)
     {
         PANIC("no more data for jpeg");
-        return FALSE;
     }
 
     static void jpeg_decoder_skip_input_data(j_decompress_ptr cinfo, long num_bytes)
diff --git a/client/red_client.h b/client/red_client.h
index a2f00c4..c4b418a 100644
--- a/client/red_client.h
+++ b/client/red_client.h
@@ -99,7 +99,7 @@ private:
 
 class GlzDecoderWindowDebug: public GlzDecoderDebug {
 public:
-    virtual void error(const std::string& str)
+    virtual SPICE_GNUC_NORETURN void error(const std::string& str)
     {
         throw Exception(str);
     }
diff --git a/client/red_peer.cpp b/client/red_peer.cpp
index 10640c8..d2a6098 100644
--- a/client/red_peer.cpp
+++ b/client/red_peer.cpp
@@ -33,7 +33,7 @@
 #include "debug.h"
 #include "platform_utils.h"
 
-static void ssl_error()
+static void SPICE_GNUC_NORETURN ssl_error()
 {
     unsigned long last_error = ERR_peek_last_error();
 
diff --git a/client/x11/platform.cpp b/client/x11/platform.cpp
index f35d537..656c2a5 100644
--- a/client/x11/platform.cpp
+++ b/client/x11/platform.cpp
@@ -3167,11 +3167,10 @@ static int x_error_handler(Display* display, XErrorEvent* error_event)
     return 0;
 }
 
-static int x_io_error_handler(Display* display)
+static SPICE_GNUC_NORETURN int x_io_error_handler(Display* display)
 {
     LOG_ERROR("x io error on %s", XDisplayString(display));
     _exit(-1);
-    return 0;
 }
 
 static XVisualInfo* get_x_vis_info(int screen)
diff --git a/server/red_worker.c b/server/red_worker.c
index e271ae5..297b168 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -5274,7 +5274,8 @@ static int red_display_free_some_independent_glz_drawables(DisplayChannelClient
 /******************************************************
  *              Encoders callbacks
 *******************************************************/
-static SPICE_GNUC_PRINTF(2, 3) void quic_usr_error(QuicUsrContext *usr, const char *fmt, ...)
+static SPICE_GNUC_NORETURN SPICE_GNUC_PRINTF(2, 3) void
+quic_usr_error(QuicUsrContext *usr, const char *fmt, ...)
 {
     EncoderData *usr_data = &(((QuicData *)usr)->data);
     va_list ap;
@@ -5287,7 +5288,8 @@ static SPICE_GNUC_PRINTF(2, 3) void quic_usr_error(QuicUsrContext *usr, const ch
     longjmp(usr_data->jmp_env, 1);
 }
 
-static SPICE_GNUC_PRINTF(2, 3) void lz_usr_error(LzUsrContext *usr, const char *fmt, ...)
+static SPICE_GNUC_NORETURN SPICE_GNUC_PRINTF(2, 3) void
+lz_usr_error(LzUsrContext *usr, const char *fmt, ...)
 {
     EncoderData *usr_data = &(((LzData *)usr)->data);
     va_list ap;
-- 
1.7.1



More information about the Spice-devel mailing list