On Fri, Feb 08, 2019 at 05:02:23PM +0100, Florian Westphal wrote: > @@ -52,11 +59,11 @@ struct expr *expr_clone(const struct expr *expr) > { > struct expr *new; > > - new = expr_alloc(&expr->location, expr->ops, expr->dtype, > + new = expr_alloc(&expr->location, expr->etype, expr->dtype, > expr->byteorder, expr->len); > new->flags = expr->flags; > new->op = expr->op; > - expr->ops->clone(new, expr); > + expr_ops(expr)->clone(new, expr); > return new; > } > > @@ -70,7 +77,7 @@ static void expr_destroy(struct expr *e) > { > const struct expr_ops *ops = expr_ops(e); > > - if (ops && ops->destroy) > + if (ops->destroy) expr->ops should be always set, so I guess this is fine. > ops->destroy(e); > } > > @@ -81,7 +88,8 @@ void expr_free(struct expr *expr) > if (--expr->refcnt > 0) > return; > > - expr_destroy(expr); > + if (expr->etype != EXPR_INVALID) > + expr_destroy(expr); Any way to skip this branch? This is for compound expressions?