Message ID | 20240320180134.100863-1-arnd@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | scripts/unifdef: avoid constexpr keyword | expand |
Arnd Bergmann <arnd@kernel.org> wrote: > > Starting with c23, 'constexpr' is a keyword in C like in C++ and cannot > be used as an identifier: So it is! Can you please incorporate the fixup patch below? Other than that, LGTM. Reviewed-By: Tony Finch <dot@dotat.at> PS. I've been reviewing some other details of C23 recently. According to the Editor's Report https://open-std.org/jtc1/sc22/wg14/www/docs/n3221.htm the working draft that is closest to the official C23 Draft International Standard is https://open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf (There were significant changes and fixes even quite late in the process so don't rely on earlier versions - I encoutered a bug when I did!) --- scripts/unifdef.c +++ scripts/unifdef.c @@ -819,7 +819,7 @@ static const struct ops { /* * Function for evaluating the innermost parts of expressions, * viz. !expr (expr) number defined(symbol) symbol - * We reset the constexpr flag in the last two cases. + * We reset the constexpression flag in the last two cases. */ static Linetype eval_unary(const struct ops *ops, int *valp, const char **cpp)
On Thu, Mar 21, 2024 at 3:01 AM Arnd Bergmann <arnd@kernel.org> wrote: > > From: Arnd Bergmann <arnd@arndb.de> > > Starting with c23, 'constexpr' is a keyword in C like in C++ and cannot > be used as an identifier: > > scripts/unifdef.c:206:25: error: 'constexpr' can only be used in variable declarations > 206 | static bool constexpr; /* constant #if expression */ > | ^ > scripts/unifdef.c:880:13: error: expected identifier or '(' > 880 | constexpr = false; > | ^ > > Rename this instance to allow changing to C23 at some point in the future. > > Fixes: d8379ab1dde3 ("unifdef: update to upstream revision 1.190") This can be a problem only for future kernels. Is it worth adding Fixes? Even if the kernel bumps to C23 at some point, such a patch will not be backported.
diff --git a/scripts/unifdef.c b/scripts/unifdef.c index db00e3e30a59..1cc31448fd10 100644 --- a/scripts/unifdef.c +++ b/scripts/unifdef.c @@ -203,7 +203,7 @@ static int depth; /* current #if nesting */ static int delcount; /* count of deleted lines */ static unsigned blankcount; /* count of blank lines */ static unsigned blankmax; /* maximum recent blankcount */ -static bool constexpr; /* constant #if expression */ +static bool constexpression; /* constant #if expression */ static bool zerosyms = true; /* to format symdepth output */ static bool firstsym; /* ditto */ @@ -877,7 +877,7 @@ eval_unary(const struct ops *ops, int *valp, const char **cpp) cp = skipcomment(cp); if (defparen && *cp++ != ')') return (LT_ERROR); - constexpr = false; + constexpression = false; } else if (!endsym(*cp)) { debug("eval%d symbol", ops - eval_ops); sym = findsym(cp); @@ -895,7 +895,7 @@ eval_unary(const struct ops *ops, int *valp, const char **cpp) lt = *valp ? LT_TRUE : LT_FALSE; cp = skipargs(cp); } - constexpr = false; + constexpression = false; } else { debug("eval%d bad expr", ops - eval_ops); return (LT_ERROR); @@ -955,10 +955,10 @@ ifeval(const char **cpp) int val = 0; debug("eval %s", *cpp); - constexpr = killconsts ? false : true; + constexpression = killconsts ? false : true; ret = eval_table(eval_ops, &val, cpp); debug("eval = %d", val); - return (constexpr ? LT_IF : ret == LT_ERROR ? LT_IF : ret); + return (constexpression ? LT_IF : ret == LT_ERROR ? LT_IF : ret); } /*