re PR ada/43096 (miscompilation of ACATS c37105a at -O2)

PR ada/43096
	* tree-ssa-alias.c (same_type_for_tbaa): Return -1 if the types have
	the same alias set.

From-SVN: r157102
This commit is contained in:
Eric Botcazou 2010-02-26 23:10:24 +00:00 committed by Eric Botcazou
parent 4d16c0dc91
commit 2743db69c5
2 changed files with 15 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2010-02-26 Eric Botcazou <ebotcazou@adacore.com>
PR ada/43096
* tree-ssa-alias.c (same_type_for_tbaa): Return -1 if the types have
the same alias set.
2010-02-26 H.J. Lu <hongjiu.lu@intel.com>
* config.gcc: Set the default arch at least to Prescott for

View File

@ -544,13 +544,15 @@ same_type_for_tbaa (tree type1, tree type2)
&& TREE_CODE (type2) == ARRAY_TYPE)
return -1;
/* In Ada, an lvalue of unconstrained type can be used to access an object
of one of its constrained subtypes, for example when a function with an
unconstrained parameter passed by reference is called on a constrained
object and inlined. In this case, the types have the same alias set. */
if (TYPE_SIZE (type1) && TYPE_SIZE (type2)
&& TREE_CONSTANT (TYPE_SIZE (type1)) != TREE_CONSTANT (TYPE_SIZE (type2))
&& get_alias_set (type1) == get_alias_set (type2))
/* ??? In Ada, an lvalue of an unconstrained type can be used to access an
object of one of its constrained subtypes, e.g. when a function with an
unconstrained parameter passed by reference is called on an object and
inlined. But, even in the case of a fixed size, type and subtypes are
not equivalent enough as to share the same TYPE_CANONICAL, since this
would mean that conversions between them are useless, whereas they are
not (e.g. type and subtypes can have different modes). So, in the end,
they are only guaranteed to have the same alias set. */
if (get_alias_set (type1) == get_alias_set (type2))
return -1;
/* The types are known to be not equal. */