Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Aug 2022 22:23:06 +0100
From:      Jessica Clarke <jrtc27@freebsd.org>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        Dimitry Andric <dim@freebsd.org>, 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:  <F33312A7-B4B3-4D1A-9FE6-7CEF4E0F4BD9@freebsd.org>
In-Reply-To: <Yvq1lQqmq3Mwv9ZJ@kib.kiev.ua>
References:  <202208151849.27FInHmh027652@gitrepo.freebsd.org> <Yvq1lQqmq3Mwv9ZJ@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
=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?

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:

> 1 The use of function declarators with empty parentheses (not
> prototype-format parameter type declarators) is an obsolescent =
feature.

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.

Jess




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?F33312A7-B4B3-4D1A-9FE6-7CEF4E0F4BD9>