Hi,
this is a regression from GCC 4.8.x: gnat1 (uintp.adb:UI_Lt) is miscompiled
during a LTO boostrap when Init_Operand is inlined into it. A store is
wrongly deleted by GIMPLE DSE because of a missed aliasing relationship
between 2 array types with TYPE_NONALIASED_COMPONENT set, one being a derived
of the other in Ada, hence the latter being allowed to alias the former.
Tested on x86_64-suse-linux, OK for the mainline and 4.9 branch?
2014-10-06 Eric Botcazou <ebotca...@adacore.com>
* gimple.c (gimple_get_alias_set): Return 0 for array types with non-
aliased component and that contain PLACEHOLDER_EXPRs.
--
Eric Botcazou
Index: gimple.c
===================================================================
--- gimple.c (revision 215843)
+++ gimple.c (working copy)
@@ -2336,6 +2336,16 @@ gimple_get_alias_set (tree t)
return get_alias_set (t1);
}
+ /* For languages that distinguish array types from their component type
+ for aliasing purposes, some kind of "generic" arrays types might be
+ allowed to alias their "instantiated" derived types. The original
+ relationship between them being lost, consider that the former ones
+ can alias everything. */
+ if (TREE_CODE (t) == ARRAY_TYPE
+ && TYPE_NONALIASED_COMPONENT (t)
+ && type_contains_placeholder_p (t))
+ return 0;
+
return -1;
}