Re: [PATCH 2/6] inline: comment about creating node of node on variadics

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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



[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux