changeset 20826:779898f2a02a

tag error and usage functions with noreturn attribute * error.h, error.cc (vusage, usage, verror, error, verror_with_cfn, error_with_cfn, vparse_error, parse_error, vusage_with_id, usage_with_id, verror_with_id, error_with_id, verror_with_id_cfn, error_with_id_cfn, vparse_error_with_id, parse_error_with_id): Tag with GCC_ATTR_NORETURN.
author John W. Eaton <jwe@octave.org>
date Tue, 08 Dec 2015 16:34:57 -0500
parents 66cd994d1b79
children b3f985199f3f
files libinterp/corefcn/error.cc libinterp/corefcn/error.h
diffstat 2 files changed, 38 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/error.cc	Tue Dec 08 14:20:05 2015 -0500
+++ b/libinterp/corefcn/error.cc	Tue Dec 08 16:34:57 2015 -0500
@@ -397,6 +397,10 @@
 
 static void
 usage_1 (octave_execution_exception& e, const char *id,
+         const char *fmt, va_list args) GCC_ATTR_NORETURN;
+
+static void
+usage_1 (octave_execution_exception& e, const char *id,
          const char *fmt, va_list args)
 {
   verror (true, std::cerr, "usage", id, fmt, args);
@@ -407,6 +411,9 @@
 }
 
 static void
+usage_1 (const char *id, const char *fmt, va_list args) GCC_ATTR_NORETURN;
+
+static void
 usage_1 (const char *id, const char *fmt, va_list args)
 {
   octave_execution_exception e = make_execution_exception ("usage");
@@ -447,7 +454,12 @@
 static void
 error_1 (octave_execution_exception& e, std::ostream& os,
          const char *name, const char *id, const char *fmt,
-         va_list args, bool with_cfn = false)
+         va_list args, bool with_cfn = false) GCC_ATTR_NORETURN;
+
+static void
+error_1 (octave_execution_exception& e, std::ostream& os,
+         const char *name, const char *id, const char *fmt,
+         va_list args, bool with_cfn)
 {
   bool show_stack_trace = false;
 
@@ -463,6 +475,7 @@
                 {
                   if (len > 1)
                     {
+                      // FIXME: This is a memory leak.
                       char *tmp_fmt = strsave (fmt);
                       tmp_fmt[len - 1] = '\0';
                       verror (true, os, name, id, tmp_fmt, args, with_cfn);
@@ -494,7 +507,12 @@
 
 static void
 error_1 (std::ostream& os, const char *name, const char *id,
-         const char *fmt, va_list args, bool with_cfn = false)
+         const char *fmt, va_list args,
+         bool with_cfn = false) GCC_ATTR_NORETURN;
+
+static void
+error_1 (std::ostream& os, const char *name, const char *id,
+         const char *fmt, va_list args, bool with_cfn)
 {
   octave_execution_exception e = make_execution_exception ("error");
 
--- a/libinterp/corefcn/error.h	Tue Dec 08 14:20:05 2015 -0500
+++ b/libinterp/corefcn/error.h	Tue Dec 08 16:34:57 2015 -0500
@@ -43,25 +43,25 @@
 
 extern OCTINTERP_API void message (const char *name, const char *fmt, ...);
 
-extern OCTINTERP_API void vusage (const char *fmt, va_list args);
-extern OCTINTERP_API void usage (const char *fmt, ...);
+extern OCTINTERP_API void vusage (const char *fmt, va_list args) GCC_ATTR_NORETURN;
+extern OCTINTERP_API void usage (const char *fmt, ...) GCC_ATTR_NORETURN;
 
 extern OCTINTERP_API void vwarning (const char *fmt, va_list args);
 extern OCTINTERP_API void warning (const char *fmt, ...);
 
-extern OCTINTERP_API void verror (const char *fmt, va_list args);
-extern OCTINTERP_API void error (const char *fmt, ...);
+extern OCTINTERP_API void verror (const char *fmt, va_list args) GCC_ATTR_NORETURN;
+extern OCTINTERP_API void error (const char *fmt, ...) GCC_ATTR_NORETURN;
 
 extern OCTINTERP_API void verror (octave_execution_exception&,
-                                  const char *fmt, va_list args);
+                                  const char *fmt, va_list args) GCC_ATTR_NORETURN;
 extern OCTINTERP_API void error (octave_execution_exception&,
-                                 const char *fmt, ...);
+                                 const char *fmt, ...) GCC_ATTR_NORETURN;
 
-extern OCTINTERP_API void verror_with_cfn (const char *fmt, va_list args);
-extern OCTINTERP_API void error_with_cfn (const char *fmt, ...);
+extern OCTINTERP_API void verror_with_cfn (const char *fmt, va_list args) GCC_ATTR_NORETURN;
+extern OCTINTERP_API void error_with_cfn (const char *fmt, ...) GCC_ATTR_NORETURN;
 
-extern OCTINTERP_API void vparse_error (const char *fmt, va_list args);
-extern OCTINTERP_API void parse_error (const char *fmt, ...);
+extern OCTINTERP_API void vparse_error (const char *fmt, va_list args) GCC_ATTR_NORETURN;
+extern OCTINTERP_API void parse_error (const char *fmt, ...) GCC_ATTR_NORETURN;
 
 extern OCTINTERP_API void
 vmessage_with_id (const char *id, const char *name,
@@ -71,10 +71,10 @@
 message_with_id (const char *id, const char *name, const char *fmt, ...);
 
 extern OCTINTERP_API void
-vusage_with_id (const char *id, const char *fmt, va_list args);
+vusage_with_id (const char *id, const char *fmt, va_list args) GCC_ATTR_NORETURN;
 
 extern OCTINTERP_API void
-usage_with_id (const char *id, const char *fmt, ...);
+usage_with_id (const char *id, const char *fmt, ...) GCC_ATTR_NORETURN;
 
 extern OCTINTERP_API void
 vwarning_with_id (const char *id, const char *fmt, va_list args);
@@ -83,22 +83,22 @@
 warning_with_id (const char *id, const char *fmt, ...);
 
 extern OCTINTERP_API void
-verror_with_id (const char *id, const char *fmt, va_list args);
+verror_with_id (const char *id, const char *fmt, va_list args) GCC_ATTR_NORETURN;
 
 extern OCTINTERP_API void
-error_with_id (const char *id, const char *fmt, ...);
+error_with_id (const char *id, const char *fmt, ...) GCC_ATTR_NORETURN;
 
 extern OCTINTERP_API void
-verror_with_id_cfn (const char *id, const char *fmt, va_list args);
+verror_with_id_cfn (const char *id, const char *fmt, va_list args) GCC_ATTR_NORETURN;
 
 extern OCTINTERP_API void
-error_with_id_cfn (const char *id, const char *fmt, ...);
+error_with_id_cfn (const char *id, const char *fmt, ...) GCC_ATTR_NORETURN;
 
 extern OCTINTERP_API void
-vparse_error_with_id (const char *id, const char *fmt, va_list args);
+vparse_error_with_id (const char *id, const char *fmt, va_list args) GCC_ATTR_NORETURN;
 
 extern OCTINTERP_API void
-parse_error_with_id (const char *id, const char *fmt, ...);
+parse_error_with_id (const char *id, const char *fmt, ...) GCC_ATTR_NORETURN;
 
 extern OCTINTERP_API void panic (const char *fmt, ...) GCC_ATTR_NORETURN;