* [PATCH v4 1/1] arch/sh: avoid spurious sizeof-pointer-div warning
@ 2023-01-23 18:48 Michael Karcher
2023-01-23 19:37 ` Randy Dunlap
0 siblings, 1 reply; 5+ messages in thread
From: Michael Karcher @ 2023-01-23 18:48 UTC (permalink / raw)
To: linux-kernel, linux-sh, Segher Boessenkool, Rich Felker,
Yoshinori Sato, John Paul Adrian Glaubitz
Gcc warns about the pattern sizeof(void*)/sizeof(void), as it looks like
the abuse of a pattern to calculate the array size. This pattern appears
in the unevaluated part of the ternary operator in _INTC_ARRAY if the
parameter is NULL.
The replacement uses an alternate approach to return 0 in case of NULL
which does not generate the pattern sizeof(void*)/sizeof(void), but still
emits the warning if _INTC_ARRAY is called with a nonarray parameter.
This patch is required for successful compilation with -Werror enabled.
The idea to use _Generic for type distinction is taken from Comment #7
in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108483 by Jakub Jelinek
Signed-off-by: Michael Karcher <kernel@mkarcher.dialup.fu-berlin.de>
---
This edition of the mail has the correct "v4" designation in the subject.
History:
v4:
- Put the case distinction into the numerator instead of the denominator
- Refactor the case disctinction into a second macro
v3:
- I had a stern discussion with Thunderbird about not mangling the
space characters in my email, and I hope spaces get sent as standard
spaces now
v2:
- improve title and remove mostly redundant first sentence of the
description
- adjust formatting of the _Generic construction
diff --git a/include/linux/sh_intc.h b/include/linux/sh_intc.h
index c255273b0281..98d1da0d8e36 100644
--- a/include/linux/sh_intc.h
+++ b/include/linux/sh_intc.h
@@ -97,7 +97,9 @@ struct intc_hw_desc {
unsigned int nr_subgroups;
};
-#define _INTC_ARRAY(a) a, __same_type(a, NULL) ? 0 : sizeof(a)/sizeof(*a)
+#define _INTC_SIZEOF_OR_ZERO(a) (_Generic(a, \
+ typeof(NULL): 0, \
+ default: sizeof(a)))
+#define _INTC_ARRAY(a) a, _INTC_SIZEOF_OR_ZERO(a)/sizeof(*a)
#define INTC_HW_DESC(vectors, groups, mask_regs, \
prio_regs, sense_regs, ack_regs) \
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 1/1] arch/sh: avoid spurious sizeof-pointer-div warning
2023-01-23 18:48 [PATCH v4 1/1] arch/sh: avoid spurious sizeof-pointer-div warning Michael Karcher
@ 2023-01-23 19:37 ` Randy Dunlap
2023-01-24 13:07 ` Geert Uytterhoeven
0 siblings, 1 reply; 5+ messages in thread
From: Randy Dunlap @ 2023-01-23 19:37 UTC (permalink / raw)
To: Michael Karcher, linux-kernel, linux-sh, Segher Boessenkool,
Rich Felker, Yoshinori Sato, John Paul Adrian Glaubitz
Hi,
I'm curious how you generated this patch.
'patch' complains:
patch: **** malformed patch at line 53: prio_regs, sense_regs, ack_regs) \
(more below)
On 1/23/23 10:48, Michael Karcher wrote:
> Gcc warns about the pattern sizeof(void*)/sizeof(void), as it looks like
> the abuse of a pattern to calculate the array size. This pattern appears
> in the unevaluated part of the ternary operator in _INTC_ARRAY if the
> parameter is NULL.
>
> The replacement uses an alternate approach to return 0 in case of NULL
> which does not generate the pattern sizeof(void*)/sizeof(void), but still
> emits the warning if _INTC_ARRAY is called with a nonarray parameter.
>
> This patch is required for successful compilation with -Werror enabled.
>
> The idea to use _Generic for type distinction is taken from Comment #7
> in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108483 by Jakub Jelinek
>
> Signed-off-by: Michael Karcher <kernel@mkarcher.dialup.fu-berlin.de>
> ---
> This edition of the mail has the correct "v4" designation in the subject.
>
> History:
> v4:
> - Put the case distinction into the numerator instead of the denominator
> - Refactor the case disctinction into a second macro
> v3:
> - I had a stern discussion with Thunderbird about not mangling the
> space characters in my email, and I hope spaces get sent as standard
> spaces now
> v2:
> - improve title and remove mostly redundant first sentence of the
> description
> - adjust formatting of the _Generic construction
>
> diff --git a/include/linux/sh_intc.h b/include/linux/sh_intc.h
> index c255273b0281..98d1da0d8e36 100644
> --- a/include/linux/sh_intc.h
> +++ b/include/linux/sh_intc.h
> @@ -97,7 +97,9 @@ struct intc_hw_desc {
That ,9 should be ,10.
With that change:
Acked-by: Randy Dunlap <rdunlap@infradead.org> # build-tested
Thanks.
> unsigned int nr_subgroups;
> };
>
> -#define _INTC_ARRAY(a) a, __same_type(a, NULL) ? 0 : sizeof(a)/sizeof(*a)
> +#define _INTC_SIZEOF_OR_ZERO(a) (_Generic(a, \
> + typeof(NULL): 0, \
> + default: sizeof(a)))
> +#define _INTC_ARRAY(a) a, _INTC_SIZEOF_OR_ZERO(a)/sizeof(*a)
>
> #define INTC_HW_DESC(vectors, groups, mask_regs, \
> prio_regs, sense_regs, ack_regs) \
>
>
--
~Randy
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 1/1] arch/sh: avoid spurious sizeof-pointer-div warning
2023-01-23 19:37 ` Randy Dunlap
@ 2023-01-24 13:07 ` Geert Uytterhoeven
2023-01-24 22:05 ` Michael Karcher
0 siblings, 1 reply; 5+ messages in thread
From: Geert Uytterhoeven @ 2023-01-24 13:07 UTC (permalink / raw)
To: Randy Dunlap
Cc: Michael Karcher, Linux Kernel Mailing List, Linux-sh list,
Segher Boessenkool, Rich Felker, Yoshinori Sato,
John Paul Adrian Glaubitz
On Mon, Jan 23, 2023 at 8:40 PM Randy Dunlap <rdunlap@infradead.org> wrote:
> I'm curious how you generated this patch.
> 'patch' complains:
>
> patch: **** malformed patch at line 53: prio_regs, sense_regs, ack_regs) \
>
> (more below)
>
> On 1/23/23 10:48, Michael Karcher wrote:
> > Gcc warns about the pattern sizeof(void*)/sizeof(void), as it looks like
> > the abuse of a pattern to calculate the array size. This pattern appears
> > in the unevaluated part of the ternary operator in _INTC_ARRAY if the
> > parameter is NULL.
> >
> > The replacement uses an alternate approach to return 0 in case of NULL
> > which does not generate the pattern sizeof(void*)/sizeof(void), but still
> > emits the warning if _INTC_ARRAY is called with a nonarray parameter.
> >
> > This patch is required for successful compilation with -Werror enabled.
> >
> > The idea to use _Generic for type distinction is taken from Comment #7
> > in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108483 by Jakub Jelinek
> >
> > Signed-off-by: Michael Karcher <kernel@mkarcher.dialup.fu-berlin.de>
> > ---
> > This edition of the mail has the correct "v4" designation in the subject.
> >
> > History:
> > v4:
> > - Put the case distinction into the numerator instead of the denominator
> > - Refactor the case disctinction into a second macro
> > v3:
> > - I had a stern discussion with Thunderbird about not mangling the
> > space characters in my email, and I hope spaces get sent as standard
> > spaces now
> > v2:
> > - improve title and remove mostly redundant first sentence of the
> > description
> > - adjust formatting of the _Generic construction
> >
> > diff --git a/include/linux/sh_intc.h b/include/linux/sh_intc.h
> > index c255273b0281..98d1da0d8e36 100644
> > --- a/include/linux/sh_intc.h
> > +++ b/include/linux/sh_intc.h
> > @@ -97,7 +97,9 @@ struct intc_hw_desc {
>
> That ,9 should be ,10.
Indeed.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Note that I didn't receive v5 (neither did lore), only Adrian's reply.
> > -#define _INTC_ARRAY(a) a, __same_type(a, NULL) ? 0 : sizeof(a)/sizeof(*a)
> > +#define _INTC_SIZEOF_OR_ZERO(a) (_Generic(a, \
> > + typeof(NULL): 0, \
> > + default: sizeof(a)))
_INTC_SIZEOF_OR_ZERO() might be useful in general.
> > +#define _INTC_ARRAY(a) a, _INTC_SIZEOF_OR_ZERO(a)/sizeof(*a)
> >
> > #define INTC_HW_DESC(vectors, groups, mask_regs, \
> > prio_regs, sense_regs, ack_regs) \
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 1/1] arch/sh: avoid spurious sizeof-pointer-div warning
2023-01-24 13:07 ` Geert Uytterhoeven
@ 2023-01-24 22:05 ` Michael Karcher
2023-01-26 18:18 ` Randy Dunlap
0 siblings, 1 reply; 5+ messages in thread
From: Michael Karcher @ 2023-01-24 22:05 UTC (permalink / raw)
To: Geert Uytterhoeven, Randy Dunlap
Cc: Linux Kernel Mailing List, Linux-sh list, Segher Boessenkool,
Rich Felker, Yoshinori Sato, John Paul Adrian Glaubitz
Am 24.01.2023 um 14:07 schrieb Geert Uytterhoeven:
> On Mon, Jan 23, 2023 at 8:40 PM Randy Dunlap <rdunlap@infradead.org> wrote:
>> I'm curious how you generated this patch.
I'm currently using Thunderbird in a GUI environment as my only mail client,
and I pasted just the +/- lines of the patch into the pre-composed mail. The
copious amounts of bad mails I generated this way are a good point to set up
git-send-email in my linux environment to avoid bad patches / badly formatted
mails
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Thanks!
> Note that I didn't receive v5 (neither did lore), only Adrian's reply.
And that is another issue of my mail setup. Thunderbird is set to
automatically decide on HTML or plaintext only, and as soon as I switch to
"preformatted text", Thunderbird concludes that the mail contains
significant formatting, and defaults to multipart/alternative with HTML and
plain text. Mails of this type obviously get dropped by vger.kernel.org.
On the other hand, if I *don't* select "preformatted text", but use the
default settings "paragraph" or "normal text", there will be no HTML part
(which is good), but spaces will be transformed to non-breaking spaces.
I verified that the version of the v5 mail I just sent to all recipients
I already had on the v1 mail (so that doesn't include Geert, but both lkml
and linux-sh) now fulfills all requirements. I verified that it appeared
at lore on linux-sh.
>>> -#define _INTC_ARRAY(a) a, __same_type(a, NULL) ? 0 : sizeof(a)/sizeof(*a)
>>> +#define _INTC_SIZEOF_OR_ZERO(a) (_Generic(a, \
>>> + typeof(NULL): 0, \
>>> + default: sizeof(a)))
> _INTC_SIZEOF_OR_ZERO() might be useful in general.
Indeed. Feel free to move it (using a name that doesn't start with _INTC) to
a more general linux header file.
On the other hand, having a sizeof-like macro that fails to work on void*
(what NULL is), but works on all other types might be confusing and
error-prone. You likely want to further type constrain it, and you need to
parenthesize the argument "a" if you generalize this macro.
The version suggested by Jakub Jelinek in the gcc bugtracker has the advantage
of verifying that the void* parameter is indeed the compiletime constant NULL,
but it has the disadvantage that the expression used to verify that NULL was
passed is involving pointers (it needs to, as NULL is a pointer), and an
expression involving pointers is not an integral constant expression according
to C90 rules, so the compile-time assert using a possibly negatively sized
array is rejected by -Wvla, which is enabled in the kernel source code by
default.
Kind regards,
Michael Karcher
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 1/1] arch/sh: avoid spurious sizeof-pointer-div warning
2023-01-24 22:05 ` Michael Karcher
@ 2023-01-26 18:18 ` Randy Dunlap
0 siblings, 0 replies; 5+ messages in thread
From: Randy Dunlap @ 2023-01-26 18:18 UTC (permalink / raw)
To: Michael Karcher, Geert Uytterhoeven
Cc: Linux Kernel Mailing List, Linux-sh list, Segher Boessenkool,
Rich Felker, Yoshinori Sato, John Paul Adrian Glaubitz
Hi Michael,
On 1/24/23 14:05, Michael Karcher wrote:
> Am 24.01.2023 um 14:07 schrieb Geert Uytterhoeven:
>
>> On Mon, Jan 23, 2023 at 8:40 PM Randy Dunlap <rdunlap@infradead.org> wrote:
>>> I'm curious how you generated this patch.
>
> I'm currently using Thunderbird in a GUI environment as my only mail client,
> and I pasted just the +/- lines of the patch into the pre-composed mail. The
> copious amounts of bad mails I generated this way are a good point to set up
> git-send-email in my linux environment to avoid bad patches / badly formatted
> mails
>
If there is anything that you told Thunderbird about as far as sending plain text
patches that is not already documented[1], please consider adding it to the
documentation.
[1] https://docs.kernel.org/process/email-clients.html (+ search for Thunderbird)
or linux/Documentation/process/email-clients.rst
Thanks.
--
~Randy
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-01-26 18:18 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-23 18:48 [PATCH v4 1/1] arch/sh: avoid spurious sizeof-pointer-div warning Michael Karcher
2023-01-23 19:37 ` Randy Dunlap
2023-01-24 13:07 ` Geert Uytterhoeven
2023-01-24 22:05 ` Michael Karcher
2023-01-26 18:18 ` Randy Dunlap
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®