There's no need to concat the context list into (empty) one of new node, only to free the original one. Moving the pointer to list instead works fine... Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> --- parse.c | 20 +++++--------------- 1 files changed, 5 insertions(+), 15 deletions(-) diff --git a/parse.c b/parse.c index 28bc0c9..f16d321 100644 --- a/parse.c +++ b/parse.c @@ -1592,28 +1592,18 @@ static struct token *direct_declarator(struct token *token, struct decl_state *c static struct token *pointer(struct token *token, struct decl_state *ctx) { - unsigned long modifiers; - struct symbol *base_type; - - modifiers = ctx->ctype.modifiers; - base_type = ctx->ctype.base_type; - while (match_op(token,'*')) { struct symbol *ptr = alloc_symbol(token->pos, SYM_PTR); - ptr->ctype.modifiers = modifiers; + ptr->ctype.modifiers = ctx->ctype.modifiers; + ptr->ctype.base_type = ctx->ctype.base_type; ptr->ctype.as = ctx->ctype.as; - concat_ptr_list((struct ptr_list *)ctx->ctype.contexts, - (struct ptr_list **)&ptr->ctype.contexts); - ptr->ctype.base_type = base_type; - - base_type = ptr; + ptr->ctype.contexts = ctx->ctype.contexts; ctx->ctype.modifiers = 0; - ctx->ctype.base_type = base_type; + ctx->ctype.base_type = ptr; ctx->ctype.as = 0; - free_ptr_list(&ctx->ctype.contexts); + ctx->ctype.contexts = NULL; token = handle_qualifiers(token->next, ctx); - modifiers = ctx->ctype.modifiers; ctx->ctype.base_type->endpos = token->pos; } return token; -- 1.5.6.5 -- 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