From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8203 invoked by alias); 24 Nov 2010 14:45:00 -0000 Received: (qmail 8118 invoked by uid 22791); 24 Nov 2010 14:44:57 -0000 X-SWARE-Spam-Status: No, hits=-2.8 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 24 Nov 2010 14:44:53 +0000 From: "aldyh at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug other/46567] [trans-mem] ipa_tm_decrement_clone_counts ICE at -O2 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: other X-Bugzilla-Keywords: trans-mem X-Bugzilla-Severity: normal X-Bugzilla-Who: aldyh at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: aldyh at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Date: Wed, 24 Nov 2010 15:09:00 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2010-11/txt/msg02988.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46567 --- Comment #3 from Aldy Hernandez 2010-11-24 14:43:53 UTC --- ipa_tm_decrement_clone_counts() is dying because we are decrementing the clone count for a caller that was not marked as being in a transaction in the first place. The problem here is that in the pass we have a transaction containing a call that was not marked as inside of a transaction: : __transaction [[relaxed]] ... : ... std::_List_node_base::unhook (SR.31_22); <-- HERE The pass that marks calls as inside of a transaction is in examine_call_tm() which is part of the pass. The function unhook() above was placed inside of the transaction in the early inline pass, and inlining is one of the small IPA passes, which happen after the lowering passes. It would seem we need to run after early inlining, but before , so some sort of lowering pass between the inlining passes. Richard?