Re: [PATCH v3] Prototype all function definitions for C23 compat
Herbert Xu <[email protected]>
| Newsgroups | org.kernel.vger.dash |
|---|---|
| Message-ID | <[email protected]> |
On Fri, Feb 10, 2023 at 12:24:49PM +0100, наб wrote:
> Current compilers just produce warnings about unprototyped definitions,
> noting that they've been deprecated for decades now, but in C23 mode
> they're rejected, because they got removed, cf. draft and paper:
> https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3054.pdf
> https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2841.htm
>
> In short, int whatever(a, b, c) is illegal, and int whatever() is now
> finally equivalent to int whatever(void); or, to put it another way,
> when building in C23 mode (which is not /yet/ the default), you get
> -- >8 --
> $ make -j25
> make all-recursive
> make[1]: Entering directory '/home/nabijaczleweli/code/dash'
> Making all in src
> make[2]: Entering directory '/home/nabijaczleweli/code/dash/src'
> CC builtins.def
> CC mknodes
> GEN token.h
> GEN token_vars.h
> CC mksyntax
> GEN builtins.h
> GEN syntax.h
> GEN nodes.h
> make all-am
> make[3]: Entering directory '/home/nabijaczleweli/code/dash/src'
> CC alias.o
> CC arith_yacc.o
> CC arith_yylex.o
> CC cd.o
> CC error.o
> CC eval.o
> CC exec.o
> CC expand.o
> CC histedit.o
> CC input.o
> CC jobs.o
> CC mail.o
> CC main.o
> CC memalloc.o
> CC miscbltin.o
> CC mystring.o
> CC options.o
> CC parser.o
> CC redir.o
> CC show.o
> CC trap.o
> CC output.o
> CC system.o
> CC bltin/printf.o
> CC bltin/test.o
> CC bltin/times.o
> CC var.o
> CC builtins.o
> histedit.c:376:16: warning: passing 'const char *' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
> evalstring(s, 0);
> ^
> ./eval.h:54:22: note: passing argument to parameter here
> int evalstring(char *, int);
> ^
> CC mkinit
> exec.c:779:18: error: unknown type name 'out'
> describe_command(out, command, path, verbose)
> ^
> exec.c:779:23: error: unknown type name 'command'
> describe_command(out, command, path, verbose)
> ^
> exec.c:779:32: error: unknown type name 'path'
> describe_command(out, command, path, verbose)
> ^
> exec.c:779:38: error: unknown type name 'verbose'
> describe_command(out, command, path, verbose)
> ^
> exec.c:779:46: error: expected ';' after top level declarator
> describe_command(out, command, path, verbose)
> ^
> ;
> exec.c:784:1: error: expected identifier or '('
> {
> ^
> exec.c:885:12: error: unknown type name 'argc'
> commandcmd(argc, argv)
> ^
> exec.c:885:18:options.c error: :unknown type name 'argv'393
> :commandcmd(argc, argv)14:
> ^
> error: unknown type name 'value'
> getoptsreset(value)
> ^
> exec.c:885:23: error: expected ';' after top level declarator
> commandcmd(argc, argv)
> ^
> ;
> options.c:393:20: exec.c:888:1: error: error: expected identifier or '('
> {expected ';' after top level declarator
>
> ^
> getoptsreset(value)
> ^
> ;
> options.c:395:1: error: expected identifier or '('
> {
> ^
> 10 errors generated.
> CC nodes.o
> make[3]: *** [Makefile:478: exec.o] Error 1
> make[3]: *** Waiting for unfinished jobs....
> 3 errors generated.
> jobs.c:247:9: error: unknown type name 'argc'
> killcmd(argc, argv)
> ^
> jobs.c:247:15: error: unknown type name 'argv'
> killcmd(argc, argv)
> ^
> jobs.c:247:20: error: expected ';' after top level declarator
> killcmd(argc, argv)
> ^
> ;
> jobs.c:250:1: error: expected identifier or '('
> {
> ^
> make[3]: *** [Makefile:478: options.o] Error 1
> redir.c:288:13: error: unknown type name 'redir'
> dupredirect(redir, f)
> ^
> redir.c:288:20: error: unknown type name 'f'
> dupredirect(redir, f)
> ^
> redir.c:288:22: error: expected ';' after top level declarator
> dupredirect(redir, f)
> ^
> ;
> redir.c:295:2: error: expected identifier or '('
> {
> ^
> 4 errors generated.
> make[3]: *** [Makefile:478: redir.o] Error 1
> 4 errors generated.
> make[3]: *** [Makefile:478: jobs.o] Error 1
> nodes.c:122:10: error: unknown type name 'n'
> calcsize(n)
> ^
> nodes.c:122:12: error: expected ';' after top level declarator
> calcsize(n)
> ^
> ;
> nodes.c:124:1: error: expected identifier or '('
> {
> ^
> nodes.c:206:14: error: unknown type name 'lp'
> sizenodelist(lp)
> ^
> nodes.c:206:17: error: expected ';' after top level declarator
> sizenodelist(lp)
> ^
> ;
> nodes.c:208:1: error: expected identifier or '('
> {
> ^
> nodes.c:219:10: error: unknown type name 'n'
> copynode(n)
> ^
> nodes.c:219:12: error: expected ';' after top level declarator
> copynode(n)
> ^
> ;
> nodes.c:221:1: error: expected identifier or '('
> {
> ^
> nodes.c:317:14: error: unknown type name 'lp'
> copynodelist(lp)
> ^
> nodes.c:317:17: error: expected ';' after top level declarator
> copynodelist(lp)
> ^
> ;
> nodes.c:319:1: error: expected identifier or '('
> {
> ^
> nodes.c:339:13: error: unknown type name 's'
> nodesavestr(s)
> ^
> nodes.c:339:15: error: expected ';' after top level declarator
> nodesavestr(s)
> ^
> ;
> nodes.c:341:1: error: expected identifier or '('
> {
> ^
> 15 errors generated.
> make[3]: *** [Makefile:478: nodes.o] Error 1
> 1 warning generated.
> make[3]: Leaving directory '/home/nabijaczleweli/code/dash/src'
> -- >8 --
>
> With this patch, you're just left with the histedit.c warning.
> ---
> Yeah, Harald's right, I completely missed that the type and linkage
> layout changed, I only saw the arguments move
>
> src/exec.c | 12 +++---------
> src/jobs.c | 4 +---
> src/mksignames.c | 3 +--
> src/nodes.c.pat | 15 +++++----------
> src/options.c | 3 +--
> src/redir.c | 11 +++--------
> 6 files changed, 14 insertions(+), 34 deletions(-)
Patch applied with additional changes to ensure the return type
is on the same line as the rest of the function declaration.
Thanks.
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt