Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Aug 2022 00:07:33 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Dimitry Andric <dim@freebsd.org>
Cc:        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:  <Yvq1lQqmq3Mwv9ZJ@kib.kiev.ua>
In-Reply-To: <202208151849.27FInHmh027652@gitrepo.freebsd.org>
References:  <202208151849.27FInHmh027652@gitrepo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Aug 15, 2022 at 06:49:17PM +0000, Dimitry Andric wrote:
> The branch main has been updated by dim:
> 
> URL: https://cgit.FreeBSD.org/src/commit/?id=402dbdd98acc7fa94d1d4cd01903e987d2409336
> 
> 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
> 
>     Adjust function definition in arm's mv_common.c to avoid clang 15 warning
>     
>     With clang 15, the following -Werror warning is produced:
>     
>         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
>     
>     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.
>     
>     MFC after:      3 days
> ---
>  sys/arm/mv/mv_common.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> 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)
>  }
>  
>  enum soc_family
> -mv_check_soc_family()
> +mv_check_soc_family(void)
>  {
>  	uint32_t dev, rev;
>  
I am actually curious about this and other commits.  From the ISO/IEC 9899:2023
draft N3047, 6.7.6.3 Function declarators, clause 13:

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).

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.

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

So why does clang enforce the warning?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Yvq1lQqmq3Mwv9ZJ>