This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/33816] New: gimplification before build_array_type re-set alias set of arrays to zero
- From: "rguenth at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 19 Oct 2007 12:34:45 -0000
- Subject: [Bug middle-end/33816] New: gimplification before build_array_type re-set alias set of arrays to zero
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
The testcase from PR32921 shows that we end up with an alias set of zero for
real8[0:] because in both functions this type is used in casts. When the
first function is gimplified the gimplifier asks if the cast is a useless
type conversion which in turn calls get_alias_set which sets the alias set.
Once the second function is lowered to GIMPLE, the array-type gets re-built
using build_array_type which calls layout_type:
if (!COMPLETE_TYPE_P (t))
layout_type (t);
[because the type looks incomplete]
which in turn globally re-sets the alias set to zero
/* If an alias set has been set for this aggregate when it was incomplete,
force it into alias set 0.
This is too conservative, but we cannot call record_component_aliases
here because some frontends still change the aggregates after
layout_type. */
if (AGGREGATE_TYPE_P (type) && TYPE_ALIAS_SET_KNOWN_P (type))
TYPE_ALIAS_SET (type) = 0;
}
causing effectively wrong gimplification of the first function and pessimizatio
of alias analysis.
--
Summary: gimplification before build_array_type re-set alias set
of arrays to zero
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Keywords: wrong-code, missed-optimization
Severity: blocker
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rguenth at gcc dot gnu dot org
OtherBugsDependingO 32921
nThis:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33816