Hi Pierre-Clément, On Thu, 17 Mar 2022 at 05:46, Pierre-Clément Tosi <pt...@google.com> wrote: > > On Wed, Mar 16, 2022 at 01:23:38PM -0600, Simon Glass wrote: > > Hi, > > > > On Wed, 16 Mar 2022 at 09:41, Pierre-Clément Tosi <pt...@google.com> wrote: > > > > > > Upgrade the header to version 5.16 of the kernel: > > > > > > commit df0cc57e057f18e44dac8e6c18aba47ab53202f9 > > > > > > Signed-off-by: Pierre-Clément Tosi <pt...@google.com> > > > Cc: Simon Glass <s...@chromium.org> > > > Cc: Tom Rini <tr...@konsulko.com> > > > --- > > > include/linux/typecheck.h | 10 ++++++++++ > > > 1 file changed, 10 insertions(+) > > > > Reviewed-by: Simon Glass <s...@chromium.org> > > > > But I don't understand how this works at all. Could you add a comment? > > This patch is a simple upgrade of the header. I needed it for another patch > stack and, given how trivial and self-contained it is, I thought I would slip > it > into this one. > > If your "this" refers to the macro itself, an error should be generated by the > compiler when dereferencing a non-pointer and it avoids introducing side > effects > through the use of __dummy but I'm not sure what the sizeof is there for; is > it > perhaps compliant for an implementation to keep generating code when > encountering a dereferenced non-pointer (leading to a bogus result, from UB) > so > that sizeof forces it to depend on that expression being of a valid type? Or > is > it to do with catching variables of incomplete type e.g. arrays of unknown > size? > It was introduced by commit cb0f80039fb7 ("bitops: Add non-atomic bitops for > pointers"), which doesn't provide much information either.
Hmm OK. The Linux people are quite averse to comments. If you have time you could send a patch to comment the macro and see if someone responds and dispels the uncertainty. > > > > > > > > > diff --git a/include/linux/typecheck.h b/include/linux/typecheck.h > > > index eb5b74a575..46b15e2aae 100644 > > > --- a/include/linux/typecheck.h > > > +++ b/include/linux/typecheck.h > > > @@ -1,3 +1,4 @@ > > > +/* SPDX-License-Identifier: GPL-2.0 */ > > > #ifndef TYPECHECK_H_INCLUDED > > > #define TYPECHECK_H_INCLUDED > > > > > > @@ -21,4 +22,13 @@ > > > (void)__tmp; \ > > > }) > > > > > > +/* > > > + * Check at compile time that something is a pointer type. > > > + */ > > > +#define typecheck_pointer(x) \ > > > +({ typeof(x) __dummy; \ > > > + (void)sizeof(*__dummy); \ > > > + 1; \ > > > +}) > > > + > > > #endif /* TYPECHECK_H_INCLUDED */ > > > -- > > > 2.35.1.723.g4982287a31-goog Regards, Simon