------- Comment #6 from reichelt at gcc dot gnu dot org 2009-06-08 12:03 ------- The testcase from comment #2 doesn't show the bug anymore. Here's a slightly modified version that does:
======================================================== typedef struct A { int i : 2; struct A *p; } A; static int f1(A *t) { if (t->i) return 0; return t->i; } static A *f2(A *t) { if (t->i) return f2(t->p); else return t; } static int f3(A *t) { return f1(f2(t)); } static int f4(A *t) { if (f3(f2(t))) g(0, 0, 0, 0, 0, 0, 0); return t->i; } int f5(A *t) { return f3(t); } static int f6(A *t) { return f5(t) || f5(f2(t)); } static int f7(A *t) { return f6(t) || f4(t); } int foo(A *t) { return f7(t); } ======================================================== -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40126