------- Comment #6 from pinskia at gcc dot gnu dot org 2010-03-20 21:18 ------- Just to clarify we have: ((i_push_value(f, (f->fp - 1)), (--f->sp)->type = 0x01, f->sp->u.number = ((Int) 0x1L), i_index(f), (--f->sp)->type = 0x01, f->sp->u.number = ((Int) 0x8L), kf_and(f),
(f->sp++)->u.number) ? ((Int) 0x1L) : ((Int) 0x0L)) Followed by: (((--f->sp)->type = 0x01, f->sp->u.number = ivar10, (f->argp + 3)->u.number = ivar3, i_funcall(f, (object *) ((void *)0), (array *) ((void *)0), 0, 5 , 1), (f->sp++)->u.number) ? ((Int) 0x4L) : ((Int) 0x0L)) And those are combined with a | so we don't have a sequence point between those expressions so the warning is correct and GCC is correct for -O0 and -O1 because of the missing sequence point. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43456