From: Peter Zijlstra <peterz@infradead.org>
To: Al Viro <viro@zeniv.linux.org.uk>
Cc: "Linus Torvalds" <torvalds@linux-foundation.org>,
"Eric Dumazet" <edumazet@google.com>,
oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
"Jakub Kicinski" <kuba@kernel.org>,
"Maciej Żenczykowski" <maze@google.com>,
"Will Deacon" <will@kernel.org>,
"Paul E. McKenney" <paulmck@kernel.org>
Subject: Re: include/net/sock.h:2100:16: sparse: sparse: cast to non-scalar
Date: Mon, 12 Jan 2026 13:37:22 +0100 [thread overview]
Message-ID: <20260112123722.GJ830755@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <20260111182010.GH3634291@ZenIV>
On Sun, Jan 11, 2026 at 06:20:10PM +0000, Al Viro wrote:
> On Sat, Jan 10, 2026 at 10:35:48PM +0000, Al Viro wrote:
>
> > Folks involved in putting that cast in arch/alpha/include/asm/rwonce.h Cc'd...
>
> FWIW, there's a way to strip qualifiers from *any* non-array type.
> Look:
>
> void f(void)
> {
> const int x;
> x = 1; // an error
> typeof(((typeof(x)(*)(void))0)()) y;
> y = 2; // perfectly fine
> }
>
> The way it works is that qualifiers are stripped from return type when
> deriving a function type. That was spelled out only in C17; 6.7.6.3[5]
> | If, in the declaration "T D1", D1 has the form
> | D ( parameter-type-list )
> | or
> | D ( identifier-list[opt] )
> | and the type specified for ident in the declaration "T D" is
> | "derived-declarator-type-list T", then the type specified for ident
> | is "derived-declarator-type-list function returning the unqualified version
> | of T".
> but that "unqualified version of..." matched the common practice in
> earlier variants of standard; they stopped issuing TCs by that point
> (~2014), but both clang and gcc behave that way with any variant of
> standard.
>
> IOW, this
>
> #define unqual_non_array(T) __typeof__(((T(*)(void))0)())
>
> would do the right thing without that _Generic cascade and it'll work
> just fine for e.g. kuid_t. Using it for an array would trigger an error,
> array-returning functions being forbidden...
>
> Guys, do you have any problems with replacing __unqual_scalar_typeof()
> uses with that thing?
There is also __typeof_unqual__, but I do not know if that is now
supported by all compilers, if so that is the better option. If not,
your function return type thing is awesome.
next prev parent reply other threads:[~2026-01-12 12:37 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-10 21:06 include/net/sock.h:2100:16: sparse: sparse: cast to non-scalar kernel test robot
2026-01-10 22:15 ` Al Viro
2026-01-10 22:35 ` Al Viro
2026-01-11 10:08 ` Eric Dumazet
2026-01-12 12:33 ` Peter Zijlstra
2026-01-11 18:20 ` Al Viro
2026-01-11 18:51 ` Al Viro
2026-01-12 12:37 ` Peter Zijlstra [this message]
2026-01-12 15:02 ` Will Deacon
2026-01-12 19:21 ` Al Viro
2026-01-12 21:16 ` Al Viro
2026-01-12 22:39 ` David Laight
2026-01-13 0:28 ` Al Viro
2026-01-12 12:32 ` Peter Zijlstra
2026-01-12 19:30 ` Al Viro
2026-01-13 15:27 ` Peter Zijlstra
2026-01-12 0:49 ` Philip Li
-- strict thread matches above, loose matches on Subject: below --
2025-12-06 10:09 kernel test robot
2025-08-25 4:45 kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260112123722.GJ830755@noisy.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maze@google.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=paulmck@kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox