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); -- 2.36.1