Re: [PATCH v3 10/21] expression, evaluate: recognize static objects as address constants

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

 



On Mon, Feb 01, 2016 at 03:38:24AM +0100, Nicolai Stange wrote:
> Introduce support for recognizing address constants created either
> - explicitly by referencing a static storage duration object by means
>   of the unary & operator,
> - implicitly by the use of an expression of array or function type.
> 
> Initially tag an expression as being an address constant at the primary
> expression level, i.e. upon encountering a symbol designating an object of
> static storage duration in primary_expression().
> 
> Carry the address constant flag over to the *-preop wrapped expression
> created by evaluate_symbol_expression().
> 
> When dereferencing such a *-preop wrapped expression, make
> evaluate_addressof() keep any address constant flag for the unwrapped
> expression.
> 
> Signed-off-by: Nicolai Stange <nicstange@xxxxxxxxx>
> ---
> diff --git a/evaluate.c b/evaluate.c
> index 300bfbe..91f89f4 100644
> --- a/evaluate.c
> +++ b/evaluate.c
> @@ -70,9 +70,11 @@ static struct symbol *evaluate_symbol_expression(struct expression *expr)
>  	addr->symbol = sym;
>  	addr->symbol_name = expr->symbol_name;
>  	addr->ctype = &lazy_ptr_ctype;	/* Lazy evaluation: we need to do a proper job if somebody does &sym */
> +	addr->constexpr_flags = expr->constexpr_flags;

I'm not sure to follow this one.
What are the possible value of expr->constexpr_flags at this point?


> diff --git a/expression.c b/expression.c
> index b2d5eb4..11fb9cd 100644
> --- a/expression.c
> +++ b/expression.c
> @@ -440,6 +440,14 @@ struct token *primary_expression(struct token *token, struct expression **tree)
>  		}
>  		expr->symbol_name = token->ident;
>  		expr->symbol = sym;
> +
> +		/*
> +		 * A pointer to an lvalue designating a static storage
> +		 * duration object is an address constant [6.6(9)].
> +		 */
> +		if(sym && (sym->ctype.modifiers & (MOD_TOPLEVEL | MOD_STATIC)))
> +			expr->constexpr_flags = CONSTEXPR_FLAG_ADDR_CONST;


Missing space after the 'if'

--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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