From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16101 invoked by alias); 15 Nov 2012 16:31:38 -0000 Received: (qmail 15325 invoked by uid 48); 15 Nov 2012 16:31:11 -0000 From: "jakub at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/55329] [4.8 Regression] ICE: internal compiler error: in operator[], at vec.h:487 with -O -fno-guess-branch-probability -fnon-call-exceptions --param=early-inlining-insns=111 Date: Thu, 15 Nov 2012 16:31:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: tree-optimization X-Bugzilla-Keywords: ice-on-valid-code X-Bugzilla-Severity: normal X-Bugzilla-Who: jakub at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: jakub at gcc dot gnu.org X-Bugzilla-Target-Milestone: 4.8.0 X-Bugzilla-Changed-Fields: Status AssignedTo 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 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: 2012-11/txt/msg01426.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55329 Jakub Jelinek changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED AssignedTo|unassigned at gcc dot |jakub at gcc dot gnu.org |gnu.org | --- Comment #4 from Jakub Jelinek 2012-11-15 16:31:10 UTC --- Created attachment 28701 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28701 gcc48-pr55329.patch Untested fix. The problem is that clearing bits in a bitmap while it is being iterated using EXECUTE_IF_SET_IN_BITMAP is dangerous and can't work reliably, in this case the bitmap contained just a single bit, that got cleared and replaced by a smaller bit (the clearing removed the only bitmap_element, setting reused it with different index (smaller) with higher bits set in it). In gimple_purge_all_dead_eh_edges it is just a few extra instructions to process the forwarder blocks (it quickly finds out that they don't have any EDGE_EH edges and does nothing for them), so IMHO it doesn't matter much if we don't clear those bits. On the other side, if there could be multiple forwarder blocks, we might risk we don't handle them correctly, as they could have bb's with lower indexes as successors.