Message ID | 20191018004929.3445-4-paul.walmsley@sifive.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | riscv: resolve most warnings from sparse | expand |
On Thu, Oct 17, 2019 at 05:49:24PM -0700, Paul Walmsley wrote: > sparse complains loudly when string literals associated with > preprocessor directives are split into multiple, separately quoted > strings across different lines: ... > #ifndef __riscv_cmodel_medany > -#error "setup_vm() is called from head.S before relocate so it should " > - "not use absolute addressing." > +#error "setup_vm() is called from head.S before relocate so it should not use absolute addressing." > #endif Using a blacslash should do the trick : #error "blablablablablablablablablablablabla" \ "and blablabla again" Or if need I cn fix Sparse if needed and desiable. Best regards -- Luc Van Oostenryck
On Fri, 18 Oct 2019, Luc Van Oostenryck wrote: > On Thu, Oct 17, 2019 at 05:49:24PM -0700, Paul Walmsley wrote: > > sparse complains loudly when string literals associated with > > preprocessor directives are split into multiple, separately quoted > > strings across different lines: > > ... > > > #ifndef __riscv_cmodel_medany > > -#error "setup_vm() is called from head.S before relocate so it should " > > - "not use absolute addressing." > > +#error "setup_vm() is called from head.S before relocate so it should not use absolute addressing." > > #endif > > Using a blacslash should do the trick : > #error "blablablablablablablablablablablabla" \ > "and blablabla again" > Or if need I cn fix Sparse if needed and desiable. Thanks for the kind offer! The backslashless syntax is pretty horrible to my eyes. As far as I can tell from a brief glance, the instance fixed by this patch was the only instance of its kind in the kernel. The existing kernel precedents appear to be to simply use a single long line. Example: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/compiler-gcc.h#n3 So, from a kernel point of view, we should just fix this specific instance. It doesn't seem worth changing sparse for such a rare case. On the other hand, gcc seems to support the non-backslashed syntax. So if the intention is for sparse to follow the gcc practice, and to be used beyond the kernel, maybe it's worth aligning sparse to gcc? Only if you're bored, I suppose... - Paul
On Thu, Oct 17, 2019 at 09:38:18PM -0700, Paul Walmsley wrote: > On Fri, 18 Oct 2019, Luc Van Oostenryck wrote: > > > On Thu, Oct 17, 2019 at 05:49:24PM -0700, Paul Walmsley wrote: > > > sparse complains loudly when string literals associated with > > > preprocessor directives are split into multiple, separately quoted > > > strings across different lines: > > > > ... > > > > > #ifndef __riscv_cmodel_medany > > > -#error "setup_vm() is called from head.S before relocate so it should " > > > - "not use absolute addressing." > > > +#error "setup_vm() is called from head.S before relocate so it should not use absolute addressing." > > > #endif > > > > Using a blacslash should do the trick : > > #error "blablablablablablablablablablablabla" \ > > "and blablabla again" > > Or if need I cn fix Sparse if needed and desiable. > > Thanks for the kind offer! > > The backslashless syntax is pretty horrible to my eyes. As far as I can > tell from a brief glance, the instance fixed by this patch was the only > instance of its kind in the kernel. The existing kernel precedents appear > to be to simply use a single long line. Example: > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/compiler-gcc.h#n3 > > So, from a kernel point of view, we should just fix this specific > instance. It doesn't seem worth changing sparse for such a rare case. > > On the other hand, gcc seems to support the non-backslashed syntax. So if > the intention is for sparse to follow the gcc practice, and to be used > beyond the kernel, maybe it's worth aligning sparse to gcc? Only if > you're bored, I suppose... I'll first see what is acceptable for the point of view of the standard (and maybe some justifications from GCC). -- Luc
On Thu, Oct 17, 2019 at 09:38:18PM -0700, Paul Walmsley wrote: > On Fri, 18 Oct 2019, Luc Van Oostenryck wrote: > > > On Thu, Oct 17, 2019 at 05:49:24PM -0700, Paul Walmsley wrote: > > > sparse complains loudly when string literals associated with > > > preprocessor directives are split into multiple, separately quoted > > > strings across different lines: > > > > ... > > > > > #ifndef __riscv_cmodel_medany > > > -#error "setup_vm() is called from head.S before relocate so it should " > > > - "not use absolute addressing." > > > +#error "setup_vm() is called from head.S before relocate so it should not use absolute addressing." > > > #endif ... > On the other hand, gcc seems to support the non-backslashed syntax. So if > the intention is for sparse to follow the gcc practice, and to be used > beyond the kernel, maybe it's worth aligning sparse to gcc? Only if > you're bored, I suppose... I quickly checked and gcc also complain about the second line: $ cat y.c #ifndef __riscv_cmodel_medany #error "setup_vm() is called from head.S before relocate so it should " "not use absolute addressing." #endif $ gcc -c y.c y.c:2:2: error: #error "setup_vm() is called from head.S before relocate so it should " #error "setup_vm() is called from head.S before relocate so it should " ^~~~~ y.c:3:8: error: expected identifier or '(' before string constant "not use absolute addressing." ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ So it seems that gcc doesn't join these lines. Fell free to add my: Reviewed-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> -- Luc
On Fri, 18 Oct 2019, Luc Van Oostenryck wrote: > I quickly checked and gcc also complain about the second line: > $ cat y.c > #ifndef __riscv_cmodel_medany > #error "setup_vm() is called from head.S before relocate so it should " > "not use absolute addressing." > #endif > > $ gcc -c y.c > y.c:2:2: error: #error "setup_vm() is called from head.S before relocate so it should " > #error "setup_vm() is called from head.S before relocate so it should " > ^~~~~ > y.c:3:8: error: expected identifier or '(' before string constant > "not use absolute addressing." > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > So it seems that gcc doesn't join these lines. I guess that's what I get for assuming that the original code was tested. Thanks for doing that, and sorry for the noise. > Fell free to add my: > Reviewed-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> Done. - Paul
diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index fa8748a74414..fe68e94ea946 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -339,8 +339,7 @@ static uintptr_t __init best_map_size(phys_addr_t base, phys_addr_t size) */ #ifndef __riscv_cmodel_medany -#error "setup_vm() is called from head.S before relocate so it should " - "not use absolute addressing." +#error "setup_vm() is called from head.S before relocate so it should not use absolute addressing." #endif asmlinkage void __init setup_vm(uintptr_t dtb_pa)
sparse complains loudly when string literals associated with preprocessor directives are split into multiple, separately quoted strings across different lines: arch/riscv/mm/init.c:341:9: error: Expected ; at the end of type declaration arch/riscv/mm/init.c:341:9: error: got "not use absolute addressing." arch/riscv/mm/init.c:358:9: error: Trying to use reserved word 'do' as identifier arch/riscv/mm/init.c:358:9: error: Expected ; at end of declaration [ ... ] The compiler doesn't seem to mind the split string literal, but it's pretty ugly to my eyes - enough to outweigh the value of the 80-column warning from checkpatch. Fix by concatenating the strings. This patch should have no functional impact. Signed-off-by: Paul Walmsley <paul.walmsley@sifive.com> --- arch/riscv/mm/init.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)