diff options
68 files changed, 167 insertions, 132 deletions
diff --git a/contrib/cube/cubescan.l b/contrib/cube/cubescan.l index e383b59d3d0..1c2522a2398 100644 --- a/contrib/cube/cubescan.l +++ b/contrib/cube/cubescan.l @@ -60,7 +60,7 @@ float ({integer}|{real})([eE]{integer})? %% -void __attribute__((noreturn)) +void pg_attribute_noreturn yyerror(NDBOX **result, const char *message) { if (*yytext == YY_END_OF_BUFFER_CHAR) diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h index 19d59f52374..9b873adbc08 100644 --- a/contrib/pg_upgrade/pg_upgrade.h +++ b/contrib/pg_upgrade/pg_upgrade.h @@ -359,7 +359,7 @@ void optionally_create_toast_tables(void); bool exec_prog(const char *log_file, const char *opt_log_file, bool throw_error, const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 4, 5))); +pg_attribute_printf(4, 5); void verify_directories(void); bool pid_lock_file_exists(const char *datadir); @@ -445,7 +445,7 @@ void init_tablespaces(void); PGconn *connectToServer(ClusterInfo *cluster, const char *db_name); PGresult * executeQueryOrDie(PGconn *conn, const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); char *cluster_conn_opts(ClusterInfo *cluster); @@ -462,17 +462,17 @@ int get_user_info(char **user_name_p); void check_ok(void); void report_status(eLogType type, const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); void pg_log(eLogType type, const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); void pg_fatal(const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2), noreturn)); +pg_attribute_printf(1, 2) pg_attribute_noreturn; void end_progress_output(void); void prep_status(const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); void check_ok(void); const char *getErrorText(int errNum); unsigned int str2uint(const char *str); @@ -489,7 +489,7 @@ void old_9_3_check_for_line_data_type_usage(ClusterInfo *cluster); void parallel_exec_prog(const char *log_file, const char *opt_log_file, const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4))); +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); diff --git a/contrib/pg_upgrade/util.c b/contrib/pg_upgrade/util.c index ec18526d96e..ce17aa0d476 100644 --- a/contrib/pg_upgrade/util.c +++ b/contrib/pg_upgrade/util.c @@ -82,7 +82,7 @@ prep_status(const char *fmt,...) static -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 0))) +pg_attribute_printf(2, 0) void pg_log_v(eLogType type, const char *fmt, va_list ap) { diff --git a/contrib/pg_xlogdump/pg_xlogdump.c b/contrib/pg_xlogdump/pg_xlogdump.c index c471267fde7..15805be2940 100644 --- a/contrib/pg_xlogdump/pg_xlogdump.c +++ b/contrib/pg_xlogdump/pg_xlogdump.c @@ -69,7 +69,7 @@ typedef struct XLogDumpStats static void fatal_error(const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); /* * Big red button to push when things go horribly wrong. diff --git a/contrib/pgcrypto/px.h b/contrib/pgcrypto/px.h index a01a58e29c0..297747c60a3 100644 --- a/contrib/pgcrypto/px.h +++ b/contrib/pgcrypto/px.h @@ -208,7 +208,7 @@ void px_memset(void *ptr, int c, size_t len); #ifdef PX_DEBUG void px_debug(const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); #else #define px_debug(...) #endif diff --git a/contrib/seg/segscan.l b/contrib/seg/segscan.l index a3e685488a8..5fe4a2c4537 100644 --- a/contrib/seg/segscan.l +++ b/contrib/seg/segscan.l @@ -59,7 +59,7 @@ float ({integer}|{real})([eE]{integer})? %% -void __attribute__((noreturn)) +void pg_attribute_noreturn yyerror(SEG *result, const char *message) { if (*yytext == YY_END_OF_BUFFER_CHAR) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index fb4a2ddfcf0..4a51defc529 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -36,7 +36,7 @@ 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. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); static void ResetDecoder(XLogReaderState *state); diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 77158c1e8f0..ee556f3600d 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -286,8 +286,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[]) __attribute__((noreturn)); -NON_EXEC_STATIC void AutoVacLauncherMain(int argc, char *argv[]) __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, diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c index 9b689af9156..800ae9362f8 100644 --- a/src/backend/postmaster/pgarch.c +++ b/src/backend/postmaster/pgarch.c @@ -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[]) __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); diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 1148e29090d..abdfe8947a9 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -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[]) __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); diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index ac431e5dd5a..9b2e7f310c9 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -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) __attribute__((noreturn)); -static void ExitPostmaster(int status) __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); diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c index 14ff1477c16..a27401f3700 100644 --- a/src/backend/postmaster/syslogger.c +++ b/src/backend/postmaster/syslogger.c @@ -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[]) __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); diff --git a/src/backend/replication/repl_scanner.l b/src/backend/replication/repl_scanner.l index 449c127e188..9abe4758429 100644 --- a/src/backend/replication/repl_scanner.l +++ b/src/backend/replication/repl_scanner.l @@ -205,7 +205,7 @@ addlitchar(unsigned char ychar) appendStringInfoChar(&litbuf, ychar); } -void __attribute__((noreturn)) +void pg_attribute_noreturn yyerror(const char *message) { ereport(ERROR, diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index af5c1cc3ba2..295611913aa 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -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) __attribute__((noreturn)); +static void WalSndShutdown(void) pg_attribute_noreturn; static void XLogSendPhysical(void); static void XLogSendLogical(void); static void WalSndDone(WalSndSendDataCallback send_data); diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 4e0cc30f1cc..b952c7c98ed 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -86,7 +86,7 @@ static const char * err_gettext(const char *str) /* This extension allows gcc to check the format string for consistency with the supplied arguments. */ -__attribute__((format_arg(1))); +pg_attribute_format_arg(1); static void set_errdata_field(MemoryContextData *cxt, char **ptr, const char *str); /* Global variables */ diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 0da1981e386..6eaab4352aa 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -132,7 +132,7 @@ 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. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4))); +pg_attribute_printf(3, 4); static void set_config_sourcefile(const char *name, char *sourcefile, int sourceline); diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index 789fe8f25a1..052caffe8db 100644 --- a/src/bin/pg_ctl/pg_ctl.c +++ b/src/bin/pg_ctl/pg_ctl.c @@ -120,7 +120,7 @@ static void write_stderr(const char *fmt,...) /* This extension allows gcc to check the format string for consistency with the supplied arguments. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); static void do_advice(void); static void do_help(void); static void set_mode(char *modeopt); diff --git a/src/bin/pg_dump/parallel.c b/src/bin/pg_dump/parallel.c index 1bf76114c09..f58f96b0636 100644 --- a/src/bin/pg_dump/parallel.c +++ b/src/bin/pg_dump/parallel.c @@ -81,7 +81,7 @@ static ParallelSlot *GetMyPSlot(ParallelState *pstate); static void parallel_msg_master(ParallelSlot *slot, const char *modulename, const char *fmt, va_list ap) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 0))); +pg_attribute_printf(3, 0); static void archive_close_connection(int code, void *arg); static void ShutdownWorkersHard(ParallelState *pstate); static void WaitForTerminatingWorkers(ParallelState *pstate); diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h index a936ff81b9d..d484236c4fe 100644 --- a/src/bin/pg_dump/pg_backup.h +++ b/src/bin/pg_dump/pg_backup.h @@ -280,7 +280,7 @@ 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 */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); #define appendStringLiteralAH(buf,str,AH) \ appendStringLiteral(buf, str, (AH)->encoding, (AH)->std_strings) diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h index 144027ce974..620ada53f13 100644 --- a/src/bin/pg_dump/pg_backup_archiver.h +++ b/src/bin/pg_dump/pg_backup_archiver.h @@ -378,7 +378,7 @@ struct _tocEntry extern int parallel_restore(struct ParallelArgs *args); extern void on_exit_close_archive(Archive *AHX); -extern void warn_or_exit_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4))); +extern void warn_or_exit_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt,...) pg_attribute_printf(3, 4); extern void WriteTOC(ArchiveHandle *AH); extern void ReadTOC(ArchiveHandle *AH); @@ -429,8 +429,8 @@ extern int ReconnectToServer(ArchiveHandle *AH, const char *dbname, const char * extern void DropBlobIfExists(ArchiveHandle *AH, Oid oid); void ahwrite(const void *ptr, size_t size, size_t nmemb, ArchiveHandle *AH); -int ahprintf(ArchiveHandle *AH, const char *fmt,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +int ahprintf(ArchiveHandle *AH, const char *fmt,...) pg_attribute_printf(2, 3); -void ahlog(ArchiveHandle *AH, int level, const char *fmt,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4))); +void ahlog(ArchiveHandle *AH, int level, const char *fmt,...) pg_attribute_printf(3, 4); #endif diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c index f48d3696b39..309b4b53dbc 100644 --- a/src/bin/pg_dump/pg_backup_tar.c +++ b/src/bin/pg_dump/pg_backup_tar.c @@ -115,7 +115,7 @@ static void tarClose(ArchiveHandle *AH, TAR_MEMBER *TH); #ifdef __NOT_USED__ static char *tarGets(char *buf, size_t len, TAR_MEMBER *th); #endif -static int tarPrintf(ArchiveHandle *AH, TAR_MEMBER *th, const char *fmt,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4))); +static int tarPrintf(ArchiveHandle *AH, TAR_MEMBER *th, const char *fmt,...) pg_attribute_printf(3, 4); static void _tarAddFile(ArchiveHandle *AH, TAR_MEMBER *th); static TAR_MEMBER *_tarPositionTo(ArchiveHandle *AH, const char *filename); diff --git a/src/bin/pg_dump/pg_backup_utils.h b/src/bin/pg_dump/pg_backup_utils.h index 1bcc1a784fa..2e9a69a615d 100644 --- a/src/bin/pg_dump/pg_backup_utils.h +++ b/src/bin/pg_dump/pg_backup_utils.h @@ -30,15 +30,15 @@ extern const char *progname; extern void set_dump_section(const char *arg, int *dumpSections); extern void write_msg(const char *modulename, const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); extern void vwrite_msg(const char *modulename, const char *fmt, va_list ap) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 0))); +pg_attribute_printf(2, 0); extern void on_exit_nicely(on_exit_nicely_callback function, void *arg); -extern void exit_nicely(int code) __attribute__((noreturn)); +extern void exit_nicely(int code) pg_attribute_noreturn; extern void exit_horribly(const char *modulename, const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3), noreturn)); +pg_attribute_printf(2, 3) pg_attribute_noreturn; #endif /* PG_BACKUP_UTILS_H */ diff --git a/src/bin/psql/common.h b/src/bin/psql/common.h index eb14d1cd465..54266c1cb14 100644 --- a/src/bin/psql/common.h +++ b/src/bin/psql/common.h @@ -21,7 +21,7 @@ extern bool setQFout(const char *fname); extern void psql_error(const char *fmt,...) /* This lets gcc check the format string for consistency. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); extern void NoticeProcessor(void *arg, const char *message); diff --git a/src/bin/psql/large_obj.c b/src/bin/psql/large_obj.c index 709869e88ab..48d2d77a5e8 100644 --- a/src/bin/psql/large_obj.c +++ b/src/bin/psql/large_obj.c @@ -14,7 +14,7 @@ static void print_lo_result(const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); static void print_lo_result(const char *fmt,...) diff --git a/src/include/bootstrap/bootstrap.h b/src/include/bootstrap/bootstrap.h index f9cbc137e72..3734afb468a 100644 --- a/src/include/bootstrap/bootstrap.h +++ b/src/include/bootstrap/bootstrap.h @@ -32,7 +32,7 @@ extern Form_pg_attribute attrtypes[MAXATTR]; extern int numattr; -extern void AuxiliaryProcessMain(int argc, char *argv[]) __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) __attribute__((noreturn)); +extern void boot_yyerror(const char *str) pg_attribute_noreturn; #endif /* BOOTSTRAP_H */ diff --git a/src/include/c.h b/src/include/c.h index ee615ee687f..a2d4a2c5c5d 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -156,10 +156,6 @@ #define dummyret char #endif -#ifndef __GNUC__ -#define __attribute__(_arg_) -#endif - /* ---------------------------------------------------------------- * Section 2: bool, true, false, TRUE, FALSE, NULL * ---------------------------------------------------------------- @@ -560,6 +556,47 @@ typedef NameData *Name; /* we don't currently need wider versions of the other ALIGN macros */ #define MAXALIGN64(LEN) TYPEALIGN64(MAXIMUM_ALIGNOF, (LEN)) +/* ---------------- + * Attribute macros + * + * GCC: https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html + * GCC: https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html + * Sunpro: https://docs.oracle.com/cd/E18659_01/html/821-1384/gjzke.html + * XLC: http://www-01.ibm.com/support/knowledgecenter/SSGH2K_11.1.0/com.ibm.xlc111.aix.doc/language_ref/function_attributes.html + * XLC: http://www-01.ibm.com/support/knowledgecenter/SSGH2K_11.1.0/com.ibm.xlc111.aix.doc/language_ref/type_attrib.html + * ---------------- + */ + +/* only GCC supports the unused attribute */ +#ifdef __GNUC__ +#define pg_attribute_unused __attribute__((unused)) +#else +#define pg_attribute_unused +#endif + +/* GCC and XLC support format attributes */ +#if defined(__GNUC__) || defined(__IBMC__) +#define pg_attribute_format_arg(a) __attribute__((format_arg(a))) +#define pg_attribute_printf(f,a) __attribute__((format(PG_PRINTF_ATTRIBUTE, f, a))) +#else +#define pg_attribute_format_arg(a) +#define pg_attribute_printf(f,a) +#endif + +/* 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)) +#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. + */ +#define pg_attribute_noreturn +#endif + /* ---------------------------------------------------------------- * Section 6: assertions * ---------------------------------------------------------------- @@ -906,7 +943,7 @@ typedef NameData *Name; #ifdef USE_ASSERT_CHECKING #define PG_USED_FOR_ASSERTS_ONLY #else -#define PG_USED_FOR_ASSERTS_ONLY __attribute__((unused)) +#define PG_USED_FOR_ASSERTS_ONLY pg_attribute_unused #endif @@ -973,7 +1010,7 @@ typedef NameData *Name; extern int snprintf(char *str, size_t count, const char *fmt,...) /* This extension allows gcc to check the format string */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4))); +pg_attribute_printf(3, 4); #endif #if !HAVE_DECL_VSNPRINTF diff --git a/src/include/common/fe_memutils.h b/src/include/common/fe_memutils.h index f7114c244f3..33123cb5044 100644 --- a/src/include/common/fe_memutils.h +++ b/src/include/common/fe_memutils.h @@ -26,9 +26,9 @@ extern void pfree(void *pointer); /* sprintf into a palloc'd buffer --- these are in psprintf.c */ extern char * psprintf(const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); extern size_t pvsnprintf(char *buf, size_t len, const char *fmt, va_list args) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 0))); +pg_attribute_printf(3, 0); #endif /* FE_MEMUTILS_H */ diff --git a/src/include/lib/stringinfo.h b/src/include/lib/stringinfo.h index 63d39e56218..fdb828508ea 100644 --- a/src/include/lib/stringinfo.h +++ b/src/include/lib/stringinfo.h @@ -95,7 +95,7 @@ extern void resetStringInfo(StringInfo str); extern void appendStringInfo(StringInfo str, const char *fmt,...) /* This extension allows gcc to check the format string */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); /*------------------------ * appendStringInfoVA @@ -108,7 +108,7 @@ __attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); */ extern int appendStringInfoVA(StringInfo str, const char *fmt, va_list args) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 0))); +pg_attribute_printf(2, 0); /*------------------------ * appendStringInfoString diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h index 231003f85c7..0a2234d35ac 100644 --- a/src/include/mb/pg_wchar.h +++ b/src/include/mb/pg_wchar.h @@ -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) __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) __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); diff --git a/src/include/parser/parse_relation.h b/src/include/parser/parse_relation.h index c886335e85b..fc0a2577f31 100644 --- a/src/include/parser/parse_relation.h +++ b/src/include/parser/parse_relation.h @@ -85,9 +85,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) __attribute__((noreturn)); +extern void errorMissingRTE(ParseState *pstate, RangeVar *relation) pg_attribute_noreturn; extern void errorMissingColumn(ParseState *pstate, - char *relname, char *colname, int location) __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); diff --git a/src/include/parser/scanner.h b/src/include/parser/scanner.h index 535e864e368..0e22d031f14 100644 --- a/src/include/parser/scanner.h +++ b/src/include/parser/scanner.h @@ -124,6 +124,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) __attribute__((noreturn)); +extern void scanner_yyerror(const char *message, core_yyscan_t yyscanner) pg_attribute_noreturn; #endif /* SCANNER_H */ diff --git a/src/include/pgstat.h b/src/include/pgstat.h index 30934d3ddf6..64cc8e2e7c8 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -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[]) __attribute__((noreturn)); +extern void PgstatCollectorMain(int argc, char *argv[]) pg_attribute_noreturn; #endif diff --git a/src/include/port.h b/src/include/port.h index a1ab42e3da6..b64651f1665 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -156,25 +156,25 @@ 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 */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4))); +pg_attribute_printf(3, 4); extern int pg_sprintf(char *str, const char *fmt,...) /* This extension allows gcc to check the format string */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +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 */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); extern int pg_printf(const char *fmt,...) /* This extension allows gcc to check the format string */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); /* - * The GCC-specific code below prevents the __attribute__(... 'printf') - * above from being replaced, and this is required because gcc doesn't - * know anything about pg_printf. + * The GCC-specific code below prevents the pg_attribute_printf above from + * being replaced, and this is required because gcc doesn't know anything + * about pg_printf. */ #ifdef __GNUC__ #define vsnprintf(...) pg_vsnprintf(__VA_ARGS__) diff --git a/src/include/port/atomics/generic-gcc.h b/src/include/port/atomics/generic-gcc.h index fea1cb5e135..c9fc87b30d9 100644 --- a/src/include/port/atomics/generic-gcc.h +++ b/src/include/port/atomics/generic-gcc.h @@ -98,7 +98,7 @@ typedef struct pg_atomic_uint32 typedef struct pg_atomic_uint64 { - volatile uint64 value __attribute__((aligned(8))); + volatile uint64 value pg_attribute_aligned(8); } pg_atomic_uint64; #endif /* defined(HAVE_GCC__ATOMIC_INT64_CAS) || defined(HAVE_GCC__SYNC_INT64_CAS) */ diff --git a/src/include/port/atomics/generic-sunpro.h b/src/include/port/atomics/generic-sunpro.h index 7a3028ec3d0..d369207fb34 100644 --- a/src/include/port/atomics/generic-sunpro.h +++ b/src/include/port/atomics/generic-sunpro.h @@ -61,7 +61,7 @@ typedef struct pg_atomic_uint64 * it proves to be a problem, we'll have to add more version checks for 64 * bit support. */ - volatile uint64 value __attribute__((__aligned__(8))); + volatile uint64 value pg_attribute_aligned(8); } pg_atomic_uint64; #endif /* HAVE_ATOMIC_H */ diff --git a/src/include/port/atomics/generic-xlc.h b/src/include/port/atomics/generic-xlc.h index 7a4c12ae6ca..1c743f2bc80 100644 --- a/src/include/port/atomics/generic-xlc.h +++ b/src/include/port/atomics/generic-xlc.h @@ -32,7 +32,7 @@ typedef struct pg_atomic_uint32 #define PG_HAVE_ATOMIC_U64_SUPPORT typedef struct pg_atomic_uint64 { - volatile uint64 value __attribute__((__aligned__(8))); + volatile uint64 value pg_attribute_aligned(8); } pg_atomic_uint64; #endif /* __64BIT__ */ diff --git a/src/include/postgres.h b/src/include/postgres.h index cbb7f796e1e..ff30e05bfc8 100644 --- a/src/include/postgres.h +++ b/src/include/postgres.h @@ -687,6 +687,6 @@ extern Datum Float8GetDatum(float8 X); */ extern void ExceptionalCondition(const char *conditionName, const char *errorType, - const char *fileName, int lineNumber) __attribute__((noreturn)); + const char *fileName, int lineNumber) pg_attribute_noreturn; #endif /* POSTGRES_H */ diff --git a/src/include/postmaster/autovacuum.h b/src/include/postmaster/autovacuum.h index 121f1073871..0bd50443aeb 100644 --- a/src/include/postmaster/autovacuum.h +++ b/src/include/postmaster/autovacuum.h @@ -54,8 +54,8 @@ extern void AutoVacWorkerFailed(void); extern void AutoVacuumUpdateDelay(void); #ifdef EXEC_BACKEND -extern void AutoVacLauncherMain(int argc, char *argv[]) __attribute__((noreturn)); -extern void AutoVacWorkerMain(int argc, char *argv[]) __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 diff --git a/src/include/postmaster/bgworker_internals.h b/src/include/postmaster/bgworker_internals.h index 81c03e4bb3b..fe7c328afd1 100644 --- a/src/include/postmaster/bgworker_internals.h +++ b/src/include/postmaster/bgworker_internals.h @@ -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) __attribute__((noreturn)); +extern void StartBackgroundWorker(void) pg_attribute_noreturn; #ifdef EXEC_BACKEND extern BackgroundWorker *BackgroundWorkerEntry(int slotno); diff --git a/src/include/postmaster/bgwriter.h b/src/include/postmaster/bgwriter.h index ce12619797d..f584d857872 100644 --- a/src/include/postmaster/bgwriter.h +++ b/src/include/postmaster/bgwriter.h @@ -25,8 +25,8 @@ extern int CheckPointTimeout; extern int CheckPointWarning; extern double CheckPointCompletionTarget; -extern void BackgroundWriterMain(void) __attribute__((noreturn)); -extern void CheckpointerMain(void) __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); diff --git a/src/include/postmaster/pgarch.h b/src/include/postmaster/pgarch.h index a585e6736c2..60e4f50368d 100644 --- a/src/include/postmaster/pgarch.h +++ b/src/include/postmaster/pgarch.h @@ -33,7 +33,7 @@ extern int pgarch_start(void); #ifdef EXEC_BACKEND -extern void PgArchiverMain(int argc, char *argv[]) __attribute__((noreturn)); +extern void PgArchiverMain(int argc, char *argv[]) pg_attribute_noreturn; #endif #endif /* _PGARCH_H */ diff --git a/src/include/postmaster/postmaster.h b/src/include/postmaster/postmaster.h index 91723f7d9af..d41761fc7a1 100644 --- a/src/include/postmaster/postmaster.h +++ b/src/include/postmaster/postmaster.h @@ -46,7 +46,7 @@ extern int postmaster_alive_fds[2]; extern const char *progname; -extern void PostmasterMain(int argc, char *argv[]) __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[]) __attribute__((noreturn)); +extern void SubPostmasterMain(int argc, char *argv[]) pg_attribute_noreturn; extern Size ShmemBackendArraySize(void); extern void ShmemBackendArrayAllocation(void); diff --git a/src/include/postmaster/startup.h b/src/include/postmaster/startup.h index da1f6e93362..9a2092e5f28 100644 --- a/src/include/postmaster/startup.h +++ b/src/include/postmaster/startup.h @@ -13,7 +13,7 @@ #define _STARTUP_H extern void HandleStartupProcInterrupts(void); -extern void StartupProcessMain(void) __attribute__((noreturn)); +extern void StartupProcessMain(void) pg_attribute_noreturn; extern void PreRestoreCommand(void); extern void PostRestoreCommand(void); extern bool IsPromoteTriggered(void); diff --git a/src/include/postmaster/syslogger.h b/src/include/postmaster/syslogger.h index 89a535c18fd..d6a05d5a209 100644 --- a/src/include/postmaster/syslogger.h +++ b/src/include/postmaster/syslogger.h @@ -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[]) __attribute__((noreturn)); +extern void SysLoggerMain(int argc, char *argv[]) pg_attribute_noreturn; #endif #endif /* _SYSLOGGER_H */ diff --git a/src/include/postmaster/walwriter.h b/src/include/postmaster/walwriter.h index de45a01f82d..55de6c73e4a 100644 --- a/src/include/postmaster/walwriter.h +++ b/src/include/postmaster/walwriter.h @@ -15,6 +15,6 @@ /* GUC options */ extern int WalWriterDelay; -extern void WalWriterMain(void) __attribute__((noreturn)); +extern void WalWriterMain(void) pg_attribute_noreturn; #endif /* _WALWRITER_H */ diff --git a/src/include/replication/walreceiver.h b/src/include/replication/walreceiver.h index defe8f982b1..4afdf91a6dc 100644 --- a/src/include/replication/walreceiver.h +++ b/src/include/replication/walreceiver.h @@ -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) __attribute__((noreturn)); +extern void WalReceiverMain(void) pg_attribute_noreturn; /* prototypes for functions in walreceiverfuncs.c */ extern Size WalRcvShmemSize(void); diff --git a/src/include/storage/ipc.h b/src/include/storage/ipc.h index 54fa2ba57bb..7da434e7987 100644 --- a/src/include/storage/ipc.h +++ b/src/include/storage/ipc.h @@ -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) __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); diff --git a/src/include/storage/itemptr.h b/src/include/storage/itemptr.h index 944812c4c01..1f0ea7db552 100644 --- a/src/include/storage/itemptr.h +++ b/src/include/storage/itemptr.h @@ -41,7 +41,7 @@ typedef struct ItemPointerData } #ifdef __arm__ -__attribute__((packed)) /* Appropriate whack upside the head for ARM */ +pg_attribute_packed /* Appropriate whack upside the head for ARM */ #endif ItemPointerData; diff --git a/src/include/storage/lock.h b/src/include/storage/lock.h index 11009237866..1477a6fe3d1 100644 --- a/src/include/storage/lock.h +++ b/src/include/storage/lock.h @@ -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) __attribute__((noreturn)); +extern void DeadLockReport(void) pg_attribute_noreturn; extern void RememberSimpleDeadLock(PGPROC *proc1, LOCKMODE lockmode, LOCK *lock, diff --git a/src/include/tcop/tcopprot.h b/src/include/tcop/tcopprot.h index 3e17770e22a..b3c705f97b6 100644 --- a/src/include/tcop/tcopprot.h +++ b/src/include/tcop/tcopprot.h @@ -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) __attribute__((noreturn)); +extern void quickdie(SIGNAL_ARGS) pg_attribute_noreturn; extern void StatementCancelHandler(SIGNAL_ARGS); -extern void FloatExceptionHandler(SIGNAL_ARGS) __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) __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); diff --git a/src/include/utils/datetime.h b/src/include/utils/datetime.h index 6b8ab3c6564..3a2335523d0 100644 --- a/src/include/utils/datetime.h +++ b/src/include/utils/datetime.h @@ -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) __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); diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h index b5cfc9cbc88..a82063a57b1 100644 --- a/src/include/utils/elog.h +++ b/src/include/utils/elog.h @@ -147,61 +147,61 @@ extern int errmsg(const char *fmt,...) /* This extension allows gcc to check the format string for consistency with the supplied arguments. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +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. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +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. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 4))) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 4))); +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. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +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. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +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. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +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. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 4))) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 4))); +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. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 4))) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 4))); +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. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); /* * errcontext() is typically called in error context callback functions, not @@ -218,7 +218,7 @@ extern int errcontext_msg(const char *fmt,...) /* This extension allows gcc to check the format string for consistency with the supplied arguments. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); extern int errhidestmt(bool hide_stmt); extern int errhidecontext(bool hide_ctx); @@ -278,7 +278,7 @@ extern void elog_finish(int elevel, const char *fmt,...) /* This extension allows gcc to check the format string for consistency with the supplied arguments. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); /* Support for constructing error strings separately from ereport() calls */ @@ -288,7 +288,7 @@ extern char * format_elog_string(const char *fmt,...) /* This extension allows gcc to check the format string for consistency with the supplied arguments. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); /* Support for attaching context information to error reports */ @@ -364,7 +364,7 @@ extern PGDLLIMPORT ErrorContextCallback *error_context_stack; } while (0) /* - * gcc understands __attribute__((noreturn)); for other compilers, insert + * gcc understands pg_attribute_noreturn; for other compilers, insert * pg_unreachable() so that the compiler gets the point. */ #ifdef __GNUC__ @@ -423,9 +423,9 @@ extern void EmitErrorReport(void); extern ErrorData *CopyErrorData(void); extern void FreeErrorData(ErrorData *edata); extern void FlushErrorState(void); -extern void ReThrowError(ErrorData *edata) __attribute__((noreturn)); +extern void ReThrowError(ErrorData *edata) pg_attribute_noreturn; extern void ThrowErrorData(ErrorData *edata); -extern void pg_re_throw(void) __attribute__((noreturn)); +extern void pg_re_throw(void) pg_attribute_noreturn; extern char *GetErrorContextStack(void); @@ -472,6 +472,6 @@ extern void write_stderr(const char *fmt,...) /* This extension allows gcc to check the format string for consistency with the supplied arguments. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); #endif /* ELOG_H */ diff --git a/src/include/utils/help_config.h b/src/include/utils/help_config.h index 481687f25fd..af529964003 100644 --- a/src/include/utils/help_config.h +++ b/src/include/utils/help_config.h @@ -12,6 +12,6 @@ #ifndef HELP_CONFIG_H #define HELP_CONFIG_H 1 -extern void GucInfoMain(void) __attribute__((noreturn)); +extern void GucInfoMain(void) pg_attribute_noreturn; #endif diff --git a/src/include/utils/palloc.h b/src/include/utils/palloc.h index 39b318da43a..bd8767520e3 100644 --- a/src/include/utils/palloc.h +++ b/src/include/utils/palloc.h @@ -138,9 +138,9 @@ 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,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +pg_attribute_printf(1, 2); extern size_t pvsnprintf(char *buf, size_t len, const char *fmt, va_list args) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 0))); +pg_attribute_printf(3, 0); #endif /* PALLOC_H */ diff --git a/src/interfaces/ecpg/ecpglib/extern.h b/src/interfaces/ecpg/ecpglib/extern.h index ca3bf051816..1fa21fd84ac 100644 --- a/src/interfaces/ecpg/ecpglib/extern.h +++ b/src/interfaces/ecpg/ecpglib/extern.h @@ -185,7 +185,7 @@ void ecpg_raise(int line, int code, const char *sqlstate, const char *str); void ecpg_raise_backend(int line, PGresult *result, PGconn *conn, int compat); char *ecpg_prepared(const char *, struct connection *); bool ecpg_deallocate_all_conn(int lineno, enum COMPAT_MODE c, struct connection * conn); -void ecpg_log(const char *format,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +void ecpg_log(const char *format,...) pg_attribute_printf(1, 2); bool ecpg_auto_prepare(int, const char *, const int, char **, const char *); void ecpg_init_sqlca(struct sqlca_t * sqlca); diff --git a/src/interfaces/ecpg/include/ecpglib.h b/src/interfaces/ecpg/include/ecpglib.h index 3b8ed4c4b03..5efe59351f1 100644 --- a/src/interfaces/ecpg/include/ecpglib.h +++ b/src/interfaces/ecpg/include/ecpglib.h @@ -15,7 +15,7 @@ #ifdef ENABLE_NLS extern char * ecpg_gettext(const char *msgid) -__attribute__((format_arg(1))); +pg_attribute_format_arg(1); #else #define ecpg_gettext(x) (x) #endif diff --git a/src/interfaces/ecpg/preproc/ecpg.header b/src/interfaces/ecpg/preproc/ecpg.header index a2be29c4348..e23407ec8d3 100644 --- a/src/interfaces/ecpg/preproc/ecpg.header +++ b/src/interfaces/ecpg/preproc/ecpg.header @@ -64,7 +64,7 @@ static struct ECPGtype ecpg_query = {ECPGt_char_variable, NULL, NULL, NULL, {NUL /* * Handle parsing errors and warnings */ -static void __attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 0))) +static void pg_attribute_printf(3, 0) vmmerror(int error_code, enum errortype type, const char *error, va_list ap) { /* localize the error message string */ diff --git a/src/interfaces/ecpg/preproc/extern.h b/src/interfaces/ecpg/preproc/extern.h index dfc75bceec2..1ce25ebe1bb 100644 --- a/src/interfaces/ecpg/preproc/extern.h +++ b/src/interfaces/ecpg/preproc/extern.h @@ -77,8 +77,8 @@ extern int base_yylex(void); 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,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4))); -extern void mmfatal(int errorcode, const char *error,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3), noreturn)); +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 output_get_descr_header(char *); extern void output_get_descr(char *, char *); extern void output_set_descr_header(char *); diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h index 64579d29404..b9b630a222f 100644 --- a/src/interfaces/libpq/libpq-int.h +++ b/src/interfaces/libpq/libpq-int.h @@ -548,7 +548,7 @@ extern PGresult *pqPrepareAsyncResult(PGconn *conn); extern void pqInternalNotice(const PGNoticeHooks *hooks, const char *fmt,...) /* This lets gcc check the format string for consistency. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); extern void pqSaveMessageField(PGresult *res, char code, const char *value); extern void pqSaveParameterStatus(PGconn *conn, const char *name, @@ -653,10 +653,10 @@ extern ssize_t pgtls_write(PGconn *conn, const void *ptr, size_t len); #ifdef ENABLE_NLS extern char * libpq_gettext(const char *msgid) -__attribute__((format_arg(1))); +pg_attribute_format_arg(1); extern char * libpq_ngettext(const char *msgid, const char *msgid_plural, unsigned long n) -__attribute__((format_arg(1))) __attribute__((format_arg(2))); +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)) diff --git a/src/interfaces/libpq/pqexpbuffer.c b/src/interfaces/libpq/pqexpbuffer.c index 15117a3d173..43df56a1e09 100644 --- a/src/interfaces/libpq/pqexpbuffer.c +++ b/src/interfaces/libpq/pqexpbuffer.c @@ -39,7 +39,7 @@ static const char oom_buffer[1] = ""; static bool appendPQExpBufferVA(PQExpBuffer str, const char *fmt, va_list args) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 0))); +pg_attribute_printf(2, 0); /* diff --git a/src/interfaces/libpq/pqexpbuffer.h b/src/interfaces/libpq/pqexpbuffer.h index 3598271fa9e..345d20376b8 100644 --- a/src/interfaces/libpq/pqexpbuffer.h +++ b/src/interfaces/libpq/pqexpbuffer.h @@ -149,7 +149,7 @@ extern int enlargePQExpBuffer(PQExpBuffer str, size_t needed); extern void printfPQExpBuffer(PQExpBuffer str, const char *fmt,...) /* This extension allows gcc to check the format string */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); /*------------------------ * appendPQExpBuffer @@ -161,7 +161,7 @@ __attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); extern void appendPQExpBuffer(PQExpBuffer str, const char *fmt,...) /* This extension allows gcc to check the format string */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); /*------------------------ * appendPQExpBufferStr diff --git a/src/interfaces/libpq/win32.c b/src/interfaces/libpq/win32.c index 4d2497afe9d..04c5ed4b724 100644 --- a/src/interfaces/libpq/win32.c +++ b/src/interfaces/libpq/win32.c @@ -36,7 +36,7 @@ #ifdef ENABLE_NLS extern char * libpq_gettext(const char *msgid) -__attribute__((format_arg(1))); +pg_attribute_format_arg(1); #else #define libpq_gettext(x) (x) #endif diff --git a/src/pl/plperl/plperl.h b/src/pl/plperl/plperl.h index 89bbd7ccb0d..aadb8883930 100644 --- a/src/pl/plperl/plperl.h +++ b/src/pl/plperl/plperl.h @@ -30,9 +30,7 @@ * Supply a value of PERL_UNUSED_DECL that will satisfy gcc - the one * perl itself supplies doesn't seem to. */ -#if defined(__GNUC__) -#define PERL_UNUSED_DECL __attribute__ ((unused)) -#endif +#define PERL_UNUSED_DECL pg_attribute_unused /* * Sometimes perl carefully scribbles on our *printf macros. diff --git a/src/pl/plpgsql/src/pl_scanner.c b/src/pl/plpgsql/src/pl_scanner.c index ec08b02a213..f9323771e69 100644 --- a/src/pl/plpgsql/src/pl_scanner.c +++ b/src/pl/plpgsql/src/pl_scanner.c @@ -608,7 +608,7 @@ plpgsql_scanner_errposition(int location) * be misleading! */ void -__attribute__((noreturn)) +pg_attribute_noreturn plpgsql_yyerror(const char *message) { char *yytext = core_yy.scanbuf + plpgsql_yylloc; diff --git a/src/pl/plpython/plpy_elog.h b/src/pl/plpython/plpy_elog.h index 6b8d485625b..e4e4dfb695d 100644 --- a/src/pl/plpython/plpy_elog.h +++ b/src/pl/plpython/plpy_elog.h @@ -12,16 +12,16 @@ extern PyObject *PLy_exc_spi_error; extern void PLy_elog(int elevel, const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); extern void PLy_exception_set(PyObject *exc, const char *fmt,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +pg_attribute_printf(2, 3); extern void PLy_exception_set_plural(PyObject *exc, const char *fmt_singular, const char *fmt_plural, unsigned long n,...) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 5))) -__attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 5))); +pg_attribute_printf(2, 5) +pg_attribute_printf(3, 5); #endif /* PLPY_ELOG_H */ diff --git a/src/test/modules/test_shm_mq/test_shm_mq.h b/src/test/modules/test_shm_mq/test_shm_mq.h index 144345b611b..94d28805ff5 100644 --- a/src/test/modules/test_shm_mq/test_shm_mq.h +++ b/src/test/modules/test_shm_mq/test_shm_mq.h @@ -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) __attribute__((noreturn)); +extern void test_shm_mq_main(Datum) pg_attribute_noreturn; #endif diff --git a/src/test/modules/worker_spi/worker_spi.c b/src/test/modules/worker_spi/worker_spi.c index 94d3857364f..4149c94d302 100644 --- a/src/test/modules/worker_spi/worker_spi.c +++ b/src/test/modules/worker_spi/worker_spi.c @@ -46,7 +46,7 @@ PG_MODULE_MAGIC; PG_FUNCTION_INFO_V1(worker_spi_launch); void _PG_init(void); -void worker_spi_main(Datum) __attribute__((noreturn)); +void worker_spi_main(Datum) pg_attribute_noreturn; /* flags set by signal handlers */ static volatile sig_atomic_t got_sighup = false; diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c index 3af0e57d4e3..9d4fb9a5a58 100644 --- a/src/test/regress/pg_regress.c +++ b/src/test/regress/pg_regress.c @@ -135,17 +135,17 @@ static void header(const char *fmt,...) /* This extension allows gcc to check the format string for consistency with the supplied arguments. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +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. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); +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. */ -__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3))); +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); |