* man_validate.c compile errors on Linux gcc/clang @ 2019-03-13 1:32 Stephen Gregoratto 2019-03-13 18:38 ` Ingo Schwarze 0 siblings, 1 reply; 5+ messages in thread From: Stephen Gregoratto @ 2019-03-13 1:32 UTC (permalink / raw) To: discuss The latest patches to man_validate.c do not compile on my Linux machines using gcc/clang. Only my OpenBSD server can complete fully. On my Arch Linux machine: Linux 5.0.0-arch1-1-ARCH x86_64 GNU/Linux gcc -g -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings -Wno-unused-parameter -c -o man_validate.o man_validate.c man_validate.c:44:14: error: expected ‘;’ before ‘void’ static __dead void check_abort(CHKARGS); ^~~~~ ; man_validate.c:199:14: error: expected ‘;’ before ‘void’ static __dead void ^~~~~ ; make: *** [<builtin>: man_validate.o] Error 1 gcc (GCC) 8.2.1 20181127 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. clang -g -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings -Wno-unused-parameter -c -o man_validate.o man_validate.c man_validate.c:44:8: error: unknown type name '__dead' static __dead void check_abort(CHKARGS); ^ man_validate.c:44:15: error: expected identifier or '(' static __dead void check_abort(CHKARGS); ^ man_validate.c:67:2: error: use of undeclared identifier 'check_abort' check_abort,/* LP */ ^ man_validate.c:69:2: error: use of undeclared identifier 'check_abort' check_abort,/* P */ ^ man_validate.c:199:8: error: unknown type name '__dead' static __dead void ^ man_validate.c:199:15: error: expected identifier or '(' static __dead void ^ 6 errors generated. make: *** [<builtin>: man_validate.o] Error 1 clang version 7.0.1 (tags/RELEASE_701/final) Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin On my Debian 9 Server: Linux mail.sgregoratto.me 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3 (2019-02-02) x86_64 GNU/Linux gcc -g -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings -Wno-unused-parameter -c -o man_validate.o man_validate.c man_validate.c:44:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’ static __dead void check_abort(CHKARGS); ^~~~ man_validate.c:67:2: error: ‘check_abort’ undeclared here (not in a function) check_abort,/* LP */ ^~~~~~~~~~~ man_validate.c:199:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’ static __dead void ^~~~ <builtin>: recipe for target 'man_validate.o' failed make: *** [man_validate.o] Error 1 gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. I'm unsure if __dead is defined in glibc. I couldn't find it under <sys/cdefs/h>. -- Stephen Gregoratto PGP: 3FC6 3D0E 2801 C348 1C44 2D34 A80C 0F8E 8BAB EC8B -- To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: man_validate.c compile errors on Linux gcc/clang 2019-03-13 1:32 man_validate.c compile errors on Linux gcc/clang Stephen Gregoratto @ 2019-03-13 18:38 ` Ingo Schwarze 2019-03-14 1:11 ` Stephen Gregoratto 0 siblings, 1 reply; 5+ messages in thread From: Ingo Schwarze @ 2019-03-13 18:38 UTC (permalink / raw) To: Stephen Gregoratto; +Cc: discuss, christos Hi Stephen, Stephen Gregoratto wrote on Wed, Mar 13, 2019 at 12:32:35PM +1100: > The latest patches to man_validate.c do not compile on my Linux machines > using gcc/clang. Only my OpenBSD server can complete fully. Thank you for reporting this issue. I (hopefully) fixed it with the commit below. Can you confirm that the fix works? Yours, Ingo Log Message: ----------- Contrary to what the NetBSD attribute(3) manual page suggests, using __dead instead of __attribute__((__noreturn__)) actually hinders portability rather than helping it. Given that mandoc already uses __attribute__ in several files and that in the portable version, ./configure already contains rudimentary support for ignoring it on platforms that do not support it, use __attribute__ directly. This is expected to fix build failures that Stephen Gregoratto <dev at sgregoratto dot me> reported from Arch and Debian Linux. Modified Files: -------------- mandoc: man_validate.c mdoc_validate.c Revision Data ------------- Index: mdoc_validate.c =================================================================== RCS file: /home/cvs/mandoc/mandoc/mdoc_validate.c,v retrieving revision 1.372 retrieving revision 1.373 diff -Lmdoc_validate.c -Lmdoc_validate.c -u -p -r1.372 -r1.373 --- mdoc_validate.c +++ mdoc_validate.c @@ -64,7 +64,7 @@ static size_t macro2len(enum roff_tok); static void rewrite_macro2len(struct roff_man *, char **); static int similar(const char *, const char *); -static __dead void post_abort(POST_ARGS); +static void post_abort(POST_ARGS) __attribute__((__noreturn__)); static void post_an(POST_ARGS); static void post_an_norm(POST_ARGS); static void post_at(POST_ARGS); @@ -497,7 +497,7 @@ check_toptext(struct roff_man *mdoc, int } } -static __dead void +static void post_abort(POST_ARGS) { abort(); Index: man_validate.c =================================================================== RCS file: /home/cvs/mandoc/mandoc/man_validate.c,v retrieving revision 1.147 retrieving revision 1.148 diff -Lman_validate.c -Lman_validate.c -u -p -r1.147 -r1.148 --- man_validate.c +++ man_validate.c @@ -41,7 +41,7 @@ typedef void (*v_check)(CHKARGS); -static __dead void check_abort(CHKARGS); +static void check_abort(CHKARGS) __attribute__((__noreturn__)); static void check_par(CHKARGS); static void check_part(CHKARGS); static void check_root(CHKARGS); @@ -196,7 +196,7 @@ check_root(CHKARGS) "(OpenBSD)" : "(NetBSD)"); } -static __dead void +static void check_abort(CHKARGS) { abort(); ----- 8< ----- schnipp ----- >8 ----- 8< ----- schnapp ----- >8 ----- > On my Arch Linux machine: > > Linux 5.0.0-arch1-1-ARCH x86_64 GNU/Linux > > gcc -g -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings -Wno-unused-parameter -c -o man_validate.o man_validate.c > man_validate.c:44:14: error: expected ‘;’ before ‘void’ > static __dead void check_abort(CHKARGS); > ^~~~~ > ; > man_validate.c:199:14: error: expected ‘;’ before ‘void’ > static __dead void > ^~~~~ > ; > make: *** [<builtin>: man_validate.o] Error 1 > > gcc (GCC) 8.2.1 20181127 > Copyright (C) 2018 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > > > clang -g -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings -Wno-unused-parameter -c -o man_validate.o man_validate.c > man_validate.c:44:8: error: unknown type name '__dead' > static __dead void check_abort(CHKARGS); > ^ > man_validate.c:44:15: error: expected identifier or '(' > static __dead void check_abort(CHKARGS); > ^ > man_validate.c:67:2: error: use of undeclared identifier 'check_abort' > check_abort,/* LP */ > ^ > man_validate.c:69:2: error: use of undeclared identifier 'check_abort' > check_abort,/* P */ > ^ > man_validate.c:199:8: error: unknown type name '__dead' > static __dead void > ^ > man_validate.c:199:15: error: expected identifier or '(' > static __dead void > ^ > 6 errors generated. > make: *** [<builtin>: man_validate.o] Error 1 > > clang version 7.0.1 (tags/RELEASE_701/final) > Target: x86_64-pc-linux-gnu > Thread model: posix > InstalledDir: /usr/bin > > On my Debian 9 Server: > > Linux mail.sgregoratto.me 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3 (2019-02-02) x86_64 GNU/Linux > > gcc -g -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings -Wno-unused-parameter -c -o man_validate.o man_validate.c > man_validate.c:44:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’ > static __dead void check_abort(CHKARGS); > ^~~~ > man_validate.c:67:2: error: ‘check_abort’ undeclared here (not in a function) > check_abort,/* LP */ > ^~~~~~~~~~~ > man_validate.c:199:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’ > static __dead void > ^~~~ > <builtin>: recipe for target 'man_validate.o' failed > make: *** [man_validate.o] Error 1 > > gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 > Copyright (C) 2016 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR > PURPOSE. > > I'm unsure if __dead is defined in glibc. I couldn't find it under > <sys/cdefs/h>. -- To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: man_validate.c compile errors on Linux gcc/clang 2019-03-13 18:38 ` Ingo Schwarze @ 2019-03-14 1:11 ` Stephen Gregoratto 2019-03-14 1:30 ` Stephen Gregoratto 2019-03-14 11:45 ` Ingo Schwarze 0 siblings, 2 replies; 5+ messages in thread From: Stephen Gregoratto @ 2019-03-14 1:11 UTC (permalink / raw) To: discuss; +Cc: christos On 2019-03-13 19:38, Ingo Schwarze wrote: > Thank you for reporting this issue. > I (hopefully) fixed it with the commit below. > Can you confirm that the fix works? Yes, it does. Thanks for your help Ingo. I've actually found another (small) error with gcc on SunOS 5.10, but I'll put that under a new topic. -- Stephen Gregoratto PGP: 3FC6 3D0E 2801 C348 1C44 2D34 A80C 0F8E 8BAB EC8B -- To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: man_validate.c compile errors on Linux gcc/clang 2019-03-14 1:11 ` Stephen Gregoratto @ 2019-03-14 1:30 ` Stephen Gregoratto 2019-03-14 11:45 ` Ingo Schwarze 1 sibling, 0 replies; 5+ messages in thread From: Stephen Gregoratto @ 2019-03-14 1:30 UTC (permalink / raw) To: discuss; +Cc: christos Actually, scratch that last claim because I cannot reproduce it on a clean build. -- Stephen Gregoratto PGP: 3FC6 3D0E 2801 C348 1C44 2D34 A80C 0F8E 8BAB EC8B -- To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: man_validate.c compile errors on Linux gcc/clang 2019-03-14 1:11 ` Stephen Gregoratto 2019-03-14 1:30 ` Stephen Gregoratto @ 2019-03-14 11:45 ` Ingo Schwarze 1 sibling, 0 replies; 5+ messages in thread From: Ingo Schwarze @ 2019-03-14 11:45 UTC (permalink / raw) To: Stephen Gregoratto; +Cc: discuss Hi Stephen, Stephen Gregoratto wrote on Thu, Mar 14, 2019 at 12:11:29PM +1100: > On 2019-03-13 19:38, Ingo Schwarze wrote: >> Thank you for reporting this issue. >> I (hopefully) fixed it with the commit below. >> Can you confirm that the fix works? > Yes, it does. Thank you for re-testing and confirming! Mandoc is now being actively maintained on 15 different operating systems (even though in that number, i did not count system variations, different system versions, and systems where the port or package is outdated by more than one mandoc version; counting all systems it was ever successfully tested on would probably amount to about 50...) and that level of portability can only be maintained when there are several people providing exactly the kind of help you are providing here. > I've actually found another (small) error with gcc on SunOS 5.10, > but I'll put that under a new topic. [...] > Actually, scratch that last claim because I cannot reproduce it > on a clean build. OK, so i'll assume there are no known problems on SunOS 5.10 unless somebody finds and reports evidence to the contrary. In fact, i recently did release testing on SunOS 5.10 myself and did not encounter problems either. There was a report of some minor problems on SmartOS (which is an illumos distribution and hence in some respects akin to SunOS 5.10) though; the reporter promised to send more details what exactly goes wrong on SmartOS when he finds the time, such that i will hopeful be able to fix those issues. Yours, Ingo -- To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-03-14 11:45 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-03-13 1:32 man_validate.c compile errors on Linux gcc/clang Stephen Gregoratto 2019-03-13 18:38 ` Ingo Schwarze 2019-03-14 1:11 ` Stephen Gregoratto 2019-03-14 1:30 ` Stephen Gregoratto 2019-03-14 11:45 ` Ingo Schwarze
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).