Thread (11 messages) 11 messages, 5 authors, 2023-11-06

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 like
diff --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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help