Mercurial > octave
changeset 26147:216d857732eb
Add static compile-time checking of printf functions (bug #55046).
* build-aux/mk-octave-config-h.sh, oct-conf-post.in.h: New macro
OCTAVE_FORMAT_ATTRIBUTE.
* libinterp/corefcn/error.h: Use macro OCTAVE_FORMAT_ATTRIBUTE for printf
functions.
author | Kai T. Ohlhus <k.ohlhus@gmail.com> |
---|---|
date | Thu, 29 Nov 2018 12:54:15 +0100 |
parents | 389d86d41cbf |
children | 8c72f0345ee8 |
files | build-aux/mk-octave-config-h.sh libinterp/corefcn/error.h oct-conf-post.in.h |
diffstat | 3 files changed, 22 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/build-aux/mk-octave-config-h.sh Thu Nov 29 12:45:13 2018 +0100 +++ b/build-aux/mk-octave-config-h.sh Thu Nov 29 12:54:15 2018 +0100 @@ -106,6 +106,7 @@ # else # define OCTAVE_DEPRECATED(ver, msg) __attribute__ ((__deprecated__)) # endif +# define OCTAVE_FORMAT_ATTRIBUTE(type, index, first) __attribute__ ((__format__(type, index, first))) # define OCTAVE_NORETURN __attribute__ ((__noreturn__)) # define OCTAVE_UNUSED __attribute__ ((__unused__)) @@ -114,6 +115,7 @@ # define HAVE_OCTAVE_UNUSED_ATTR 1 # else # define OCTAVE_DEPRECATED(ver, msg) +# define OCTAVE_FORMAT_ATTRIBUTE(type, index, first) # define OCTAVE_NORETURN # define OCTAVE_UNUSED
--- a/libinterp/corefcn/error.h Thu Nov 29 12:45:13 2018 +0100 +++ b/libinterp/corefcn/error.h Thu Nov 29 12:54:15 2018 +0100 @@ -50,29 +50,38 @@ extern OCTINTERP_API void vmessage (const char *name, const char *fmt, va_list args); +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 2, 3) extern OCTINTERP_API void message (const char *name, const char *fmt, ...); extern OCTINTERP_API void vwarning (const char *fmt, va_list args); +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 1, 2) extern OCTINTERP_API void warning (const char *fmt, ...); OCTAVE_NORETURN OCTINTERP_API extern void verror (const char *fmt, va_list args); +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 1, 2) OCTAVE_NORETURN OCTINTERP_API extern void error (const char *fmt, ...); OCTAVE_NORETURN OCTINTERP_API extern void verror (octave::execution_exception&, const char *fmt, va_list args); + +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 2, 3) OCTAVE_NORETURN OCTINTERP_API extern void error (octave::execution_exception&, const char *fmt, ...); OCTAVE_NORETURN OCTINTERP_API extern void verror_with_cfn (const char *fmt, va_list args); + +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 1, 2) OCTAVE_NORETURN OCTINTERP_API extern void error_with_cfn (const char *fmt, ...); OCTAVE_NORETURN OCTINTERP_API extern void vparse_error (const char *fmt, va_list args); + +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 1, 2) OCTAVE_NORETURN OCTINTERP_API extern void parse_error (const char *fmt, ...); @@ -80,39 +89,46 @@ vmessage_with_id (const char *id, const char *name, const char *fmt, va_list args); +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 3, 4) extern OCTINTERP_API void message_with_id (const char *id, const char *name, const char *fmt, ...); OCTAVE_NORETURN OCTINTERP_API extern void vusage_with_id (const char *id, const char *fmt, va_list args); +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 2, 3) OCTAVE_NORETURN OCTINTERP_API extern void usage_with_id (const char *id, const char *fmt, ...); extern OCTINTERP_API void vwarning_with_id (const char *id, const char *fmt, va_list args); +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 2, 3) extern OCTINTERP_API void warning_with_id (const char *id, const char *fmt, ...); OCTAVE_NORETURN OCTINTERP_API extern void verror_with_id (const char *id, const char *fmt, va_list args); +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 2, 3) OCTAVE_NORETURN OCTINTERP_API extern void error_with_id (const char *id, const char *fmt, ...); OCTAVE_NORETURN OCTINTERP_API extern void verror_with_id_cfn (const char *id, const char *fmt, va_list args); +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 2, 3) OCTAVE_NORETURN OCTINTERP_API extern void error_with_id_cfn (const char *id, const char *fmt, ...); OCTAVE_NORETURN OCTINTERP_API extern void vparse_error_with_id (const char *id, const char *fmt, va_list args); +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 2, 3) OCTAVE_NORETURN OCTINTERP_API extern void parse_error_with_id (const char *id, const char *fmt, ...); +OCTAVE_FORMAT_ATTRIBUTE (__printf__, 1, 2) OCTAVE_NORETURN OCTINTERP_API extern void panic (const char *fmt, ...);
--- a/oct-conf-post.in.h Thu Nov 29 12:45:13 2018 +0100 +++ b/oct-conf-post.in.h Thu Nov 29 12:54:15 2018 +0100 @@ -39,6 +39,9 @@ # endif # define HAVE_OCTAVE_DEPRECATED_ATTR 1 +# define OCTAVE_FORMAT_ATTRIBUTE(type, index, first) __attribute__ ((__format__(type, index, first))) +# define HAVE_OCTAVE_FORMAT_ATTRIBUTE_ATTR 1 + # define OCTAVE_NORETURN __attribute__ ((__noreturn__)) # define HAVE_OCTAVE_NORETURN_ATTR 1 @@ -46,6 +49,7 @@ # define HAVE_OCTAVE_UNUSED_ATTR 1 #else # define OCTAVE_DEPRECATED(ver, msg) +# define OCTAVE_FORMAT_ATTRIBUTE(type, index, first) # define OCTAVE_NORETURN # define OCTAVE_UNUSED #endif