This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/79621] [7 Regression] ICE in operator[], at vec.h:732
- From: "law at redhat dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 21 Feb 2017 05:57:09 +0000
- Subject: [Bug tree-optimization/79621] [7 Regression] ICE in operator[], at vec.h:732
- Auto-submitted: auto-generated
- References: <bug-79621-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79621
--- Comment #3 from Jeffrey A. Law <law at redhat dot com> ---
What a cool little bug. AFAICT, the underlying issue has been latent since the
introduction of gimple-ssa-isolate-paths a few years back.
We have this PHI at the start of BB4:
e7_11 = PHI <e7_13(D)(3), e7_13(D)(5), e7_11(4), 0(6)>
Note the 0 associated with the edge 6->4, which gets used in bb4 like this:
_3 = b5.2_2 / e7_11;
Which of course triggers isolation of the path with a division by zero.
Also note there is a PHI arg for the edge 4->4.
With that background in mind... Consider the sequencing of path isolation.
First we duplicate bb4 so that we have a copy we can freely modify. The
duplication (of course) includes duplicating the outgoing edges, including the
edge 4->4. That potentially resizes the PHI. *But* the loop in
gimple-ssa-isolate_paths.c isn't aware of that possibility and as a result may
use the old PHI the next iteration of the loop and nothing good happens
thereafter.