mirror of git://gcc.gnu.org/git/gcc.git
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:
parent
4d16c0dc91
commit
2743db69c5
|
@ -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>
|
2010-02-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* config.gcc: Set the default arch at least to Prescott for
|
* 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)
|
&& TREE_CODE (type2) == ARRAY_TYPE)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* In Ada, an lvalue of unconstrained type can be used to access an object
|
/* ??? In Ada, an lvalue of an unconstrained type can be used to access an
|
||||||
of one of its constrained subtypes, for example when a function with an
|
object of one of its constrained subtypes, e.g. when a function with an
|
||||||
unconstrained parameter passed by reference is called on a constrained
|
unconstrained parameter passed by reference is called on an object and
|
||||||
object and inlined. In this case, the types have the same alias set. */
|
inlined. But, even in the case of a fixed size, type and subtypes are
|
||||||
if (TYPE_SIZE (type1) && TYPE_SIZE (type2)
|
not equivalent enough as to share the same TYPE_CANONICAL, since this
|
||||||
&& TREE_CONSTANT (TYPE_SIZE (type1)) != TREE_CONSTANT (TYPE_SIZE (type2))
|
would mean that conversions between them are useless, whereas they are
|
||||||
&& get_alias_set (type1) == get_alias_set (type2))
|
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;
|
return -1;
|
||||||
|
|
||||||
/* The types are known to be not equal. */
|
/* The types are known to be not equal. */
|
||||||
|
|
Loading…
Reference in New Issue