------- 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