Commit 2743db69 by Eric Botcazou Committed by Eric Botcazou

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
parent 4d16c0dc
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
......
......@@ -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. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment