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 <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt