[PATCH v2 08/10] compat/regex: explicitly mark intentional use of the comma operator
- From
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Mar 25, 2025, 23:32 UTC
- Message-ID
- <dc626f36df34df4897289e508dbf608512a93870.1742945534.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1889.v2.git.1742945534.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>
The comma operator is a somewhat obscure C feature that is often used by mistake and can even cause unintentional code flow. That is why the `-Wcomma` option of clang was introduced: To identify unintentional uses of the comma operator.
In the `compat/regex/` code, the comma operator is used twice, once to avoid surrounding two conditional statements with curly brackets, the other one to increment two counters simultaneously in a `do ... while` condition.
The first one is replaced with a proper conditional block, surrounded by curly brackets.
The second one would be harder to replace because the loop contains two `continue`s. Therefore, the second one is marked as intentional by casting the value-to-discard to `void`.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> --- compat/regex/regex_internal.c | 7 ++++--- compat/regex/regexec.c | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/compat/regex/regex_internal.c b/compat/regex/regex_internal.c index ec5cc5d2dd1..7672583bf7e 100644 --- a/compat/regex/regex_internal.c +++ b/compat/regex/regex_internal.c @@ -1231,9 +1231,10 @@ re_node_set_merge (re_node_set *dest, const re_node_set *src) for (sbase = dest->nelem + 2 * src->nelem, is = src->nelem - 1, id = dest->nelem - 1; is >= 0 && id >= 0; ) { - if (dest->elems[id] == src->elems[is]) - is--, id--; - else if (dest->elems[id] < src->elems[is]) + if (dest->elems[id] == src->elems[is]) { + is--; + id--; + } else if (dest->elems[id] < src->elems[is]) dest->elems[--sbase] = src->elems[is--]; else /* if (dest->elems[id] > src->elems[is]) */ --id; diff --git a/compat/regex/regexec.c b/compat/regex/regexec.c index 2eeec82f407..c08f1bbe1f5 100644 --- a/compat/regex/regexec.c +++ b/compat/regex/regexec.c @@ -2210,7 +2210,7 @@ sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, /* mctx->bkref_ents may have changed, reload the pointer. */ entry = mctx->bkref_ents + enabled_idx; } - while (enabled_idx++, entry++->more); + while ((void)enabled_idx++, entry++->more); } err = REG_NOERROR; free_return:
-- gitgitgadget