From a2098b60216c7a66054ee7b31e9f728bca43d004 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 1 May 2020 17:28:01 -0400 Subject: [PATCH] Get rid of trailing semicolons in C macro definitions. Writing a trailing semicolon in a macro is almost never the right thing, because you almost always want to write a semicolon after each macro call instead. (Even if there was some reason to prefer not to, pgindent would probably make a hash of code formatted that way; so within PG the rule should basically be "don't do it".) Thus, if we have a semi inside the macro, the compiler sees "something;;". Much of the time the extra empty statement is harmless, but it could lead to mysterious syntax errors at call sites. In perhaps an overabundance of neatnik-ism, let's run around and get rid of the excess semicolons whereever possible. The only thing worse than a mysterious syntax error is a mysterious syntax error that only happens in the back branches; therefore, backpatch these changes where relevant, which is most of them because most of these mistakes are old. (The lack of reported problems shows that this is largely a hypothetical issue, but still, it could bite us in some future patch.) John Naylor and Tom Lane Discussion: https://postgr.es/m/CACPNZCs0qWTqJ2QUSGJ07B7uvAvzMb-KbG2q+oo+J3tsWN5cqw@mail.gmail.com --- contrib/btree_gist/btree_ts.c | 5 +++-- contrib/btree_gist/btree_utils_num.h | 2 +- contrib/pg_trgm/trgm.h | 2 +- contrib/pgcrypto/crypt-blowfish.c | 12 +++++++----- src/backend/nodes/readfuncs.c | 8 ++++---- src/backend/optimizer/util/pathnode.c | 4 ++-- src/backend/utils/adt/formatting.c | 2 +- src/backend/utils/sort/gen_qsort_tuple.pl | 2 +- src/bin/pg_dump/pg_backup_archiver.h | 2 +- src/include/access/hash.h | 2 +- src/include/access/nbtree.h | 2 +- src/port/qsort.c | 2 +- src/port/qsort_arg.c | 2 +- 13 files changed, 25 insertions(+), 22 deletions(-) diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c index 18740cad38..9d992b9229 100644 --- a/contrib/btree_gist/btree_ts.c +++ b/contrib/btree_gist/btree_ts.c @@ -344,12 +344,13 @@ gbt_ts_union(PG_FUNCTION_ARGS) } -#define penalty_check_max_float(val) do { \ +#define penalty_check_max_float(val) \ + do { \ if ( val > FLT_MAX ) \ val = FLT_MAX; \ if ( val < -FLT_MAX ) \ val = -FLT_MAX; \ -} while(false); + } while (0) Datum diff --git a/contrib/btree_gist/btree_utils_num.h b/contrib/btree_gist/btree_utils_num.h index d7945f856c..7277e76f1e 100644 --- a/contrib/btree_gist/btree_utils_num.h +++ b/contrib/btree_gist/btree_utils_num.h @@ -74,7 +74,7 @@ typedef struct (*(result)) += (float) ( ((double)(tmp)) / ( (double)(tmp) + ( ((double)(oupper))*0.49F - ((double)(olower))*0.49F ) ) ); \ (*(result)) *= (FLT_MAX / (((GISTENTRY *) PG_GETARG_POINTER(0))->rel->rd_att->natts + 1)); \ } \ -} while (0); +} while (0) /* diff --git a/contrib/pg_trgm/trgm.h b/contrib/pg_trgm/trgm.h index f0ab50dd05..1a7124d4f8 100644 --- a/contrib/pg_trgm/trgm.h +++ b/contrib/pg_trgm/trgm.h @@ -48,7 +48,7 @@ typedef char trgm[3]; *(((char*)(a))+0) = *(((char*)(b))+0); \ *(((char*)(a))+1) = *(((char*)(b))+1); \ *(((char*)(a))+2) = *(((char*)(b))+2); \ -} while(0); +} while(0) #ifdef KEEPONLYALNUM #define ISWORDCHR(c) (t_isalpha(c) || t_isdigit(c)) diff --git a/contrib/pgcrypto/crypt-blowfish.c b/contrib/pgcrypto/crypt-blowfish.c index ed69c0c6bb..a663852ccf 100644 --- a/contrib/pgcrypto/crypt-blowfish.c +++ b/contrib/pgcrypto/crypt-blowfish.c @@ -469,7 +469,7 @@ BF_swap(BF_word *x, int count) tmp3 ^= tmp2; \ (R) ^= data.ctx.P[(N) + 1]; \ tmp3 += tmp1; \ - (R) ^= tmp3; + (R) ^= tmp3 #else /* Architectures with no complicated addressing modes supported */ #define BF_INDEX(S, i) \ @@ -490,7 +490,7 @@ BF_swap(BF_word *x, int count) tmp3 ^= tmp2; \ (R) ^= data.ctx.P[(N) + 1]; \ tmp3 += tmp1; \ - (R) ^= tmp3; + (R) ^= tmp3 #endif /* @@ -516,17 +516,18 @@ BF_swap(BF_word *x, int count) BF_ROUND(R, L, 15); \ tmp4 = R; \ R = L; \ - L = tmp4 ^ data.ctx.P[BF_N + 1]; + L = tmp4 ^ data.ctx.P[BF_N + 1] #if BF_ASM extern void _BF_body_r(BF_ctx *ctx); #define BF_body() \ - _BF_body_r(&data.ctx); + _BF_body_r(&data.ctx) #else #define BF_body() \ +do { \ L = R = 0; \ ptr = data.ctx.P; \ do { \ @@ -542,7 +543,8 @@ extern void _BF_body_r(BF_ctx *ctx); BF_ENCRYPT; \ *(ptr - 2) = L; \ *(ptr - 1) = R; \ - } while (ptr < &data.ctx.S[3][0xFF]); + } while (ptr < &data.ctx.S[3][0xFF]); \ +} while (0) #endif static void diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 77910d909b..1a72dd3be3 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -143,22 +143,22 @@ /* Read an attribute number array */ #define READ_ATTRNUMBER_ARRAY(fldname, len) \ token = pg_strtok(&length); /* skip :fldname */ \ - local_node->fldname = readAttrNumberCols(len); + local_node->fldname = readAttrNumberCols(len) /* Read an oid array */ #define READ_OID_ARRAY(fldname, len) \ token = pg_strtok(&length); /* skip :fldname */ \ - local_node->fldname = readOidCols(len); + local_node->fldname = readOidCols(len) /* Read an int array */ #define READ_INT_ARRAY(fldname, len) \ token = pg_strtok(&length); /* skip :fldname */ \ - local_node->fldname = readIntCols(len); + local_node->fldname = readIntCols(len) /* Read a bool array */ #define READ_BOOL_ARRAY(fldname, len) \ token = pg_strtok(&length); /* skip :fldname */ \ - local_node->fldname = readBoolCols(len); + local_node->fldname = readBoolCols(len) /* Routine exit */ #define READ_DONE() \ diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 4736d84a83..b1b7aca4a0 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -3660,7 +3660,7 @@ do { \ (path) = reparameterize_path_by_child(root, (path), child_rel); \ if ((path) == NULL) \ return NULL; \ -} while(0); +} while(0) #define REPARAMETERIZE_CHILD_PATH_LIST(pathlist) \ do { \ @@ -3671,7 +3671,7 @@ do { \ if ((pathlist) == NIL) \ return NULL; \ } \ -} while(0); +} while(0) Path *new_path; ParamPathInfo *new_ppi; diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index 7bca3c69ba..0bcfca306a 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -424,7 +424,7 @@ typedef struct (_X)->mode, (_X)->hh, (_X)->pm, (_X)->mi, (_X)->ss, (_X)->ssss, \ (_X)->d, (_X)->dd, (_X)->ddd, (_X)->mm, (_X)->ms, (_X)->year, \ (_X)->bc, (_X)->ww, (_X)->w, (_X)->cc, (_X)->j, (_X)->us, \ - (_X)->yysz, (_X)->clock); + (_X)->yysz, (_X)->clock) #define DEBUG_TM(_X) \ elog(DEBUG_elog_output, "TM:\nsec %d\nyear %d\nmin %d\nwday %d\nhour %d\nyday %d\nmday %d\nnisdst %d\nmon %d\n",\ (_X)->tm_sec, (_X)->tm_year,\ diff --git a/src/backend/utils/sort/gen_qsort_tuple.pl b/src/backend/utils/sort/gen_qsort_tuple.pl index b6b2ffa7d0..ddd71d0c24 100644 --- a/src/backend/utils/sort/gen_qsort_tuple.pl +++ b/src/backend/utils/sort/gen_qsort_tuple.pl @@ -125,7 +125,7 @@ swapfunc(SortTuple *a, SortTuple *b, size_t n) SortTuple t = *(a); \ *(a) = *(b); \ *(b) = t; \ - } while (0); + } while (0) #define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n) diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h index 56317f03c5..237053d45f 100644 --- a/src/bin/pg_dump/pg_backup_archiver.h +++ b/src/bin/pg_dump/pg_backup_archiver.h @@ -99,7 +99,7 @@ typedef z_stream *z_streamp; #define K_VERS_MAJOR 1 #define K_VERS_MINOR 13 #define K_VERS_REV 0 -#define K_VERS_SELF MAKE_ARCHIVE_VERSION(K_VERS_MAJOR, K_VERS_MINOR, K_VERS_REV); +#define K_VERS_SELF MAKE_ARCHIVE_VERSION(K_VERS_MAJOR, K_VERS_MINOR, K_VERS_REV) /* Newest format we can read */ #define K_VERS_MAX MAKE_ARCHIVE_VERSION(K_VERS_MAJOR, K_VERS_MINOR, 255) diff --git a/src/include/access/hash.h b/src/include/access/hash.h index 02ef67c974..f77395115d 100644 --- a/src/include/access/hash.h +++ b/src/include/access/hash.h @@ -158,7 +158,7 @@ typedef struct HashScanPosData (scanpos).firstItem = 0; \ (scanpos).lastItem = 0; \ (scanpos).itemIndex = 0; \ - } while (0); + } while (0) /* * HashScanOpaqueData is private state for a hash index scan. diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index 516f697b4c..e6b24408af 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -421,7 +421,7 @@ typedef BTScanPosData *BTScanPos; (scanpos).buf = InvalidBuffer; \ (scanpos).lsn = InvalidXLogRecPtr; \ (scanpos).nextTupleOffset = 0; \ - } while (0); + } while (0) /* We need one of these for each equality-type SK_SEARCHARRAY scan key */ typedef struct BTArrayKeyInfo diff --git a/src/port/qsort.c b/src/port/qsort.c index 1a8ee08c8b..6ebb7d4e8b 100644 --- a/src/port/qsort.c +++ b/src/port/qsort.c @@ -80,7 +80,7 @@ do { \ } while (0) #define SWAPINIT(a, es) swaptype = ((char *)(a) - (char *)0) % sizeof(long) || \ - (es) % sizeof(long) ? 2 : (es) == sizeof(long)? 0 : 1; + (es) % sizeof(long) ? 2 : (es) == sizeof(long)? 0 : 1 static void swapfunc(char *a, char *b, size_t n, int swaptype) diff --git a/src/port/qsort_arg.c b/src/port/qsort_arg.c index 24acd2cd4e..a75eeced2f 100644 --- a/src/port/qsort_arg.c +++ b/src/port/qsort_arg.c @@ -80,7 +80,7 @@ do { \ } while (0) #define SWAPINIT(a, es) swaptype = ((char *)(a) - (char *)0) % sizeof(long) || \ - (es) % sizeof(long) ? 2 : (es) == sizeof(long)? 0 : 1; + (es) % sizeof(long) ? 2 : (es) == sizeof(long)? 0 : 1 static void swapfunc(char *a, char *b, size_t n, int swaptype)