diff mbox series

inline: avoid node of node on variadics

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

Commit Message

Luc Van Oostenryck June 25, 2022, 10:14 p.m. UTC
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(-)

Comments

Ramsay Jones June 26, 2022, 2:38 p.m. UTC | #1
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);
Luc Van Oostenryck June 26, 2022, 4:04 p.m. UTC | #2
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 mbox series

Patch

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