This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug bootstrap/37086] New: Cross-compilers built with GCC 3.4 do not work
- From: "drow at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 11 Aug 2008 21:48:13 -0000
- Subject: [Bug bootstrap/37086] New: Cross-compilers built with GCC 3.4 do not work
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Building libgcc, I get:
/scratch/dan/mips-nonpic-upstream/src/gcc-mainline/libgcc/../gcc/unwind-pe.h:
In function 'size_of_encoded_value':
/scratch/dan/mips-nonpic-upstream/src/gcc-mainline/libgcc/../gcc/unwind-pe.h:78:
internal compiler error: tree check: accessed elt 7 of tree_vec with 5 elts in
find_switch_asserts, at tree-vrp.c:4346
/scratch/dan/mips-nonpic-upstream/src/gcc-mainline/libgcc/../gcc/unwind-dw2.c:1257:
internal compiler error: tree check: accessed elt 9 of tree_vec with 7 elts in
find_switch_asserts, at tree-vrp.c:4346
If I recompile tree-vrp.o with -O0, then libgcc compiles OK.
Joseph suggests this came in at the time of the tuples merge. If possible, it
would be nice if we could avoid the problematic construct...
The code in question is:
/* If there are multiple case labels with the same destination
we need to combine them to a single value range for the edge. */
if (idx + 1 < n
&& CASE_LABEL (cl) == CASE_LABEL (TREE_VEC_ELT (vec2, idx + 1)))
{
/* Skip labels until the last of the group. */
do {
++idx;
} while (idx < n
&& CASE_LABEL (cl) == CASE_LABEL (TREE_VEC_ELT (vec2,
idx)));
--idx;
When we reach the outer if, idx == 3 and n == 5. We go around twice, but idx
goes up to 7.
It looks like a loop optimization issue:
0x84fa0fd <find_switch_asserts+1309>: lea 0x2(%edi),%esi
0x84fa100 <find_switch_asserts+1312>: mov -0x40(%ebp),%edi
0x84fa103 <find_switch_asserts+1315>: cmp -0x3c(%ebp),%edi
0x84fa106 <find_switch_asserts+1318>: mov %esi,-0x40(%ebp)
0x84fa109 <find_switch_asserts+1321>: jb 0x84fa080
<find_switch_asserts+1184>
0x84fa10f <find_switch_asserts+1327>: mov -0x38(%ebp),%ecx
0x84fa112 <find_switch_asserts+1330>: dec %esi
0x84fa113 <find_switch_asserts+1331>: mov %esi,-0x40(%ebp)
-0x40(%ebp) is idx, and idx+1 is in %edi before the above code.
--
Summary: Cross-compilers built with GCC 3.4 do not work
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: bootstrap
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: drow at gcc dot gnu dot org
GCC host triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37086