------- Comment #3 from reichelt at gcc dot gnu dot org 2009-05-29 14:19 ------- The original testcase doesn't crash anymore, but a slightly larger version does:
================================================ bool foo0(int) { return true; } bool foo1(); struct A { A(); ~A(); template<typename T> void bar1(T f) { if (f(0)) foo1(); } template<typename T> void bar2(T); }; template<typename T> void A::bar2(T f) { A a, b[1], *p; while (foo1()) { if (p) ++p; if (p && foo1()) bar1(f); if (p) ++p; } if (foo1()) bar1(f); } void baz() { A().bar2(foo0); } ================================================ -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40102