On Wed, Jun 27, 2007 at 09:59:58PM +0900, Neil Booth wrote: > Al Viro wrote:- > > > If you want to test ICE recognition, right now only the following places > > are checking for it: > > * bitfield width > > * __attribute__((aligned(<number>))) > > * __attribute__((address_space(<number>))) > > * [<index>] in designators within initializer list > > * [<index> ... <index>] - ditto, gccism > > > > That's it. We can use it elsewhere too, but that's a separate bunch of > > patches (trivial to do now). > > Bah. You don't escape that easily :) > > extern int a; > struct b { unsigned int b1:(1,2); }; Son of a... expand_comma() cannibalizes the node, should restore ->flags to 0 (same as other similar suckers). > struct c { unsigned int c1: 1 ? 2: a++; }; Ditto for expand_conditional, but there we should preserve the original ->flags instead - might be non-zero and we ought to do that after expanding the taken branch... From: Al Viro <viro@xxxxxxxxxxxxxxxxxx> Date: Wed, 27 Jun 2007 09:10:54 -0400 Subject: [PATCH] fix the missed cannibalizing simplifications Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> --- expand.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff --git a/expand.c b/expand.c index f945518..9a536d5 100644 --- a/expand.c +++ b/expand.c @@ -429,8 +429,10 @@ static int expand_comma(struct expression *expr) cost = expand_expression(expr->left); cost += expand_expression(expr->right); - if (expr->left->type == EXPR_VALUE || expr->left->type == EXPR_FVALUE) + if (expr->left->type == EXPR_VALUE || expr->left->type == EXPR_FVALUE) { *expr = *expr->right; + expr->flags = 0; + } return cost; } @@ -488,12 +490,15 @@ static int expand_conditional(struct expression *expr) cond_cost = expand_expression(cond); if (cond->type == EXPR_VALUE) { + unsigned flags = expr->flags; if (!cond->value) true = false; if (!true) true = cond; + cost = expand_expression(*true); *expr = *true; - return expand_expression(expr); + expr->flags = flags; + return cost; } cost = expand_expression(true); -- 1.5.0-rc2.GIT - 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