Re: [PATCH net] tcp: Fix -Wc23-extensions in tcp_options_write()
From: Palmer Dabbelt <palmer@dabbelt.com>
Date: 2023-11-02 20:24:01
Also in:
linux-patches, lkml, llvm
On Wed, 01 Nov 2023 18:42:10 PDT (-0700), Palmer Dabbelt wrote:
On Wed, 01 Nov 2023 18:07:23 PDT (-0700), nathan@kernel.org wrote:quoted
On Wed, Nov 01, 2023 at 05:41:10PM -0700, Palmer Dabbelt wrote:quoted
On Tue, 31 Oct 2023 13:23:35 PDT (-0700), nathan@kernel.org wrote:quoted
Clang warns (or errors with CONFIG_WERROR=y) when CONFIG_TCP_AO is set: net/ipv4/tcp_output.c:663:2: error: label at end of compound statement is a C23 extension [-Werror,-Wc23-extensions] 663 | } | ^ 1 error generated. On earlier releases (such as clang-11, the current minimum supported version for building the kernel) that do not support C23, this was a hard error unconditionally: net/ipv4/tcp_output.c:663:2: error: expected statement } ^ 1 error generated. Add a semicolon after the label to create an empty statement, which resolves the warning or error for all compilers. Closes: https://github.com/ClangBuiltLinux/linux/issues/1953 Fixes: 1e03d32bea8e ("net/tcp: Add TCP-AO sign to outgoing packets") Signed-off-by: Nathan Chancellor <nathan@kernel.org> --- net/ipv4/tcp_output.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index f558c054cf6e..6064895daece 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c@@ -658,7 +658,7 @@ static void tcp_options_write(struct tcphdr *th, struct tcp_sock *tp, memset(ptr, TCPOPT_NOP, sizeof(*ptr)); ptr++; } -out_ao: +out_ao:; #endif } if (unlikely(opts->mss)) {--- base-commit: 55c900477f5b3897d9038446f72a281cae0efd86 change-id: 20231031-tcp-ao-fix-label-in-compound-statement-warning-ebd6c9978498 Best regards,This gives me a linux/net/ipv4/tcp_output.c:663:2: error: expected statement } on GCC for me.What GCC version?12.1, though I can't get a smaller reproducer so I'm going to roll back to your change and double-check. Might take a bit...
Looks like there was just some bug in my test scripts and the original patch wasn't actually picked up for all the configs. It's working now, so Reviewed-by: Palmer Dabbelt <redacted> Sorry for the confusion!
quoted
I cannot reproduce that error with my patch applied. I tested mainline at commit deefd5024f07 ("Merge tag 'vfio-v6.7-rc1' of https://github.com/awilliam/linux-vfio") using GCC 6 from kernel.org and I can reproduce a similar failure with ARCH=x86_64 allyesconfig: net/ipv4/tcp_output.c: In function 'tcp_options_write': net/ipv4/tcp_output.c:661:1: error: label at end of compound statement out_ao: ^~~~~~ With this change applied, the error disappears for GCC 6 and GCC 13 continues to build without error. I can try the other supported versions later, I just did an older and newer one for a quick test.quoted
So I think something likediff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index f558c054cf6e..ca09763acaa8 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c@@ -659,6 +659,11 @@ static void tcp_options_write(struct tcphdr *th, struct tcp_sock *tp,ptr++; } out_ao: + /* + * Labels at the end of compound statements are a C23 feature, so + * introduce a block to avoid a warning/error on strict toolchains. + */ + {} #endif } if (unlikely(opts->mss)) { should do it (though it's still build testing...)I am not opposed to this once we understand what versions are affected by this so that we have some timeline of removing this workaround. Cheers, Nathan