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