Add -Wimplicit-fallthrough to CFLAGS and CXXFLAGS

Use it at level 4, a bit more restrictive than the default level, and
tweak our commanding comments to FALLTHROUGH.

(However, leave zic.c alone, since it's external code; to avoid the
warnings that would appear there, change CFLAGS for that file in the
Makefile.)

Author: Julien Rouhaud <rjuju123@gmail.com>
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/20200412081825.qyo5vwwco3fv4gdo@nol
Discussion: https://postgr.es/m/flat/E1fDenm-0000C8-IJ@gemulon.postgresql.org
This commit is contained in:
Alvaro Herrera 2020-05-12 16:01:52 -04:00
parent 6a918c3ac8
commit 3e9744465d
No known key found for this signature in database
GPG Key ID: 1C20ACB9D5C564AE
33 changed files with 269 additions and 171 deletions

91
configure vendored
View File

@ -5552,6 +5552,97 @@ if test x"$pgac_cv_prog_CXX_cxxflags__Wmissing_format_attribute" = x"yes"; then
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} supports -Wimplicit-fallthrough=4, for CFLAGS" >&5
$as_echo_n "checking whether ${CC} supports -Wimplicit-fallthrough=4, for CFLAGS... " >&6; }
if ${pgac_cv_prog_CC_cflags__Wimplicit_fallthrough_4+:} false; then :
$as_echo_n "(cached) " >&6
else
pgac_save_CFLAGS=$CFLAGS
pgac_save_CC=$CC
CC=${CC}
CFLAGS="${CFLAGS} -Wimplicit-fallthrough=4"
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
pgac_cv_prog_CC_cflags__Wimplicit_fallthrough_4=yes
else
pgac_cv_prog_CC_cflags__Wimplicit_fallthrough_4=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="$pgac_save_CFLAGS"
CC="$pgac_save_CC"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CC_cflags__Wimplicit_fallthrough_4" >&5
$as_echo "$pgac_cv_prog_CC_cflags__Wimplicit_fallthrough_4" >&6; }
if test x"$pgac_cv_prog_CC_cflags__Wimplicit_fallthrough_4" = x"yes"; then
CFLAGS="${CFLAGS} -Wimplicit-fallthrough=4"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} supports -Wimplicit-fallthrough=4, for CXXFLAGS" >&5
$as_echo_n "checking whether ${CXX} supports -Wimplicit-fallthrough=4, for CXXFLAGS... " >&6; }
if ${pgac_cv_prog_CXX_cxxflags__Wimplicit_fallthrough_4+:} false; then :
$as_echo_n "(cached) " >&6
else
pgac_save_CXXFLAGS=$CXXFLAGS
pgac_save_CXX=$CXX
CXX=${CXX}
CXXFLAGS="${CXXFLAGS} -Wimplicit-fallthrough=4"
ac_save_cxx_werror_flag=$ac_cxx_werror_flag
ac_cxx_werror_flag=yes
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
pgac_cv_prog_CXX_cxxflags__Wimplicit_fallthrough_4=yes
else
pgac_cv_prog_CXX_cxxflags__Wimplicit_fallthrough_4=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
CXXFLAGS="$pgac_save_CXXFLAGS"
CXX="$pgac_save_CXX"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CXX_cxxflags__Wimplicit_fallthrough_4" >&5
$as_echo "$pgac_cv_prog_CXX_cxxflags__Wimplicit_fallthrough_4" >&6; }
if test x"$pgac_cv_prog_CXX_cxxflags__Wimplicit_fallthrough_4" = x"yes"; then
CXXFLAGS="${CXXFLAGS} -Wimplicit-fallthrough=4"
fi
# This was included in -Wall/-Wformat in older GCC versions
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} supports -Wformat-security, for CFLAGS" >&5

View File

@ -496,6 +496,8 @@ if test "$GCC" = yes -a "$ICC" = no; then
PGAC_PROG_CXX_CFLAGS_OPT([-Wendif-labels])
PGAC_PROG_CC_CFLAGS_OPT([-Wmissing-format-attribute])
PGAC_PROG_CXX_CFLAGS_OPT([-Wmissing-format-attribute])
PGAC_PROG_CC_CFLAGS_OPT([-Wimplicit-fallthrough=4])
PGAC_PROG_CXX_CFLAGS_OPT([-Wimplicit-fallthrough=4])
# This was included in -Wall/-Wformat in older GCC versions
PGAC_PROG_CC_CFLAGS_OPT([-Wformat-security])
PGAC_PROG_CXX_CFLAGS_OPT([-Wformat-security])

View File

@ -814,7 +814,7 @@ heapam_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap,
break;
case HEAPTUPLE_RECENTLY_DEAD:
*tups_recently_dead += 1;
/* fall through */
/* FALLTHROUGH */
case HEAPTUPLE_LIVE:
/* Live or recently dead, must copy it */
isdead = false;

View File

@ -615,7 +615,7 @@ findDependentObjects(const ObjectAddress *object,
break;
/* Otherwise, treat this like an internal dependency */
/* FALL THRU */
/* FALLTHROUGH */
case DEPENDENCY_INTERNAL:

View File

@ -12467,7 +12467,7 @@ ATExecChangeOwner(Oid relationOid, Oid newOwnerId, bool recursing, LOCKMODE lock
case RELKIND_TOASTVALUE:
if (recursing)
break;
/* FALL THRU */
/* FALLTHROUGH */
default:
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),

View File

@ -3877,7 +3877,7 @@ AfterTriggerExecute(EState *estate,
trig_tuple_slot2))
elog(ERROR, "failed to fetch tuple2 for AFTER trigger");
}
/* fall through */
/* FALLTHROUGH */
case AFTER_TRIGGER_FDW_REUSE:
/*

View File

@ -256,7 +256,7 @@ MultiExecParallelHash(HashState *node)
* way, wait for everyone to arrive here so we can proceed.
*/
BarrierArriveAndWait(build_barrier, WAIT_EVENT_HASH_BUILD_ALLOCATING);
/* Fall through. */
/* FALLTHROUGH */
case PHJ_BUILD_HASHING_INNER:
@ -1181,13 +1181,13 @@ ExecParallelHashIncreaseNumBatches(HashJoinTable hashtable)
/* All other participants just flush their tuples to disk. */
ExecParallelHashCloseBatchAccessors(hashtable);
}
/* Fall through. */
/* FALLTHROUGH */
case PHJ_GROW_BATCHES_ALLOCATING:
/* Wait for the above to be finished. */
BarrierArriveAndWait(&pstate->grow_batches_barrier,
WAIT_EVENT_HASH_GROW_BATCHES_ALLOCATING);
/* Fall through. */
/* FALLTHROUGH */
case PHJ_GROW_BATCHES_REPARTITIONING:
/* Make sure that we have the current dimensions and buckets. */
@ -1200,7 +1200,7 @@ ExecParallelHashIncreaseNumBatches(HashJoinTable hashtable)
/* Wait for the above to be finished. */
BarrierArriveAndWait(&pstate->grow_batches_barrier,
WAIT_EVENT_HASH_GROW_BATCHES_REPARTITIONING);
/* Fall through. */
/* FALLTHROUGH */
case PHJ_GROW_BATCHES_DECIDING:
@ -1255,7 +1255,7 @@ ExecParallelHashIncreaseNumBatches(HashJoinTable hashtable)
dsa_free(hashtable->area, pstate->old_batches);
pstate->old_batches = InvalidDsaPointer;
}
/* Fall through. */
/* FALLTHROUGH */
case PHJ_GROW_BATCHES_FINISHING:
/* Wait for the above to complete. */
@ -1533,13 +1533,13 @@ ExecParallelHashIncreaseNumBuckets(HashJoinTable hashtable)
/* Clear the flag. */
pstate->growth = PHJ_GROWTH_OK;
}
/* Fall through. */
/* FALLTHROUGH */
case PHJ_GROW_BUCKETS_ALLOCATING:
/* Wait for the above to complete. */
BarrierArriveAndWait(&pstate->grow_buckets_barrier,
WAIT_EVENT_HASH_GROW_BUCKETS_ALLOCATING);
/* Fall through. */
/* FALLTHROUGH */
case PHJ_GROW_BUCKETS_REINSERTING:
/* Reinsert all tuples into the hash table. */

View File

@ -340,7 +340,7 @@ ExecHashJoinImpl(PlanState *pstate, bool parallel)
else
node->hj_JoinState = HJ_NEED_NEW_OUTER;
/* FALL THRU */
/* FALLTHROUGH */
case HJ_NEED_NEW_OUTER:
@ -413,7 +413,7 @@ ExecHashJoinImpl(PlanState *pstate, bool parallel)
/* OK, let's scan the bucket for matches */
node->hj_JoinState = HJ_SCAN_BUCKET;
/* FALL THRU */
/* FALLTHROUGH */
case HJ_SCAN_BUCKET:
@ -1137,13 +1137,13 @@ ExecParallelHashJoinNewBatch(HashJoinState *hjstate)
if (BarrierArriveAndWait(batch_barrier,
WAIT_EVENT_HASH_BATCH_ELECTING))
ExecParallelHashTableAlloc(hashtable, batchno);
/* Fall through. */
/* FALLTHROUGH */
case PHJ_BATCH_ALLOCATING:
/* Wait for allocation to complete. */
BarrierArriveAndWait(batch_barrier,
WAIT_EVENT_HASH_BATCH_ALLOCATING);
/* Fall through. */
/* FALLTHROUGH */
case PHJ_BATCH_LOADING:
/* Start (or join in) loading tuples. */
@ -1163,7 +1163,7 @@ ExecParallelHashJoinNewBatch(HashJoinState *hjstate)
sts_end_parallel_scan(inner_tuples);
BarrierArriveAndWait(batch_barrier,
WAIT_EVENT_HASH_BATCH_LOADING);
/* Fall through. */
/* FALLTHROUGH */
case PHJ_BATCH_PROBING:

View File

@ -69,7 +69,7 @@ ExecLimit(PlanState *pstate)
*/
recompute_limits(node);
/* FALL THRU */
/* FALLTHROUGH */
case LIMIT_RESCAN:
@ -216,7 +216,7 @@ ExecLimit(PlanState *pstate)
}
Assert(node->lstate == LIMIT_WINDOWEND_TIES);
/* FALL THRU */
/* FALLTHROUGH */
case LIMIT_WINDOWEND_TIES:
if (ScanDirectionIsForward(direction))

View File

@ -2123,7 +2123,7 @@ pam_passwd_conv_proc(int num_msg, const struct pam_message **msg,
ereport(LOG,
(errmsg("error from underlying PAM layer: %s",
msg[i]->msg)));
/* FALL THROUGH */
/* FALLTHROUGH */
case PAM_TEXT_INFO:
/* we don't bother to log TEXT_INFO messages */
if ((reply[i].resp = strdup("")) == NULL)

View File

@ -1582,7 +1582,7 @@ find_nonnullable_rels_walker(Node *node, bool top_level)
* the intersection of the sets of nonnullable rels, just as
* for OR. Fall through to share code.
*/
/* FALL THRU */
/* FALLTHROUGH */
case OR_EXPR:
/*
@ -1807,7 +1807,7 @@ find_nonnullable_vars_walker(Node *node, bool top_level)
* the intersection of the sets of nonnullable vars, just as
* for OR. Fall through to share code.
*/
/* FALL THRU */
/* FALLTHROUGH */
case OR_EXPR:
/*

View File

@ -737,7 +737,7 @@ transformColumnDefinition(CreateStmtContext *cxt, ColumnDef *column)
errmsg("primary key constraints are not supported on foreign tables"),
parser_errposition(cxt->pstate,
constraint->location)));
/* FALL THRU */
/* FALLTHROUGH */
case CONSTR_UNIQUE:
if (cxt->isforeign)

View File

@ -2571,7 +2571,7 @@ get_matching_list_bounds(PartitionPruneContext *context,
case BTGreaterEqualStrategyNumber:
inclusive = true;
/* fall through */
/* FALLTHROUGH */
case BTGreaterStrategyNumber:
off = partition_list_bsearch(partsupfunc,
partcollation,
@ -2606,7 +2606,7 @@ get_matching_list_bounds(PartitionPruneContext *context,
case BTLessEqualStrategyNumber:
inclusive = true;
/* fall through */
/* FALLTHROUGH */
case BTLessStrategyNumber:
off = partition_list_bsearch(partsupfunc,
partcollation,
@ -2853,7 +2853,7 @@ get_matching_range_bounds(PartitionPruneContext *context,
case BTGreaterEqualStrategyNumber:
inclusive = true;
/* fall through */
/* FALLTHROUGH */
case BTGreaterStrategyNumber:
/*
@ -2934,7 +2934,7 @@ get_matching_range_bounds(PartitionPruneContext *context,
case BTLessEqualStrategyNumber:
inclusive = true;
/* fall through */
/* FALLTHROUGH */
case BTLessStrategyNumber:
/*

View File

@ -5902,19 +5902,19 @@ bgworker_should_start_now(BgWorkerStartTime start_time)
case PM_RUN:
if (start_time == BgWorkerStart_RecoveryFinished)
return true;
/* fall through */
/* FALLTHROUGH */
case PM_HOT_STANDBY:
if (start_time == BgWorkerStart_ConsistentState)
return true;
/* fall through */
/* FALLTHROUGH */
case PM_RECOVERY:
case PM_STARTUP:
case PM_INIT:
if (start_time == BgWorkerStart_PostmasterStart)
return true;
/* fall through */
/* FALLTHROUGH */
}

View File

@ -303,7 +303,7 @@ pg_wc_isdigit(pg_wchar c)
case PG_REGEX_LOCALE_WIDE:
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswdigit((wint_t) c);
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE:
return (c <= (pg_wchar) UCHAR_MAX &&
isdigit((unsigned char) c));
@ -312,7 +312,7 @@ pg_wc_isdigit(pg_wchar c)
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswdigit_l((wint_t) c, pg_regex_locale->info.lt);
#endif
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE_L:
#ifdef HAVE_LOCALE_T
return (c <= (pg_wchar) UCHAR_MAX &&
@ -339,7 +339,7 @@ pg_wc_isalpha(pg_wchar c)
case PG_REGEX_LOCALE_WIDE:
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswalpha((wint_t) c);
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE:
return (c <= (pg_wchar) UCHAR_MAX &&
isalpha((unsigned char) c));
@ -348,7 +348,7 @@ pg_wc_isalpha(pg_wchar c)
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswalpha_l((wint_t) c, pg_regex_locale->info.lt);
#endif
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE_L:
#ifdef HAVE_LOCALE_T
return (c <= (pg_wchar) UCHAR_MAX &&
@ -375,7 +375,7 @@ pg_wc_isalnum(pg_wchar c)
case PG_REGEX_LOCALE_WIDE:
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswalnum((wint_t) c);
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE:
return (c <= (pg_wchar) UCHAR_MAX &&
isalnum((unsigned char) c));
@ -384,7 +384,7 @@ pg_wc_isalnum(pg_wchar c)
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswalnum_l((wint_t) c, pg_regex_locale->info.lt);
#endif
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE_L:
#ifdef HAVE_LOCALE_T
return (c <= (pg_wchar) UCHAR_MAX &&
@ -411,7 +411,7 @@ pg_wc_isupper(pg_wchar c)
case PG_REGEX_LOCALE_WIDE:
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswupper((wint_t) c);
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE:
return (c <= (pg_wchar) UCHAR_MAX &&
isupper((unsigned char) c));
@ -420,7 +420,7 @@ pg_wc_isupper(pg_wchar c)
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswupper_l((wint_t) c, pg_regex_locale->info.lt);
#endif
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE_L:
#ifdef HAVE_LOCALE_T
return (c <= (pg_wchar) UCHAR_MAX &&
@ -447,7 +447,7 @@ pg_wc_islower(pg_wchar c)
case PG_REGEX_LOCALE_WIDE:
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswlower((wint_t) c);
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE:
return (c <= (pg_wchar) UCHAR_MAX &&
islower((unsigned char) c));
@ -456,7 +456,7 @@ pg_wc_islower(pg_wchar c)
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswlower_l((wint_t) c, pg_regex_locale->info.lt);
#endif
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE_L:
#ifdef HAVE_LOCALE_T
return (c <= (pg_wchar) UCHAR_MAX &&
@ -483,7 +483,7 @@ pg_wc_isgraph(pg_wchar c)
case PG_REGEX_LOCALE_WIDE:
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswgraph((wint_t) c);
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE:
return (c <= (pg_wchar) UCHAR_MAX &&
isgraph((unsigned char) c));
@ -492,7 +492,7 @@ pg_wc_isgraph(pg_wchar c)
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswgraph_l((wint_t) c, pg_regex_locale->info.lt);
#endif
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE_L:
#ifdef HAVE_LOCALE_T
return (c <= (pg_wchar) UCHAR_MAX &&
@ -519,7 +519,7 @@ pg_wc_isprint(pg_wchar c)
case PG_REGEX_LOCALE_WIDE:
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswprint((wint_t) c);
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE:
return (c <= (pg_wchar) UCHAR_MAX &&
isprint((unsigned char) c));
@ -528,7 +528,7 @@ pg_wc_isprint(pg_wchar c)
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswprint_l((wint_t) c, pg_regex_locale->info.lt);
#endif
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE_L:
#ifdef HAVE_LOCALE_T
return (c <= (pg_wchar) UCHAR_MAX &&
@ -555,7 +555,7 @@ pg_wc_ispunct(pg_wchar c)
case PG_REGEX_LOCALE_WIDE:
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswpunct((wint_t) c);
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE:
return (c <= (pg_wchar) UCHAR_MAX &&
ispunct((unsigned char) c));
@ -564,7 +564,7 @@ pg_wc_ispunct(pg_wchar c)
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswpunct_l((wint_t) c, pg_regex_locale->info.lt);
#endif
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE_L:
#ifdef HAVE_LOCALE_T
return (c <= (pg_wchar) UCHAR_MAX &&
@ -591,7 +591,7 @@ pg_wc_isspace(pg_wchar c)
case PG_REGEX_LOCALE_WIDE:
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswspace((wint_t) c);
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE:
return (c <= (pg_wchar) UCHAR_MAX &&
isspace((unsigned char) c));
@ -600,7 +600,7 @@ pg_wc_isspace(pg_wchar c)
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return iswspace_l((wint_t) c, pg_regex_locale->info.lt);
#endif
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE_L:
#ifdef HAVE_LOCALE_T
return (c <= (pg_wchar) UCHAR_MAX &&
@ -631,7 +631,7 @@ pg_wc_toupper(pg_wchar c)
return pg_ascii_toupper((unsigned char) c);
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return towupper((wint_t) c);
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE:
/* force C behavior for ASCII characters, per comments above */
if (c <= (pg_wchar) 127)
@ -644,7 +644,7 @@ pg_wc_toupper(pg_wchar c)
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return towupper_l((wint_t) c, pg_regex_locale->info.lt);
#endif
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE_L:
#ifdef HAVE_LOCALE_T
if (c <= (pg_wchar) UCHAR_MAX)
@ -675,7 +675,7 @@ pg_wc_tolower(pg_wchar c)
return pg_ascii_tolower((unsigned char) c);
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return towlower((wint_t) c);
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE:
/* force C behavior for ASCII characters, per comments above */
if (c <= (pg_wchar) 127)
@ -688,7 +688,7 @@ pg_wc_tolower(pg_wchar c)
if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF)
return towlower_l((wint_t) c, pg_regex_locale->info.lt);
#endif
/* FALL THRU */
/* FALLTHROUGH */
case PG_REGEX_LOCALE_1BYTE_L:
#ifdef HAVE_LOCALE_T
if (c <= (pg_wchar) UCHAR_MAX)

View File

@ -1589,7 +1589,7 @@ ReorderBufferCommit(ReorderBuffer *rb, TransactionId xid,
change = specinsert;
change->action = REORDER_BUFFER_CHANGE_INSERT;
/* intentionally fall through */
/* FALLTHROUGH */
case REORDER_BUFFER_CHANGE_INSERT:
case REORDER_BUFFER_CHANGE_UPDATE:
case REORDER_BUFFER_CHANGE_DELETE:

View File

@ -215,7 +215,7 @@ WalReceiverMain(void)
case WALRCV_STOPPING:
/* If we've already been requested to stop, don't start up. */
walrcv->walRcvState = WALRCV_STOPPED;
/* fall through */
/* FALLTHROUGH */
case WALRCV_STOPPED:
SpinLockRelease(&walrcv->mutex);

View File

@ -183,7 +183,7 @@ ShutdownWalRcv(void)
case WALRCV_WAITING:
case WALRCV_RESTARTING:
walrcv->walRcvState = WALRCV_STOPPING;
/* fall through */
/* FALLTHROUGH */
case WALRCV_STOPPING:
walrcvpid = walrcv->pid;
break;

View File

@ -1883,7 +1883,7 @@ ExecDropStmt(DropStmt *stmt, bool isTopLevel)
if (stmt->concurrent)
PreventInTransactionBlock(isTopLevel,
"DROP INDEX CONCURRENTLY");
/* fall through */
/* FALLTHROUGH */
case OBJECT_TABLE:
case OBJECT_SEQUENCE:

View File

@ -3425,7 +3425,7 @@ DCH_from_char(FormatNode *node, const char *in, TmFromChar *out,
case DCH_FF5:
case DCH_FF6:
out->ff = n->key->id - DCH_FF1 + 1;
/* fall through */
/* FALLTHROUGH */
case DCH_US: /* microsecond */
len = from_char_parse_int_len(&out->us, &s,
n->key->id == DCH_US ? 6 :

View File

@ -637,7 +637,7 @@ pushJsonbValueScalar(JsonbParseState **pstate, JsonbIteratorToken seq,
break;
case WJB_END_OBJECT:
uniqueifyJsonbObject(&(*pstate)->contVal);
/* fall through! */
/* FALLTHROUGH */
case WJB_END_ARRAY:
/* Steps here common to WJB_END_OBJECT case */
Assert(!scalarVal);

View File

@ -3866,14 +3866,14 @@ timestamp_trunc(PG_FUNCTION_ARGS)
tm->tm_year = ((tm->tm_year + 999) / 1000) * 1000 - 999;
else
tm->tm_year = -((999 - (tm->tm_year - 1)) / 1000) * 1000 + 1;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_CENTURY:
/* see comments in timestamptz_trunc */
if (tm->tm_year > 0)
tm->tm_year = ((tm->tm_year + 99) / 100) * 100 - 99;
else
tm->tm_year = -((99 - (tm->tm_year - 1)) / 100) * 100 + 1;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_DECADE:
/* see comments in timestamptz_trunc */
if (val != DTK_MILLENNIUM && val != DTK_CENTURY)
@ -3883,25 +3883,25 @@ timestamp_trunc(PG_FUNCTION_ARGS)
else
tm->tm_year = -((8 - (tm->tm_year - 1)) / 10) * 10;
}
/* FALL THRU */
/* FALLTHROUGH */
case DTK_YEAR:
tm->tm_mon = 1;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_QUARTER:
tm->tm_mon = (3 * ((tm->tm_mon - 1) / 3)) + 1;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_MONTH:
tm->tm_mday = 1;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_DAY:
tm->tm_hour = 0;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_HOUR:
tm->tm_min = 0;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_MINUTE:
tm->tm_sec = 0;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_SECOND:
fsec = 0;
break;
@ -4007,14 +4007,14 @@ timestamptz_trunc_internal(text *units, TimestampTz timestamp, pg_tz *tzp)
tm->tm_year = ((tm->tm_year + 999) / 1000) * 1000 - 999;
else
tm->tm_year = -((999 - (tm->tm_year - 1)) / 1000) * 1000 + 1;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_CENTURY:
/* truncating to the century? as above: -100, 1, 101... */
if (tm->tm_year > 0)
tm->tm_year = ((tm->tm_year + 99) / 100) * 100 - 99;
else
tm->tm_year = -((99 - (tm->tm_year - 1)) / 100) * 100 + 1;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_DECADE:
/*
@ -4028,26 +4028,26 @@ timestamptz_trunc_internal(text *units, TimestampTz timestamp, pg_tz *tzp)
else
tm->tm_year = -((8 - (tm->tm_year - 1)) / 10) * 10;
}
/* FALL THRU */
/* FALLTHROUGH */
case DTK_YEAR:
tm->tm_mon = 1;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_QUARTER:
tm->tm_mon = (3 * ((tm->tm_mon - 1) / 3)) + 1;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_MONTH:
tm->tm_mday = 1;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_DAY:
tm->tm_hour = 0;
redotz = true; /* for all cases >= DAY */
/* FALL THRU */
/* FALLTHROUGH */
case DTK_HOUR:
tm->tm_min = 0;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_MINUTE:
tm->tm_sec = 0;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_SECOND:
fsec = 0;
break;
@ -4195,33 +4195,33 @@ interval_trunc(PG_FUNCTION_ARGS)
case DTK_MILLENNIUM:
/* caution: C division may have negative remainder */
tm->tm_year = (tm->tm_year / 1000) * 1000;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_CENTURY:
/* caution: C division may have negative remainder */
tm->tm_year = (tm->tm_year / 100) * 100;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_DECADE:
/* caution: C division may have negative remainder */
tm->tm_year = (tm->tm_year / 10) * 10;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_YEAR:
tm->tm_mon = 0;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_QUARTER:
tm->tm_mon = 3 * (tm->tm_mon / 3);
/* FALL THRU */
/* FALLTHROUGH */
case DTK_MONTH:
tm->tm_mday = 0;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_DAY:
tm->tm_hour = 0;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_HOUR:
tm->tm_min = 0;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_MINUTE:
tm->tm_sec = 0;
/* FALL THRU */
/* FALLTHROUGH */
case DTK_SECOND:
fsec = 0;
break;

View File

@ -264,7 +264,7 @@ TS_execute_ternary(GinChkVal *gcv, QueryItem *curitem, bool in_phrase)
/* Pass down in_phrase == true in case there's a NOT below */
in_phrase = true;
/* FALL THRU */
/* FALLTHROUGH */
case OP_AND:
val1 = TS_execute_ternary(gcv, curitem + curitem->qoperator.left,

View File

@ -1042,7 +1042,7 @@ hash_search_with_hash_value(HTAB *hashp,
case HASH_ENTER_NULL:
/* ENTER_NULL does not work with palloc-based allocator */
Assert(hashp->alloc != DynaHashAlloc);
/* FALL THRU */
/* FALLTHROUGH */
case HASH_ENTER:
/* Return existing element if found, else create one */

View File

@ -1263,7 +1263,7 @@ pg_utf8_increment(unsigned char *charptr, int length)
charptr[3]++;
break;
}
/* FALL THRU */
/* FALLTHROUGH */
case 3:
a = charptr[2];
if (a < 0xBF)
@ -1271,7 +1271,7 @@ pg_utf8_increment(unsigned char *charptr, int length)
charptr[2]++;
break;
}
/* FALL THRU */
/* FALLTHROUGH */
case 2:
a = charptr[1];
switch (*charptr)
@ -1291,7 +1291,7 @@ pg_utf8_increment(unsigned char *charptr, int length)
charptr[1]++;
break;
}
/* FALL THRU */
/* FALLTHROUGH */
case 1:
a = *charptr;
if (a == 0x7F || a == 0xDF || a == 0xEF || a == 0xF4)

View File

@ -8436,7 +8436,7 @@ ExecSetVariableStmt(VariableSetStmt *stmt, bool isTopLevel)
case VAR_SET_DEFAULT:
if (stmt->is_local)
WarnNoTransactionBlock(isTopLevel, "SET LOCAL");
/* fall through */
/* FALLTHROUGH */
case VAR_RESET:
if (strcmp(stmt->name, "transaction_isolation") == 0)
WarnNoTransactionBlock(isTopLevel, "RESET TRANSACTION");

View File

@ -178,13 +178,13 @@ hash_bytes(const unsigned char *k, int keylen)
{
case 11:
c += ((uint32) k[10] << 8);
/* fall through */
/* FALLTHROUGH */
case 10:
c += ((uint32) k[9] << 16);
/* fall through */
/* FALLTHROUGH */
case 9:
c += ((uint32) k[8] << 24);
/* fall through */
/* FALLTHROUGH */
case 8:
/* the lowest byte of c is reserved for the length */
b += ka[1];
@ -192,22 +192,22 @@ hash_bytes(const unsigned char *k, int keylen)
break;
case 7:
b += ((uint32) k[6] << 8);
/* fall through */
/* FALLTHROUGH */
case 6:
b += ((uint32) k[5] << 16);
/* fall through */
/* FALLTHROUGH */
case 5:
b += ((uint32) k[4] << 24);
/* fall through */
/* FALLTHROUGH */
case 4:
a += ka[0];
break;
case 3:
a += ((uint32) k[2] << 8);
/* fall through */
/* FALLTHROUGH */
case 2:
a += ((uint32) k[1] << 16);
/* fall through */
/* FALLTHROUGH */
case 1:
a += ((uint32) k[0] << 24);
/* case 0: nothing left to add */
@ -217,13 +217,13 @@ hash_bytes(const unsigned char *k, int keylen)
{
case 11:
c += ((uint32) k[10] << 24);
/* fall through */
/* FALLTHROUGH */
case 10:
c += ((uint32) k[9] << 16);
/* fall through */
/* FALLTHROUGH */
case 9:
c += ((uint32) k[8] << 8);
/* fall through */
/* FALLTHROUGH */
case 8:
/* the lowest byte of c is reserved for the length */
b += ka[1];
@ -231,22 +231,22 @@ hash_bytes(const unsigned char *k, int keylen)
break;
case 7:
b += ((uint32) k[6] << 16);
/* fall through */
/* FALLTHROUGH */
case 6:
b += ((uint32) k[5] << 8);
/* fall through */
/* FALLTHROUGH */
case 5:
b += k[4];
/* fall through */
/* FALLTHROUGH */
case 4:
a += ka[0];
break;
case 3:
a += ((uint32) k[2] << 16);
/* fall through */
/* FALLTHROUGH */
case 2:
a += ((uint32) k[1] << 8);
/* fall through */
/* FALLTHROUGH */
case 1:
a += k[0];
/* case 0: nothing left to add */
@ -280,35 +280,35 @@ hash_bytes(const unsigned char *k, int keylen)
{
case 11:
c += ((uint32) k[10] << 8);
/* fall through */
/* FALLTHROUGH */
case 10:
c += ((uint32) k[9] << 16);
/* fall through */
/* FALLTHROUGH */
case 9:
c += ((uint32) k[8] << 24);
/* fall through */
/* FALLTHROUGH */
case 8:
/* the lowest byte of c is reserved for the length */
b += k[7];
/* fall through */
/* FALLTHROUGH */
case 7:
b += ((uint32) k[6] << 8);
/* fall through */
/* FALLTHROUGH */
case 6:
b += ((uint32) k[5] << 16);
/* fall through */
/* FALLTHROUGH */
case 5:
b += ((uint32) k[4] << 24);
/* fall through */
/* FALLTHROUGH */
case 4:
a += k[3];
/* fall through */
/* FALLTHROUGH */
case 3:
a += ((uint32) k[2] << 8);
/* fall through */
/* FALLTHROUGH */
case 2:
a += ((uint32) k[1] << 16);
/* fall through */
/* FALLTHROUGH */
case 1:
a += ((uint32) k[0] << 24);
/* case 0: nothing left to add */
@ -318,35 +318,35 @@ hash_bytes(const unsigned char *k, int keylen)
{
case 11:
c += ((uint32) k[10] << 24);
/* fall through */
/* FALLTHROUGH */
case 10:
c += ((uint32) k[9] << 16);
/* fall through */
/* FALLTHROUGH */
case 9:
c += ((uint32) k[8] << 8);
/* fall through */
/* FALLTHROUGH */
case 8:
/* the lowest byte of c is reserved for the length */
b += ((uint32) k[7] << 24);
/* fall through */
/* FALLTHROUGH */
case 7:
b += ((uint32) k[6] << 16);
/* fall through */
/* FALLTHROUGH */
case 6:
b += ((uint32) k[5] << 8);
/* fall through */
/* FALLTHROUGH */
case 5:
b += k[4];
/* fall through */
/* FALLTHROUGH */
case 4:
a += ((uint32) k[3] << 24);
/* fall through */
/* FALLTHROUGH */
case 3:
a += ((uint32) k[2] << 16);
/* fall through */
/* FALLTHROUGH */
case 2:
a += ((uint32) k[1] << 8);
/* fall through */
/* FALLTHROUGH */
case 1:
a += k[0];
/* case 0: nothing left to add */
@ -417,13 +417,13 @@ hash_bytes_extended(const unsigned char *k, int keylen, uint64 seed)
{
case 11:
c += ((uint32) k[10] << 8);
/* fall through */
/* FALLTHROUGH */
case 10:
c += ((uint32) k[9] << 16);
/* fall through */
/* FALLTHROUGH */
case 9:
c += ((uint32) k[8] << 24);
/* fall through */
/* FALLTHROUGH */
case 8:
/* the lowest byte of c is reserved for the length */
b += ka[1];
@ -431,22 +431,22 @@ hash_bytes_extended(const unsigned char *k, int keylen, uint64 seed)
break;
case 7:
b += ((uint32) k[6] << 8);
/* fall through */
/* FALLTHROUGH */
case 6:
b += ((uint32) k[5] << 16);
/* fall through */
/* FALLTHROUGH */
case 5:
b += ((uint32) k[4] << 24);
/* fall through */
/* FALLTHROUGH */
case 4:
a += ka[0];
break;
case 3:
a += ((uint32) k[2] << 8);
/* fall through */
/* FALLTHROUGH */
case 2:
a += ((uint32) k[1] << 16);
/* fall through */
/* FALLTHROUGH */
case 1:
a += ((uint32) k[0] << 24);
/* case 0: nothing left to add */
@ -456,13 +456,13 @@ hash_bytes_extended(const unsigned char *k, int keylen, uint64 seed)
{
case 11:
c += ((uint32) k[10] << 24);
/* fall through */
/* FALLTHROUGH */
case 10:
c += ((uint32) k[9] << 16);
/* fall through */
/* FALLTHROUGH */
case 9:
c += ((uint32) k[8] << 8);
/* fall through */
/* FALLTHROUGH */
case 8:
/* the lowest byte of c is reserved for the length */
b += ka[1];
@ -470,22 +470,22 @@ hash_bytes_extended(const unsigned char *k, int keylen, uint64 seed)
break;
case 7:
b += ((uint32) k[6] << 16);
/* fall through */
/* FALLTHROUGH */
case 6:
b += ((uint32) k[5] << 8);
/* fall through */
/* FALLTHROUGH */
case 5:
b += k[4];
/* fall through */
/* FALLTHROUGH */
case 4:
a += ka[0];
break;
case 3:
a += ((uint32) k[2] << 16);
/* fall through */
/* FALLTHROUGH */
case 2:
a += ((uint32) k[1] << 8);
/* fall through */
/* FALLTHROUGH */
case 1:
a += k[0];
/* case 0: nothing left to add */
@ -519,35 +519,35 @@ hash_bytes_extended(const unsigned char *k, int keylen, uint64 seed)
{
case 11:
c += ((uint32) k[10] << 8);
/* fall through */
/* FALLTHROUGH */
case 10:
c += ((uint32) k[9] << 16);
/* fall through */
/* FALLTHROUGH */
case 9:
c += ((uint32) k[8] << 24);
/* fall through */
/* FALLTHROUGH */
case 8:
/* the lowest byte of c is reserved for the length */
b += k[7];
/* fall through */
/* FALLTHROUGH */
case 7:
b += ((uint32) k[6] << 8);
/* fall through */
/* FALLTHROUGH */
case 6:
b += ((uint32) k[5] << 16);
/* fall through */
/* FALLTHROUGH */
case 5:
b += ((uint32) k[4] << 24);
/* fall through */
/* FALLTHROUGH */
case 4:
a += k[3];
/* fall through */
/* FALLTHROUGH */
case 3:
a += ((uint32) k[2] << 8);
/* fall through */
/* FALLTHROUGH */
case 2:
a += ((uint32) k[1] << 16);
/* fall through */
/* FALLTHROUGH */
case 1:
a += ((uint32) k[0] << 24);
/* case 0: nothing left to add */
@ -557,35 +557,35 @@ hash_bytes_extended(const unsigned char *k, int keylen, uint64 seed)
{
case 11:
c += ((uint32) k[10] << 24);
/* fall through */
/* FALLTHROUGH */
case 10:
c += ((uint32) k[9] << 16);
/* fall through */
/* FALLTHROUGH */
case 9:
c += ((uint32) k[8] << 8);
/* fall through */
/* FALLTHROUGH */
case 8:
/* the lowest byte of c is reserved for the length */
b += ((uint32) k[7] << 24);
/* fall through */
/* FALLTHROUGH */
case 7:
b += ((uint32) k[6] << 16);
/* fall through */
/* FALLTHROUGH */
case 6:
b += ((uint32) k[5] << 8);
/* fall through */
/* FALLTHROUGH */
case 5:
b += k[4];
/* fall through */
/* FALLTHROUGH */
case 4:
a += ((uint32) k[3] << 24);
/* fall through */
/* FALLTHROUGH */
case 3:
a += ((uint32) k[2] << 16);
/* fall through */
/* FALLTHROUGH */
case 2:
a += ((uint32) k[1] << 8);
/* fall through */
/* FALLTHROUGH */
case 1:
a += k[0];
/* case 0: nothing left to add */

View File

@ -1452,12 +1452,12 @@ pg_utf8_islegal(const unsigned char *source, int length)
a = source[3];
if (a < 0x80 || a > 0xBF)
return false;
/* FALL THRU */
/* FALLTHROUGH */
case 3:
a = source[2];
if (a < 0x80 || a > 0xBF)
return false;
/* FALL THRU */
/* FALLTHROUGH */
case 2:
a = source[1];
switch (*source)
@ -1483,7 +1483,7 @@ pg_utf8_islegal(const unsigned char *source, int length)
return false;
break;
}
/* FALL THRU */
/* FALLTHROUGH */
case 1:
a = *source;
if (a >= 0x80 && a < 0xC2)

View File

@ -391,7 +391,7 @@ DecodeInterval(char **field, int *ftype, int nf, /* int range, */
tmask = DTK_M(TZ);
break;
}
/* FALL THROUGH */
/* FALLTHROUGH */
case DTK_DATE:
case DTK_NUMBER:

View File

@ -375,7 +375,7 @@ retry_masked:
REMEMBER_EPIPE(spinfo, true);
#ifdef ECONNRESET
/* FALL THRU */
/* FALLTHROUGH */
case ECONNRESET:
#endif

View File

@ -3186,7 +3186,7 @@ exec_stmt_return(PLpgSQL_execstate *estate, PLpgSQL_stmt_return *stmt)
/* fulfill promise if needed, then handle like regular var */
plpgsql_fulfill_promise(estate, (PLpgSQL_var *) retvar);
/* FALL THRU */
/* FALLTHROUGH */
case PLPGSQL_DTYPE_VAR:
{
@ -3332,7 +3332,7 @@ exec_stmt_return_next(PLpgSQL_execstate *estate,
/* fulfill promise if needed, then handle like regular var */
plpgsql_fulfill_promise(estate, (PLpgSQL_var *) retvar);
/* FALL THRU */
/* FALLTHROUGH */
case PLPGSQL_DTYPE_VAR:
{
@ -5423,7 +5423,7 @@ exec_eval_datum(PLpgSQL_execstate *estate,
/* fulfill promise if needed, then handle like regular var */
plpgsql_fulfill_promise(estate, (PLpgSQL_var *) datum);
/* FALL THRU */
/* FALLTHROUGH */
case PLPGSQL_DTYPE_VAR:
{

View File

@ -464,7 +464,7 @@ nextch2:
/* set zero padding if no nonzero digits yet */
if (accum == 0 && !pointflag)
zpad = '0';
/* FALL THRU */
/* FALLTHROUGH */
case '1':
case '2':
case '3':

View File

@ -55,6 +55,11 @@ ifeq (,$(ZIC))
ZIC= ./zic
endif
# zic.c doesn't compile cleanly with our default
# -Wimplicit-fallthrough=4, and we don't want to touch the file since
# it's third-party code, so downgrade to 3 for that file.
zic.o: CFLAGS := $(subst -Wimplicit-fallthrough=4,-Wimplicit-fallthrough=3,$(CFLAGS))
zic: $(ZICOBJS) | submake-libpgport
$(CC) $(CFLAGS) $(ZICOBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)