On 26/06/2022 14:07, 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 these arguments can already be SYM_NODEs. Sparse doesn't > support everywhere such nested nodes (they must be merged) but > in this case it's fine as the node will be merged when evaluated. > > Add a comment telling the situation is fine. > Also, move the code to where the variadic arguments are handled > since the fixed one will be anyway directly overwritten. > > 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). This note prompted a feeling of deja-vu :) It is simply repeating (in slightly different words) the content of the first paragraph. ATB, Ramsay Jones > > Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> > --- > inline.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/inline.c b/inline.c > index 0097e4bf620a..d031c9b19128 100644 > --- a/inline.c > +++ b/inline.c > @@ -542,11 +542,15 @@ 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 { > + // This may create a node of a node but it will > + // be resolved later when the corresponding > + // STMT_DECLARATION will be evaluated. > + a->ctype.base_type = arg->ctype; > } > a->initializer = arg; > add_symbol(&arg_decl, a);