# HG changeset patch # User John W. Eaton # Date 1449610497 18000 # Node ID 779898f2a02a51213ef0bef9d9374d61eb09e878 # Parent 66cd994d1b790ea7f42e8bc149d2e248788a3b87 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. diff -r 66cd994d1b79 -r 779898f2a02a libinterp/corefcn/error.cc --- 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"); diff -r 66cd994d1b79 -r 779898f2a02a libinterp/corefcn/error.h --- 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;