Tweak __attribute__-wrapping macros for better pgindent results.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 26 Mar 2015 18:03:19 +0000 (14:03 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 26 Mar 2015 18:03:25 +0000 (14:03 -0400)
This improves on commit bbfd7edae5aa5ad5553d3c7e102f2e450d4380d4 by
making two simple changes:

* pg_attribute_noreturn now takes parentheses, ie pg_attribute_noreturn().
Likewise pg_attribute_unused(), pg_attribute_packed().  This reduces
pgindent's tendency to misformat declarations involving them.

* attributes are now always attached to function declarations, not
definitions.  Previously some places were taking creative shortcuts,
which were not merely candidates for bad misformatting by pgindent
but often were outright wrong anyway.  (It does little good to put a
noreturn annotation where callers can't see it.)  In any case, if
we would like to believe that these macros can be used with non-gcc
compilers, we should avoid gratuitous variance in usage patterns.

I also went through and manually improved the formatting of a lot of
declarations, and got rid of excessively repetitive (and now obsolete
anyway) comments informing the reader what pg_attribute_printf is for.

71 files changed:
contrib/cube/cube.c
contrib/cube/cubedata.h
contrib/cube/cubeparse.y
contrib/cube/cubescan.l
contrib/pg_upgrade/pg_upgrade.h
contrib/pg_upgrade/util.c
contrib/pg_xlogdump/pg_xlogdump.c
contrib/pgcrypto/px.h
contrib/seg/seg.c
contrib/seg/segdata.h
contrib/seg/segparse.y
contrib/seg/segscan.l
src/backend/access/transam/xlogreader.c
src/backend/postmaster/autovacuum.c
src/backend/postmaster/pgarch.c
src/backend/postmaster/pgstat.c
src/backend/postmaster/postmaster.c
src/backend/postmaster/syslogger.c
src/backend/replication/repl_scanner.l
src/backend/replication/walsender.c
src/backend/utils/error/elog.c
src/backend/utils/misc/guc.c
src/bin/pg_ctl/pg_ctl.c
src/bin/pg_dump/parallel.c
src/bin/pg_dump/pg_backup.h
src/bin/pg_dump/pg_backup_utils.h
src/bin/pg_rewind/logging.h
src/bin/psql/common.h
src/bin/psql/large_obj.c
src/include/bootstrap/bootstrap.h
src/include/c.h
src/include/common/fe_memutils.h
src/include/lib/stringinfo.h
src/include/mb/pg_wchar.h
src/include/parser/parse_relation.h
src/include/parser/scanner.h
src/include/pgstat.h
src/include/port.h
src/include/postgres.h
src/include/postmaster/autovacuum.h
src/include/postmaster/bgworker_internals.h
src/include/postmaster/bgwriter.h
src/include/postmaster/pgarch.h
src/include/postmaster/postmaster.h
src/include/postmaster/startup.h
src/include/postmaster/syslogger.h
src/include/postmaster/walwriter.h
src/include/replication/walreceiver.h
src/include/replication/walsender_private.h
src/include/storage/ipc.h
src/include/storage/itemptr.h
src/include/storage/lock.h
src/include/tcop/tcopprot.h
src/include/utils/datetime.h
src/include/utils/elog.h
src/include/utils/help_config.h
src/include/utils/palloc.h
src/interfaces/ecpg/include/ecpglib.h
src/interfaces/ecpg/preproc/ecpg.header
src/interfaces/ecpg/preproc/extern.h
src/interfaces/libpq/libpq-int.h
src/interfaces/libpq/pqexpbuffer.c
src/interfaces/libpq/pqexpbuffer.h
src/interfaces/libpq/win32.c
src/pl/plperl/plperl.h
src/pl/plpgsql/src/pl_scanner.c
src/pl/plpgsql/src/plpgsql.h
src/pl/plpython/plpy_elog.h
src/test/modules/test_shm_mq/test_shm_mq.h
src/test/modules/worker_spi/worker_spi.c
src/test/regress/pg_regress.c

index b0305ef431dca7a23272f6a98a6096ff3feae504..b9ccad994a8c000ae9345b3b488e69080b96ebf3 100644 (file)
@@ -26,11 +26,6 @@ PG_MODULE_MAGIC;
 #define ARRPTR(x)  ( (double *) ARR_DATA_PTR(x) )
 #define ARRNELEMS(x)  ArrayGetNItems( ARR_NDIM(x), ARR_DIMS(x))
 
-extern int cube_yyparse(NDBOX **result);
-extern void cube_yyerror(NDBOX **result, const char *message);
-extern void cube_scanner_init(const char *str);
-extern void cube_scanner_finish(void);
-
 /*
 ** Input/Output routines
 */
index 719e43d421c4845afba0e0e78d8805ff6426404f..59c23ded6ac6e1368cb3072d5869642746a6d5c0 100644 (file)
@@ -46,3 +46,12 @@ typedef struct NDBOX
 #define DatumGetNDBOX(x)   ((NDBOX *) PG_DETOAST_DATUM(x))
 #define PG_GETARG_NDBOX(x) DatumGetNDBOX(PG_GETARG_DATUM(x))
 #define PG_RETURN_NDBOX(x) PG_RETURN_POINTER(x)
+
+/* in cubescan.l */
+extern int cube_yylex(void);
+extern void cube_yyerror(NDBOX **result, const char *message) pg_attribute_noreturn();
+extern void cube_scanner_init(const char *str);
+extern void cube_scanner_finish(void);
+
+/* in cubeparse.y */
+extern int cube_yyparse(NDBOX **result);
index 0baee8e13245a930c0b1e6a1285a59eded71aac2..33606c741c5db067bd85071305eb4728a194717a 100644 (file)
 #define YYMALLOC palloc
 #define YYFREE   pfree
 
-extern int cube_yylex(void);
-
 static char *scanbuf;
 static int scanbuflen;
 
-extern int cube_yyparse(NDBOX **result);
-extern void cube_yyerror(NDBOX **result, const char *message);
-
 static int delim_count(char *s, char delim);
 static NDBOX * write_box(unsigned int dim, char *str1, char *str2);
 static NDBOX * write_point_as_box(char *s, int dim);
index 1c2522a2398463710ff2a1759e57be87e8d60ad4..4408e28387e5c589d6802ec5766eff0ea62d7680 100644 (file)
@@ -4,8 +4,6 @@
  * contrib/cube/cubescan.l
  */
 
-#include "postgres.h"
-
 /* No reason to constrain amount of data slurped */
 #define YY_READ_BUF_SIZE 16777216
 
@@ -24,12 +22,6 @@ static YY_BUFFER_STATE scanbufhandle;
 /* this is now declared in cubeparse.y: */
 /* static char *scanbuf; */
 /* static int  scanbuflen; */
-
-/* flex 2.5.4 doesn't bother with a decl for this */
-int cube_yylex(void);
-
-void cube_scanner_init(const char *str);
-void cube_scanner_finish(void);
 %}
 
 %option 8bit
@@ -60,7 +52,7 @@ float        ({integer}|{real})([eE]{integer})?
 
 %%
 
-void pg_attribute_noreturn
+void
 yyerror(NDBOX **result, const char *message)
 {
    if (*yytext == YY_END_OF_BUFFER_CHAR)
index 9b873adbc089793c4e64989959c6072435fa9595..f6b13c0878601a38d634d76fe0c30ff408b6da45 100644 (file)
@@ -356,10 +356,9 @@ void       optionally_create_toast_tables(void);
 /* exec.c */
 
 #define EXEC_PSQL_ARGS "--echo-queries --set ON_ERROR_STOP=on --no-psqlrc --dbname=template1"
-bool
-exec_prog(const char *log_file, const char *opt_log_file,
-         bool throw_error, const char *fmt,...)
-pg_attribute_printf(4, 5);
+
+bool       exec_prog(const char *log_file, const char *opt_log_file,
+         bool throw_error, const char *fmt,...) pg_attribute_printf(4, 5);
 void       verify_directories(void);
 bool       pid_lock_file_exists(const char *datadir);
 
@@ -443,9 +442,7 @@ void        init_tablespaces(void);
 /* server.c */
 
 PGconn    *connectToServer(ClusterInfo *cluster, const char *db_name);
-PGresult *
-executeQueryOrDie(PGconn *conn, const char *fmt,...)
-pg_attribute_printf(2, 3);
+PGresult   *executeQueryOrDie(PGconn *conn, const char *fmt,...) pg_attribute_printf(2, 3);
 
 char      *cluster_conn_opts(ClusterInfo *cluster);
 
@@ -460,19 +457,11 @@ void      check_pghost_envvar(void);
 char      *quote_identifier(const char *s);
 int            get_user_info(char **user_name_p);
 void       check_ok(void);
-void
-report_status(eLogType type, const char *fmt,...)
-pg_attribute_printf(2, 3);
-void
-pg_log(eLogType type, const char *fmt,...)
-pg_attribute_printf(2, 3);
-void
-pg_fatal(const char *fmt,...)
-pg_attribute_printf(1, 2) pg_attribute_noreturn;
+void       report_status(eLogType type, const char *fmt,...) pg_attribute_printf(2, 3);
+void       pg_log(eLogType type, const char *fmt,...) pg_attribute_printf(2, 3);
+void       pg_fatal(const char *fmt,...) pg_attribute_printf(1, 2) pg_attribute_noreturn();
 void       end_progress_output(void);
-void
-prep_status(const char *fmt,...)
-pg_attribute_printf(1, 2);
+void       prep_status(const char *fmt,...) pg_attribute_printf(1, 2);
 void       check_ok(void);
 const char *getErrorText(int errNum);
 unsigned int str2uint(const char *str);
@@ -486,10 +475,8 @@ void new_9_0_populate_pg_largeobject_metadata(ClusterInfo *cluster,
 void old_9_3_check_for_line_data_type_usage(ClusterInfo *cluster);
 
 /* parallel.c */
-void
-parallel_exec_prog(const char *log_file, const char *opt_log_file,
-                  const char *fmt,...)
-pg_attribute_printf(3, 4);
+void parallel_exec_prog(const char *log_file, const char *opt_log_file,
+                  const char *fmt,...) pg_attribute_printf(3, 4);
 void parallel_transfer_all_new_dbs(DbInfoArr *old_db_arr, DbInfoArr *new_db_arr,
                              char *old_pgdata, char *new_pgdata,
                              char *old_tablespace);
index ce17aa0d47669329aec449cfd5b0c66df1270467..6184ceef933ebf462a7eb0116770d58d1e34361e 100644 (file)
@@ -17,6 +17,9 @@
 
 LogOpts        log_opts;
 
+static void pg_log_v(eLogType type, const char *fmt, va_list ap) pg_attribute_printf(2, 0);
+
+
 /*
  * report_status()
  *
@@ -81,9 +84,7 @@ prep_status(const char *fmt,...)
 }
 
 
-static
-pg_attribute_printf(2, 0)
-void
+static void
 pg_log_v(eLogType type, const char *fmt, va_list ap)
 {
    char        message[QUERY_ALLOC];
index 15805be294033d6b32b6dd442b67806bd02659d7..4f297e95720e43c7c2af1f1d65f863669d688a39 100644 (file)
@@ -67,9 +67,7 @@ typedef struct XLogDumpStats
    Stats       record_stats[RM_NEXT_ID][MAX_XLINFO_TYPES];
 } XLogDumpStats;
 
-static void
-fatal_error(const char *fmt,...)
-pg_attribute_printf(1, 2);
+static void fatal_error(const char *fmt,...) pg_attribute_printf(1, 2);
 
 /*
  * Big red button to push when things go horribly wrong.
index 297747c60a36035808abc4d7a7fc7d9abb75d657..7255ebf04c8ef0a322f8c7f343d016860328defb 100644 (file)
@@ -206,9 +206,7 @@ void        px_set_debug_handler(void (*handler) (const char *));
 void       px_memset(void *ptr, int c, size_t len);
 
 #ifdef PX_DEBUG
-void
-px_debug(const char *fmt,...)
-pg_attribute_printf(1, 2);
+void       px_debug(const char *fmt,...) pg_attribute_printf(1, 2);
 #else
 #define px_debug(...)
 #endif
index 0807e238f160eb12fcee33f930e0a855f99f30cb..8e2d5343ae9d28f95942cae5dcbc7dec3418051c 100644 (file)
 
 PG_MODULE_MAGIC;
 
-extern int seg_yyparse(SEG *result);
-extern void seg_yyerror(SEG *result, const char *message);
-extern void seg_scanner_init(const char *str);
-extern void seg_scanner_finish(void);
-
-/*
-extern int  seg_yydebug;
-*/
-
 /*
  * Auxiliary data structure for picksplit method.
  */
@@ -103,7 +94,6 @@ bool     seg_different(SEG *a, SEG *b);
 ** Auxiliary funxtions
 */
 static int restore(char *s, float val, int n);
-int            significant_digits(char *s);
 
 
 /*****************************************************************************
index 90be6e27aafbe22baf8d74cbc62af3e5f68acdcd..cac68ee2b2ed15b1a063b74c22a8d118279d7e58 100644 (file)
@@ -10,3 +10,15 @@ typedef struct SEG
    char        l_ext;
    char        u_ext;
 } SEG;
+
+/* in seg.c */
+extern int significant_digits(char *str);
+
+/* in segscan.l */
+extern int seg_yylex(void);
+extern void seg_yyerror(SEG *result, const char *message) pg_attribute_noreturn();
+extern void seg_scanner_init(const char *str);
+extern void seg_scanner_finish(void);
+
+/* in segparse.y */
+extern int seg_yyparse(SEG *result);
index 3fad9910bd54d382368a352d466ea2c203aa99c8..045ff91f3e7dd2365f4963130108922ccd890308 100644 (file)
@@ -7,6 +7,7 @@
 
 #include "fmgr.h"
 #include "utils/builtins.h"
+
 #include "segdata.h"
 
 /*
 #define YYMALLOC palloc
 #define YYFREE   pfree
 
-extern int seg_yylex(void);
-
-extern int significant_digits(char *str);      /* defined in seg.c */
-
-extern int seg_yyparse(SEG *result);
-extern void seg_yyerror(SEG *result, const char *message);
-
 static float seg_atof(char *value);
 
 static char strbuf[25] = {
index 5fe4a2c45378ec9ca4a258c58d359b0de8c124eb..6db24fdd1f79551d6540ee0fd5befbd7a36808e4 100644 (file)
@@ -3,8 +3,6 @@
  * A scanner for EMP-style numeric ranges
  */
 
-#include "postgres.h"
-
 /* No reason to constrain amount of data slurped */
 #define YY_READ_BUF_SIZE 16777216
 
@@ -22,12 +20,6 @@ fprintf_to_ereport(const char *fmt, const char *msg)
 static YY_BUFFER_STATE scanbufhandle;
 static char *scanbuf;
 static int scanbuflen;
-
-/* flex 2.5.4 doesn't bother with a decl for this */
-int seg_yylex(void);
-
-void seg_scanner_init(const char *str);
-void seg_scanner_finish(void);
 %}
 
 %option 8bit
@@ -59,7 +51,7 @@ float        ({integer}|{real})([eE]{integer})?
 
 %%
 
-void pg_attribute_noreturn
+void
 yyerror(SEG *result, const char *message)
 {
    if (*yytext == YY_END_OF_BUFFER_CHAR)
index 4a51defc529fb9e6fa0f22cd9d7cc024b626f17c..ba7dfcc0287f7178b13cd1a2713a119b42b3ee71 100644 (file)
@@ -32,11 +32,7 @@ static bool ValidXLogRecord(XLogReaderState *state, XLogRecord *record,
                XLogRecPtr recptr);
 static int ReadPageInternal(XLogReaderState *state, XLogRecPtr pageptr,
                 int reqLen);
-static void
-report_invalid_record(XLogReaderState *state, const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(2, 3);
+static void report_invalid_record(XLogReaderState *state, const char *fmt,...) pg_attribute_printf(2, 3);
 
 static void ResetDecoder(XLogReaderState *state);
 
index 5ccae24b25c9b31f699f70171edac6c26a14c755..c93b412b29785ae29af5e36b503c6116f39bb4c3 100644 (file)
@@ -281,8 +281,8 @@ int         AutovacuumLauncherPid = 0;
 static pid_t avlauncher_forkexec(void);
 static pid_t avworker_forkexec(void);
 #endif
-NON_EXEC_STATIC void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn;
-NON_EXEC_STATIC void AutoVacLauncherMain(int argc, char *argv[]) pg_attribute_noreturn;
+NON_EXEC_STATIC void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn();
+NON_EXEC_STATIC void AutoVacLauncherMain(int argc, char *argv[]) pg_attribute_noreturn();
 
 static Oid do_start_worker(void);
 static void launcher_determine_sleep(bool canlaunch, bool recursing,
index 800ae9362f8532ee328c2b87e8fdae8a67218909..4df669e14af88acd3daf50893f39ea0fda324c3a 100644 (file)
@@ -86,7 +86,7 @@ static volatile sig_atomic_t ready_to_stop = false;
 static pid_t pgarch_forkexec(void);
 #endif
 
-NON_EXEC_STATIC void PgArchiverMain(int argc, char *argv[]) pg_attribute_noreturn;
+NON_EXEC_STATIC void PgArchiverMain(int argc, char *argv[]) pg_attribute_noreturn();
 static void pgarch_exit(SIGNAL_ARGS);
 static void ArchSigHupHandler(SIGNAL_ARGS);
 static void ArchSigTermHandler(SIGNAL_ARGS);
index abdfe8947a9460bec59b2325ef7643a6a3ffbf4e..0e7c1544ec0ee75ec2284cd124582e9731c94b96 100644 (file)
@@ -251,7 +251,7 @@ static instr_time total_func_time;
 static pid_t pgstat_forkexec(void);
 #endif
 
-NON_EXEC_STATIC void PgstatCollectorMain(int argc, char *argv[]) pg_attribute_noreturn;
+NON_EXEC_STATIC void PgstatCollectorMain(int argc, char *argv[]) pg_attribute_noreturn();
 static void pgstat_exit(SIGNAL_ARGS);
 static void pgstat_beshutdown_hook(int code, Datum arg);
 static void pgstat_sighup_handler(SIGNAL_ARGS);
index 9b2e7f310c9bb42f639c9d47e55028a4b538ce94..a9f20ac1b44915d05bd2b0289b6533c5c956060d 100644 (file)
@@ -380,8 +380,8 @@ static void LogChildExit(int lev, const char *procname,
             int pid, int exitstatus);
 static void PostmasterStateMachine(void);
 static void BackendInitialize(Port *port);
-static void BackendRun(Port *port) pg_attribute_noreturn;
-static void ExitPostmaster(int status) pg_attribute_noreturn;
+static void BackendRun(Port *port) pg_attribute_noreturn();
+static void ExitPostmaster(int status) pg_attribute_noreturn();
 static int ServerLoop(void);
 static int BackendStartup(Port *port);
 static int ProcessStartupPacket(Port *port, bool SSLdone);
index a27401f37005d509d356642c7f17f2678d798d69..34c7acf6680eddf2b45b85bea0a2f8d559248538 100644 (file)
@@ -130,7 +130,7 @@ static volatile sig_atomic_t rotation_requested = false;
 static pid_t syslogger_forkexec(void);
 static void syslogger_parseArgs(int argc, char *argv[]);
 #endif
-NON_EXEC_STATIC void SysLoggerMain(int argc, char *argv[]) pg_attribute_noreturn;
+NON_EXEC_STATIC void SysLoggerMain(int argc, char *argv[]) pg_attribute_noreturn();
 static void process_pipe_input(char *logbuffer, int *bytes_in_logbuffer);
 static void flush_pipe_input(char *logbuffer, int *bytes_in_logbuffer);
 static void open_csvlogfile(void);
index 9abe47584291d3f52742f672795430282b5bb465..f8acb66552c88dec06d1f7b412d16245b61c9112 100644 (file)
@@ -205,7 +205,7 @@ addlitchar(unsigned char ychar)
    appendStringInfoChar(&litbuf, ychar);
 }
 
-void pg_attribute_noreturn
+void
 yyerror(const char *message)
 {
    ereport(ERROR,
index 295611913aa960c3a75fd43ab20ec236fc900d5e..da9ee7b3d08965eb5c78d4c39b41b3ceff72706b 100644 (file)
@@ -193,7 +193,7 @@ typedef void (*WalSndSendDataCallback) (void);
 static void WalSndLoop(WalSndSendDataCallback send_data);
 static void InitWalSenderSlot(void);
 static void WalSndKill(int code, Datum arg);
-static void WalSndShutdown(void) pg_attribute_noreturn;
+static void WalSndShutdown(void) pg_attribute_noreturn();
 static void XLogSendPhysical(void);
 static void XLogSendLogical(void);
 static void WalSndDone(WalSndSendDataCallback send_data);
index b952c7c98ed54635e60abb6ba37a76772dbe54be..dfd102a1fbd74d612317bb3adaa6f5575118e115 100644 (file)
 #undef _
 #define _(x) err_gettext(x)
 
-static const char *
-err_gettext(const char *str)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_format_arg(1);
+static const char *err_gettext(const char *str) pg_attribute_format_arg(1);
 static void set_errdata_field(MemoryContextData *cxt, char **ptr, const char *str);
 
 /* Global variables */
index 26275bda1299d9fa9ee01d409c34deb3b154fcd0..b8a0f9f20c7824c9be4bcb1c079eb3faf377b222 100644 (file)
@@ -129,10 +129,7 @@ char      *GUC_check_errmsg_string;
 char      *GUC_check_errdetail_string;
 char      *GUC_check_errhint_string;
 
-static void
-do_serialize(char **destptr, Size *maxbytes, const char *fmt,...)
-/* This lets gcc check the format string for consistency. */
-pg_attribute_printf(3, 4);
+static void do_serialize(char **destptr, Size *maxbytes, const char *fmt,...) pg_attribute_printf(3, 4);
 
 static void set_config_sourcefile(const char *name, char *sourcefile,
                      int sourceline);
index 052caffe8db8691aa5848600653d6721e0802e7b..8202633d05602dfedd09936394ffc424004c7411 100644 (file)
@@ -116,11 +116,7 @@ static pid_t postmasterPID = -1;
 #endif
 
 
-static void
-write_stderr(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 2);
+static void write_stderr(const char *fmt,...) pg_attribute_printf(1, 2);
 static void do_advice(void);
 static void do_help(void);
 static void set_mode(char *modeopt);
index f58f96b06363c5d31604518c36c002f85233f4b4..ff823e5ab235477c7c74c4029478e3fa89447802 100644 (file)
@@ -78,10 +78,8 @@ static ShutdownInformation shutdown_info;
 static const char *modulename = gettext_noop("parallel archiver");
 
 static ParallelSlot *GetMyPSlot(ParallelState *pstate);
-static void
-parallel_msg_master(ParallelSlot *slot, const char *modulename,
-                   const char *fmt, va_list ap)
-pg_attribute_printf(3, 0);
+static void parallel_msg_master(ParallelSlot *slot, const char *modulename,
+                   const char *fmt, va_list ap) pg_attribute_printf(3, 0);
 static void archive_close_connection(int code, void *arg);
 static void ShutdownWorkersHard(ParallelState *pstate);
 static void WaitForTerminatingWorkers(ParallelState *pstate);
index d484236c4fe350b0b3833ba8b224c1c17c6f412e..80df8fcefd19011410775385572ce91eecf95784 100644 (file)
@@ -277,10 +277,7 @@ extern void SortTocFromFile(Archive *AHX, RestoreOptions *ropt);
 
 /* Convenience functions used only when writing DATA */
 extern void archputs(const char *s, Archive *AH);
-extern int
-archprintf(Archive *AH, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(2, 3);
+extern int archprintf(Archive *AH, const char *fmt,...) pg_attribute_printf(2, 3);
 
 #define appendStringLiteralAH(buf,str,AH) \
    appendStringLiteral(buf, str, (AH)->encoding, (AH)->std_strings)
index 2e9a69a615dbd2aea41b11a64d459104903c2ed4..0df0936c91b577b0fd77368911633972c59c271a 100644 (file)
@@ -28,17 +28,11 @@ typedef void (*on_exit_nicely_callback) (int code, void *arg);
 extern const char *progname;
 
 extern void set_dump_section(const char *arg, int *dumpSections);
-extern void
-write_msg(const char *modulename, const char *fmt,...)
-pg_attribute_printf(2, 3);
-extern void
-vwrite_msg(const char *modulename, const char *fmt, va_list ap)
-pg_attribute_printf(2, 0);
+extern void write_msg(const char *modulename, const char *fmt,...) pg_attribute_printf(2, 3);
+extern void vwrite_msg(const char *modulename, const char *fmt, va_list ap) pg_attribute_printf(2, 0);
 extern void on_exit_nicely(on_exit_nicely_callback function, void *arg);
-extern void exit_nicely(int code) pg_attribute_noreturn;
+extern void exit_nicely(int code) pg_attribute_noreturn();
 
-extern void
-exit_horribly(const char *modulename, const char *fmt,...)
-pg_attribute_printf(2, 3) pg_attribute_noreturn;
+extern void exit_horribly(const char *modulename, const char *fmt,...) pg_attribute_printf(2, 3) pg_attribute_noreturn();
 
 #endif   /* PG_BACKUP_UTILS_H */
index e089ac7803e4b7a362b914dc6bae4fd320facb13..0272a22039de2827cdb3389bb86c17ce1b2d046d 100644 (file)
@@ -27,10 +27,8 @@ typedef enum
    PG_FATAL
 } eLogType;
 
-extern void pg_log(eLogType type, const char *fmt,...)
-pg_attribute_printf(2, 3);
-extern void pg_fatal(const char *fmt,...)
-pg_attribute_printf(1, 2) pg_attribute_noreturn;
+extern void pg_log(eLogType type, const char *fmt,...) pg_attribute_printf(2, 3);
+extern void pg_fatal(const char *fmt,...) pg_attribute_printf(1, 2) pg_attribute_noreturn();
 
 extern void progress_report(bool force);
 
index 54266c1cb149cb37e4dfc0f830859871c91bafde..cdb0187feb2b3bf1d58a953317c65967dec000d8 100644 (file)
 
 extern bool setQFout(const char *fname);
 
-extern void
-psql_error(const char *fmt,...)
-/* This lets gcc check the format string for consistency. */
-pg_attribute_printf(1, 2);
+extern void psql_error(const char *fmt,...) pg_attribute_printf(1, 2);
 
 extern void NoticeProcessor(void *arg, const char *message);
 
index 48d2d77a5e8ec6a86f51f3280e72c836f416d597..621d6320597d5bb05b0ff080c418089a5e4fa6b7 100644 (file)
@@ -12,9 +12,7 @@
 #include "settings.h"
 #include "common.h"
 
-static void
-print_lo_result(const char *fmt,...)
-pg_attribute_printf(1, 2);
+static void print_lo_result(const char *fmt,...) pg_attribute_printf(1, 2);
 
 static void
 print_lo_result(const char *fmt,...)
index 3734afb468a50f3a56c6f70f0b5e4f66e91234d4..af9fc75a7439ba826622d0ea15bb5697bc3627b3 100644 (file)
@@ -32,7 +32,7 @@ extern Form_pg_attribute attrtypes[MAXATTR];
 extern int numattr;
 
 
-extern void AuxiliaryProcessMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void AuxiliaryProcessMain(int argc, char *argv[]) pg_attribute_noreturn();
 
 extern void err_out(void);
 
@@ -61,6 +61,6 @@ extern void boot_get_type_io_data(Oid typid,
 extern int boot_yyparse(void);
 
 extern int boot_yylex(void);
-extern void boot_yyerror(const char *str) pg_attribute_noreturn;
+extern void boot_yyerror(const char *str) pg_attribute_noreturn();
 
 #endif   /* BOOTSTRAP_H */
index e7ee5105a272f60e95393ecf5e87d009064318ad..fd301b6da64697643a55bf2248eff2d92347092e 100644 (file)
@@ -621,9 +621,9 @@ typedef NameData *Name;
 
 /* only GCC supports the unused attribute */
 #ifdef __GNUC__
-#define pg_attribute_unused __attribute__((unused))
+#define pg_attribute_unused() __attribute__((unused))
 #else
-#define pg_attribute_unused
+#define pg_attribute_unused()
 #endif
 
 /* GCC and XLC support format attributes */
@@ -638,15 +638,16 @@ typedef NameData *Name;
 /* GCC, Sunpro and XLC support aligned, packed and noreturn */
 #if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__IBMC__)
 #define pg_attribute_aligned(a) __attribute__((aligned(a)))
-#define pg_attribute_noreturn __attribute__((noreturn))
-#define pg_attribute_packed __attribute__((packed))
+#define pg_attribute_noreturn() __attribute__((noreturn))
+#define pg_attribute_packed() __attribute__((packed))
+#define HAVE_PG_ATTRIBUTE_NORETURN 1
 #else
 /*
- * NB: aligned and packed are not defined as empty as they affect code
- * functionality; they must be implemented by the compiler if they are to be
- * used.
+ * NB: aligned and packed are not given default definitions because they
+ * affect code functionality; they *must* be implemented by the compiler
+ * if they are to be used.
  */
-#define pg_attribute_noreturn
+#define pg_attribute_noreturn()
 #endif
 
 /* ----------------------------------------------------------------
@@ -995,7 +996,7 @@ typedef NameData *Name;
 #ifdef USE_ASSERT_CHECKING
 #define PG_USED_FOR_ASSERTS_ONLY
 #else
-#define PG_USED_FOR_ASSERTS_ONLY pg_attribute_unused
+#define PG_USED_FOR_ASSERTS_ONLY pg_attribute_unused()
 #endif
 
 
@@ -1059,10 +1060,7 @@ typedef NameData *Name;
  */
 
 #if !HAVE_DECL_SNPRINTF
-extern int
-snprintf(char *str, size_t count, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(3, 4);
+extern int snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3, 4);
 #endif
 
 #if !HAVE_DECL_VSNPRINTF
index 33123cb5044841c8c8baa1ab1a9512040f6926ab..db7cb3e33188e267130ea20ec89a7bf087b5ec29 100644 (file)
@@ -24,11 +24,7 @@ extern void *repalloc(void *pointer, Size size);
 extern void pfree(void *pointer);
 
 /* sprintf into a palloc'd buffer --- these are in psprintf.c */
-extern char *
-psprintf(const char *fmt,...)
-pg_attribute_printf(1, 2);
-extern size_t
-pvsnprintf(char *buf, size_t len, const char *fmt, va_list args)
-pg_attribute_printf(3, 0);
+extern char *psprintf(const char *fmt,...) pg_attribute_printf(1, 2);
+extern size_t pvsnprintf(char *buf, size_t len, const char *fmt, va_list args) pg_attribute_printf(3, 0);
 
 #endif   /* FE_MEMUTILS_H */
index fdb828508ea86a37aed78df259701abf90c1294e..00c25b6edd5a75aa2a35b78701fe2d74d955f8e8 100644 (file)
@@ -92,10 +92,7 @@ extern void resetStringInfo(StringInfo str);
  * to str if necessary.  This is sort of like a combination of sprintf and
  * strcat.
  */
-extern void
-appendStringInfo(StringInfo str, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(2, 3);
+extern void appendStringInfo(StringInfo str, const char *fmt,...) pg_attribute_printf(2, 3);
 
 /*------------------------
  * appendStringInfoVA
@@ -106,9 +103,7 @@ pg_attribute_printf(2, 3);
  * pass the return value to enlargeStringInfo() before trying again; see
  * appendStringInfo for standard usage pattern.
  */
-extern int
-appendStringInfoVA(StringInfo str, const char *fmt, va_list args)
-pg_attribute_printf(2, 0);
+extern int appendStringInfoVA(StringInfo str, const char *fmt, va_list args) pg_attribute_printf(2, 0);
 
 /*------------------------
  * appendStringInfoString
index 0a2234d35ac05485fec1d01fac7d2655c9fcc224..254cf678d6165e20373b55ed49a4c81f06d635a8 100644 (file)
@@ -514,9 +514,9 @@ extern void check_encoding_conversion_args(int src_encoding,
                               int expected_src_encoding,
                               int expected_dest_encoding);
 
-extern void report_invalid_encoding(int encoding, const char *mbstr, int len) pg_attribute_noreturn;
+extern void report_invalid_encoding(int encoding, const char *mbstr, int len) pg_attribute_noreturn();
 extern void report_untranslatable_char(int src_encoding, int dest_encoding,
-                      const char *mbstr, int len) pg_attribute_noreturn;
+                        const char *mbstr, int len) pg_attribute_noreturn();
 
 extern void pg_ascii2mic(const unsigned char *l, unsigned char *p, int len);
 extern void pg_mic2ascii(const unsigned char *mic, unsigned char *p, int len);
index 9dc0d5846b05bc376abf829259c0c0a006c1e558..ce563dea256b94679d1e1b0619c832e83c541026 100644 (file)
@@ -104,9 +104,9 @@ extern bool isLockedRefname(ParseState *pstate, const char *refname);
 extern void addRTEtoQuery(ParseState *pstate, RangeTblEntry *rte,
              bool addToJoinList,
              bool addToRelNameSpace, bool addToVarNameSpace);
-extern void errorMissingRTE(ParseState *pstate, RangeVar *relation) pg_attribute_noreturn;
+extern void errorMissingRTE(ParseState *pstate, RangeVar *relation) pg_attribute_noreturn();
 extern void errorMissingColumn(ParseState *pstate,
-      char *relname, char *colname, int location) pg_attribute_noreturn;
+      char *relname, char *colname, int location) pg_attribute_noreturn();
 extern void expandRTE(RangeTblEntry *rte, int rtindex, int sublevels_up,
          int location, bool include_dropped,
          List **colnames, List **colvars);
index f941977865ae4c9bef86037427915cc19198f2c9..9e38c0d1971f5acb41c66fe2b7a2fa0b16aabd7b 100644 (file)
@@ -125,6 +125,6 @@ extern void scanner_finish(core_yyscan_t yyscanner);
 extern int core_yylex(core_YYSTYPE *lvalp, YYLTYPE *llocp,
           core_yyscan_t yyscanner);
 extern int scanner_errposition(int location, core_yyscan_t yyscanner);
-extern void scanner_yyerror(const char *message, core_yyscan_t yyscanner) pg_attribute_noreturn;
+extern void scanner_yyerror(const char *message, core_yyscan_t yyscanner) pg_attribute_noreturn();
 
 #endif   /* SCANNER_H */
index 64cc8e2e7c8f80a6480c78ad4d5165f3710971b0..f2b2257a115927244ed1e4b602b7141418a3e3c5 100644 (file)
@@ -875,7 +875,7 @@ extern void pgstat_reset_all(void);
 extern void allow_immediate_pgstat_restart(void);
 
 #ifdef EXEC_BACKEND
-extern void PgstatCollectorMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void PgstatCollectorMain(int argc, char *argv[]) pg_attribute_noreturn();
 #endif
 
 
index 29854dd752e8887d5e7a513fcc0d792d95657ba2..3787cbfb7614cd318a3885bc59554128fb063502 100644 (file)
@@ -153,23 +153,11 @@ extern unsigned char pg_ascii_tolower(unsigned char ch);
 #endif
 
 extern int pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args);
-extern int
-pg_snprintf(char *str, size_t count, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(3, 4);
-extern int
-pg_sprintf(char *str, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(2, 3);
+extern int pg_snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3, 4);
+extern int pg_sprintf(char *str, const char *fmt,...) pg_attribute_printf(2, 3);
 extern int pg_vfprintf(FILE *stream, const char *fmt, va_list args);
-extern int
-pg_fprintf(FILE *stream, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(2, 3);
-extern int
-pg_printf(const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(1, 2);
+extern int pg_fprintf(FILE *stream, const char *fmt,...) pg_attribute_printf(2, 3);
+extern int pg_printf(const char *fmt,...) pg_attribute_printf(1, 2);
 
 /*
  * The GCC-specific code below prevents the pg_attribute_printf above from
index ff30e05bfc844c94313858ca3319d4f12af97077..be37313fa5a8964cfcf0406021f6ba20e615578d 100644 (file)
@@ -687,6 +687,6 @@ extern Datum Float8GetDatum(float8 X);
  */
 extern void ExceptionalCondition(const char *conditionName,
                     const char *errorType,
-            const char *fileName, int lineNumber) pg_attribute_noreturn;
+              const char *fileName, int lineNumber) pg_attribute_noreturn();
 
 #endif   /* POSTGRES_H */
index 0bd50443aeb9a1cd83cae81b391f7f380e384a18..6eaaf4c1c4efe28a8ae67ddd4f11f1b05ec068f5 100644 (file)
@@ -54,8 +54,8 @@ extern void AutoVacWorkerFailed(void);
 extern void AutoVacuumUpdateDelay(void);
 
 #ifdef EXEC_BACKEND
-extern void AutoVacLauncherMain(int argc, char *argv[]) pg_attribute_noreturn;
-extern void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void AutoVacLauncherMain(int argc, char *argv[]) pg_attribute_noreturn();
+extern void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn();
 extern void AutovacuumWorkerIAm(void);
 extern void AutovacuumLauncherIAm(void);
 #endif
index fe7c328afd1b43c52b663222dd20698474e41f40..b0ab4c22ba713d9e7031322097d45f85a77ac722 100644 (file)
@@ -46,7 +46,7 @@ extern void BackgroundWorkerStopNotifications(pid_t pid);
 extern void ResetBackgroundWorkerCrashTimes(void);
 
 /* Function to start a background worker, called from postmaster.c */
-extern void StartBackgroundWorker(void) pg_attribute_noreturn;
+extern void StartBackgroundWorker(void) pg_attribute_noreturn();
 
 #ifdef EXEC_BACKEND
 extern BackgroundWorker *BackgroundWorkerEntry(int slotno);
index f584d85787215267d57c45be6cea76bca6aa86e8..a49c208dd2a637c05973009d7f5849226bc5e40c 100644 (file)
@@ -25,8 +25,8 @@ extern int    CheckPointTimeout;
 extern int CheckPointWarning;
 extern double CheckPointCompletionTarget;
 
-extern void BackgroundWriterMain(void) pg_attribute_noreturn;
-extern void CheckpointerMain(void) pg_attribute_noreturn;
+extern void BackgroundWriterMain(void) pg_attribute_noreturn();
+extern void CheckpointerMain(void) pg_attribute_noreturn();
 
 extern void RequestCheckpoint(int flags);
 extern void CheckpointWriteDelay(int flags, double progress);
index 60e4f50368d01286d89f9df9d17d0d21748bee1c..9f692eb47fb5718da50479cea9cd791b6ebb7e82 100644 (file)
@@ -33,7 +33,7 @@
 extern int pgarch_start(void);
 
 #ifdef EXEC_BACKEND
-extern void PgArchiverMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void PgArchiverMain(int argc, char *argv[]) pg_attribute_noreturn();
 #endif
 
 #endif   /* _PGARCH_H */
index d41761fc7a1f01487692822b5666a4d75b858eb9..d16030482fad56361eeec66f488af269e7aec976 100644 (file)
@@ -46,7 +46,7 @@ extern int    postmaster_alive_fds[2];
 
 extern const char *progname;
 
-extern void PostmasterMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void PostmasterMain(int argc, char *argv[]) pg_attribute_noreturn();
 extern void ClosePostmasterPorts(bool am_syslogger);
 
 extern int MaxLivePostmasterChildren(void);
@@ -56,7 +56,7 @@ extern bool PostmasterMarkPIDForWorkerNotify(int);
 
 #ifdef EXEC_BACKEND
 extern pid_t postmaster_forkexec(int argc, char *argv[]);
-extern void SubPostmasterMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void SubPostmasterMain(int argc, char *argv[]) pg_attribute_noreturn();
 
 extern Size ShmemBackendArraySize(void);
 extern void ShmemBackendArrayAllocation(void);
index 9a2092e5f283cd64424e6003c463a922fa506e6f..e1fd4b100e07324f6c4b56ba7db9aaa37a6210eb 100644 (file)
@@ -13,7 +13,7 @@
 #define _STARTUP_H
 
 extern void HandleStartupProcInterrupts(void);
-extern void StartupProcessMain(void) pg_attribute_noreturn;
+extern void StartupProcessMain(void) pg_attribute_noreturn();
 extern void PreRestoreCommand(void);
 extern void PostRestoreCommand(void);
 extern bool IsPromoteTriggered(void);
index d6a05d5a20903b7ee39964d9d23686e8ddce6bc4..dc9f02cd4243169db94c19a3382784c9d3d1e3a6 100644 (file)
@@ -84,7 +84,7 @@ extern int    SysLogger_Start(void);
 extern void write_syslogger_file(const char *buffer, int count, int dest);
 
 #ifdef EXEC_BACKEND
-extern void SysLoggerMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void SysLoggerMain(int argc, char *argv[]) pg_attribute_noreturn();
 #endif
 
 #endif   /* _SYSLOGGER_H */
index 55de6c73e4a58429e93a93bb9cc9ddd9d5b1ec71..1ab7d3d66e2d3ad6de958492e8faf8e4e445acdf 100644 (file)
@@ -15,6 +15,6 @@
 /* GUC options */
 extern int WalWriterDelay;
 
-extern void WalWriterMain(void) pg_attribute_noreturn;
+extern void WalWriterMain(void) pg_attribute_noreturn();
 
 #endif   /* _WALWRITER_H */
index 4afdf91a6dc24461bd3bd36ee4118e50ea455394..61255a9f8e90efeb89c23d8fb17c9f4e9a0d4233 100644 (file)
@@ -147,7 +147,7 @@ typedef void (*walrcv_disconnect_type) (void);
 extern PGDLLIMPORT walrcv_disconnect_type walrcv_disconnect;
 
 /* prototypes for functions in walreceiver.c */
-extern void WalReceiverMain(void) pg_attribute_noreturn;
+extern void WalReceiverMain(void) pg_attribute_noreturn();
 
 /* prototypes for functions in walreceiverfuncs.c */
 extern Size WalRcvShmemSize(void);
index 40351da47fde2d9049ba7d62d3c2fcb2794588f3..6dae480285214c1e08b510d5bd26d88452ea27cd 100644 (file)
@@ -102,7 +102,7 @@ extern void WalSndSetState(WalSndState state);
  */
 extern int replication_yyparse(void);
 extern int replication_yylex(void);
-extern void replication_yyerror(const char *str);
+extern void replication_yyerror(const char *str) pg_attribute_noreturn();
 extern void replication_scanner_init(const char *query_string);
 extern void replication_scanner_finish(void);
 
index 7da434e79870384f8c18f192698964e28c8f1033..c6283c2af341072d2708b8e3e7218b521b80be2a 100644 (file)
@@ -64,7 +64,7 @@ typedef void (*shmem_startup_hook_type) (void);
 /* ipc.c */
 extern PGDLLIMPORT bool proc_exit_inprogress;
 
-extern void proc_exit(int code) pg_attribute_noreturn;
+extern void proc_exit(int code) pg_attribute_noreturn();
 extern void shmem_exit(int code);
 extern void on_proc_exit(pg_on_exit_callback function, Datum arg);
 extern void on_shmem_exit(pg_on_exit_callback function, Datum arg);
index 1f0ea7db55242295f93151a229242edd4fba21b3..eb06c794d2b2fadd0e5e94ed4ab959eba422b90b 100644 (file)
@@ -41,7 +41,7 @@ typedef struct ItemPointerData
 }
 
 #ifdef __arm__
-pg_attribute_packed            /* Appropriate whack upside the head for ARM */
+pg_attribute_packed()          /* Appropriate whack upside the head for ARM */
 #endif
 ItemPointerData;
 
index 1477a6fe3d1ce66bc8467b66d564a71daa129e7e..dae517f3fe001d7e92a0679e7de3afac488e1666 100644 (file)
@@ -547,7 +547,7 @@ extern void lock_twophase_standby_recover(TransactionId xid, uint16 info,
 
 extern DeadLockState DeadLockCheck(PGPROC *proc);
 extern PGPROC *GetBlockingAutoVacuumPgproc(void);
-extern void DeadLockReport(void) pg_attribute_noreturn;
+extern void DeadLockReport(void) pg_attribute_noreturn();
 extern void RememberSimpleDeadLock(PGPROC *proc1,
                       LOCKMODE lockmode,
                       LOCK *lock,
index b3c705f97b69ceb7a0b5dbb9cd9e5bb4498f1aef..96c5b8b3d44bbd080f7f97c10fb11db04876812d 100644 (file)
@@ -62,9 +62,9 @@ extern bool check_max_stack_depth(int *newval, void **extra, GucSource source);
 extern void assign_max_stack_depth(int newval, void *extra);
 
 extern void die(SIGNAL_ARGS);
-extern void quickdie(SIGNAL_ARGS) pg_attribute_noreturn;
+extern void quickdie(SIGNAL_ARGS) pg_attribute_noreturn();
 extern void StatementCancelHandler(SIGNAL_ARGS);
-extern void FloatExceptionHandler(SIGNAL_ARGS) pg_attribute_noreturn;
+extern void FloatExceptionHandler(SIGNAL_ARGS) pg_attribute_noreturn();
 extern void RecoveryConflictInterrupt(ProcSignalReason reason); /* called from SIGUSR1
                                                                 * handler */
 extern void ProcessClientReadInterrupt(bool blocked);
@@ -74,7 +74,7 @@ extern void process_postgres_switches(int argc, char *argv[],
                          GucContext ctx, const char **dbname);
 extern void PostgresMain(int argc, char *argv[],
             const char *dbname,
-            const char *username) pg_attribute_noreturn;
+            const char *username) pg_attribute_noreturn();
 extern long get_stack_depth_rlimit(void);
 extern void ResetUsage(void);
 extern void ShowUsage(const char *title);
index 3a2335523d070b5306e6336050f7b9b5fc0c113c..5b86ca10ef672eb5ac633a901cc01b394dfd544f 100644 (file)
@@ -315,7 +315,7 @@ extern int DecodeISO8601Interval(char *str,
                      int *dtype, struct pg_tm * tm, fsec_t *fsec);
 
 extern void DateTimeParseError(int dterr, const char *str,
-                  const char *datatype) pg_attribute_noreturn;
+                  const char *datatype) pg_attribute_noreturn();
 
 extern int DetermineTimeZoneOffset(struct pg_tm * tm, pg_tz *tzp);
 extern int DetermineTimeZoneAbbrevOffset(struct pg_tm * tm, const char *abbr, pg_tz *tzp);
index a82063a57b1b78a8e46a6514716beae0e5a5938a..8e90661195342335a2c8b3b1363ef551ce12b1d3 100644 (file)
@@ -143,65 +143,25 @@ extern int    errcode(int sqlerrcode);
 extern int errcode_for_file_access(void);
 extern int errcode_for_socket_access(void);
 
-extern int
-errmsg(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 2);
-
-extern int
-errmsg_internal(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 2);
-
-extern int
-errmsg_plural(const char *fmt_singular, const char *fmt_plural,
-             unsigned long n,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 4)
-pg_attribute_printf(2, 4);
-
-extern int
-errdetail(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 2);
-
-extern int
-errdetail_internal(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 2);
-
-extern int
-errdetail_log(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 2);
-
-extern int
-errdetail_log_plural(const char *fmt_singular, const char *fmt_plural,
-                    unsigned long n,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 4)
-pg_attribute_printf(2, 4);
-
-extern int
-errdetail_plural(const char *fmt_singular, const char *fmt_plural,
-                unsigned long n,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 4)
-pg_attribute_printf(2, 4);
-
-extern int
-errhint(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 2);
+extern int errmsg(const char *fmt,...) pg_attribute_printf(1, 2);
+extern int errmsg_internal(const char *fmt,...) pg_attribute_printf(1, 2);
+
+extern int errmsg_plural(const char *fmt_singular, const char *fmt_plural,
+   unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
+
+extern int errdetail(const char *fmt,...) pg_attribute_printf(1, 2);
+extern int errdetail_internal(const char *fmt,...) pg_attribute_printf(1, 2);
+
+extern int errdetail_log(const char *fmt,...) pg_attribute_printf(1, 2);
+
+extern int errdetail_log_plural(const char *fmt_singular,
+                    const char *fmt_plural,
+   unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
+
+extern int errdetail_plural(const char *fmt_singular, const char *fmt_plural,
+   unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
+
+extern int errhint(const char *fmt,...) pg_attribute_printf(1, 2);
 
 /*
  * errcontext() is typically called in error context callback functions, not
@@ -214,11 +174,8 @@ pg_attribute_printf(1, 2);
 #define errcontext set_errcontext_domain(TEXTDOMAIN),  errcontext_msg
 
 extern int set_errcontext_domain(const char *domain);
-extern int
-errcontext_msg(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 2);
+
+extern int errcontext_msg(const char *fmt,...) pg_attribute_printf(1, 2);
 
 extern int errhidestmt(bool hide_stmt);
 extern int errhidecontext(bool hide_ctx);
@@ -274,21 +231,13 @@ extern int    getinternalerrposition(void);
 #endif   /* HAVE__VA_ARGS */
 
 extern void elog_start(const char *filename, int lineno, const char *funcname);
-extern void
-elog_finish(int elevel, const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(2, 3);
+extern void elog_finish(int elevel, const char *fmt,...) pg_attribute_printf(2, 3);
 
 
 /* Support for constructing error strings separately from ereport() calls */
 
 extern void pre_format_elog_string(int errnumber, const char *domain);
-extern char *
-format_elog_string(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 2);
+extern char *format_elog_string(const char *fmt,...) pg_attribute_printf(1, 2);
 
 
 /* Support for attaching context information to error reports */
@@ -364,10 +313,10 @@ extern PGDLLIMPORT ErrorContextCallback *error_context_stack;
    } while (0)
 
 /*
- * gcc understands pg_attribute_noreturn; for other compilers, insert
- * pg_unreachable() so that the compiler gets the point.
+ * Some compilers understand pg_attribute_noreturn(); for other compilers,
+ * insert pg_unreachable() so that the compiler gets the point.
  */
-#ifdef __GNUC__
+#ifdef HAVE_PG_ATTRIBUTE_NORETURN
 #define PG_RE_THROW()  \
    pg_re_throw()
 #else
@@ -423,9 +372,9 @@ extern void EmitErrorReport(void);
 extern ErrorData *CopyErrorData(void);
 extern void FreeErrorData(ErrorData *edata);
 extern void FlushErrorState(void);
-extern void ReThrowError(ErrorData *edata) pg_attribute_noreturn;
+extern void ReThrowError(ErrorData *edata) pg_attribute_noreturn();
 extern void ThrowErrorData(ErrorData *edata);
-extern void pg_re_throw(void) pg_attribute_noreturn;
+extern void pg_re_throw(void) pg_attribute_noreturn();
 
 extern char *GetErrorContextStack(void);
 
@@ -468,10 +417,6 @@ extern void set_syslog_parameters(const char *ident, int facility);
  * not available). Used before ereport/elog can be used
  * safely (memory context, GUC load etc)
  */
-extern void
-write_stderr(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 2);
+extern void write_stderr(const char *fmt,...) pg_attribute_printf(1, 2);
 
 #endif   /* ELOG_H */
index af529964003161df96a963903248b629a5c5f2ee..54e3ec796678622feb9e0380f3ceb372f272f6e7 100644 (file)
@@ -12,6 +12,6 @@
 #ifndef HELP_CONFIG_H
 #define HELP_CONFIG_H 1
 
-extern void GucInfoMain(void) pg_attribute_noreturn;
+extern void GucInfoMain(void) pg_attribute_noreturn();
 
 #endif
index bd8767520e33b882da700fb27b87ff451a62d3be..2cf51298331d18233ac4402e9a2014e516ff999c 100644 (file)
@@ -136,11 +136,7 @@ extern char *pstrdup(const char *in);
 extern char *pnstrdup(const char *in, Size len);
 
 /* sprintf into a palloc'd buffer --- these are in psprintf.c */
-extern char *
-psprintf(const char *fmt,...)
-pg_attribute_printf(1, 2);
-extern size_t
-pvsnprintf(char *buf, size_t len, const char *fmt, va_list args)
-pg_attribute_printf(3, 0);
+extern char *psprintf(const char *fmt,...) pg_attribute_printf(1, 2);
+extern size_t pvsnprintf(char *buf, size_t len, const char *fmt, va_list args) pg_attribute_printf(3, 0);
 
 #endif   /* PALLOC_H */
index 5efe59351f12e9a2189e0703767d32db0c6ab272..c32df6c5d58948cce9e89d52970b35e9e3cb7816 100644 (file)
@@ -13,9 +13,7 @@
 #include <string.h>
 
 #ifdef ENABLE_NLS
-extern char *
-ecpg_gettext(const char *msgid)
-pg_attribute_format_arg(1);
+extern char *ecpg_gettext(const char *msgid) pg_attribute_format_arg(1);
 #else
 #define ecpg_gettext(x) (x)
 #endif
index e23407ec8d31c26726ed481278172209d62643bb..f41999a86f10eccda98de2ed88e0b79d92b4b93d 100644 (file)
@@ -61,10 +61,12 @@ struct variable no_indicator = {"no_indicator", &ecpg_no_indicator, 0, NULL};
 
 static struct ECPGtype ecpg_query = {ECPGt_char_variable, NULL, NULL, NULL, {NULL}, 0};
 
+static void vmmerror(int error_code, enum errortype type, const char *error, va_list ap) pg_attribute_printf(3, 0);
+
 /*
  * Handle parsing errors and warnings
  */
-static void pg_attribute_printf(3, 0)
+static void
 vmmerror(int error_code, enum errortype type, const char *error, va_list ap)
 {
    /* localize the error message string */
index 1ce25ebe1bb7038153a1f53ad18635df7c629c96..ea8fd8ed98c865335ec9f7228f64c1901294c9bd 100644 (file)
@@ -78,7 +78,7 @@ extern void base_yyerror(const char *);
 extern void *mm_alloc(size_t), *mm_realloc(void *, size_t);
 extern char *mm_strdup(const char *);
 extern void mmerror(int errorcode, enum errortype type, const char *error,...) pg_attribute_printf(3, 4);
-extern void mmfatal(int errorcode, const char *error,...) pg_attribute_printf(2, 3) pg_attribute_noreturn;
+extern void mmfatal(int errorcode, const char *error,...) pg_attribute_printf(2, 3) pg_attribute_noreturn();
 extern void output_get_descr_header(char *);
 extern void output_get_descr(char *, char *);
 extern void output_set_descr_header(char *);
index b9b630a222ffd09b4f7a85bb87bfc0be616edfdb..21759578f3a39aaa639d7920f58e60c4aefea5df 100644 (file)
@@ -545,10 +545,7 @@ extern char *pqResultStrdup(PGresult *res, const char *str);
 extern void pqClearAsyncResult(PGconn *conn);
 extern void pqSaveErrorResult(PGconn *conn);
 extern PGresult *pqPrepareAsyncResult(PGconn *conn);
-extern void
-pqInternalNotice(const PGNoticeHooks *hooks, const char *fmt,...)
-/* This lets gcc check the format string for consistency. */
-pg_attribute_printf(2, 3);
+extern void pqInternalNotice(const PGNoticeHooks *hooks, const char *fmt,...) pg_attribute_printf(2, 3);
 extern void pqSaveMessageField(PGresult *res, char code,
                   const char *value);
 extern void pqSaveParameterStatus(PGconn *conn, const char *name,
@@ -651,12 +648,8 @@ extern ssize_t pgtls_write(PGconn *conn, const void *ptr, size_t len);
 #define pqIsnonblocking(conn)  ((conn)->nonblocking)
 
 #ifdef ENABLE_NLS
-extern char *
-libpq_gettext(const char *msgid)
-pg_attribute_format_arg(1);
-extern char *
-libpq_ngettext(const char *msgid, const char *msgid_plural, unsigned long n)
-pg_attribute_format_arg(1) pg_attribute_format_arg(2);
+extern char *libpq_gettext(const char *msgid) pg_attribute_format_arg(1);
+extern char *libpq_ngettext(const char *msgid, const char *msgid_plural, unsigned long n) pg_attribute_format_arg(1) pg_attribute_format_arg(2);
 #else
 #define libpq_gettext(x) (x)
 #define libpq_ngettext(s, p, n) ((n) == 1 ? (s) : (p))
index 43df56a1e09de00375f8caa90f9e396eabf8ce69..15a92e626dcb3645fcee5aa763a4eb051688f56c 100644 (file)
@@ -37,9 +37,7 @@
 /* All "broken" PQExpBuffers point to this string. */
 static const char oom_buffer[1] = "";
 
-static bool
-appendPQExpBufferVA(PQExpBuffer str, const char *fmt, va_list args)
-pg_attribute_printf(2, 0);
+static bool appendPQExpBufferVA(PQExpBuffer str, const char *fmt, va_list args) pg_attribute_printf(2, 0);
 
 
 /*
index 345d20376b825ef49a52a65900100912fce881bd..0342c9649c598663cbfba0f68cb8c6cc29267ed8 100644 (file)
@@ -146,10 +146,7 @@ extern int enlargePQExpBuffer(PQExpBuffer str, size_t needed);
  * This is a convenience routine that does the same thing as
  * resetPQExpBuffer() followed by appendPQExpBuffer().
  */
-extern void
-printfPQExpBuffer(PQExpBuffer str, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(2, 3);
+extern void printfPQExpBuffer(PQExpBuffer str, const char *fmt,...) pg_attribute_printf(2, 3);
 
 /*------------------------
  * appendPQExpBuffer
@@ -158,10 +155,7 @@ pg_attribute_printf(2, 3);
  * to str if necessary.  This is sort of like a combination of sprintf and
  * strcat.
  */
-extern void
-appendPQExpBuffer(PQExpBuffer str, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(2, 3);
+extern void appendPQExpBuffer(PQExpBuffer str, const char *fmt,...) pg_attribute_printf(2, 3);
 
 /*------------------------
  * appendPQExpBufferStr
index 04c5ed4b724d3aaaac8eaab696b908c33f110e4b..ee91f810219c8cd4c5d8f02c4b2794a1470a7401 100644 (file)
@@ -34,9 +34,7 @@
 
 /* Declared here to avoid pulling in all includes, which causes name collissions */
 #ifdef ENABLE_NLS
-extern char *
-libpq_gettext(const char *msgid)
-pg_attribute_format_arg(1);
+extern char *libpq_gettext(const char *msgid) pg_attribute_format_arg(1);
 #else
 #define libpq_gettext(x) (x)
 #endif
index aadb888393089b2cb2673c65fe269bb3b5fb1c54..813d4401bbbf7b56bbeab552c273a3346afc5a7b 100644 (file)
@@ -30,7 +30,7 @@
  * Supply a value of PERL_UNUSED_DECL that will satisfy gcc - the one
  * perl itself supplies doesn't seem to.
  */
-#define PERL_UNUSED_DECL pg_attribute_unused
+#define PERL_UNUSED_DECL pg_attribute_unused()
 
 /*
  * Sometimes perl carefully scribbles on our *printf macros.
index dce56ce55b96b73b5ad22c87e71ccfdb005ce79c..683fdab2b4d95c305a32d2ec65bc0a562f43c060 100644 (file)
@@ -608,7 +608,7 @@ plpgsql_scanner_errposition(int location)
  * Beware of using yyerror for other purposes, as the cursor position might
  * be misleading!
  */
-void pg_attribute_noreturn
+void
 plpgsql_yyerror(const char *message)
 {
    char       *yytext = core_yy.scanbuf + plpgsql_yylloc;
index f630ff822fbdc1f85ec99e4b605599709f7bf3c6..bec773a787b2db75a0a78c64ce2aca3a79689e52 100644 (file)
@@ -1023,7 +1023,7 @@ extern int    plpgsql_peek(void);
 extern void plpgsql_peek2(int *tok1_p, int *tok2_p, int *tok1_loc,
              int *tok2_loc);
 extern int plpgsql_scanner_errposition(int location);
-extern void plpgsql_yyerror(const char *message);
+extern void plpgsql_yyerror(const char *message) pg_attribute_noreturn();
 extern int plpgsql_location_to_lineno(int location);
 extern int plpgsql_latest_lineno(void);
 extern void plpgsql_scanner_init(const char *str);
index e4e4dfb695d8a5a94faa8427c310e44cab7503ae..94725c2a2e421239e86af1bf3832bd12bd240230 100644 (file)
@@ -10,18 +10,11 @@ extern PyObject *PLy_exc_error;
 extern PyObject *PLy_exc_fatal;
 extern PyObject *PLy_exc_spi_error;
 
-extern void
-PLy_elog(int elevel, const char *fmt,...)
-pg_attribute_printf(2, 3);
+extern void PLy_elog(int elevel, const char *fmt,...) pg_attribute_printf(2, 3);
 
-extern void
-PLy_exception_set(PyObject *exc, const char *fmt,...)
-pg_attribute_printf(2, 3);
+extern void PLy_exception_set(PyObject *exc, const char *fmt,...) pg_attribute_printf(2, 3);
 
-extern void
-PLy_exception_set_plural(PyObject *exc, const char *fmt_singular, const char *fmt_plural,
-                        unsigned long n,...)
-pg_attribute_printf(2, 5)
-pg_attribute_printf(3, 5);
+extern void PLy_exception_set_plural(PyObject *exc, const char *fmt_singular, const char *fmt_plural,
+   unsigned long n,...) pg_attribute_printf(2, 5) pg_attribute_printf(3, 5);
 
 #endif   /* PLPY_ELOG_H */
index 94d28805ff52f48a77545ed499b0b43a89650002..934df73fe628b987b97f2343cc05595a08f50805 100644 (file)
@@ -40,6 +40,6 @@ extern void test_shm_mq_setup(int64 queue_size, int32 nworkers,
                  shm_mq_handle **input);
 
 /* Main entrypoint for a worker. */
-extern void test_shm_mq_main(Datum) pg_attribute_noreturn;
+extern void test_shm_mq_main(Datum) pg_attribute_noreturn();
 
 #endif
index 4149c94d30274a1f25cce61e28acd8e610e18756..fcb34ca1983d9931fe746e460862c5c0393cffa6 100644 (file)
@@ -46,7 +46,7 @@ PG_MODULE_MAGIC;
 PG_FUNCTION_INFO_V1(worker_spi_launch);
 
 void       _PG_init(void);
-void       worker_spi_main(Datum) pg_attribute_noreturn;
+void       worker_spi_main(Datum) pg_attribute_noreturn();
 
 /* flags set by signal handlers */
 static volatile sig_atomic_t got_sighup = false;
index 9d4fb9a5a58812534176710ed91f5583c3fcedad..3de479023ad139a65a2ff33063970715a4b69814 100644 (file)
@@ -131,21 +131,9 @@ static int fail_ignore_count = 0;
 static bool directory_exists(const char *dir);
 static void make_directory(const char *dir);
 
-static void
-header(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 2);
-static void
-status(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(1, 2);
-static void
-psql_command(const char *database, const char *query,...)
-/* This extension allows gcc to check the format string for consistency with
-   the supplied arguments. */
-pg_attribute_printf(2, 3);
+static void header(const char *fmt,...) pg_attribute_printf(1, 2);
+static void status(const char *fmt,...) pg_attribute_printf(1, 2);
+static void psql_command(const char *database, const char *query,...) pg_attribute_printf(2, 3);
 
 #ifdef WIN32
 typedef BOOL (WINAPI * __CreateRestrictedToken) (HANDLE, DWORD, DWORD, PSID_AND_ATTRIBUTES, DWORD, PLUID_AND_ATTRIBUTES, DWORD, PSID_AND_ATTRIBUTES, PHANDLE);