Hi Luc, I was just about to comment on this patch when I noticed [PATCH 2/6] of a new series, which, if I'm reading it correctly replaces this patch; yes? [I have been a little tardy recently, but I do try to read all patches! ;) ] ATB, Ramsay Jones On 25/06/2022 23:14, Luc Van Oostenryck wrote: > From: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> > > When inlining a variadic function (unsupported in general by > sparse but OK when the arguments are unused and occurs as such > in the kernel), the extra arguments are added in the declaration > list as SYM_NODE. > > But the base type of these nodes are the effective arguments and > are, as such, already SYM_NODEs. So, nodes of nodes are created > and Sparse doesn't support those (these nodes must be merged). > > Fix this, by simply copying the effective argument, like done > for the non-variadic ones. > > Note: Sparse doesn't really support inlining of variadic functions > but is fine when the arguments are not used (and such cases > occur in the kernel). > > Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> > --- > inline.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/inline.c b/inline.c > index 0097e4bf620a..4ee44eedec7a 100644 > --- a/inline.c > +++ b/inline.c > @@ -542,11 +542,12 @@ int inline_function(struct expression *expr, struct symbol *sym) > FOR_EACH_PTR(arg_list, arg) { > struct symbol *a = alloc_symbol(arg->pos, SYM_NODE); > > - a->ctype.base_type = arg->ctype; > if (name) { > *a = *name; > set_replace(name, a); > add_symbol(&fn_symbol_list, a); > + } else { > + *a = *arg->ctype; > } > a->initializer = arg; > add_symbol(&arg_decl, a);