[Bug bootstrap/42157] [4.5 regression] ICE building stage 1 libgcc: SEGV in compare_access_positions
jamborm at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon Dec 7 14:15:00 GMT 2009
------- Comment #7 from jamborm at gcc dot gnu dot org 2009-12-07 14:15 -------
(In reply to comment #6)
> The problem is that the comparison of types is not anti-symmetrical:
Looking at the code, I see that we don't stabilize the sort for
integers. Can you please try the following (and untested) patch?
Thanks.
Index: mine/gcc/tree-sra.c
===================================================================
--- mine.orig/gcc/tree-sra.c
+++ mine/gcc/tree-sra.c
@@ -1134,10 +1134,17 @@ compare_access_positions (const void *a,
&& TREE_CODE (f2->type) != COMPLEX_TYPE
&& TREE_CODE (f2->type) != VECTOR_TYPE)
return -1;
- /* Put the integral type with the bigger precision first. */
else if (INTEGRAL_TYPE_P (f1->type)
&& INTEGRAL_TYPE_P (f2->type))
- return TYPE_PRECISION (f1->type) > TYPE_PRECISION (f2->type) ? -1 : 1;
+ {
+ if (TYPE_PRECISION (f1->type) == TYPE_PRECISION (f2->type))
+ /* Stabilize the sort. */
+ return TYPE_UID (f1->type) - TYPE_UID (f2->type);
+ else
+ /* Put the integral type with the bigger precision first. */
+ return TYPE_PRECISION (f1->type) > TYPE_PRECISION (f2->type)
+ ? -1 : 1;
+ }
/* Put any integral type with non-full precision last. */
else if (INTEGRAL_TYPE_P (f1->type)
&& (TREE_INT_CST_LOW (TYPE_SIZE (f1->type))
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42157
More information about the Gcc-bugs
mailing list