http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46717
--- Comment #11 from Richard Guenther <rguenth at gcc dot gnu.org> 2010-11-30 13:12:59 UTC --- Before transform: ;; succ: 50 (eh,exec) 40 [100.0%] count:63 (fallthru,exec) <bb 39>: D.479965_99 = MEM[(struct _List_node_base *)D.414535_48]._M_prev; D.414537_51 = MEM[(struct linked_streambuf * &)D.479965_99 + 16]; OBJ_TYPE_REF(D.414534_47;prev_1->14) (prev_1, D.414537_51); ;; pred: 37 (false,exec) 39 [100.0%] count:63 (fallthru,exec) ;; succ: 50 (eh,exec) 41 [100.0%] count:63 (fallthru,exec) <bb 40>: boost::iostreams::detail::chain_base<boost::iostreams::chain<boost::iostreams::input, char, std::char_traits<char>, std::allocator<char> >, char, std::char_traits<char>, std::allocator<char>, boost::iostreams::input>::notify (this_4(D)); ... ;; basic block 50, loop depth 0, count 0 ;; prev block 49, next block 51 ;; pred: 30 (eh,exec) 40 (eh,exec) 39 (eh,exec) ;; succ: 51 [69.8%] (true,exec) 52 [30.2%] (false,exec) # buf$_M_ptr_138 = PHI <D.353926_28(30), buf$_M_ptr_132(40), buf$_M_ptr_132(39)> I think I have a patch.