mirror of
https://github.com/postgres/postgres.git
synced 2026-01-26 09:41:40 +03:00
Revert "Replace pg_restrict by standard restrict"
This reverts commit f0f2c0c1ae.
The original problem that led to the use of pg_restrict was that MSVC
couldn't handle plain restrict, and defining it to something else
would conflict with its __declspec(restrict) that is used in system
header files. In C11 mode, this is no longer a problem, as MSVC
handles plain restrict. This led to the commit to replace pg_restrict
with restrict. But this did not take C++ into account. Standard C++
does not have restrict, so we defined it as something else (for
example, MSVC supports __restrict). But this then again conflicts
with __declspec(restrict) in system header files. So we have to
revert this attempt. The comments are updated to clarify that the
reason for this is now C++ only.
Reported-by: Jelte Fennema-Nio <postgres@jeltef.nl>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://www.postgresql.org/message-id/CAGECzQRoD7chJP1-dneSrhxUJv%2BBRcigoGOO4UwGzaShLot2Yw%40mail.gmail.com
This commit is contained in:
@@ -1228,7 +1228,7 @@ parse_required_wal(verifier_context *context, char *pg_waldump_path,
|
||||
* context says we should.
|
||||
*/
|
||||
void
|
||||
report_backup_error(verifier_context *context, const char *restrict fmt,...)
|
||||
report_backup_error(verifier_context *context, const char *pg_restrict fmt,...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
@@ -1245,7 +1245,7 @@ report_backup_error(verifier_context *context, const char *restrict fmt,...)
|
||||
* Report a fatal error and exit
|
||||
*/
|
||||
void
|
||||
report_fatal_error(const char *restrict fmt,...)
|
||||
report_fatal_error(const char *pg_restrict fmt,...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
|
||||
@@ -96,9 +96,9 @@ typedef struct verifier_context
|
||||
} verifier_context;
|
||||
|
||||
extern void report_backup_error(verifier_context *context,
|
||||
const char *restrict fmt,...)
|
||||
const char *pg_restrict fmt,...)
|
||||
pg_attribute_printf(2, 3);
|
||||
pg_noreturn extern void report_fatal_error(const char *restrict fmt,...)
|
||||
pg_noreturn extern void report_fatal_error(const char *pg_restrict fmt,...)
|
||||
pg_attribute_printf(1, 2);
|
||||
extern bool should_ignore_relpath(verifier_context *context,
|
||||
const char *relpath);
|
||||
|
||||
@@ -206,7 +206,7 @@ pg_logging_set_locus_callback(void (*cb) (const char **filename, uint64 *lineno)
|
||||
|
||||
void
|
||||
pg_log_generic(enum pg_log_level level, enum pg_log_part part,
|
||||
const char *restrict fmt,...)
|
||||
const char *pg_restrict fmt,...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
@@ -217,7 +217,7 @@ pg_log_generic(enum pg_log_level level, enum pg_log_part part,
|
||||
|
||||
void
|
||||
pg_log_generic_v(enum pg_log_level level, enum pg_log_part part,
|
||||
const char *restrict fmt, va_list ap)
|
||||
const char *pg_restrict fmt, va_list ap)
|
||||
{
|
||||
int save_errno = errno;
|
||||
const char *filename = NULL;
|
||||
|
||||
@@ -47,7 +47,7 @@ pg_str_endswith(const char *str, const char *end)
|
||||
* strtoint --- just like strtol, but returns int not long
|
||||
*/
|
||||
int
|
||||
strtoint(const char *restrict str, char **restrict endptr, int base)
|
||||
strtoint(const char *pg_restrict str, char **pg_restrict endptr, int base)
|
||||
{
|
||||
long val;
|
||||
|
||||
|
||||
@@ -108,12 +108,6 @@
|
||||
#define inline
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Previously used PostgreSQL-specific spelling, for backward compatibility
|
||||
* for extensions.
|
||||
*/
|
||||
#define pg_restrict restrict
|
||||
|
||||
/*
|
||||
* Attribute macros
|
||||
*
|
||||
|
||||
@@ -93,10 +93,10 @@ void pg_logging_set_pre_callback(void (*cb) (void));
|
||||
void pg_logging_set_locus_callback(void (*cb) (const char **filename, uint64 *lineno));
|
||||
|
||||
void pg_log_generic(enum pg_log_level level, enum pg_log_part part,
|
||||
const char *restrict fmt,...)
|
||||
const char *pg_restrict fmt,...)
|
||||
pg_attribute_printf(3, 4);
|
||||
void pg_log_generic_v(enum pg_log_level level, enum pg_log_part part,
|
||||
const char *restrict fmt, va_list ap)
|
||||
const char *pg_restrict fmt, va_list ap)
|
||||
pg_attribute_printf(3, 0);
|
||||
|
||||
/*
|
||||
|
||||
@@ -25,7 +25,7 @@ typedef struct PromptInterruptContext
|
||||
|
||||
/* functions in src/common/string.c */
|
||||
extern bool pg_str_endswith(const char *str, const char *end);
|
||||
extern int strtoint(const char *restrict str, char **restrict endptr,
|
||||
extern int strtoint(const char *pg_restrict str, char **pg_restrict endptr,
|
||||
int base);
|
||||
extern char *pg_clean_ascii(const char *str, int alloc_flags);
|
||||
extern int pg_strip_crlf(char *str);
|
||||
|
||||
@@ -34,7 +34,7 @@ extern void pq_sendfloat8(StringInfo buf, float8 f);
|
||||
* Append a [u]int8 to a StringInfo buffer, which already has enough space
|
||||
* preallocated.
|
||||
*
|
||||
* The use of restrict allows the compiler to optimize the code based on
|
||||
* The use of pg_restrict allows the compiler to optimize the code based on
|
||||
* the assumption that buf, buf->len, buf->data and *buf->data don't
|
||||
* overlap. Without the annotation buf->len etc cannot be kept in a register
|
||||
* over subsequent pq_writeintN calls.
|
||||
@@ -43,7 +43,7 @@ extern void pq_sendfloat8(StringInfo buf, float8 f);
|
||||
* overly picky and demanding a * before a restrict.
|
||||
*/
|
||||
static inline void
|
||||
pq_writeint8(StringInfoData *restrict buf, uint8 i)
|
||||
pq_writeint8(StringInfoData *pg_restrict buf, uint8 i)
|
||||
{
|
||||
uint8 ni = i;
|
||||
|
||||
@@ -57,7 +57,7 @@ pq_writeint8(StringInfoData *restrict buf, uint8 i)
|
||||
* preallocated.
|
||||
*/
|
||||
static inline void
|
||||
pq_writeint16(StringInfoData *restrict buf, uint16 i)
|
||||
pq_writeint16(StringInfoData *pg_restrict buf, uint16 i)
|
||||
{
|
||||
uint16 ni = pg_hton16(i);
|
||||
|
||||
@@ -71,7 +71,7 @@ pq_writeint16(StringInfoData *restrict buf, uint16 i)
|
||||
* preallocated.
|
||||
*/
|
||||
static inline void
|
||||
pq_writeint32(StringInfoData *restrict buf, uint32 i)
|
||||
pq_writeint32(StringInfoData *pg_restrict buf, uint32 i)
|
||||
{
|
||||
uint32 ni = pg_hton32(i);
|
||||
|
||||
@@ -85,7 +85,7 @@ pq_writeint32(StringInfoData *restrict buf, uint32 i)
|
||||
* preallocated.
|
||||
*/
|
||||
static inline void
|
||||
pq_writeint64(StringInfoData *restrict buf, uint64 i)
|
||||
pq_writeint64(StringInfoData *pg_restrict buf, uint64 i)
|
||||
{
|
||||
uint64 ni = pg_hton64(i);
|
||||
|
||||
@@ -105,7 +105,7 @@ pq_writeint64(StringInfoData *restrict buf, uint64 i)
|
||||
* sent to the frontend.
|
||||
*/
|
||||
static inline void
|
||||
pq_writestring(StringInfoData *restrict buf, const char *restrict str)
|
||||
pq_writestring(StringInfoData *pg_restrict buf, const char *pg_restrict str)
|
||||
{
|
||||
int slen = strlen(str);
|
||||
char *p;
|
||||
|
||||
@@ -786,6 +786,10 @@
|
||||
#undef inline
|
||||
#endif
|
||||
|
||||
/* Define to keyword to use for C99 restrict support, or to nothing if not
|
||||
supported */
|
||||
#undef pg_restrict
|
||||
|
||||
/* Define to the equivalent of the C99 'restrict' keyword, or to
|
||||
nothing if this is not supported. Do not define if restrict is
|
||||
supported directly. */
|
||||
|
||||
Reference in New Issue
Block a user