------- Comment #2 from rguenth at gcc dot gnu dot org 2005-12-08 14:08 ------- Reduced testcase:
typedef long Lisp_Object; extern Lisp_Object Qnil; struct window { int pixel_top; int pixel_height; int pixel_width; Lisp_Object next; Lisp_Object parent; }; static void set_window_pixsize (Lisp_Object window, int new_pixsize, int nodelete, int set_height) { struct window *w = ((struct window *) ((void *) (window))); struct window *c; int old_pixsize = (set_height ? ((w)->pixel_height) : ((w)->pixel_width)); Lisp_Object child, minor_kid, major_kid; int minsize; int line_size; if (!nodelete && !(((w)->parent) == (Qnil)) && new_pixsize < minsize) { } else if (!((major_kid) == (Qnil))) { int last_pos, last_old_pos, pos, old_pos, first; int div_val = old_pixsize << 1; for (child = major_kid; !((child) == (Qnil)); child = c->next) { c = ((struct window *) ((void *) (child))); if (set_height) { old_pos = last_old_pos + ((c)->pixel_height); ((c)->pixel_top) = last_pos; } pos = (((old_pos * new_pixsize) << 1) + old_pixsize) / div_val; if (!((c->next) == (Qnil))) pos = (pos / line_size) * line_size; set_window_pixsize (child, pos + first - last_pos, 1, set_height); last_pos = pos + first; } } } void set_window_pixheight (Lisp_Object window, int new_pixheight, int nodelete) { set_window_pixsize (window, new_pixheight, nodelete, 1); } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25311