John Paul Adrian Glaubitz
unread,Jan 17, 2023, 11:43:06 AM1/17/23Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Geert Uytterhoeven, linux-...@vger.kernel.org, amd...@lists.freedesktop.org, linux-ar...@lists.infradead.org, linux...@vger.kernel.org, linux-w...@vger.kernel.org, linux...@vger.kernel.org, linu...@vger.kernel.org, linux-f2...@lists.sourceforge.net, linuxp...@lists.ozlabs.org, kasa...@googlegroups.com, linux-...@linux-xtensa.org, Michael Karcher
Hi Geert!
On 1/6/23 16:17, Geert Uytterhoeven wrote:
>> I'm not seeing this one, but I am getting this one instead:
>>
>> In file included from ./arch/sh/include/asm/hw_irq.h:6,
>> from ./include/linux/irq.h:596,
>> from ./include/asm-generic/hardirq.h:17,
>> from ./arch/sh/include/asm/hardirq.h:9,
>> from ./include/linux/hardirq.h:11,
>> from ./include/linux/interrupt.h:11,
>> from ./include/linux/serial_core.h:13,
>> from ./include/linux/serial_sci.h:6,
>> from arch/sh/kernel/cpu/sh2/setup-sh7619.c:11:
>> ./include/linux/sh_intc.h:100:63: error: division 'sizeof (void *) / sizeof (void)' does not compute the number of array elements [-Werror=sizeof-pointer-div]
>> 100 | #define _INTC_ARRAY(a) a, __same_type(a, NULL) ? 0 : sizeof(a)/sizeof(*a)
>> | ^
>> ./include/linux/sh_intc.h:105:31: note: in expansion of macro '_INTC_ARRAY'
>> 105 | _INTC_ARRAY(vectors), _INTC_ARRAY(groups), \
>> | ^~~~~~~~~~~
>
> The easiest fix for the latter is to disable CONFIG_WERROR.
> Unfortunately I don't know a simple solution to get rid of the warning.
I did some research and it seems that what the macro _INT_ARRAY() does with "sizeof(a)/sizeof(*a)"
is a commonly used way to calculate array sizes and the kernel has even its own macro for that
called ARRAY_SIZE() which Linus asks people to use here [1].
So, I replaced _INTC_ARRAY() with ARRAY_SIZE() (see below), however the kernel's own ARRAY_SIZE()
macro triggers the same compiler warning. I'm CC'ing Michael Karcher who has more knowledge on
writing proper C code than me and maybe an idea how to fix this warning.
Thanks,
Adrian
> [1]
https://lkml.org/lkml/2015/9/3/428
diff --git a/include/linux/sh_intc.h b/include/linux/sh_intc.h
index c255273b0281..07a187686a84 100644
--- a/include/linux/sh_intc.h
+++ b/include/linux/sh_intc.h
@@ -97,14 +97,12 @@ struct intc_hw_desc {
unsigned int nr_subgroups;
};
-#define _INTC_ARRAY(a) a, __same_type(a, NULL) ? 0 : sizeof(a)/sizeof(*a)
-
#define INTC_HW_DESC(vectors, groups, mask_regs, \
prio_regs, sense_regs, ack_regs) \
{ \
- _INTC_ARRAY(vectors), _INTC_ARRAY(groups), \
- _INTC_ARRAY(mask_regs), _INTC_ARRAY(prio_regs), \
- _INTC_ARRAY(sense_regs), _INTC_ARRAY(ack_regs), \
+ ARRAY_SIZE(vectors), ARRAY_SIZE(groups), \
+ ARRAY_SIZE(mask_regs), ARRAY_SIZE(prio_regs), \
+ ARRAY_SIZE(sense_regs), ARRAY_SIZE(ack_regs), \
}
struct intc_desc {