diff mbox series

[3/6] inline: declaration of the variadic vars is useless

Message ID 20220626130748.74163-4-lucvoo@kernel.org (mailing list archive)
State Mainlined, archived
Headers show
Series cleanup related to inlining of variadic functions | expand

Commit Message

Luc Van Oostenryck June 26, 2022, 1:07 p.m. UTC
From: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>

When inlining a function call, the arguments of this call must
somehow be assigned to the names used in the function definition.
This is done via a STMT_DECLARATION associated to the top
STMT_COMPOUND which now correspond to the inlined code.

This is perfectly fine for the normal case of non-variadic function
but when inlining a variadic function there is no corresponding name
to assign the non-fixed arguments to (such arguments must either be
not used at all or copied via __builtin_va_arg_pack()). What's then
happening is essentially that these variables are self-assigned.
Not Good.

This seems to be relatively harmless but is confusing.
So only put the fixed/named arguments in the declaration list.

Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
---
 inline.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/inline.c b/inline.c
index d031c9b19128..4696eb509f9a 100644
--- a/inline.c
+++ b/inline.c
@@ -546,14 +546,14 @@  int inline_function(struct expression *expr, struct symbol *sym)
 			*a = *name;
 			set_replace(name, a);
 			add_symbol(&fn_symbol_list, a);
+			a->initializer = arg;
+			add_symbol(&arg_decl, 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);
 
 		NEXT_PTR_LIST(name);
 	} END_FOR_EACH_PTR(arg);