Message ID | ZJTcvfpvhvF+OLjc@work (mailing list archive) |
---|---|
State | Accepted |
Commit | 7b191b9b55df2a844bd32d1d380f47a7df1c2896 |
Headers | show |
Series | [next] MIPS: dec: prom: Address -Warray-bounds warning | expand |
On Thu, Jun 22, 2023 at 05:43:57PM -0600, Gustavo A. R. Silva wrote: > Zero-length arrays are deprecated, and we are replacing them with flexible > array members instead. So, replace zero-length array with flexible-array > member in struct memmap. > > Address the following warning found after building (with GCC-13) mips64 > with decstation_64_defconfig: > In function 'rex_setup_memory_region', > inlined from 'prom_meminit' at arch/mips/dec/prom/memory.c:91:3: > arch/mips/dec/prom/memory.c:72:31: error: array subscript i is outside array bounds of 'unsigned char[0]' [-Werror=array-bounds=] > 72 | if (bm->bitmap[i] == 0xff) > | ~~~~~~~~~~^~~ > In file included from arch/mips/dec/prom/memory.c:16: > ./arch/mips/include/asm/dec/prom.h: In function 'prom_meminit': > ./arch/mips/include/asm/dec/prom.h:73:23: note: while referencing 'bitmap' > 73 | unsigned char bitmap[0]; > > This helps with the ongoing efforts to globally enable -Warray-bounds. > > This results in no differences in binary output. > > Link: https://github.com/KSPP/linux/issues/79 > Link: https://github.com/KSPP/linux/issues/323 > Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org> > --- > arch/mips/include/asm/dec/prom.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/mips/include/asm/dec/prom.h b/arch/mips/include/asm/dec/prom.h > index 1e1247add1cf..908e96e3a311 100644 > --- a/arch/mips/include/asm/dec/prom.h > +++ b/arch/mips/include/asm/dec/prom.h > @@ -70,7 +70,7 @@ static inline bool prom_is_rex(u32 magic) > */ > typedef struct { > int pagesize; > - unsigned char bitmap[0]; > + unsigned char bitmap[]; > } memmap; > > > -- > 2.34.1 applied to mips-next. Thomas.
On Fri, 23 Jun 2023, Thomas Bogendoerfer wrote: > > Zero-length arrays are deprecated, and we are replacing them with flexible > > array members instead. So, replace zero-length array with flexible-array > > member in struct memmap. Technically it is a semantics bug fix actually, as the TURBOchannel firmware specification (from Jan 1993) says it's: typedef struct{ int pagesize; unsigned char bitmap[];}memmap; int getbitmap(memmap *map); (formatting preserved as in the document) so it should have always been a flexible array member. Maybe old (2.x) GCC versions had an issue with it or something, as otherwise I can't imagine why whoever added our typedef did it differently from the spec. > applied to mips-next. Not sure if you can retrofit it, but: Acked-by: Maciej W. Rozycki <macro@orcam.me.uk> Maciej
On 6/23/23 07:41, Maciej W. Rozycki wrote: > On Fri, 23 Jun 2023, Thomas Bogendoerfer wrote: > >>> Zero-length arrays are deprecated, and we are replacing them with flexible >>> array members instead. So, replace zero-length array with flexible-array >>> member in struct memmap. > > Technically it is a semantics bug fix actually, as the TURBOchannel > firmware specification (from Jan 1993) says it's: > > typedef struct{ int pagesize; unsigned char bitmap[];}memmap; > int getbitmap(memmap *map); > > (formatting preserved as in the document) so it should have always been a > flexible array member. Maybe old (2.x) GCC versions had an issue with it > or something, as otherwise I can't imagine why whoever added our typedef > did it differently from the spec. Apparently, flexible-array members were supported in some 2.x versions as an extension to the language; and it was not until GCC 3.0 that they were fully supported by the compiler. > >> applied to mips-next. > > Not sure if you can retrofit it, but: > > Acked-by: Maciej W. Rozycki <macro@orcam.me.uk> Thanks! -- Gustavo
diff --git a/arch/mips/include/asm/dec/prom.h b/arch/mips/include/asm/dec/prom.h index 1e1247add1cf..908e96e3a311 100644 --- a/arch/mips/include/asm/dec/prom.h +++ b/arch/mips/include/asm/dec/prom.h @@ -70,7 +70,7 @@ static inline bool prom_is_rex(u32 magic) */ typedef struct { int pagesize; - unsigned char bitmap[0]; + unsigned char bitmap[]; } memmap;
Zero-length arrays are deprecated, and we are replacing them with flexible array members instead. So, replace zero-length array with flexible-array member in struct memmap. Address the following warning found after building (with GCC-13) mips64 with decstation_64_defconfig: In function 'rex_setup_memory_region', inlined from 'prom_meminit' at arch/mips/dec/prom/memory.c:91:3: arch/mips/dec/prom/memory.c:72:31: error: array subscript i is outside array bounds of 'unsigned char[0]' [-Werror=array-bounds=] 72 | if (bm->bitmap[i] == 0xff) | ~~~~~~~~~~^~~ In file included from arch/mips/dec/prom/memory.c:16: ./arch/mips/include/asm/dec/prom.h: In function 'prom_meminit': ./arch/mips/include/asm/dec/prom.h:73:23: note: while referencing 'bitmap' 73 | unsigned char bitmap[0]; This helps with the ongoing efforts to globally enable -Warray-bounds. This results in no differences in binary output. Link: https://github.com/KSPP/linux/issues/79 Link: https://github.com/KSPP/linux/issues/323 Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org> --- arch/mips/include/asm/dec/prom.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)