Message ID | 20220625221454.63271-1-lucvoo@kernel.org (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | inline: avoid node of node on variadics | expand |
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@gmail.com> > > 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@gmail.com> > --- > 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);
On Sun, Jun 26, 2022 at 03:38:22PM +0100, Ramsay Jones wrote: > Hi Luc, Hi! > 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? Yes, indeed. I should have mentioned that but ... :) > [I have been a little tardy recently, but I do try to read all patches! ;) ] No problems. It's why I generally wait a few days before pushing patches to the main tree. Cheers, -- Luc
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);