Date: Tue, 16 Aug 2022 12:10:04 +0200 From: Dimitry Andric <dim@FreeBSD.org> To: Jessica Clarke <jrtc27@freebsd.org> Cc: Konstantin Belousov <kostikbel@gmail.com>, src-committers <src-committers@freebsd.org>, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: 402dbdd98acc - main - Adjust function definition in arm's mv_common.c to avoid clang 15 warning Message-ID: <A9D9B817-8E18-49A5-87A0-BDD9FA748549@FreeBSD.org> In-Reply-To: <F33312A7-B4B3-4D1A-9FE6-7CEF4E0F4BD9@freebsd.org> References: <202208151849.27FInHmh027652@gitrepo.freebsd.org> <Yvq1lQqmq3Mwv9ZJ@kib.kiev.ua> <F33312A7-B4B3-4D1A-9FE6-7CEF4E0F4BD9@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--Apple-Mail=_D1D1B96E-89FF-4547-B673-341F81D93C31 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 On 15 Aug 2022, at 23:23, Jessica Clarke <jrtc27@freebsd.org> wrote: >=20 > =3DOn 15 Aug 2022, at 22:07, Konstantin Belousov <kostikbel@gmail.com> = wrote: >>=20 >> On Mon, Aug 15, 2022 at 06:49:17PM +0000, Dimitry Andric wrote: >>> The branch main has been updated by dim: >>>=20 >>> URL: = https://cgit.FreeBSD.org/src/commit/?id=3D402dbdd98acc7fa94d1d4cd01903e987= d2409336 >>>=20 >>> commit 402dbdd98acc7fa94d1d4cd01903e987d2409336 >>> Author: Dimitry Andric <dim@FreeBSD.org> >>> AuthorDate: 2022-08-15 18:02:13 +0000 >>> Commit: Dimitry Andric <dim@FreeBSD.org> >>> CommitDate: 2022-08-15 18:48:33 +0000 >>>=20 >>> Adjust function definition in arm's mv_common.c to avoid clang 15 = warning >>>=20 >>> With clang 15, the following -Werror warning is produced: >>>=20 >>> sys/arm/mv/mv_common.c:414:20: error: a function declaration = without a prototype is deprecated in all versions of C = [-Werror,-Wstrict-prototypes] >>> mv_check_soc_family() >>> ^ >>> void >>>=20 >>> This is because mv_check_soc_family() is declared with a (void) = argument >>> list, but defined with an empty argument list. Make the definition = match >>> the declaration. >>>=20 >>> MFC after: 3 days >>> --- >>> sys/arm/mv/mv_common.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>=20 >>> diff --git a/sys/arm/mv/mv_common.c b/sys/arm/mv/mv_common.c >>> index 6e1d12f8c7a7..c2e25c686583 100644 >>> --- a/sys/arm/mv/mv_common.c >>> +++ b/sys/arm/mv/mv_common.c >>> @@ -411,7 +411,7 @@ static int mv_win_cesa_attr_armadaxp(int = eng_sel) >>> } >>>=20 >>> enum soc_family >>> -mv_check_soc_family() >>> +mv_check_soc_family(void) >>> { >>> uint32_t dev, rev; >>>=20 >> I am actually curious about this and other commits. =46rom the = ISO/IEC 9899:2023 >> draft N3047, 6.7.6.3 Function declarators, clause 13: >>=20 >> For a function declarator without a parameter type list: the effect >> is as if it were declared with a parameter type list consisting of >> the keyword void. A function declarator provides a prototype for the >> function 177). >>=20 >> Then the note 177: >> This implies that a function definition without a parameter list >> provides a prototype, and that subsequent calls to that function in = the >> same translation unit are constrained not to provide any argument to = the >> function call. Thus a definition of a function without parameter list >> and one that has such a list consisting of the keyword void are fully >> equivalent. >>=20 >> And more, in the 6.9.1 Function definitions clause 13, there is an = example: >> typedef int F(void); // type F is "function with no parameters >> // returning int" >> int g() { /* ... */ } // RIGHT: g has type compatible with F >>=20 >> So why does clang enforce the warning? >=20 > I=E2=80=99m not sure why this is a warning; an empty parameter list in = a > function declaration that is part of a definition has always been the > same as (void) (unless you have K&R-style arguments, which the = compiler > can also see). C99 6.11.6 Function declarators does however say: >=20 >> 1 The use of function declarators with empty parentheses (not >> prototype-format parameter type declarators) is an obsolescent = feature. >=20 > So technically warning for pre-C23 is compliant with that, though a = bit > annoying in the definition case given the semantics have stayed the > same and been un-deprecated. Regardless, it=E2=80=99s probably best = practice to > be consistent and use (void) in the definitions so it matches any > declarations rather than have this be a special case that can differ. This changed upstream here: = https://github.com/llvm/llvm-project/commit/11da1b53d8cd3507959022cd790d5a= 7ad4573d94 where this warning got enabled for -Wstrict-prototypes. Another related change was: = https://github.com/llvm/llvm-project/commit/385e7df33046d7292612ee1e3ac00a= 59d8bc0441 Reading back some comments on the llvm IRC channel, I suppose another method could be to turn off -Wstrict-prototypes for clang >=3D 15, as it will already warn on problematic cases of call sites not matching existing declarations. For example: https://godbolt.org/z/7EPTYhKrY But I think it is better to have the definitions matching the declarations exactly. We should sweep through the whole tree and get rid of all K&R functions too. I believe Warner wanted to attempt that. -Dimitry --Apple-Mail=_D1D1B96E-89FF-4547-B673-341F81D93C31 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.2 iF0EARECAB0WIQR6tGLSzjX8bUI5T82wXqMKLiCWowUCYvts/AAKCRCwXqMKLiCW ozeoAKCuktPHCLz3cGCVqRdw/4iBPImzqACgr3RXuHsiSEFArYIcI9bv3w+wYFw= =4lT6 -----END PGP SIGNATURE----- --Apple-Mail=_D1D1B96E-89FF-4547-B673-341F81D93C31--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?A9D9B817-8E18-49A5-87A0-BDD9FA748549>